Tải bản đầy đủ (.pdf) (5 trang)

Bài tập vi xử lý căn bản ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (156.85 KB, 5 trang )

K thut vi x lý cn bn và vi điu khin 8051

Written by Kieennx, MicroStudy group
Bài tp 1: Cho sáng ln lt tng LED, mi LED sáng 1 giây.

































Trên đây là lu đ, vic th hin bng lnh lu đ trên có th bng cách chân phng (làm
ln lt) hoc có th dùng lnh quay đ đa bit = 0 ra ln lt các chân cng làm LED sáng
theo ln lt. T bài tp này tr đi, mc đnh ch
ng trình đã có khai báo:
#include <sfr51.inc>

Cách chân phng:
org 00h
ljmp main
org 40h
main:
mov SP,#5fh
;Vic tt tt c các LED đc t đng làm do khi reset lên, các chân cng đu = 1
mov p1,#11111110b ;sáng LED 1
lcall tre_1s
mov p1,#11111101b ;tt LED 1, sáng LED 2
lcall tre_1s
mov p1,#11111011b ;tt LED 2, sáng LED 3
Begin
Sán
g
LED 1
Tt tt c các LED
Tr 1
g


y
Tt LED 1, sán
g
LED 2
T
r
 1
g

y
Tt LED 2, sán
g
LED 3
Tt LED 7, sán
g
LED 8
T
r
 1
g

y
K thut vi x lý cn bn và vi điu khin 8051

Written by Kieennx, MicroStudy group
lcall tre_1s
;…
mov p1,#01111111b
lcall tre_1s

sjmp main

tre_1s:
mov r1,#10
loop1:
mov r2,#100
loop2:
mov r3,#100
loop3:
nop
;…<tt c 8 lnh Nop>
nop
djnz r3,loop3
djnz r2,loop2
djnz r1,loop1
ret
end


Nu s dng lnh quay thì chng trình s gn hn:
;…
main:
mov SP,#5fh
mov a,#11111110b
main_loop:
mov P1,a
lcall tre_1s
rl a
sjmp main_loop
tre_1s:

;…nh  trên….
end

Lu ý là trong các đon chng trình trên, ngn xp đc khi to vi giá tr ban đu ca
thanh ghi con tr ngn xp SP là 5fh, tc là các đa ch hay d liu ct vào ng
n xp s bt
đu t ô nh 60h tr đi. Vic khi to ngn xp là mt thao tác không th thiu khi trong
chng trình có s dng lnh gi chng trình con hoc các ngt.









K thut vi x lý cn bn và vi điu khin 8051

Written by Kieennx, MicroStudy group
Bài tp 2: kim tra phím bm ni vi P3.2, khi phím đc bm thì sáng c 8 LED, khi không
bm phím thì tt c 8 LED.


















Vi lu đ thut toán nh trên ta vit đc chng trình sau:

org 00h
ljmp main
org 40h
main:
;vic đt cng P3.2 làm cng vào đc t đng thc hin khi 8051 reset xong.
;các LED cng t đng đc tt vì khi 8051 reset xong, các cng đu = 1
jnb P3.2,phim_bam
mov P1,#0ffh ;tt tt c các LED nu không có phím bm
sjmp main
phim_bam:
mov P1,#0 ;sáng tt c các LED nu có phím bm
sjmp main
end

Vi cùng mch phn cng nh trên, ta có th
 thc hành v ngt ca vi điu khin. Bài toán
thc hành đt ra có th là nu có phím bm thì đo trng thái ca 8 LED (đang sáng thì thành
tt và ngc li). Nh vy nu ta bm phím, trng thái ca LED s đc đo li, mi ln bm
phím đo mt ln.

Nu không s dng ngt, ta có th vit chng trình gn ging vi chng trình trên, ch
khác là ph
i thêm thao tác đi nh phím ra trc khi quay tr li quét kim tra đin áp ti
chân P3.2. Nu không có thao tác này, chân P3.2 xung mc 0 s b gây ra nhiu ln đo
trng thái LED bi vì chân P3.2 s đc quét liên tc, thy còn  mc 0 là li đo trng thái,
cho đn khi nh phím ra thì các LED s cùng sáng hoc cùng tt, tùy thuc vào vic ln đo
trng thái nào đc thc hin cui cùng. Nh vy s không đúng vi mong mu
n là ch đo
mt ln khi bm mt ln.

