Você está na página 1de 8

Aplicaes de Microcontroladores I

Lista de exerccios n2
Pedro Augusto Viana Pato
nUSP:7173802
;****************************************;
;**************EXERCCIO 1***************;
;****************************************;
;****************************************;
;OBS: por falta de especificao do exer-;
;
ccio, no foi possvel identificar;
;
se a contagem deveria ser indepen- ;
;
dente do tempo de 640cms, de forma ;
;
que optou-se pela contagem e pela ;
;
amostragem de forma simultnea
;
;****************************************;
org
0000h
;
mov
P1,#00h
;
loop:
mov
tmod,#10h
;
mov
th1,#0FDh
;
mov
tl1,#8Eh
;
setb tr1
;
jnb
tf1,$
;
clr
tr1
;
clr
tf1
;
inc
P1
;
sjmp loop
;
end
;
;****************************************;
;****************************************;
;****************************************;

;****************************************;
;***********EXERCCIO 2******************;
;****************************************;
org
0000h
;
mov
tmod,#00h
;
loop:
mov
th0,#177d
;
mov
tl0,#00h
;
call delay
;
cpl
p1.7
;
sjmp loop
;
delay:
setb tr0
;
jnb
tf0,$
;
clr
tr0
;
clr
tf0
;
mov
r0,#7d
;
djnz r0,$
;
nop
;
ret
;
end
;
;****************************************;
;****************************************;
;****************************************;

;****************************************;
;********EXERCICIO 3-ITEM A**************;
;****************************************;
;OBS:este exerccio trata-se de uma sub- ;
;
rotina e, portanto, no fim apresenta;
;
o comando 'ret' ainda que no haja ;
;
nenhuma chamada 'call' neste trecho ;
;
do programa;
;
;
;
;
A rotina de tempo no de exatamen-;
;
te 50ms pois h um pequeno erro de- ;
;
vido aos comando subsequentes ao es-;
;
touro do timer. Este erro despre- ;
;
zvel.
;
;****************************************;
org
0000h
;
d50ms:
mov
tmod,#01h
;
mov
th0,#3Ch
;
mov
tl0,#0B0h
;
setb tr0
;
jnb
tf0,$
;
clr
tr0
;
clr
tf0
;
ret
;
end
;
;****************************************;
;****************************************;
;****************************************;
;****************************************;
;********EXERCCIO 3-ITEM b**************;
;****************************************;
;OBS: considera-se um cristal de 12Mhz
;
;****************************************;
org
0000h
;
mov
R0,#100d
;
loop:
call d50ms
;
djnz R0,loop
;
sjmp $
;
d50ms:
mov
tmod,#01h
;
mov
th0,#3Ch
;
mov
tl0,#0B0h
;
setb tr0
;
jnb
tf0,$
;
clr
tr0
;
clr
tf0
;
ret
;
end
;
;****************************************;
;****************************************;
;****************************************;

;****************************************;
;***********EXERCCIO 4******************;
;****************************************;
;OBS:como o tempo do timer no estava es-;
;
pecificado no exerccio, criou-se
;
;
uma rotina de 50ms
;
;****************************************;
org
0000h
;
jmp
prog
;
org
0003h
;
i_ext0:
mov
dptr,#4000h
;
movx A,@DPTR
;
mov
DPTR,#4200h
;
movx @DPTR,A
;
reti
;
org
0013h
;
i_ext1:
mov
DPTR,#4200h
;
movx A,@DPTR
;
mov
P1,A
;
Reti
;
org
001Bh
;
i_tmr1:
clr
tr1
;
mov
A,P2
;
mov
DPTR,#4000h
;
movx @DPTR,A
;
mov
th1,#3Ch
;
mov
tl1,#0B0h
;
setb tr1
;
reti
;
prog:
mov
tmod,#10h
;
setb it0
;
setb it1
;
setb px0
;
mov
th1,#3Ch
;
mov
tl1,#0B0h
;
mov
IE,#8Dh
;
setb tr1
;
sjmp $
;
end
;
;****************************************;
;****************************************;
;****************************************;

;****************************************;
;*************EXERCCIO 5****************;
;****************************************;
;OBS:Como no foi especificado no exerc-;
;
cio, as vlvulas so acionadas por ;
;
nvel lgico 0 nas portas P1.0 e
;
;
P1.1
;
;
;
;
Como o valor de P3 depois do reset ;
;
FFh e o sensor fora um valor igual ;
;
a 0 em P3.2, pode ser que, dependen-;
;
do do tempo de transio, haja um
;
;
pedido inicial de interrupo inde- ;
;
sejado, o problema resolvido atra-;
;
vs do registrador R0, que garante ;
;
que 'int' no ser executa sem que ;
;
'iext1' seja executada antes
;
;****************************************;
org
0000h
;
jmp
prog
;
org
0003h
;
iext0:
djnz R0,int
;
reti
;
int:
setb P1.0
;
clr
P1.1
;
reti
;
org
0013h
;
iext1:
setb P1.1
;
clr
P1.0
;
mov
R0,#02h
;
reti
;
prog:
setb IT0
;
setb IT1
;
mov
R0,#01h
;
mov
IE,#85h
;
clr
P1.1
;
sjmp $
;
end
;
;****************************************;
;****************************************;
;****************************************;

