Article Index |
---|
ĐIỆN TỬ ĐIỀU KHIỂN |
1 |
2 |
All Pages |
4.Viết chương trình nguồn theo yêu cầu trên:
org 0000h
qua0:
jb p1.0, qua1
call del ; gọi trình làm trể, tránh ảnh hưởng rung phím
jnb p1.0, $
jmp chay_toi ; Cho chạy tới, 2 motor quay cùng chiều
qua1:
jb p1.1, qua2
call del
jnb p1.1, $
jmp chay_lui ; chạy lùi, 2 motor cho quay ngược chiều
qua2:
jb p1.2, qua3
call del
jnb p1.2, $
jmp queo_trai ; quẹo trái, motor trái dừng, motor phải quay tới
qua3:
jb p1.3, qua4
call del
jnb p1.3, $
jmp queo_phai ; quẹo phải, motor phải dừng và motor trái quay tới
qua4:
jb p1.4, qua5
call del
jnb p1.4, $
jmp dung ; dừng, cả 2 motor đều dừng, không quay
qua5:
jb p1.5, qua6
call del
jnb p1.5, $
jmp cham_lai ; chậm lại, 2 motor quay với tốc độ chậm
qua6:
jb p1.6, qua7
call del
jnb p1.6, $
jmp quay_trai ; quay vòng qua trái, motor trái quay ngược, motor phải quay thuận
qua7:
jb p1.7, qua0
call del
jnb p1.7, $
jmp quay_phai ; quay vòng qua phải, motor trái quay thuận, motor phải quay ngược
chay_toi: ; trình cho chạy tới
setb p3.0
clr p3.1
setb p3.2
setb p3.3
clr p3.4
setb p3.5
jmp qua0 ; trở lại chương trình qué phím
chay_lui: ; trình cho chạy lùi
clr p3.0
setb p3.1
setb p3.2
clr p3.3
setb p3.4
setb p3.5
jmp qua0 ; trở lại trình quét phím
queo_trai: ; cho quẹo trái
setb p3.0
clr p3.1
setb p3.2
setb p3.3
clr p3.4
clr p3.5
jmp qua0 ; trở lại trình quét phím
queo_phai: ; cho quẹo phải
setb p3.0
clr p3.1
clr p3.2
setb p3.3
clr p3.4
setb p3.5
jmp qua0 ; trở lại trình quét phím
dung: ; cho dừng
setb p3.0
clr p3.1
clr p3.2
setb p3.3
clr p3.4
clr p3.5
jmp qua0 ; trở lại trình quét phím
cham_lai: ; cho chậm lại
setb p3.0
clr p3.1
setb p3.3
clr p3.4
mov r4, #100
llai: setb p3.2
setb p3.5
call delay
clr p3.2
clr p3.5
call delay
djnz r4, llai
jmp qua0 ; trở lại trình quét phím
quay_trai: ; cho quay vòng qua trái
setb p3.0
clr p3.1
setb p3.2
clr p3.3
setb p3.4
setb p3.5
jmp qua0 ; trở lại trình quét phím
quay_phai: ; cho quay vòng qua phải
clr p3.0
setb p3.1
setb p3.2
setb p3.3
clr p3.4
setb p3.5
jmp qua0 ; trở lại trình quét phím
del: ; đặt tên nhãn dùng cho lệnh nhẩy
mov r3, # 10 ; nạp trị 10 vào thanh ghi r3
mov r4, #200 ; nạp trị 200 vào thanh ghi r4
v_r4: ; đặt tên nhãn dùng cho lệnh nhẩy
djnz r4, $ ; giảm -1 đến khi trị trong r4 băng 0
djnz r3, v_r4 ; giảm trị trong r3 theo bước -1, r3 0?, định hướng nhẩy
ret ; quay lại sau lệnh call del
delay: ; đặt tên nhãn cho trình làm trể
mov r5, #100 ; nạp trị 100 vào thanh ghi r5
v_r6: ; đặt tên nhãn dùng cho lệnh nhẩy
mov r6, #250 ; nạp trị 250 vào thanh ghi r5
djnz r6, $ ; giảm theo bước -1 cho đến khi bằng 0
djnz r5, v_r6 ; giảm r5 theo bước -1, r5=0? chọn hướng nhẩy
ret ; quay lại sau lệnh call delay
end ; dừng biên dịch tại dòng này
Phân tích các câu lệnh viết trong chương trình trên:
2. Cách dùng phím kiểu ma trận
Chúng ta sẽ viết chương trình nguồn cho kiểu bàn phím ma trận 4x4 như hình vẽ.