main:
jb P3.2,$ ;nhy ti ch ch cho đn khi nào P3.2 = 0 (tc là ch
cho đn khi có phím bm
Begin
t P3.2 là cn
g
vào
Sán
g
c 8 LED
Tt c 8 LED

p
hím bm?
K thut vi x lý cn bn và vi điu khin 8051

Written by Kieennx, MicroStudy group
phim_bam:
mov a,P1 ;đc giá tr hin thi ca cng P1
cpl a ;đo trng thái đc đc đi

mov P1,a ;đa tr li cng P1 gây ra đo trng thái LED
jnb P3.2,$ ;nhy ti ch đ đi cho đên khi nào P3.2 = 1 tr li
sjmp main
end

Nu s dng ngt, trc khi s dng ta phi đt ch đ và cho phép ngt xy ra. Phím đc
ni vi chân P3.2 là chân ngt ngoài s 0 (INT0). Ngt này có 02 ch đ là ng
t theo mc và
ngt theo sn. Ngt theo mc s liên tc gây ra ngt CPU chng nào mc đin áp ca chân
P3.2 còn  mc thp. Nh vy nu CPU thc hin xong chng trình phc v ngt mà chân
P3.2 vn  mc thp thì CPU s li thc hin tip chng trình phc v ngt đó. Ngt theo
sn thì ngc li, ch gây ra ngt khi có sn tín hiu (trong tr
ng hp 8051 là sn
xung), còn sau đó chân tín hiu ngt dù là mc thp hay cao hay có sn lên thì cng không
gây ra ngt na. Vic đt ch đ cho ngt ngoài 0 đc thc hin bng bit IT0 trong thanh ghi
TCON. Nu bit này = 1 thì ngt theo sn và ngc li. Thc hành vi hai trng hp IT0 =
0 (ng vi ch đ ngt theo mc) và IT0 = 1 (ng vi ch đ ngt theo sn xung), ta s
thy đc s khác bi
t gia chúng. Trng hp ngt theo sn s cho ta kt qu ging nh
gii pháp không dùng ngt mà không thêm thao tác đi chân P3.2 tr v mc 1. Hin tng
s là gi s LED đang sáng, khi ta bm phím và nh tay ra sau đó, có th LED s vn sáng
ch không tt!
Ngt ca 8051 đc cho phép bi 2 cp, th nht là cp dành riêng cho mi ngt, cp th hai
là cp chung cho tt c các ngt. Nh v
y đ cho phép mt ngt xy ra thì phi tha mãn c 2
cp đó: cho phép riêng và cho phép chung. Các bit quy đnh các nc này đu nm trong thanh
ghi IE. Ngoài ra đ s dng mt ngt ta phi vit chng trình phc v ngt đó và đt mt
lnh nhy ti chng trình đã vit vào đa ch ca vector ngt tng ng. ó là do khi xy ra
ngt, CPU s t đng (xin nh là t đng!) th
c hin lnh đt ti đa ch ca vector ngt

tng ng. Trong trng hp này (trng hp ngt ngoài s 0) thì đa ch vector ngt là 03h
trong b nh chng trình.
Chng trình gii quyt bài toán trên s nh sau:

org 00h
ljmp main
org 03h
ljmp ngat_0
org 40h
main:
mov SP,#5fh ;khi to ngn xp vì có dùng ngt
setb it0 ;đt ngt ch đ ngt theo sn cho ngt ngoài 0, nu mun
ngt theo mc thì không c
n có lnh này vì khi 8051 reset
xong, t đng mc đnh là ngt theo mc (IT0 = 0)
setb ex0 ;cho phép ngt ngoài 0 cp riêng
setb ea ;cho phép ngt cp chung
;khác vi chng trình trc, bây gi s dng ngt nên CPU không cn phi thm dò
mc đin áp ca chân P3.2 mà s có thi gian làm các vic khác, khi có s kin phím
bm xy ra, cu trúc ngt s t phát hin và thông báo cho CPU đ x lý và đáp ng
main_loop:
;…có th làm gì tùy thích  đây…
sjmp loop
K thut vi x lý cn bn và vi điu khin 8051

Written by Kieennx, MicroStudy group
ngat_0:
mov a,P1
cpl a
mov P1,a

reti
end

Qua bài tp này ta thy đc u đim ca ngt là CPU đc t do làm các công vic khác,
khi nào có s kin xy ra thì ngt s t báo cho CPU đ dng công vic đang làm li và đáp
ng x lý.








×