Bài 5: Lập trình 8051 ghép nối với các bộ chỉ thị
1. Lập trình điều khiển cổng làm chức năng vào/ ra
1.3. Lập trình cho các cổng của vi điều khiển làm chức năng đầu vào
Để đặt một chân hay một cổng của VĐK làm chức năng đầu vào ta phải thiết lập chúng lên mức cao. Như vậy khi lập trình ta thường chọn đầu vào tích cực mức thấp. Ví dụ cần đặt chân P1.0 của Port 1 làm đầu vào: Setb P1.0
Các tín hiệu đầu vào của VĐK phải có mức logic là TTL. Vi điều khiển có thể nhận đầu vào từ: công tắc, phím bấm, công tắc hành trình, một số cảm biến...
Khi lập trình cho VĐK nhận tác động từ phím bấm hay công tắc thì tuỳ theo từng trường hợp mà ta cần phải chống dội cho đầu vào này (có thể chống dội bằng phần mềm hoặc phần cứng...).
Ví dụ1: Viết chương trình cho VĐK họ 8051 điều khiển một trò chơi đơn giản cho 3 người chơi là A,B,C và một người dẫn chương trình MC thực hiện theo yêu cÇu sau:
+ Khi một trong 3 thí sinh nhấn phím trả lời câu hỏi thì đèn báo của thí sinh đó sáng lên và chuông kêu đồng thời các thí sinh còn lại bị mất quyền.
+ Chỉ có người dẫn chương trình mới có quyền xác lập lại từ đầu (tắt đèn và chuông).
Phân tích yêu cầu:
Từ yêu cầu trên ta thấy rằng số đầu vào là 4 dành cho 3 phím bấm của thí sinh và 1 của người dẫn chương trình.
Số đầu ra là 4 bao gồm 3 đầu ra cho đèn báo của các thí sinh, 1 để điều khiển chuông.
Bước 1: Vẽ sơ đồ nguyên lý.
Dùng phần mềm Proteus để vẽ sơ nguyên lý như sau.
VĐK chọn AT89C51, phím bấm (button), các đèn báo ta dùng led đỏ để chỉ thị (led red). Đầu ra chuông ta dùng đèn led vàng (led yellow).
Giả sử các phím bấm được nối với Port 1 bắt đầu từ P1.0 đến P1.3. Các đầu ra
điều khiển đèn và chuông bắt đầu từ P2.0 đến P2.3.
Bước 2: Vẽ lưu đồ giải thuật.
- Lưu đồ giải thuật có thể tham khảo như sau:
Bước 3: Soạn thảo chương trình trên trình hợp dịch:
;chuong trinh dieu khien 8 led don noi voi P2 sang dan tat dan
;--- org 0 ;dia chi bat dau viet chuong trinh
start:
mov p1,#00001111b ;dat cac chan p1.0 den p1.3 lam dau vao mov p2,#00000000b ;tat cac den bao va chuong
Kiem_tra_A:
jb p1.0,Kiem_tra_B ;nhay toi kiem tra B neu p1.0=1 ( tuc la thi sinh A khong nhan phim )
setb p2.0 ;bat den thi sinh A
Bắt đầu - Xác lập đầu vào.
- Tắt đèn và chuông.
KiÓm tra thÝ sinh A
Cã bÊm (P1.0=0)
Không bấm P1.0=1
Bật đèn thÝ sinh A
( P2.0=1)
KiÓm tra thÝ sinh B
Cã bÊm (P1.1=0)
Không bấm P1.1=1
Bật đèn thÝ sinh B
( P2.1=1)
KiÓm tra thÝ sinh C
Cã bÊm (P1.2=0)
Không bấm P1.2=1
Bật đèn thÝ sinh C
( P2.2=1)
chuông Bật ( P2.3=1)
KiÓm tra MC
Không bấm P1.3=1
Cã bÊm (P1.3=0)
jmp Bao_chuong ;nhay toi doan chuong trinh bao chuong Kiem_tra_B:
jb p1.1,Kiem_tra_C ;nhay toi kiem tra C neu p1.1=1 ( tuc la thi sinh B khong nhan phim )
setb p2.1 ;bat den thi sinh B
jmp Bao_chuong ;nhay toi doan chuong trinh bao chuong Kiem_tra_C:
jb p1.2,Kiem_tra_A ; vong lai kiem tra A neu p1.2=1 ( tuc la thi sinh C khong nhan phim )
setb p2.2 ;bat den thi sinh C Bao_chuong:
setb p2.3 ;bat chuong
jb p1.3,$ ;kiem tra MC. Neu chua nhan thi tiep tuc kiem tra jmp start ;neu nhan thi nhay toi start de xac lap lai tu dau end ;ket thuc chuong trinh hop ngu
Bước 4: Hợp dịch, sửa lỗi cú pháp
Sau khi soạn thảo song ta lưu lại bài viết rồi tiến hành hợp dịch để chuyển file nguồn vừa soạn thảo sang mã máy bằng cách chọn: CTRL + F2.
Bước 5: Mô phỏng hoạt động của chương trình
Ví dụ2: Viết chương trình giao tiếp bàn phím 16 số hiển thị số bấm trên led 7
đoạn
Giao tiếp bàn phím
Bàn phím là thiết bị đầu vào cho phép người sử dụng giao tiếp với vi điều khiển.
Trong hầu hết các sản phẩm nhúng thường có một số nút nhấn. Để phát hiện nút nhấn thường đưa các hàng và các cột lên mức cao. Trên một hàng hoặc cột ta xuất tín hiệu 0V. Bình thường khi không có nút nhấn, các đầu vào của cột và hàng sẽ có tín hiệu mức cao. Chỉ khi một trong các nút được nhấn, một trong các cột hoặc hàng mới có mức thấp. Dựa vào cột và hàng có mức thấp ta xác lập
được vị trí của nút nhấn.
Hình 5.1 Hệ thống phím ấn
Hình 5.2 Mạch kết nối vi điều khiển 8051 và phím ấn
Lưu đồ thuật toán:
Viết chương trình:
;chuong trinh quet ban phim 16 so duoc noi voi cong p1
;cong p3 hien thi so phim duoc nhan dang ma hexa org 0
loop:
Mov R7,#4 ;thanh ghi r4 quet cot dong thoi luu lai so cot duoc quet
Mov A,#7fh ;dau tien quet cot 4 ; doan chuong trinh quet ban phim
quet:
Mov r0,a ;luu vi tri cot cho lan quet sau Mov P1,A ;chuyen cot can quet ra cong p1
call delay ;tre mot khoang thoi gian de chong nhieu
Mov A,P1 ;doc lai noi dung cong p1 de xac dinh co phim nhan
bắt đầu
Xác lập các hàng là
đầu vào, cột là đầu ra
Xuất mức 0 ra cột thứ Cn
Xác định hàng được nhấn Rn
Kiểm tra hàng có
mức 0 không? Cn=Cn+1
Không
PhÝm nhÊn = Cn + Rn*4 Cã
Hiển thị phím nhấn BiÕn cét Cn=0
Cn <=3 §óng
Sai
khong?
CPl A ;kiem tra co phim nhan khong?
ANL A,#0Fh
JNZ ktrahang ;neu A khac khong nghia la co phim duoc nhan mov a,r0 ;neu A=0 thi quet cot tiep theo RR A
DJNZ R7,quet jmp loop
;==================================================
;xac dinh so hang duoc nhan
;==================================================
ktrahang:
Mov R6,#4 Mov R5,#0 x1: RRC A JC tinhma INC R5 jmp x1
;=====================================================
; doan chuong trinh tinh ma nhi phan gui ra cong p0
;=====================================================
tinhma:
Mov A,R5 Mov B,#4 Mul AB DEC R7 ADD A,R7 mov p3a jmp loop
;=====================================================
;chuong trinh con tao tre
;=====================================================
delay:
push 1 push 2
MOV R1,#10 DELAY1: MOV R2,#250 DELAY2: DJNZ R2,DELAY2 DJNZ R1,DELAY1 pop 2
pop 1 RET END
Bài tập:
Bài tập 1: Viết chương trình cho VĐK họ 8051 điều khiển một trò chơi đơn giản cho 5 người chơi là: A,B,C,D,E và một người dẫn chương trình là: MC thực hiện theo yêu cầu sau:
+ Khi một trong 5 thí sinh nhấn phím trả lời câu hỏi thì đèn báo của thí sinh đó sáng lên và chuông kêu đồng thời các thí sinh còn lại bị mất quyền.
+ Chỉ có người dẫn chương trình mới có quyền xác lập lại từ đầu ( tắt đèn và chuông ).
Bài tập 2: Viết chương trình cho VĐK họ 8051 điều khiển các led đơn nối với Port 2 thực hiện theo yêu cầu sau:
+ Khi chân P1.0=0 các led nối với Port 2 chớp tắt + Khi P1.0=1 các led nối với Port 2 sáng dần tắt dần.
Bài tập 3: Viết chương trình giao tiếp bàn phím hiển thị số đếm trên led 7 đoạn 0-9,A,B,C,D,E,F
Bài tập 4: Viết chương trình giao tiếp bàn phím. Nếu phím nhấn là 1 gọi chương trình điều khiển các led gắn với cổng P0 sáng dần. Nếu phím nhấn là 2 gọi chương trình điều khiển các led gắn với cổng P0 sáng chạy. Các phím nhấn khác gọi chương trình điều khiển các led gắn với cổng P0 tắt dần.