Você está na página 1de 5

PRÁTICA 6 – CICLOS DE MÁQUINA E CICLOS DE INSTRUÇÃO

Felipe Barbosa Ponte – 0511875/1 – T767 – N6AB

OBJETIVOS:

Neste projeto, temos o objetivo de montar um sistema de controle de temperatura


utilizando o microcontrolador 8051.
Nesta prática, iremos observar o que constitui um estado, um ciclo de máquina e um
ciclo de instrução no microcontrolador 8051.
Além disso, iremos programar um semáforo e usar o programa PROTEUS para fazer
uma simulação deste sinal, que possui um cruzamento de duas avenidas e um tempo para
pedestre que é ativo a partir de uma chave de acionamento.

MATERIAL UTILIZADO:

PROTEUS;
Microcontrolador;
Resistores;
Fonte de tensão;
Terra (GROUND);
Chave seletora;
LED Vermelho;
LED Amarelo;
LED Verde.

METODOLOGIA E RESULTADOS:

Primeiramente, fiz um gráfico mostrando um exemplo genérico do que se constitui


um estado, um ciclo de máquina e um ciclo de introdução do microcontrolador 8051.

O menor e o maior tempo de instrução de um microcontrolador utilizando um cristal


de 4MHz é:
Menor - (1/4M)*12 = 3 us
Maior – (1/4M)*48 = 12 us
Calculei o tempo de duração total de um ciclo do código seguinte para um
microcontrolador funcionando a 12MHz.

; DEFSEG PRAT1, START=0000H, ABSOLUTE


; SEG PRAT1
;-------------------------------------------------------------------------
INICIO: CLR P0.0 ; liga LED 12t
ACALL TEMPO ; chama TEMPO 24t
SETB P0.0 ; desliga LED 12t
ACALL TEMPO 24t
AJMP INICIO 24t
;-------------------------------------------------------------------------
TEMPO: MOV R0,#0FFH 24t
VOLTA: MOV R1,#0FFH 24t
DJNZ R1,$ ; fica aqui até R1 = 0 24*255*255t
DJNZ R0, VOLTA ; 24*255t
RET 24t
; -------------------------------------------------------------------------
END

t = 1/12M = 0,083 us

Tempo total = 1566888 * t = 156688 * 0,083us = 130,05 ms

Alterando a rotina temporal do código anterior para que o tempo de pisca do LED
dure 1 segundo, temos:

; DEFSEG PRAT1, START=0000H, ABSOLUTE


; SEG PRAT1
;-------------------------------------------------------------------------
INICIO: CLR P0.0 ; liga LED 12t
ACALL TEMPO ; chama TEMPO 24t
SETB P0.0 ; desliga LED 12t
ACALL TEMPO 24t
AJMP INICIO 24t
;-------------------------------------------------------------------------
TEMPO: MOV R0,#094H 24t
VOLTA: MOV R1,#094H 24t
VOLTA2: MOV R2,#016H 24t
DJNZ R2,$ 24*22*148*148t
DJNZ R1,VOLTA2 ; 24*148*148t
DJNZ R0, VOLTA ; 24*148t
RET 24t
; -------------------------------------------------------------------------
END

t = 1/12M = 0,083 us

Tempo total = 12094752 * t = 12094752 * 0,083 us = 1 s

Implementei um sistema de controle de semáforos de um cruzamento de avenidas e


com uma passagem de pedestre acionado por uma chave, utilizei o PROTEUS para fazer a
simulação deste sistema.
Descreverei a linguagem em assembly comentada.
PS: Misturei lógica inversa com lógica positiva, na porta P0 utilizei lógica inversa,
porém nas portas P1 e P2 utilizei lógica positiva.

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

inicio: clr p0.0 ; Ligar o LED vermelho


setb p0.1 ; Desliga o LED amarelo
setb p0.2 ; Desliga o LED verde
clr p1.0 ; Desliga o LED vermelho
clr p1.1 ; Desliga o LED amarelo
setb p1.2 ; Liga o LED verde
clr p2.0 ; Desliga o LED verde
setb p2.1 ; Liga o LED vermelho

call DLAY1M ; Chama a rotina de tempo de 1 minuto


setb p1.1 ; Liga o LED amarelo
clr p1.2 ; Desliga o LED verde

call DLAY2S ; Chama a rotina de tempo de 2 segundos


setb p0.0 ; Desliga o LED vermelho
clr p0.2 ; Liga o LED verde
setb p1.0 ; Liga o LED vermelho
clr p1.1 ; Desliga o LED amarelo

call DLAY2M ; Chama a rotina de tempo de 2 minutos


setb p0.2 ; Desliga o LED verde
clr p0.1 ; Liga o LED amarelo

call DLAY2S ; Chama a rotina de tempo de 2 segundos


jnb p2.2,z1 ; Verifica a chave de acionamento de pedestre
ljmp chave ; A chave foi acionada, pula para chave
z1: ljmp inicio ; A chave não foi acionada, pula para o inicio.

chave: clr p0.0 ; Liga o LED vermelho


setb p0.1 ; Desliga o LED amarelo
setb p0.2 ; Desliga o LED verde
setb p1.0 ; Liga o LED vermelho
clr p1.1 ; Desliga o LED amarelo
clr p1.2 ; Desliga o LED verde
setb p2.0 ; Liga o LED verde
clr p2.1 ; Desliga o LED vermelho
call DLAY30S ; Chama a rotina de tempo de 30 segundos
ljmp inicio ; Pula para o inicio

;------------------------------------------------
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 das rotinas de tempo.

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:

[1] SILVA JÚNIOR, VIDAL PEREIRA DA. Aplicações práticas do microcontrolador


8051. Ed. Érica Ltda. São Paulo.

Você também pode gostar