Hôm nay tôi muốn giới thiệu với các bạn 1 phương pháp khá hay đó là sử dụng kỹ thuật MIX MÀU của AGP để ghép hình. Với kỹ thuật này thì các bạn mới cũng có thể làm dễ dàng. Bước 1 : Mở 2 bức hình nguồn , mình chọn 2 hình sau
Trang 1Bà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ý