;****************************************;
;**************EXERCCIO 6***************;
;****************************************;
;OBS:os sensores da catraca no foram
;
;
utilizados;
;
;
;
;
No atendimento da interrupo ext0 ;
;
o bit 'EA' desativado para garan- ;
;
tir que se um trem passar no sensor ;
;
a catraca no desa sobre o carro. O;
;
tempo de 5s suficiente para que o ;
;
carro atravesse, mas no longo o
;
;
suficiente para que um trem que
;
;
tenha acabado de passar pelo sensor ;
;
chegue at a catraca;
;
;
;
;
Supem-se que 15s seja tempo o sufi-;
;
ciente para a trazeira do trem passar;
;
do sensor at o fim da catraca.
;
;****************************************;
flag_1 equ 20h.1
;
flag_2 equ 20h.2
;
b_open equ p1.0
;
org
0000h
;
jmp
prog
;
org
0003h
;
iext0:
call dly_50ms
;
clr
ea
;
setb b_open
;
setb flag_1
;
call dly_5s
;
setb ea
;
reti
;
org
0013h
;
iext1:
clr b_open
;
jnb
p3.3,$
;
setb flag_1
;
setb flag_2
;
call dly_15s
;
reti
;
prog:
mov
20h,#00h
;
mov
tmod,#01h
;
setb px1
;
setb it0
;
mov
ie,#85h
;
sjmp $
;
dly_15s:
mov
R1,#03h
;
dly_5s:
mov
R0,#100d
;
dly_50ms:
mov
th0,#3Ch
;
mov
tl0,0B0h
;
setb tr0
;
jnb
tf0,$
;
jnb
flag_1,end_tm
;
djnz R0,dly_50ms
;
jnb
flag_2,end_tm
;
djnz R1,dly_5s
;
end_tm:
clr
flag_1
;
clr
flag_2
;
ret
;
end
;
;****************************************;

Figura referente ao exerccio de nmero 6

;****************************************;
;************EXERCCIO 7*****************;
;****************************************;
b_en_mt equ P2.6
;
n_up_b_dw equ P2.7
;
b_en_warm equ P1.2
;
b_en_cool equ P1.0
;
org
0000h
;
jmp
prog
;
org
0003h
;
jmp
iext0
;
org
0013h
;
jnb
20h.0,exit
;
iext1:
clr
b_en_mt
;
setb b_en_cool
;
call delay
;
clr
b_en_cool
;
setb n_up_b_dw
;
setb b_en_mt
;
djnz R1,exit
;
jmp
stop
;
exit:
reti
;
iext0:
clr
b_en_mt
;
setb b_en_warm
;
call delay
;
clr
b_en_warm
;
clr
n_up_b_dw
;
setb b_en_mt
;
setb 20h.0
;
reti
;
prog:
clr
b_en_warm
;
clr
b_en_cool
;
clr
20h.0
;
mov
R1,#03h
;
setb it0
;
setb it1
;
mov
Ie,#85h
;
sjmp $
;
stop:
clr
b_en_mt
;
sjmp $
;
delay:
mov
R0,#10d
;
mov
tmod,#01h
;
loop:
mov
th0,#3Ch
;
mov
tl0,#0B0h
;
setb tr0
;
jnb
tf0,$
;
clr
tf0
;
djnz R0,loop
;
ret
;
end
;
;****************************************;
;****************************************;
;****************************************;

;****************************************;
;************EXERCCIO 8*****************;
;****************************************;
;OBS:note que o carro no pra de andar ;
;
at a alimentao do micro ser cor- ;
;
tada
;
;****************************************;
org
0000h
;
jmp
prog
;
org
0003h
;
iext0:
clr
EA
;
cpl
20h.0
;
mov
P1,#05h
;
call delay
;
jb
20h.0,right
;
left:
mov
P1,#0Dh
;
call delay
;
mov
P1,#0Fh
;
setb EA
;
reti
;
right:
mov
P1,#07h
;
call delay
;
mov
P1,#0Fh
;
setb EA
;
reti
;
prog:
clr
20h.0
;
setb it0
;
mov
ie,#81h
;
sjmp $
;
delay:
mov
R0,#100d
;
mov
tmod,#01h
;
loop:
mov
th0,#0B1h
;
mov
tl0,#0E0h
;
setb tr0
;
jnb
tf0,$
;
clr
tf0
;
djnz R0,loop
;
ret
;
end
;
;****************************************;
;****************************************;
;****************************************;

Exerccio 9 item-a:
Os timers 0 e 1 esto no modo 1, ou seja, contador de 16 bits. O valor
de TH0 7Fh e de TL0 00h, como 7F00h=32512d, o timer 0 contar
65536-32512=33024 ciclos de mquinas (1us por causa do cristal de
12MHz) para solicitar uma interrupo. O tempo contado pelo timer 0
at a primeira solicitao de interrupo ento de 33,024ms
aproximadamente.

Exerccio 9 item-b:
Primeiramente P2 fica igual 7Fh at a primeira interrupo (em torno
de 33ms) enquanto P1 comea em 7Fh e vai incrementando a cada 256us
at sofrer overflow em FFh. Aps a interrupo do timer 0, a situao
se inverte e P2 passa a incrementar a partir de 7Fh a cada 256us
enquanto P1 permanece com o valor constante 7Fh at a interrupo do
timer 1. Essa alternncia permanece indefinidamente.

Você também pode gostar