Trong
bài thực hành này, chúng ta sẽ cho lấy mã có trong bảng xuất
ra trên cảng p3 khi nhấn một trong các phím trên ma trận 4x4.
org 0000h ; Khởi đầu từ thanh nhớ 0000h
mov p2, #11111111b ; đặt các chân Input lên 1
k1: ; tên nhãn
mov p1, #00000000b ; đặt các chân Ouput xuống 0
mov a, p2 ; chuyển hiện trạng của p2 vào a
anl a, #00001111b ; lấy logic AND để che 4 bit cao
cjne a, #00001111b, k1 ; kiểm tra xem có phím nhấn chưa?
k2: ; đặt tên nhãn
call delay ; gọi chương trình trể tránh rung phím
mov a, p2 ; chuyển trạng thái p2 vào a
anl a, #00001111b ; lấy logic AND che 4 bit cao
cjne a, #00001111b, tim_hang ; so sánh để nhẩy
jmp k2 ; nhẩy về k2
tim_hang: ; đặt tên nhãn
mov p1, #11111110b ; đặt hàng 0, xuống bit 0
mov a, p2 ; chuyển p2 vào a
anl a, #00001111b ; lấy logic AND, che 4 bit cao
cjne a, #00001111b, hang_0 ; so sánh để nhẩy
;
mov p1, #11111101b ; đặt hàng 1, xuống bit 0
mov a, p2 ; chuyển p2 vào a
anl a, #00001111b ; lấy logic AND, che 4 bit cao
cjne a, #00001111b, hang_1 ; so sánh để nhẩy
;
mov p1, #11111011b ; đặt hàng 2, xuống bit 0
mov a, p2 ; chuyển p2 vào a
anl a, #00001111b ; lấy logic AND, che 4 bit cao
cjne a, #00001111b, hang_2 ; so sánh để nhẩy
;
mov p1, #11110111b ; đặt hàng 3, xuống bit 0
mov a, p2 ; chuyển p2 vào a
anl a, #00001111b ; lấy logic AND, che 4 bit cao
cjne a, #00001111b, hang_3 ; so sánh để nhẩy
;
hang_0: ; tìm ra một trong 4 phím hàng 0
mov dptr, #m_hang_0
jmp tim_phim ; qua trình tìm phím
hang_1: ; tìm ra một trong 4 phím hàng 1
mov dptr, #m_hang_1
jmp tim_phim ; qua trình tìm phím
hang_2: ; tìm ra một trong 4 phím hàng 2
mov dptr, #m_hang_2
jmp tim_phim ; qua trình tìm phím
hang_3: ; tìm ra một trong 4 phím hàng 3
mov dptr, #m_hang_3
jmp tim_phim ; qua trình tìm phím
;
tim_phim: ; đặt tên nhãn cho trình tìm phím
rrc a ; cho 8 bit trong a quay vòng có qua bit cờ C
jnc out ; kiểm tra bit 0 vào bit cờ C để nhẩy
inc dptr ; cho tăng trị trong bảng lên một nhịp
jmp tim_phim ; quay lại tên nhãn tim_phim
out: ; đặt tên nhãn
clr a ; xóa sạch trị trong thanh a
movc a, @a+dptr ; lấy mã trong bảng theo a và cất vào a
mov p3, a ; chuyển kết quả ra cảng p3
jmp k1 ; nhẩy về k1
m_hang_0: ; đặt tên bảng
db 01h, 02h, 03h, 04h ; mã trong bảng hàng 0
m_hang_1: ; đặt tên bảng
db 05h, 06h, 07h, 08h ; mã trong bảng hàng 1
m_hang_2: ; đặt tên bảng
db 09h, 0ah, 0bh, 0ch ; mã trong bảng hàng 2
m_hang_3: ; đặt tên bảng
db 0dh, 0eh, 0fh, 00h ; mã trong bảng hàng 3
;
delay: ; trình làm trể
mov r5, #100 ; đặt trị 100 vào thanh ghi r5
v_r6: ; đặt tên nhãn cho lệnh nhẩy
mov r6, #100 ; đặt trị 100 vào thanh ghi r6
djnz r6, $ ; giảm theo bước -1 trị trong r6 cho đến khi bằng 0
djnz r5, v_r6 ; giảm trị trong r5 theo bước -1, r5=0?, chọn hướng nhẩy
ret ; quay lại sau lệnh call delay
end ; dừng biên dịch tại dòng này
Nhắn Bạn:
Mã xuất theo phím nhấn đặt trong các bảng: m_hang_0, m_hang_1,
m_hang_2 và m_hang_3. Vậy nếu Bạn muốn dùng các mã để điều
khiển các thiết bị theo bảng 16 phím nhấn này, thì các mã
điều khiển do Bạn tạo ra hãy cho cất trong các bảng theo đúng
vị trí. Vậy, khi Bạn nhấn phím 0 sẽ có mã 0 xuất ra trên cảng
p3, nhấn phím 1 sẽ có mã 1 xuất ra trên cảng p3, nhấn phím 2
sẽ có mã 2 xuất ra trên cảng p3....Bạn sẽ có 16 mã điều khiển
ứng với 16 phím nhấn.
Nếu Bạn dùng ma trận 8 chân trên cảng p1 làm 8 hàng và dùng 8 chân trên cảng p2 làm 8 cột.
Bạn sẽ có ma trận 8x8, trên ma trận này Bạn có thể gắn đến
64 phím nhấn và như vậy Bạn có thể có đến 64 mã lệnh dùng
để điều khiển các thiết bị. Phải không?
Mở rộng: Nhập tín hiệu vào ic lập trình lấy từ các bộ cảm biến
Chúng ta
biết trong thiên nhiên có rất nhiều "thực thể" không thuộc
điện, vậy nếu muốn đưa các "thực thể" này vào các ic lập
trình, chúng ta phải dùng đến các sensor, quen gọi là các cảm biến.
Phần tiếp theo chúng ta sẽ tìm hiểu một vài cảm biến thường
dùng, dễ tìm, trong việc biến đổi các đại lượng không thuộc
điện ra điện và tìm cách chuyển các đại lượng này vào ic lập
trình để được xử lý.