Chào bà con xa gần, tôi chưa thấy có mục nào nói về giao tiếp bàn phím máy vi tính với vi điều khiển nhỉ? Cái này hay đấy chứ, cả trăm phím cho ta sử dụng. Tôi có làm giao tiếp bàn phím với 89S52 dùng ngắt ngoài 0 (p3.2) làm ngõ nhận xung SCK, còn 1 pin nào đó (chẳng hạn p3.1) làm ngõ nhận dư liều SDA. Chương trình đã chạy, mã hex của bàn phím VDK đã nhận được, tuy nhiên chương trình không thoát khỏi ngắt ngoài để trở về chương trình chính. Bà con xem thế nào? Có gì chỉ dẫn thêm cho tôi và mọi người biết với!
Dưới đây là chương trình viết bằng hợp ngữ:
;p3.2 dung lam duong nhan xung SCK
;P3.1 dung lam duong nhan du lieu SDA
org 0
ljmp main
org 0003h
ljmp ex0isr ;Chuong trinh ngat ngoai 0
main:
mov ie, #81h;Cho phep ngat ngoai
setb it0 ;ngat canh
lap:
inc p0
lcall delay
mov r0, p0 ;Binh thuong port 0 dem nhi phan
cjne r0, #255, lap
mov p0, #0
sjmp lap
;Chuong trinh ngat ngoai de doc phim nhan
ex0isr:
clr ex0
mov r1, #8
jb p3.2, $ ;cho bit start => bo qua
jnb p3.2, $
nhan2: jb p3.2, nhan2 ;cho canh xuong cua xung ck
jnb p3.2, $
mov c, p3.1
rrc a ;doc bit lsb vao a7 truoc
djnz r1, nhan2 ;doc bit tiep theo cua byte du lieu
mov p2, a ;dua ma cua phim nhan ra port 2
jb p3.2, $
jnb p3.2, $ ;cho bit parity => bo qua
jb p3.2, $
jnb p3.2, $ ;cho bit stop => bo qua
setb p3.0
setb p3.2
; lcall delay
setb ex0 ;cho phep ngat tro lai
reti
;Chuong trinh con tri hoan ms
delay:
mov r7, #255
nhan8: mov r6, #255
nhan9: djnz r6, nhan9
djnz r7, nhan8
ret
end
Dưới đây là chương trình viết bằng hợp ngữ:
;p3.2 dung lam duong nhan xung SCK
;P3.1 dung lam duong nhan du lieu SDA
org 0
ljmp main
org 0003h
ljmp ex0isr ;Chuong trinh ngat ngoai 0
main:
mov ie, #81h;Cho phep ngat ngoai
setb it0 ;ngat canh
lap:
inc p0
lcall delay
mov r0, p0 ;Binh thuong port 0 dem nhi phan
cjne r0, #255, lap
mov p0, #0
sjmp lap
;Chuong trinh ngat ngoai de doc phim nhan
ex0isr:
clr ex0
mov r1, #8
jb p3.2, $ ;cho bit start => bo qua
jnb p3.2, $
nhan2: jb p3.2, nhan2 ;cho canh xuong cua xung ck
jnb p3.2, $
mov c, p3.1
rrc a ;doc bit lsb vao a7 truoc
djnz r1, nhan2 ;doc bit tiep theo cua byte du lieu
mov p2, a ;dua ma cua phim nhan ra port 2
jb p3.2, $
jnb p3.2, $ ;cho bit parity => bo qua
jb p3.2, $
jnb p3.2, $ ;cho bit stop => bo qua
setb p3.0
setb p3.2
; lcall delay
setb ex0 ;cho phep ngat tro lai
reti
;Chuong trinh con tri hoan ms
delay:
mov r7, #255
nhan8: mov r6, #255
nhan9: djnz r6, nhan9
djnz r7, nhan8
ret
end
Comment