Você está na página 1de 2

CHA EQU P2.

0
CHB EQU P2.1
OFF EQU P2.2
LEDA EQU P3.7
LEDB EQU P3.3

Org 00 ;Iniciar pelo endereço 00


Mov P3,#00
Testotal: Clr Leda ;Apagar Led A
Clr Ledb ;Apagar Led B
Test2: Jnb Cha,Rota ;Testar chave A, se pressionada mandar para R
otina do Led A
Jnb Chb,Rotb ;Testar chave B, se pressionada mandar para R
otina do Led A
Ljmp Test2 ;Pular para o Label Test2, caso não seja pressi
onada nenhuma das duas.
Rota: Setb Leda ;Ligar Led A
Lcall Rot125 ;Chamar rotina de 0,125 segundos.
Clr Leda ;Desligar Led A
Lcall Rot125 ;Chamar rotina de 0,125 segundos.
Jnb Off,Testotal ;Se chave OFF pressionada, mandar para o labe
l Testotal.
sjmp Rota ;Se chave OFF não for pressionada, mandar para
o label Rota.
Rotb: Setb Ledb ;Liga Led B
Lcall Rot05 ;Chamar rotina de 0,5 segundos
Clr Ledb ;Desligar Ledb
Lcall Rot05 ;Chamar rotina de 0,5 segundos
Jnb Off, Testotal ;Se chave OFF pressionada, manda para o label
Testotal.
Sjmp Rotb ;Se chave OFF não for pressionada, manda para o
label Rotb.

;Subrotinas

Rot125: Mov Tmod,#22h ;Ligar contador em modo 2;


Mov R0,#50 ;Escrever 50 no R0;
Mov R1,#10 ;Escrever 10 no R1;
Jnb Off,testotal ;Se chave OFF pressionada, mandar para o labe
l Testotal.
Volta: Mov Th0,#(5) ;Começar contagem com o número 5 no contador.
Mov Tl0,#(5) ;Começar contagem com o número 5 no contador.
Setb Tr0 ;Começar clock
jnb Tf0,$ ;Testar se o Flag não estourou, se não estiver es
tourado, ficar testando.
Clr Tf0 ;Limpar Flag
Jnb Off,testotal ;Se chave OFF pressionada, manda para o label
Testotal.
Djnz R0,volta ;Decrementar R0, se diferente de 0 então irá para
o label volta.
Mov R0,#50 ;Escreve o número 50 no r0
Djnz R1,volta ;Decrementa R1, Se diferente de 0 então irá para
o label Volta.
Clr Tr0 ;Parar o clock.
Ret ;Retornar uma instrução depois do Lcall.
Rot05: Mov Tmod,#22h ;Ligar contador em modo 2
Mov R0,#100 ;Escrever 100 no R0;
Mov R1,#20 ;Escrever 20 no R1;
jnb Off,Testotal ;Se chave OFF pressionada, mandar para o labe
l Testotal.
Volta1: Mov TH0,#(5) ;Começar contagem com o número 5 no contador.
Mov Tl0,#(5) ;Começar contagem com o número 5 no contador.
Setb Tr0 ;Começar clock
Jnb Tf0,$ ;Testar se o Flag não estourou, se não estiver es
tourado, fica testando.
Clr Tf0 ;Limpar Flag
Jnb Off,Testotal ;Se chave OFF pressionada, mandar pro label T
estotal.
Djnz R0,volta1 ;Decrementar R0, se diferente de 0 então irá para
o label volta1.
Mov R0,#100 ;Escrever o número 100 no r0
Djnz R1,Volta1 ;Decrementar R1, Se diferente de 0 então irá para
o label Volta1.
Clr Tr0 ;Parar o clock
Ret ;Retornar uma instrução depois do Lcall.
End ;Terminar o programa.

Você também pode gostar