I. Mục đích yêu cầu:hiểu cách sử dụng lệnh xoay kết hợp với
lệnh logic để thực hiện chương trình điều khiển led sáng dồn.
II. Trình tự thực hiện:
1. Giải thuật:
2. Kết nối mạch theo trình tự :
- Dùng bus dây kết nối port 0 với một trong bốn PINHD
của dãy 32 led.
Begin
Tắt 8 led
Mức 1 dịch chuyển từ
led 1đến led 8
End
Mức 1 dịch chuyển từ
led 1đến led 7
Mức 1 dịch chuyển từ
led 1đến led 2
Mức 1 dịch chuyển về
led 1
- Gắn vi điều khiển vào đế nạp 40 pin ( socket ) ở modul
nạp của hệ thống 2.
7 trang |
Chia sẻ: maiphuongtt | Lượt xem: 2967 | Lượt tải: 2
Bạn đang xem nội dung tài liệu Chương trình điều khiển 8 led sáng dồn, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Chương 1: CHƯƠNG TRÌNH ĐIỀU
KHIỂN 8 LED SÁNG DỒN
I. Mục đích yêu cầu: hiểu cách sử dụng lệnh xoay kết hợp với
lệnh logic để thực hiện chương trình điều khiển led sáng dồn.
II. Trình tự thực hiện:
1. Giải thuật:
2. Kết nối mạch theo trình tự :
- Dùng bus dây kết nối port 0 với một trong bốn PINHD
của dãy 32 led.
Begin
Tắt 8 led
Mức 1 dịch chuyển từ
led 1đến led 8
End
Mức 1 dịch chuyển từ
led 1đến led 7
Mức 1 dịch chuyển từ
led 1đến led 2
Mức 1 dịch chuyển về
led 1
- Gắn vi điều khiển vào đế nạp 40 pin ( socket ) ở modul
nạp của hệ thống 2.
3. Khởi động phần mềm, mở File mới và đặt tên file. Vd:
bai1_4
4. Viết chương trình với tên file vừa đặt :
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
;chuong trinh dieu khien port 0 sang don va tat het - cach I
;su dung bo thi nghiem PE-1,ket noi port 0 den 8 led bang cap 8 soi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
org 0200h ;khai bao dia chi luu tru vung du lieu
ma: db 00000000b ;byte du lieu nay luu vao o nho
co dia chi 0200H
;lan thu nhat la 8 byte
db 00000001b ;byte du lieu nay luu vao o nho
co dchi 0201H
db 00000010b ;tuong tu cho cac byte du lieu
con lai
db 00000100b
db 00001000b
db 00010000b
db 00100000b
db 01000000b
db 10000000b
;lan thu hai la 7 byte
db 10000001b
db 10000010b
db 10000100b
db 10001000b
db 10010000b
db 10100000b
db 11000000b
;lan thu 3 la 6 byte
db 11000001b
db 11000010b
db 11000100b
db 11001000b
db 11010000b
db 11100000b
;lan thu 4 la 5 byte
db 11100001b
db 11100010b
db 11100100b
db 11101000b
db 11110000b
;lan thu 5 la 4 byte
db 11110001b
db 11110010b
db 11110100b
db 11111000b
;lan thu 6 la 3 byte
db 11111001b
db 11111010b
db 11111100b
;lan thu 7 la 2 byte
db 11111101b
db 11111110b
;lan thu 8 la 1 byte
db 11111111b ;byte du lieu cuoi cung = FFH
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
org 0000h ;khai bao dia chi chtr chinh
port0_44: mov dptr,#0200h ;nap dia chi luu du lieu vao thghi
dptr
port0_4a: movc a,@a+dptr;lay du lieu tu bo nho dua vao A
mov p0,a ;goi ra port 0
lcall delay ;goi chtr con delay
inc dptr ;tang dptr len o nho ke
cjne a,#0ffh,port0_4a ;ktra co phai la byte ket thuc hay
chua
sjmp port0_44 ;quay tro lam lai tu dau khi da het
du lieu
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
delay: mov r6,#0ffh
de2 : mov r7,#0ffh
de1 : djnz r7,de1
djnz r6,de2
ret
end
5. Thực hiện các bước từ 5 đến 9 giống như các bài trước.
Theo cách viết 1 ta hãy quan sát dữ liệu trong chương trình đã
được sắp xếp theo đúng trình tự và chương trình chỉ thực hiện
nhiệm vụ là di chuyển lần lược các byte dữ liệu có trong bộ nhớ
đem gởi vào A và sau đó gởi ra port 0.
Lệnh “ma: db dữ liệu “ có chức năng nạp các byte dữ liệu
vào vùng nhớ có địa chỉ 0200H.
Dữ liệu viết dưới dạng số nhị phân cho dễ nhìn thấy và có thể
viết dưới dạng số hex – khi đó chương trình sẽ ngắn hơn rất nhiều.
Phần khai báo dữ liệu dưới dạng số hex như sau:
org 0200h ;khai bao dia chi luu tru vung du lieu
ma: db 00H
DB 01H,02H,04H,08H,10H,20H,40H,80H
DB 81H,82H,84H,88H,90H,0A0H,0C0H
DB 0C1H,0C2H,0C4H,0C8H,0D0H,0E0H
DB 0E1H,0E2H,0E4H,0E8H,0F0H
DB 0F1H,0F2H,0F4H,0F8H
DB 0F9H,0FAH,0FCH
DB 0FDH,0FEH
DB 0FFH
Chương trình giống như trên nhưng viết theo cách II:
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
;chuong trinh dieu khien port 0 sang don va tat het - cach II
;ket noi port 0 den 8 led bang cap 8 soi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
org 0000h
port0_05: mov r2,#00h ;luu trng thai ban dau
mov r4,#08 ;goi bien dem so lan dich chuyen
cua led
port0_05a: mov r5, 04h ;tuong duong 'mov r5,r4'
mov r3,#00h ;nap 00 vao r3
mov a,r3 ;chuyen r3 sang a
orl a,r2 ;or voi noi dung chinh luu trong
r2
mov p0,a ;goi ra port 0 de hien thi
lcall delay ;goi chuong trinh con delay
setb c ;lam cho bit C = 1
port0_05b:mov a,r3
rlc a ;xoay noi dung thanh ghi A sang trai
mov r3,a ;cat lai vao r3 de luu cho lan xu li ke
orl a,r2 ;lay ket qua do or voi r2 roi goi
ra p0
mov p0,a
lcall delay
clr c ;xoa Cy de chi dich 1 led di
djnz r5,port0_05b ;giam r5 neu chua bang 0 thi
quay ve lai
mov r2,a ;cat noi dung sau cung khi da dich
chuyen 1 led
djnz r4,port0_05a ;giam bien dem de xu li lan ke
sjmp port0_05 ;nhay ve lam lai tu dau
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
delay: mov r6,#0ffh
de2 : mov r7,#0ffh
de1 : djnz r7,de1
djnz r6,de2
ret
end
Chương trình khá phức tạp, khó hiểu bạn hãy tự nghiên cứu
thử xem sao?