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:
main:
;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áng LED 1
T t t t c các LED
Tr 1 giây
T t LED 1, sáng LED 2
Tr 1 giây
T t LED 2, sáng LED 3
T t LED 7, sáng LED 8
Tr 1 giây
Trang 2lcall tre_1s
;…
lcall tre_1s
tre_1s:
loop1:
loop2:
loop3:
nop
;…<t t c 8 l nh Nop>
nop
ret
end
N u s d ng l nh quay thì ch ng trình s g n h n:
;…
main:
mov a,#11111110b
main_loop:
lcall tre_1s
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
Trang 3Bà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:
…
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
mov P1,#0ffh ;t t t t c các LED n u không có phím b m
phim_bam:
mov P1,#0 ;sáng t t c các LED n u có phím b m
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 ng vào
Sáng c 8 LED T t c 8 LED
Có phím b m?
Trang 4phim_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
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:
…
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…
Trang 5ngat_0:
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ý