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                      
;*******************************************************************
 
 
Nenhum comentário:
Postar um comentário