Sei sulla pagina 1di 2

;************************************************* *****************************

*
;
;Eletrotécnica 4º Ano - EMI
;Gabriel Cintra - 05112212
;
;Programa 10:
;Iniciar o display da esquerda mostrando o número 0, a cada vez que a
;chave S4 for pressionada, incrementar o valor mostrado no display
;zerando novamente após o número 9.
;Quando pressionar a chave S3, decrementar o valor no display.
;
;************************************************* *****************************
*
INCLUDE <P16F877A.INC>
LIST P=16F877A.INC
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _XT_OSC & _LVP_OFF
TEMP1 equ h'20'
TEMP2 equ h'21'
TEMP3 equ h'22'
Minimo equ h'00' ; Valor Minimo da Contagem
Maximo equ h'09' ; Valor Máximo da Contagem
Contador equ h'23' ; Local onde vai ser armazenado a contagem
bsf STATUS,5 ; Seleciona Banco 01
movlw b'00001111' ; Configura RB0:RB3 PORTB como Entrada
movwf TRISB ; Envia Configuração para TRISB
movlw b'00000000' ; Configura PORTD como Saída
movwf TRISD ; Envia Configuração para TRISD
bcf STATUS,5 ; Seleciona Banco 00
Principal ; Rotina para escrever Zero o Display
movlw b'00111111' ; Código para Escrever Zero no Display
movwf PORTD ; Escreve Zero no Display
clrf Contador ; Limpa Contador para Iniciar do Zero
movlw b'10000000' ; Seleciona Display a ser Escrito
movwf PORTB ; Envia seleção para PORTD
Checar ; Rotina para Verificar o Botão S4 e S3
btfss PORTB,3 ; Verifica S4.
call Incrementar ; Fechado vai para Incrementar.
btfss PORTB,2 ; Aberto, Verificar S3
call Decrementar ; Fechado, Vai para Decrementar.
goto Checar ; Aberto, Faz nova Verificação dos Botões
Incrementar ; Rotina de Incrementar
movlw Maximo ; W = maximo
xorwf Contador,W ; W = W xor Contador
btfsc STATUS,Z ; Contador = maximo?
goto $+2 ; Sim, salta para 2 linhas abaixo
goto $+4 ; Não, salta para 4 linhas abaixo
movlw Minimo ; W = minimo
movwf Contador ; Contador = mínimo
goto $+2 ; Salta para 2 linhas abaixo
incf Contador,f ; Soma um do valor de Contador
call Conversor_Display ; Converter para Jogar nos Display
movwf PORTD ; Escreve o valor Convertido no Display
call Espera ; Chama a Rotina de Espera
return
Decrementar ; Rotina de Decrementar
movlw Minimo ; W = minimo
xorwf Contador,W ; W = W xor Contador
btfsc STATUS,Z ; Contador = minimo?
goto $+2 ; Sim, salta para 2 linhas abaixo
goto $+4 ; Não, salta para 4 linhas abaixo
movlw Maximo ; W = maximo
movwf Contador ; Contador = maximo
goto $+2 ; Salta para 2 linhas abaixo
decf Contador,f ; Decrementa uma unidade do Contador
call Conversor_Display ; Converter para Jogar nos Display
movwf PORTD ; Escreve o valor Convertido no Display
call Espera ; Chama a Rotina de Espera
return
Conversor_Display
Movf Contador,W ; W Recebe Conteudo de Contador
Addwf PCL,F ; PCL Recebe (W + PCL)
Retlw b'00111111' ; Acende Zero (0) no Display
Retlw b'00000110' ; Acende Um (1) no Display
Retlw b'01011011' ; Acende Dois (2) no Display
Retlw b'01001111' ; Acende Três (3) no Display
Retlw b'01100110' ; Acende Quatro (4) no Display
Retlw b'01101101' ; Acende Cinco (5) no Display
Retlw b'01111101' ; Acende Seis (6) no Display
Retlw b'00100111' ; Acende Sete (7) no Display
Retlw b'01111111' ; Acende Oito (8) no Display
Retlw b'01101111' ; Acende Nove (9) no Display
Espera ; Rotina de Espera, para intervalo do Botão
movlw h'26' ; Valor a ser Decrementado
movwf TEMP1 ; Envia Valor para TEMP1
Volta1
movlw h'26' ; Valor a ser Decrementado
movwf TEMP2 ; Envia Valor para TEMP2
Volta2
movlw h'26' ; Valor a ser Decrementado
movwf TEMP3 ; Envia Valor para TEMP3
Volta3
decfsz TEMP3,F ; Decrementa Valor de TEMP3 e salta se for 0
goto Volta3 ; Vai para Volta3
decfsz TEMP2,F ; Decrementa Valor de TEMP2 e salta se for 0
goto Volta2 ; Vai para Volta2
decfsz TEMP1,F ; Decrementa Valor de TEMP1 e salta se for 0
goto Volta1 ; Vai para Volta1
return ; Volta para proxima instrução de onde foi chamada
END ; Fim do Programa
;************************************************* *****************************
*

Potrebbero piacerti anche