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