K thut vi x lý cn bn và vi điu khin 8051
Written by Kieennx, MicroStudy group
Bài tp 1: Cho sáng ln lt tng LED, mi LED sáng 1 giây.
Trên đây là lu đ, vic th hin bng lnh lu đ trên có th bng cách chân phng (làm
ln lt) hoc có th dùng lnh quay đ đa bit = 0 ra ln lt các chân cng làm LED sáng
theo ln lt. T bài tp này tr đi, mc đnh ch
ng trình đã có khai báo:
#include <sfr51.inc>
Cách chân phng:
org 00h
ljmp main
org 40h
main:
mov SP,#5fh
;Vic tt tt c các LED đc t đng làm do khi reset lên, các chân cng đu = 1
mov p1,#11111110b ;sáng LED 1
lcall tre_1s
mov p1,#11111101b ;tt LED 1, sáng LED 2
lcall tre_1s
mov p1,#11111011b ;tt LED 2, sáng LED 3
Begin
Sán
g
LED 1
Tt tt c các LED
Tr 1
g
iâ
y
Tt LED 1, sán
g
LED 2
T
r
1
g
iâ
y
Tt LED 2, sán
g
LED 3
Tt LED 7, sán
g
LED 8
T
r
1
g
iâ
y
K thut vi x lý cn bn và vi điu khin 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
;…<tt c 8 lnh Nop>
nop
djnz r3,loop3
djnz r2,loop2
djnz r1,loop1
ret
end
Nu s dng lnh quay thì chng trình s gn hn:
;…
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
Lu ý là trong các đon chng trình trên, ngn xp đc khi to vi giá tr ban đu ca
thanh ghi con tr ngn xp SP là 5fh, tc là các đa ch hay d liu ct vào ng
n xp s bt
đu t ô nh 60h tr đi. Vic khi to ngn xp là mt thao tác không th thiu khi trong
chng trình có s dng lnh gi chng trình con hoc các ngt.
K thut vi x lý cn bn và vi điu khin 8051
Written by Kieennx, MicroStudy group
Bài tp 2: kim tra phím bm ni vi P3.2, khi phím đc bm thì sáng c 8 LED, khi không
bm phím thì tt c 8 LED.
Vi lu đ thut toán nh trên ta vit đc chng trình sau:
…
org 00h
ljmp main
org 40h
main:
;vic đt cng P3.2 làm cng vào đc t đng thc hin khi 8051 reset xong.
;các LED cng t đng đc tt vì khi 8051 reset xong, các cng đu = 1
jnb P3.2,phim_bam
mov P1,#0ffh ;tt tt c các LED nu không có phím bm
sjmp main
phim_bam:
mov P1,#0 ;sáng tt c các LED nu có phím bm
sjmp main
end
Vi cùng mch phn cng nh trên, ta có th
thc hành v ngt ca vi điu khin. Bài toán
thc hành đt ra có th là nu có phím bm thì đo trng thái ca 8 LED (đang sáng thì thành
tt và ngc li). Nh vy nu ta bm phím, trng thái ca LED s đc đo li, mi ln bm
phím đo mt ln.
Nu không s dng ngt, ta có th vit chng trình gn ging vi chng trình trên, ch
khác là ph
i thêm thao tác đi nh phím ra trc khi quay tr li quét kim tra đin áp ti
chân P3.2. Nu không có thao tác này, chân P3.2 xung mc 0 s b gây ra nhiu ln đo
trng thái LED bi vì chân P3.2 s đc quét liên tc, thy còn mc 0 là li đo trng thái,
cho đn khi nh phím ra thì các LED s cùng sáng hoc cùng tt, tùy thuc vào vic ln đo
trng thái nào đc thc hin cui cùng. Nh vy s không đúng vi mong mu
n là ch đo
mt ln khi bm mt ln.
…
main:
jb P3.2,$ ;nhy ti ch ch cho đn khi nào P3.2 = 0 (tc là ch
cho đn khi có phím bm
Begin
t P3.2 là cn
g
vào
Sán
g
c 8 LED
Tt c 8 LED
Có
p
hím bm?
K thut vi x lý cn bn và vi điu khin 8051
Written by Kieennx, MicroStudy group
phim_bam:
mov a,P1 ;đc giá tr hin thi ca cng P1
cpl a ;đo trng thái đc đc đi
mov P1,a ;đa tr li cng P1 gây ra đo trng thái LED
jnb P3.2,$ ;nhy ti ch đ đi cho đên khi nào P3.2 = 1 tr li
sjmp main
end
Nu s dng ngt, trc khi s dng ta phi đt ch đ và cho phép ngt xy ra. Phím đc
ni vi chân P3.2 là chân ngt ngoài s 0 (INT0). Ngt này có 02 ch đ là ng
t theo mc và
ngt theo sn. Ngt theo mc s liên tc gây ra ngt CPU chng nào mc đin áp ca chân
P3.2 còn mc thp. Nh vy nu CPU thc hin xong chng trình phc v ngt mà chân
P3.2 vn mc thp thì CPU s li thc hin tip chng trình phc v ngt đó. Ngt theo
sn thì ngc li, ch gây ra ngt khi có sn tín hiu (trong tr
ng hp 8051 là sn
xung), còn sau đó chân tín hiu ngt dù là mc thp hay cao hay có sn lên thì cng không
gây ra ngt na. Vic đt ch đ cho ngt ngoài 0 đc thc hin bng bit IT0 trong thanh ghi
TCON. Nu bit này = 1 thì ngt theo sn và ngc li. Thc hành vi hai trng hp IT0 =
0 (ng vi ch đ ngt theo mc) và IT0 = 1 (ng vi ch đ ngt theo sn xung), ta s
thy đc s khác bi
t gia chúng. Trng hp ngt theo sn s cho ta kt qu ging nh
gii pháp không dùng ngt mà không thêm thao tác đi chân P3.2 tr v mc 1. Hin tng
s là gi s LED đang sáng, khi ta bm phím và nh tay ra sau đó, có th LED s vn sáng
ch không tt!
Ngt ca 8051 đc cho phép bi 2 cp, th nht là cp dành riêng cho mi ngt, cp th hai
là cp chung cho tt c các ngt. Nh v
y đ cho phép mt ngt xy ra thì phi tha mãn c 2
cp đó: cho phép riêng và cho phép chung. Các bit quy đnh các nc này đu nm trong thanh
ghi IE. Ngoài ra đ s dng mt ngt ta phi vit chng trình phc v ngt đó và đt mt
lnh nhy ti chng trình đã vit vào đa ch ca vector ngt tng ng. ó là do khi xy ra
ngt, CPU s t đng (xin nh là t đng!) th
c hin lnh đt ti đa ch ca vector ngt
tng ng. Trong trng hp này (trng hp ngt ngoài s 0) thì đa ch vector ngt là 03h
trong b nh chng trình.
Chng trình gii quyt bài toán trên s nh sau:
…
org 00h
ljmp main
org 03h
ljmp ngat_0
org 40h
main:
mov SP,#5fh ;khi to ngn xp vì có dùng ngt
setb it0 ;đt ngt ch đ ngt theo sn cho ngt ngoài 0, nu mun
ngt theo mc thì không c
n có lnh này vì khi 8051 reset
xong, t đng mc đnh là ngt theo mc (IT0 = 0)
setb ex0 ;cho phép ngt ngoài 0 cp riêng
setb ea ;cho phép ngt cp chung
;khác vi chng trình trc, bây gi s dng ngt nên CPU không cn phi thm dò
mc đin áp ca chân P3.2 mà s có thi gian làm các vic khác, khi có s kin phím
bm xy ra, cu trúc ngt s t phát hin 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 thut vi x lý cn bn và vi điu khin 8051
Written by Kieennx, MicroStudy group
ngat_0:
mov a,P1
cpl a
mov P1,a
reti
end
Qua bài tp này ta thy đc u đim ca ngt là CPU đc t do làm các công vic khác,
khi nào có s kin xy ra thì ngt s t báo cho CPU đ dng công vic đang làm li và đáp
ng x lý.