ng d ng ic l p trình AT89C51: Dùng
n phím đi u khi n motor, relay,
đèn...
Chúng ta biết, mt "vt th t đng hoàn chnh" phi gm có: Ng vào - B nh - Ng
ra. Ng vào là ch tác động bên ngoài đi vào vt th, như con người, chúng ta cómt để
ghi nhn các thc th xut hin dng quang năng, có tai để nghe biết các sóng âm,có
mũi để nhn ra mùi,có lưỡi để nhn biết v và có lp da bao bc toàn thân để cm nhn ra
s nóng lnh, cng mm, nng nh... Đó là ng quan ca con người. B nh được dùng đề
lưu gi các chương trình, chương trình là "trí tu" mà thc th có th truy cp, ly ra thao
tác mi khi gp các đối ng cn gii quyết và Ng ra chính là các to th trang b trên các
vt th nó chp hành theo các chương trình, như trên cơ th ca chúng ta các thc th
thy được như t chi hai tay hai chân, tim, phi, gan, rut...là các to th luôn vn hành
theo các chương trình đã có trong b nh. Khi con người đứng gn ch quá nóng, chúng ta
biết nóng và đã kp đi ra xa ch nóng, đó là phn ng rt cơ bn ca mt vt th t động
hoàn chnh.Con người là sinh vt thông minh có kh năng hc hi các chng vt hin din
chung quanh trong thiên nhiên chung quanh và con người còn mun t mình to ra
các "vt th t động hoàn chnh" na. Ước mun này đã có bước tiến vượt bc t khi người
ta chế to ra được các ic lp trình, nó hot động theo các chương trình đã có trong các b
nh. Trong ln này chúng ta s nói đến tính năng nhp thông tin t bên ngoài vào bên
trong ca các ic lp trình, cơ bn nht là dùng các phím nhn, sau đó s m rng qua các
cách ly thông tin qua các cm biến, như: quang tr, nhit tr, v tr, t tr, m tr, áp tr,
phong tr, động tr, ... Vi các cm biến này, chúng ta có th mô phng nhiu chc năng
ging như ng quan ca các sinh vt vy.
Trước khi nói đến điu cao siêu, chúng ta hãy tìm hiu mt h vn hành cơ bn và đơn
gin cái đã. Các phím nhn dùng vi ic lp trình AT89C51Chúng ta biết ic lp trình
AT89C51 có 4 cng 8 bit nên tng cng có 32 chân có th xut nhp d liu dng bit.
Cách nhp d liu đơn gin nht là dùng các phím nhn. Phím nhn ch làm vic theo
logic nh giá, nghĩa là đóng hoc h. Vi các phím nhn, người ta có th dùng đơn l hay
t hp theo dng matrix. Hình v dưới đây cho thy:
Các
phím gn trên ma trn 4x4, người ta nói matrix 4x4 có 4 hàng và 4 ct. Trên ma trn 4x4
chúng ta ch dùng có 8 dây mà có th gn được đấn 16 phím, đó là mt ưu đim ca loi
bàn phím matrix, dùng s chân ít mà gn được nhiu phím. Vi các phím đơn lp thì mi
phím thường gn trên mt chân ca IC, vy trên mt cng 8 chân chúng ta ch có th gn
được 8 phím.Các phím nhn phân ra làm 2 kiu: Kiu phím nhn thường h và kiu phím
nhn thường đóng. Khi s dng các phím nhn, chúng ta thường gp vn đề sau: S rung
phím.Vy s rung phím là gì? Hình
v cho thy: Khi phím h thì nó cho mc áp cao, ngay khi phím được nhn xung, nó s
kéo mc áp xung mc thp, nhưng do hin tượng rung phím, lúc này có s rung động
tiếp xúc đim, khiến cho tiếp đim lúc dính lúc h và mc áp s dao động lúc lên lúc
xung và phi sau mt lúc mi n định được mc thp. Khi b phím nhn ra, chúng ta
cũng gp hin tượng tương t nhưng ít tác hi hơn. Khi dùng phím nhn vi các ic lp trình
có phn ng cc nhanh hin tượng rung phím s gây ra các điu khin sai. Khi viết chương
trình cho các phím nhn, chúng ta phi chú ý đến nh hưởng ca hin tượng rung phím,
nht là mi khi phím được đóng li.Trong thc hành, người ta thường dùng mt đon
chương trình làm chm khong 3ms đến 10ms và cho dò li ln na trng thái ca phím
để tránh s sai lm có th xy ra do hin tượng rung phím.* Mch AT89C51 dùng 8 phím
nhn đơn lp
Khi dùng sơ đồ mch đin này, trng thái bit 1 trên các chân ca cng p1 được xem như
không có nhn phím, khi có nhn phím thì chân có phím được nhn s xut hin bit 0. Khi
mt trong 8 chân ca cng p1 có chân bit 0, chúng ta biết là có nhn phím, như vy
chúng ta s viết câu lnh tìm xem trên cng p1 có xut hin bit 0 hay không? Nếu không
có bit 0 trên p1 thì tiếp tc dò tìm, khi có chân có bit 0 thì hiu là đã có phím b nhn
xung, lúc đó chuyn qua tìm xem phím nào đã được nhn và ri tiếp theo là cho chy
chương trình tương ng vi phím đã được nhn. Sau đây là mt đon chương trình dùng dò
xem có phím nhn không?loop: ; đặt tên nhãn cho lnh nhy call do_key ; cho gi chương
trình dò phím, tên nhãn do_key jnb f0, ttuc ; nhy theo bit ca f0, f0=0, tiếp tc dò
phím call tim_phim ; cho gi trình xác định phím nào được nhnttuc: ; tên nhãn cho lnh
nhy jmp loop ; nhy v tên nhãn loop, bt đầu li công vic dò phím....do_key: ; tên nhãn
dùng cho lnh nhy clr f0 ; cho xóa bit f0, bit kim tra có phím nhn hay không? mov a,
p1 ; chuyn trng thái bit trên p1 vào thanh ghi a orl a, #00000000b ; ly logic OR tr trong
a vi 00000000b, để tìm bit 0 trên p1 cpl a ; đảo tr trong thanh ghi a jz key_ret ; nếu tr
trong a là 0, nhy đến key_ret, không có phím nhn call del ; gi chương trình tr mov a,
p1 ; li chuyn trng thái ca p1 vào a, kim tra ln na orl a, #00000000b ; li cho ly
logic OR tr trong a vi 00000000b cpl a ; đảo tr trong a để dò xem có phím nhn không jz
key_ret ; nhy đến tên nhãn key_ret nếu không có phím nào được nhn setb f0 ; nếu có
phím nhn, cho set bit kim tra f0 mov b,a ; cho chuyn tr trong a cho ct vào b để dùng
xác định phím nào được nhnkey_ret: ; tên nhãn dùng cho lnh nhy mov a, p1 ; cho
chuyn trng thái cng p1 vào a orl a, #00000000b ; ly logic OR tr trong a vi
00000000b cpl a ; đảo tr trong thanh ghi a jz key_ret1 ; nhy đến tên nhãn key_ret1, nếu
thanh a bng 0 jmp key_ret ; nhy đến tên nhãn key_ret, tiếp tc kim tra p1key_ret1:
ret ; quay li sau lnh: call do_keytim_phim: ; chương trình xác định phím nào đã được
nhn.....
Hình động trên đây cho thy cách viết các câu lnh dùng dò xem có phím nhn hay
không?* Mch AT89C51 dùng 16 phím gn trên ma trn
4x4