Sei sulla pagina 1di 2

PROCESSOR 16F877A ;Tipo de Processador.

#include "p16f877a.inc" ;Incluir arquivo.


CONT1 EQU 21 ;Contador 1.
CONT2 EQU 22 ;Contador 2.
TEMP1 EQU 23 ;Temporizador 1.
org 0x00 ;Vetor de Reset.
goto Main ;Ir para Incio do Programa.
org 0x04 ;Vetor de Interrupo.
goto INTERRUPT ;Ir para Interrupt.
Main ;Incio do Programa Principal.
bsf STATUS, 5 ;Seleciona o Banco de Memria 1.
bcf OPTION_REG,5 ;Seleciona o clock interno como base de tempo para TMR0.
movlw b'00000000' ;Move o literal para o registrador W.
movwf TRISB ;Move W para TRISB, configurando PORTB como sadas.
bcf STATUS ,5 ;Seleciona o Banco de Memria 0.
movlw B'10100000' ;Move a palavra binria para W.
movwf INTCON ;Configura as interrupes, ativando a interrupo por transbordo de
TMR0.
movlw B'00001111' ;Move o literal 15 para W.
movwf CONT2 ;Move o valor 15 para o registrador CONT2.
Loop:
goto Loop ;vai para Loop.
Tabela: ;Sub-Rotina Tabela.
addwf PCL ;Faz PCL=W+PCL.
retlw B'00111111' ;Retorna a palavra que representa graficamente 0 para W.
retlw B'00000110' ;Retorna a palavra que representa graficamente 1 para W.
retlw B'01011011' ;Retorna a palavra que representa graficamente 2 para W.
retlw B'01001111' ;Retorna a palavra que representa graficamente 3 para W.
retlw B'01100110' ;Retorna a palavra que representa graficamente 4 para W.
retlw B'01101101' ;Retorna a palavra que representa graficamente 5 para W.
retlw B'01111101' ;Retorna a palavra que representa graficamente 6 para W.
retlw B'00000111' ;Retorna a palavra que representa graficamente7 para W.
retlw B'01111111' ;Retorna a palavra que representa graficamente 8 para W.
retlw B'01101111' ;Retorna a palavra que representa graficamente 9 para W.
retlw B'11110111' ;Retorna a palavra que representa graficamente A para W.
retlw B'11111111' ;Retorna a palavra que representa graficamente B para W.
retlw B'10111001' ;Retorna a palavra que representa graficamente C para W.
retlw B'10111111' ;Retorna a palavra que representa graficamente D para W.
retlw B'11111001' ;Retorna a palavra que representa graficamente E para W.
retlw B'11110001' ;Retorna a palavra que representa graficamente F para W.
INTERRUPT: ;Sub-Rotina de Interrupo.
incfsz CONT1,1 ;Incrementa CONT1, pula se resultado igual a zero.
goto Fim_interrupt ;Caso CONT1 no for igual a 0, vai para o fim da interrupo.
decfsz CONT2,1 ;Decrementa CONT2, pula se resultado igual a zero.
goto Fim_interrupt ;Caso CONT2 no for igual a 0, vai para o fim da interrupo.
incf TEMP1,1 ;Incrementa TEMP1, resultado salvo em TEMP1.
movlw b'00010000 ;Move o literal 16 para W.
subwf TEMP1 ;Faz 16-TEMP1.
btfsc STATUS,0 ;Testa o bit zero de STATUS, pula se igual a zero.
goto L1 ;Vai para L1.
goto L2 ;Vai para L2.
L1:
clrf TEMP1 ;Limpa o registrador TEMP1.
call Tabela ;Chama a funo Tabela.
movwf PORTB ;Move o valor de W para PORTB.
movlw B'00001111' ;Move o literal 15 para W.
movwf CONT2 ;Move W para CONT2.
L2:
movf TEMP1, 0 ; Move o valor de TEMP1 para W.
call Tabela ;Chama a funo Tabela.
movwf PORTB ;Move o valor de W obtido em Tabela para PORTB.
movlw B'00001111' ;Move o literal 15 para W.
movwf CONT2 ;Move W para CONT2.
Fim_interrupt:
bcf INTCON, TMR0IF ;Limpa o bit TMR0IF de INTCON.
retfie ;Retorna da sub-rotina de interrupo.
end ;Fim do programa.

Potrebbero piacerti anche