Trung tâm đào tạo thiết kế vi mạch Semicon


  • ĐĂNG KÝ TÀI KHOẢN ĐỂ TRUY CẬP NHIỀU TÀI LIỆU HƠN!
  • Create an account
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
semicon_lab.jpg

ĐIỆN TỬ ĐIỀU KHIỂN - Viết chương trình nguồn theo yêu cầu trên:

E-mail Print PDF
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ẽ.


Image has been scaled down 1% (900x674). Click this bar to view original image (905x677). Click image to open in new window.





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ý.



 

Related Articles

Chat Zalo