Escolar Documentos
Profissional Documentos
Cultura Documentos
OBJETIVOS:
MATERIAL UTILIZADO:
PROTEUS;
Microcontrolador;
Resistores;
Fonte de tensão;
Terra (GROUND);
Chave seletora;
LED Vermelho;
LED Amarelo;
LED Verde.
METODOLOGIA E RESULTADOS:
t = 1/12M = 0,083 us
Alterando a rotina temporal do código anterior para que o tempo de pisca do LED
dure 1 segundo, temos:
t = 1/12M = 0,083 us
ORG 0
LJMP INIT
ORG 50h
INIT: mov SP,#(126-60) ; Espaço para a pilha
mov TMOD, #01h ; Ativando o modo 1
mov TCON, #01h
;------------------------------------------------
DLAY1S: mov R0,#019h
N1SEC: mov TH0,#063h
mov TL0,#0BFh
setb TR0
JNB TF0,$
CLR TF0
DJNZ R0,N1SEC
ret
;------------------------------------------------
DLAY2S: mov R1,#002h
N2SEC: call DLAY1S
DJNZ R1,N2SEC
ret
;------------------------------------------------
DLAY30S: mov R1,#01Eh ;1E=30 em decimal
N30SEC: call DLAY1S
DJNZ R1,N30SEC
ret
;------------------------------------------------
DLAY1M: mov R2,#002h
N1M: call DLAY30S
DJNZ R2,N1M
ret
;------------------------------------------------
DLAY2M: mov R3,#002h
N2M: call DLAY1M
DJNZ R3,N2M
ret
;------------------------------------------------
End
Cálculo de 1 segundo:
FFFFh = 65535d
Utilizei 40000 como minha referência, então fiz 65535d – 40000d = 25535d.
Passando para hexadecimal 25535d temos 63BFh. Separei em parte high e low e
adicionei esses valores em TH0(high) e TL0(low).
Setei TR0 para iniciar a contagem e esperei o TF0 dar “overflow”, que nesse caso
específico esse tempo para que se tenha um overflow é de 0,04s, pois utilizei um cristal de
12MHz, então (1/12M) * 12 = 1 us. Overflow = 40000 * 1 us = 0,04s.
Adicionei ao registrador R0 19h = 25d e decrementei o registrador toda vez que
ocorresse um overflow, ou seja, ele iria decrementar o R0 até que ele chegue em zero, no
caso específico 25 vezes, com uma duração de tempo de 0,04s para cada decrementada.
Com isso, achei o tempo de 1 segundo -> 25 * 0,04s = 1 s.
Cálculo de 2 segundos:
Adicionei ao registrador R1 02h = 2d e chamei a rotina de 1 segundo (DLAY1S) e
decrementei R1 até que seja zero, ou seja, chamei a rotina de 1 segundo duas vezes, o que
nos da um tempo de 2 segundos.
Utilizei esse mesmo raciocínio para as rotinas de tempo de 30 segundos, 1 minuto e
dois minutos.
Figura do sistema de controle de semáforos simulada no PROTEUS.
BIBLIOGRAFIA: