6 de ago. de 2011

Exemplo de projeto em linguagem Assembly

Olá pessoal,

Neste segundo momento, gostaria de apresentar a vocês, um código desenvolvido em linguagem assembly, e que uso como base para o desenvolvimento dos meus programas nesta linguagem.

O código em sí, é muito enxuto e de fácil entendimento, porém traz informações e registradores que muitas vezes não são lembrados pelos programadores, sendo estes, fonte de muitos dos problemas encontrados princípalmente pelos que iniciam na atividade de programação de microcontroladores.

O microcontrolador utilizado neste exemplo é o PIC16F877A, um componente muito completo em termos de periféricos, já que possui internamente módulos de PWM e conversão AD, aliado a grande facilidade de uso, disponibilidade de acesso e quantidade de memória.

Uma das características mais procuradas em um desenvolvedor de software, seja ele voltado a qualquer área, é a capacidade de comentar os seus códigos, portanto tentem fazer o máximo possível de comentários em seus trabalhos, pois isto facilitará uma futura manutenção ou mesmo upgrade no seu código, bom por hoje é isto, grande abraço a todos.


Segue o código:

;*******************************************************************
;                                                                  
;                     JL Audio Manutenção Eletrônica              
;                                                                   
; Data:                                                               
; Autor: Jean Carlos
; Projeto:
; Microprocessador: PIC16F877A
; Clock do processador: 8MHz
; Estação de desenvolvimento: PK2Lab
; Compilador: MPLAB IDE v8.20a
; Versão atual:  1.0
; Descrição:
;
;*******************************************************************
; Includes (Arquivo padrão para o PIC16F877A)
#INCLUDE <P16F877A.INC>     

;*******************************************************************
; Bits de Configuração                        
;*******************************************************************
__CONFIG _CP_OFF&_WRT_OFF&_DEBUG_OFF&_CPD_OFF&_LVP_OFF&_WDT_OFF&_BODEN_ON&_PWRTE_ON&_XT_OSC

;_CP_OFF          ==> Memória de programa desprotegida contra leitura
;_WRT_OFF       ==> Sem permissão para escrever na memória de programa
;_DEBUG_OFF  ==> Debug desabilitado
;_CPD_OFF       ==> Memória EEPROM protegida contra leitura
;_LVP_OFF        ==> Programação em baixa tensão desabilitada
;_WDT_OFF       ==> WDT Desativado
;_BODEN_ON    ==> BROWN-OUT Ativado
;_PWRTE_ON    ==> POWER-ON RESET Ativado
;_XT_OSC          ==> Oscilador a cristal (8MHz)

;*******************************************************************
;Paginação do Bloco de Memória              
;*******************************************************************

#DEFINE    BANK0    BCF STATUS,RP0    ;Seta BANK 0 De Memória
#DEFINE    BANK1    BSF STATUS,RP0    ;Seta BANK 1 De Memória

;*******************************************************************
;Variáveis                                      
;*******************************************************************
; Definição dos nomes e endereços de todas as variáveis utilizadas
; pelo sistema

    CBLOCK    0x20    ;Endereço inicial de memória de usuário
               


    ENDC            ;Fim do bloco de memória       

;*******************************************************************
;Flags internos                         
;*******************************************************************
; Definição de todos os flags utilizados no programa.

;*******************************************************************
;Constantes                      
;*******************************************************************
; Definição de todas as constantes utilizadas no programa

;*******************************************************************
;Entradas                                  
;*******************************************************************
; Definição de todos os pinos que serão utilizados como entrada

;*******************************************************************
;Saídas                                     
;*******************************************************************
; Definição de todos os pinos que serão utilizados como saida
               
;*******************************************************************
;Vetor de Reset                                    
;*******************************************************************
;Endereço inicial de processamento de reset
    ORG    0x00       
    GOTO    INICIO
   
;*******************************************************************
;Vetor de Interrupção             
;*******************************************************************
;Endereço inicial de processamento de interrupção
    ORG    0x04       
    RETFIE            ;

;*******************************************************************
;Inicio do Programa                     
;*******************************************************************
   
INICIO

    BANK1
;    BSF        PCON,OSCF    ; Determina a frequencia do oscilador interno

    MOVLW    B'00000000'
    MOVWF    TRISA        ; Inicia PORTA como saidas                       
    MOVLW    B'00000000'
    MOVWF    TRISB        ; Inicia PORTB como saidas
    MOVLW    B'00000000'
    MOVWF    TRISC        ; Inicia PORTC como saidas                       
    MOVLW    B'00000000'
    MOVWF    TRISD        ; Inicia PORTD como saidas
    MOVLW    B'00000000'
    MOVWF    TRISE        ; Inicia PORTE como saidas

    MOVLW    B'10000000'
    MOVWF    OPTION_REG      ; Prescaller 1:2 no TMR0
                                               ; Pull'ups desabilitados
                       
    MOVLW    B'00000000'
    MOVWF    INTCON               ; Todas as interrupções desligadas
    MOVLW    B'00000110'          ; PORTA Como I/Os digitais (Analógicos desabilitados)
    MOVWF    ADCON1
    MOVLW    B'00000111'
    MOVWF    CMCON               ;Define modo do comparador interno desabilitado

    BANK0                                 ; Banco 0
    CLRF    PORTA                     ; Limpa o PORTA
    CLRF    PORTB                     ; Limpa o PORTB
    CLRF    PORTC                     ; Limpa o PORTC
    CLRF    PORTD                     ; Limpa o PORTD
    CLRF    PORTE                     ; Limpa o PORTE


;*******************************************************************
;*                   Inicialização das Variáveis                     
;*******************************************************************
; Inicialização de todas as variáveis utilizadas no programa

;*******************************************************************
;*                   Inicio da Rotina Principal                   
;*******************************************************************
MAIN


; Espaço reservado a rotina  principal do programa


GOTO MAIN

;*******************************************************************
;Rotinas Auxiliares                       
;*******************************************************************

; Espaço reservado as rotinas auxiliares do programa


;*******************************************************************
;Fim do Programa                     
;*******************************************************************
END                        ; Finaliza o código.






Nenhum comentário:

Postar um comentário