vi dieu khien atmega
DESCRIPTION
Vi Dieu Khien atmegaTRANSCRIPT
BÀI SỐ 1-4: 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.
- 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 :
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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
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:
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh dieu khien port 0 sang don va tat het - cach II
;ket noi port 0 den 8 led bang cap 8 soi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
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?
III. Bài tập ứng dụng:
1. Hãy viết chương trình điều khiển 8 led của port 0 sáng dồn theo chiều
ngược lại.
2. Hãy viết chương trình điều khiển 16 led của 2 port: port0 và port1 sáng
dồn. [xem chương trình đã viết bên dưới và thực hiện các chương trình
còn lại.
3. Hãy viết chương trình điều khiển 3 port: port0, port1, port2 sáng dồn.
4. Hãy viết chương trình điều khiển 4 port: port0, port1, port2 và port3 sáng
dồn.
5. Hãy viết chương trình sáng dồn 2 port 0 và 1 từ ngoài vào trong và từ
trong ra ngoài.
6. Hãy viết chương trình sáng dồn 4 port 0, 1, 2 và 3 từ ngoài vào trong và từ
trong ra ngoài.
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh dieu khien port 0, port 1 sang don va tat het
;ket noi port 0 va port 1 den 16 led bang 2 soi cap 8 soi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
org 0000h
port01_6: mov r4,#00h ;luu trng thai ban dau
mov r6,#00h
mov p0,#00h ;luu trng thai ban dau
mov p1,#00h
lcall delay ;goi chuong trinh con delay
mov 10h,#16 ;goi bien dem so lan dich chuyen
cua led
port01_6a: mov 11h,10h ;chuyen bien dem tung led
mov r5,#00h ;nap 00 vao r5
mov r7,#00h ;nap 00 vao r7
setb c ;lam cho bit C = 1
port01_6b:
mov a,r7
rrc a ;xoay noi dung thanh ghi A sang trai
mov r7,a ;cat lai vao r7 de luu cho lan xu li ke
orl a,r4 ;lay ket qua do or voi r4 roi goi ra p1
mov p1,a
mov a,r5
rrc a ;xoay noi dung thanh ghi A sang trai
mov r5,a ;cat lai vao r5 de luu cho lan xu li ke
orl a,r6 ;lay ket qua do or voi r5 roi goi ra p0
mov p0,a
lcall delay
clr c ;xoa Cy de chi dich 1 led di
djnz 11h,port01_6b ;giam ndung o nho (11h)<> 0 thi quay lai
mov r4,p1
mov r6,p0
djnz 10h,port01_6a ;giam bien dem de xu li lan ke
ljmp port01_6
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
delay: mov 7eh,#040h
del: mov 7fh,#0ffh
djnz 7fh,$
djnz 7eh,del
ret
end
BÀI SỐ 1-5: CHƯƠNG TRÌNH ĐIỀU KHIỂN LED SÁNG BẰNG CÁCH TỔ HỢP
CÁC BÀI ĐÃ VIẾT
I. Mục đích yêu cầu: biết cách kết hợp các bài đã viết để điều khiển các led sáng đa
dạng hơn. Biết cách sử dụng lệnh gọi chương trình con và viết chương trình con.
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.
- 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_5
4. Viết chương trình với tên file vừa đặt :
;chuong trinh tong hop cac chuong trinh da viet dieu khien port 0
;cac chuong trinh bao gom:
;chop tat 5 lan
;sang dan tu tren xuong va tat het 3 lan
;sang dan tu duoi len va tat het 3 lan
;sang dan va tat dan tu tren xuong 3 lan
;sang dan va tat dan tu duoi len 3 lan
;sang don tu tren xuong 3 lan
;sang don tu duoi len 3 lan
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh chinh
Begin
Sáng tắt 8 led
Đếm nhị phân ở 8 led
8 led sáng dần lên và tắt dần
8 led sáng dồn
End
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
org 0000h
main: lcall choptat
lcall sangdantx ;chtr sang dan tren xuong
lcall choptat
lcall sangdandl ;chtr sang dan duoi len
lcall choptat
lcall stdtx ;sang tat dan tren xuong
lcall choptat
lcall stddl ;sang tat dan duoi len
lcall choptat
lcall sangdontx ;sang don tren xuong
lcall choptat
lcall sangdondl
lcall choptat
lcall sangdontx ;sang don tren xuong
lcall shtdtx
lcall choptat
lcall sangdondl
lcall shtddl
sjmp main
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh chop tat port 0: 5 lan
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
choptat: mov r7,#5 ;5 lan
loop1: mov p0,#0
lcall delay
mov p0,#0ffh
lcall delay
djnz r7,loop1
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh sang dan port0 tu tren xuong: 3 lan
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
sangdantx: mov r7,#3 ;3 lan
loop2: mov a,#0
loop3: mov p0,a
lcall delay
setb c
rlc a
jnc loop3
djnz r7,loop2
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh sang dan port0 tu duoi len: 3 lan
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
sangdandl: mov r7,#3 ;3 lan
loop5: mov a,#0
loop4: mov p0,a
lcall delay
setb c
rrc a
jnc loop4
djnz r7,loop5
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh sang tat dan port0 tu tren xuong: 3 lan
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
stdtx: mov r7,#3 ;3 lan
loop6: mov a,#0
loop7: mov p0,a
lcall delay
setb c
rlc a
jnc loop7
loop8: clr c
rlc a
mov p0,a
lcall delay
jnc loop8
djnz r7,loop6
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh sang tat dan port0 tu duoi len: 3 lan
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
stddl: mov r7,#3 ;3 lan
loop9: mov a,#0
loop10: mov p0,a
lcall delay
setb c
rrc a
jnc loop10
loop11: clr c
rlc a
mov p0,a
lcall delay
jnc loop11
djnz r7,loop9
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh dieu khien port 0 sang don va tat het tu tren xuong
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
sangdontx: mov r7,#3 ;bien dem 3 chu ky
loop12: mov r2,#00h
mov r4,#08
loop13: mov r5, 04h
mov r3,#00h
mov a,r3
orl a,r2
mov p0,a
lcall delay
setb c
loop14: mov a,r3
rrc a
mov r3,a
orl a,r2
mov p0,a
lcall delay
clr c
djnz r5,loop14
mov r2,a
djnz r4,loop13
djnz r7,loop12
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh dieu khien port 0 sang don va tat het tu tren xuong
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
sangdondl: mov r7,#3 ;bien dem 3 chu ky
loop15: mov r2,#00h
mov r4,#08
loop16: mov r5, 04h
mov r3,#00h
mov a,r3
orl a,r2
mov p0,a
lcall delay
setb c
loop17: mov a,r3
rlc a
mov r3,a
orl a,r2
mov p0,a
lcall delay
clr c
djnz r5,loop17
mov r2,a
djnz r4,loop16
djnz r7,loop15
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh dieu khien port 0 sang het va tat dan tu phai sang trai
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
shtdtx: mov r7,#3 ;so lan thuc hien la 3
loop20: mov p1,#0ffh
lcall delay
mov r0,#10000000b ;diem xuat phat
mov r3,#11111111b ;luu tru trang thai ban dau
mov 12h,#8 ;bien dem so led dich chuyen
mov 10h,#1 ;bien dem so lan dich chuyen cua 1 led
loop22: mov 11h,10h ;luu tru so lan thuc hien
mov 20h,r0 ;chuyen r0 sang o nho 20h
loop21: lcall xnguoc09 ;xoay noi dung trong r1 sang phai ket qua luu trong
0 20h
mov a,r0
cpl a ;nghich dao a
anl a,r3
orl a,20h
mov p0,a ;hien thi o p0
lcall delay
djnz 11h,loop21
lcall xthuan09
inc 10h
djnz 12h,loop22 ;quay lai xu li led ke
djnz r7,loop20
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;cac chuong trinh con
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
xthuan09: mov a,r0
rr a
mov r0,a
clr c
mov a,r3
rrc a
mov r3,a
ret
xnguoc09: mov a,20h
clr c
rlc a
mov 20h,a
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh dieu khien port 0 sang het va tat dan tu phai sang trai
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
shtddl: mov r7,#3 ;so lan thuc hien la 3
loop30: mov p1,#0ffh
lcall delay
mov r0,#00000001b ;diem xuat phat
mov r3,#11111111b ;luu tru trang thai ban dau
mov 12h,#8 ;bien dem so led dich chuyen
mov 10h,#1 ;bien dem so lan dich chuyen cua 1 led
loop32: mov 11h,10h ;luu tru so lan thuc hien
mov 20h,r0 ;chuyen r0 sang o nho 20h
loop31: lcall xnguoc10 ;xoay noi dung trong r1 sang phai ket qua luu trong
0 20h
mov a,r0
cpl a ;nghich dao a
anl a,r3
orl a,20h
mov p0,a ;hien thi o p0
lcall delay
djnz 11h,loop31
lcall xthuan10
inc 10h
djnz 12h,loop32 ;quay lai xu li led ke
djnz r7,loop30
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;cac chuong trinh con
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
xthuan10: mov a,r0
rl a
mov r0,a
clr c
mov a,r3
rlc a
mov r3,a
ret
xnguoc10: mov a,20h
clr c
rrc a
mov 20h,a
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx
delay: mov 7fh,#50h
de: mov 7eh,#0
djnz 7eh,$
djnz 7fh,de
ret
end
5. Quan sát kết quả xem có đúng với yêu cầu hay không và hiệu chỉnh lại nếu
sai.
III. Bài tập ứng dụng:
1. Hãy cho biết chương trình nào là chương trình chính và có bao nhiêu chương
trình con?
2. Tất cả các chương trình đều thực hiện 10 lần thì phải thực hiện như thế nào?
3. Hãy viết chương trình giống như vậy nhưng lần lược cho 2 port, 3 port và 4
port theo 1 chiều từ trên xuống, từ dưới lên và từ ngoài vào trong và từ trong
ra ngoài.
BÀI SỐ 1-6: CHƯƠNG TRÌNH DELAY SỬ DỤNG TIMER
I. Mục đích yêu cầu: biết cách tính toán các thông số delay của timer để viết các
chương trình delay chính xác.
II. Trình tự thực hiện:
1. Kết nối mạch theo trình tự :
- Dùng bus dây kết nối port 1 với một trong bốn PINHD của dãy 32 led.
- Gắn vi điều khiển vào đế nạp 40 pin ( socket ) ở modul nạp của hệ thống 2
.
2. Khởi động phần mềm, mở File mới và đặt tên file. Vd: bai1_6
3. Viết chương trình với tên file vừa đặt :
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; chuong trinh sang tat port1 su dung timer lam bo dinh thoi delay 65536 micro giay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h
b61: mov p1,#00h
lcall delay ; delay 65536 micro giay
mov p1,#0ffh
lcall delay
sjmp b61
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxx
; chuong trinh con delay 65535 micro giay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxx
delay: clr tf0 ; xoa co ngat cua timer 0
mov tl0,#0 ; nap 0 vao TL0
mov th0,#0 ; nap 0 vao TH0
mov tmod,#01 ; khoi tao timer T0 mode 1 dem 16 bit
setb tr0 ; cho phep timer 0 bat dau dem xung
del1 : jnb tf0,del1 ; kiem tra co tran
ret
end
Giải thích : bài sáng tắt port1 trên giống như bài đã làm trước đây chỉ khác là thay
chương trình delay bằng một chương trình sử dụng timer để việc tính toán thời gian dễ
dàng hơn.
Với chương trình trên thì timer T0 sẽ đếm từ gía trị nạp ban đầu 0000H đến
100000H [tức cờ tràn bằng 1 – các số về 0000H -> kết thúc 1 chu kỳ đếm] kết quả số
xung đếm được là 10000H –0000H = 10000 (65536) xung và mỗi xung có chu kì 1 micro
giây nên lưựng thời gian mà timer T0 đếm được là 65536 micro giây.
4. Thực hiện các bước giống như trên và xem kết quả.
III. Bài tập ứng dụng:
1. Hãy viết chương trình sáng tắt port 2 sử dụng timer làm bộ định thời delay 5
giây.
2. Hãy viết chương trình giống trên nhưng delay 10 giây.
3. Tương tự hãy viết chương trình delay 1 giờ.
IV. Bài tập mẫu:
Để đếm lượng thời gian nhỏ hơn ta hãy tham khảo bài mẫu dưới đây:
; chuong trinh sang tat port1 su dung timer lam bo dinh thoi delay 250 micro giay
org 0000h
b62: mov p1,#00h
lcall delay ; delay 65535 micro giay
mov p1,#0ffh
lcall delay
sjmp b62
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxx
; chuong trinh con delay 250 micro giay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxx
delay: clr tf0 ; xoa co ngat cua timer 0
mov tl0,#06h ; nap 05 vao TL0
mov th0,#0FFh ; nap FF vao TH0
mov tmod,#01 ; khoi tao timer T0 mode 1 dem 16 bit
setb tr0 ; cho phep timer 0 bat dau dem xung
del1 : jnb tf0,del1
ret
end
Giải thích : lượng thời gian của bài này chỉ có 250 micro giây, vì giá trị ban đầu
nạp cho timer là FF05H nên khi đếm đến 10000H kết quả xung đếm được 10000H –
FF06H = 00FA (250) và mỗi xung có chu kỳ 1 micro giây nên lượng thời gian mà timer
T0 đếm đượclà 250 micro giây.
Chú ý: với các chương trình điều khiển led sáng với thời gian trể nhỏ thì led sáng
mờ nhưng không chóp tắt như các bài ta đã viết ở trên. Trong phần tính toán chúng ta
chưa tính toán các lệnh trong chương trình con delay.
Muốn viết chương trình với các khoảng thời gian lớn hơn thì phải thêm thanh ghi
ví dụ muốn viết delay 5 giây thì ta viết chương trình trình con delay 50 000 µs = 50ms
và cho chúng thực hiện 100 lần.
CH ƯƠNG 2: ĐIỀU KHIỂN LED 7 ĐọAN
BÀI SỐ 2-1: CÁC CHƯƠNG TRÌNH ĐIỀU KHIỂN LED 7 ĐOẠN SÁNG
I. Mục đích yêu cầu: biết được cách tìm mã điều khiển led 7 đoạn , biết nguyên lý điều
khiển led theo phương pháp quét và cách viết chương trình điều khiển led 7 đoạn. Sinh
viên phải hiểu rằng 1 yêu cầu điều khiển có thể thực hiện bằng nhiều chương trình khác
nhau.
II. Trình tự thực hiện:
1. Giải thuật:Begin
Gôûi maõ hieån thò ra led 1Gôûi maõ queùt choïn led 1 saùng
End
Gôûi maõ hieån thò ra led 2Gôûi maõ queùt choïn led 2 saùng
Gôûi maõ hieån thò ra led 8Gôûi maõ queùt choïn led 8 saùng
2. Kết nối mạch theo trình tự :
- Dùng bus dây kết nối port 0 đến pinhd điều khiển các đoạn a,b,c,d,e,f,g,dp
và kết nối port 2 đến pinhd điều khiển quét hàng .
- 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: bai2_1
4. Viết chương trình với tên file vừa đặt :
Ví dụ 1:
; chuong trinh thu led D1 sang so 9
org 0000h
mov p2,#11111110b ; cho phep D1 sang
mov p0,#10010000b ; ma cua so 9
sjmp $
end
Chương trình trên chỉ có tác dụng thử cho một led sáng. Để có thể sáng 8 led từ số
0 đến số 7 ta hãy viết chương trình sau:
Ví dụ 2:
; chuong trinh thu 8 led sang tu so 0 den so 7
org 0000h
b11: mov p2,#11111110b ; cho phep D1 sang
mov p0,#11000000b ; ma cua so 0
lcall delay
mov p2,#11111101b ; cho phep D2 sang
mov p0,#11111001b ; ma cua so 1
lcall delay
mov p2,#11111011b ; cho phep D3 sang
mov p0,#10100100b ; ma cua so 2
lcall delay
mov p2,#11110111b ; cho phep D4 sang
mov p0,#10110000b ; ma cua so 3
lcall delay
mov p2,#11101111b ; cho phep D5 sang
mov p0,#10011001b ; ma cua so 4
lcall delay
mov p2,#11011111b ; cho phep D6 sang
mov p0,#10010010b ; ma cua so 5
lcall delay
mov p2,#10111111b ; cho phep D7 sang
mov p0,#10000010b ; ma cua so 6
lcall delay
mov p2,#01111111b ; cho phep D8 sang
mov p0,#11111000b ; ma cua so 7
lcall delay
sjmp b11
delay: mov r5,#1
del3: mov r7,#01h
del2 : mov r6,#0ffh
del1 : djnz r6,del1
djnz r7,del2
djnz r5,del3
ret
5. Thực hiện các bước giống như bài chuẩn.
Chú ý: Nếu khi chạy mà kết quả hiển thị không đúng thì hãy xem lại chương trình, nếu
chương trình hoàn toàn đúng thì hãy xem kết nối 2 port điều khiển với led có đúng [ trên
bo mạch có ghi tên và thứ tự các pinhhd.
III. Bài tập ứng dụng:
1. Ở ví dụ 1, muốn sáng số 2 ở led D3 thì phải thay đổi gì trong chương trình?
2. Trong trường hợp nào thì nhiều led sáng cùng một lúc và cùng một dữ liệu?
3. Ở ví dụ 2, hãy cho biết led sáng như thế nào:
a. Từng led sáng các led còn lại tắt.
b. Tất cả các led sáng .
4. Hãy thử trên máy, khi thay đổi thời gian delay:
a. Muốn thời gian delay lớn nhất thì thông số đó là bao nhiêu?
b. Muốn thời gian delay nhỏ nhất thì thông số đó là bao nhiêu?
c. Trong từng trường hợp hãy cho biết cường độ sáng của led có thay đổi
hay không và cho biết trong trường hợp nào thì led sáng rõ?
d. Hãy tìm thông số cho chương trình delay là bao nhiêu để 8 led sáng
đều và rõ nhất.
IV. Bài tập mẫu:
Ở ví dụ 2, để sáng cùng 1 lúc 8 led ta sử dụng phương pháp quét led tức là tại một
thời điểm chỉ có 1 led sáng và khi giảm thời gian delay vừa với thời gian lưu ảnh của mắt.
Lúc này, chúng ta sẽ thấy 8 led sáng cùng một lúc. Bài tập mẫu sau giống ví dụ 2 nhưng
được viết theo kiểu khác:
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh thu 8 led sang tu so 0 den so 7 nhung duoc viet theo kieu khac
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h ;bat dau chuong trinh
mov dph,#0500h
b213: mov r4,#08h ;bien dem 8 lan goi
mov r2,#00h ;quan ly addr byte thap
mov r3,#20h
b212: mov a,r2 ;dptr luu dia chi vung nho ma 7 doan
movc a,@a+dptr ;lay ma 7 doan
mov p0,a
mov a,r3 ;dptr luu dia chi vung nho ma quet
movc a,@a+dptr ;lay ma quet
mov p2,a
lcall delay
mov p2,#0ffh ;tat het de chong lem
inc r2
inc r3
djnz r4,b212
sjmp b213 ;quay lai lam lai tu dau
delay: mov r5,#1
del3 : mov r7,#01h
del2 : mov r6,#0ffh
del1 : djnz r6,del1
djnz r7,del2
djnz r5,del3
ret
org 500h
ma7d: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h
org 520h
maquet:db 0feh,0fdh,0fbh,0f7h,0efh,0dfh,0bfh,07fh
end
BÀI SỐ 2-2: CHƯƠNG TRÌNH ĐẾM TỪ 00 ĐẾN 60 HIỂN THỊ TRÊN 2 LED
I. Mục đích yêu cầu: làm quen với cách viết chương trình đếm và sau khi thực hành
xong sinh viên có thể viết các chương trình đếm với số đếm tùy ý.
II. Trình tự thực hiện:
1. Giải thuật:
Giaûi maõ BCD cuûa giaây sang 7 ñoaïn
Delay vaø hieån thò
Ñ
S
Khôûi taïo giaây =00
Giaây = 60
Taêng giaây leân 1 ñôn vò
end
Begin
2. Kết nối mạch theo trình tự :
- Dùng bus dây kết nối port 0 đến pinhd điều khiển các đoạn a,b,c,d,e,f,g,dp
và kết nối port 2 đến pinhd điều khiển quét hàng.
- 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.
4. Viết chương trình với tên file vừa đặt:
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh dem len tu 00 den 60 hien thi tren 2 led cua 8 led quet
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
giay equ r2 ;gan bien dem giay la R2
org 200h ;dia chi khai bao ma 7 doan tu so '0' den so '9'
ma7doan: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
org 0000h ;bat dau chuong trinh
mov tmod,#01h ;timer0: mod 1 - dem 16 bit
mov dptr,#0200h ;dptr quan ly vung ma 7 doan
main: mov giay,#00h ;giay=00
main1: lcall gma
lcall delay_hthi ;goi chtr con delay co hien thi
mov a,giay ;chuyen giay sang A
add a,#1 ;tang giay len 1
da a ;hieu chinh so BCD trong A
mov giay,a ;tra lai cho giay
cjne giay,#60h,main1 ;ss giay voi 60
sjmp main ;lam lai tu dau
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
; chuong trinh con giai ma
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
gma: mov a,giay
anl a,#0fh ;xoa 4 bit cao hang chuc giay
movc a,@a+dptr ;lay ma 7 doan
mov 27h,a ;cat ma vao o nho 20h
mov a,giay
anl a,#0f0h ;xoa 4 bit thap hang dvi
swap a ;chuyen 4 bit cao xuong vi tri thap
movc a,@a+dptr ;lay ma 7 doan hang chuc
mov 26h,a
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh delay co goi chuong trinh hien thi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
delay_hthi: mov 7fh,#10h
del2: clr tr0
mov th0,#00
mov tl0,#00
setb tr0
clr tf0
del1: lcall hthi
jnb tf0,del1
djnz 7fh,del2
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh con hien thi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
hthi: mov a,#01111111b ;ma quet
mov r0,#27h
ht1: mov p0,@r0
mov p2,a
lcall delay1
mov p2,#0ffh
dec r0
rr a ;chuyen sang led ke
cjne r0,#25h,ht1
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay1
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
delay1: mov r7,#0fh
del11: djnz r7,del11
ret
end
5. Thực hiện các bước giống như các bài chuẩn cho đến khi mạch
đếm đúng từ 00 đến 59.
III. Câu hỏi và bài tập ứng dụng:
1. Tại sao phải chèn chương trình con hiển thị vào chương trình con delay? Hãy
thử bỏ lệnh gọi chương trình con hiển thị trong chương trình con delay và cho
nó vào chương trình chính sau lệnh gọi chương trình con delay rồi cho biết kết
quả như thế nào?
2. Hãy viết chương trình đếm lên từ 00 đến 99 thì làm như thế nào?
3. Hãy viết chương trình đếm xuống từ 60 về 00 thì làm như thế nào?
BÀI SỐ 2-3: CHƯƠNG TRÌNH ĐẾM GIÂY HIỂN THỊ Ở 2 LED – SỬ DỤNG
NGẮT CỦA TIMER ĐỂ ĐẾM CHÍNH XÁC VỀ THỜI GIAN.
I. Mục đích yêu cầu: biết cách kết hợp timer và chương trình đếm để viết chương trình
đếm giây một cách chính xác.
II. Trình tự thực hiện:
1. Giải thuật:
Tương tự giải thuật của bài 2
2. Kết nối mạch theo trình tự :
- Dùng bus dây kết nối port 0 đến pinhd điều khiển các đoạn a,b,c,d,e,f,g,dp
và kết nối port 2 đến pinhd điều khiển quét hàng .
- 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.
4. Viết chương trình với tên file vừa đặt :
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh dem giay hien thi tren 2 led cua 8 led quet
;su dung ngat timer t0 de dem chinh xac ve thoi gian
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
giay equ r2 ;gan bien dem giay la R2
bdn equ r1 ;gan bien dem ngat
org 200h ;dia chi khai bao ma 7 doan tu so '0' den so '9'
ma7doan: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
org 0000h ;bat dau chuong trinh
ljmp main ;nhay den chtr chinh
org 000bh
ljmp int_t0 ;nhay den chtr con ngat timer0
main: mov tmod,#01h ;timer0: mod 1 - dem 16 bit
mov dptr,#0200h ;dptr quan ly vung ma 7 doan
clr tf0 ;xoa co tran timer0
mov ie,#10000010b ;cho ngat timer0
mov th0,#3ch ;khoi tao timer delay 50ms
mov tl0,#0b0h
setb tr0 ;cho timer0 bat dau dem
main0: mov giay,#00h ;giay=00
main1: mov bdn,#00 ;nap bien den so lan ngat
lcall gma
main2: lcall hthi ;goi chtr con hien thi
cjne bdn,#20,main2 ;chua dung 20 lan [tuc 1 giay]
mov a,giay ;chuyen giay sang A
add a,#1 ;tang giay len 1
da a ;hieu chinh so BCD trong A
mov giay,a ;tra lai cho giay
cjne giay,#60h,main1 ;ss giay voi 60
sjmp main0 ;lam lai tu dau
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
; chuong trinh con giai ma
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
gma: mov a,giay
anl a,#0fh ;xoa 4 bit cao hang chuc giay
movc a,@a+dptr ;lay ma 7 doan
mov 27h,a ;cat ma vao o nho 20h
mov a,giay
anl a,#0f0h ;xoa 4 bit thap hang dvi
swap a ;chuyen 4 bit cao xuong vi tri thap
movc a,@a+dptr ;lay ma 7 doan hang chuc
mov 26h,a
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh delay co goi chuong trinh hien thi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh con ngat timer0 sau khoang thoi gian 50ms
int_t0: inc bdn ;tang bien dem giay
mov th0,#3ch ;khoi tao lai timer
mov tl0,#0b5h
clr tf0
reti
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh con hien thi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
hthi: mov a,#01111111b ;ma quet
mov r0,#27h
ht1: mov p0,@r0
mov p2,a
lcall delay1
mov p2,#0ffh
dec r0
rr a ;chuyen sang led ke
cjne r0,#25h,ht1
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh con delay1
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
delay1:mov r7,#0fh
del11: djnz r7,del11
ret
end
1. Thực hiện các bước giống như bài chuẩn và xem mạch đếm giây đếm chính
xác hay không.
Chú ý: để đếm đúng thì tụ thạch anh phải sử dụng là 12Mhz để dễ tính toán chính xác.
III. Bài tập ứng dụng:
1. Muốn đếm BCD từ 01 đến 65 thì chương trình trên thay đổi như thế nào?
2. Muốn đếm BCD từ 13 đến 65 thì chương trình trên thay đổi như thế nào?
3. Muốn đếm BCD từ 00 đến FF thì chương trình trên thay đổi như thế nào?
BÀI SỐ 2-4: CHƯƠNG TRÌNH ĐẾM PHÚT - GIÂY HIỂN THỊ Ở 4 LED
I. Mục đích yêu cầu: biết cách viết chương trình đếm phút giây, cách kiểm tra chương
trình đếm.
II. Trình tự thực hiện:
1. Giải thuật:
Begin
Khôûi taïo vuøng nhôù löu tröõ bieán ñeám haøng chuïc, ñôn vò cuûa phuùt, giaây = 00
Khôûi taïo vuøng nhôù löu tröõ maõ 7 ñoaïn töø 0 ñeán 9
Giaûi maõ haøng chuïc, ñon vò cuûa phuùt giaây (töø maõ nhò phaân sang maõ 7 ñoaïn)
End
Delay vaø hieån thò ñuùng 1s
Taêng bieán ñeám haøng chuïc,ñôn vò giaây-so saùnh vôùi 60
Ñ
S
Taêng bieán ñeám haøng chuïc,ñôn vò phuùt-so saùnh vôùi 60
S
Ñ
2. Kết nối mạch theo trình tự :
- Dùng bus dây kết nối port 0 đến pinhd điều khiển các đoạn a,b,c,d,e,f,g,dp
và kết nối port 2 đến pinhd điều khiển quét hàng .
- Gắn vi điều khiển vào đế nạp 40 pin ( socket ) ở modul nạp chương trình ở
hệ thống 2 .
3. Khởi động phần mềm, mở File mới và đặt tên file.
4. Viết chương trình với tên file vừa đặt :
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh dem phut giay
;su dung ngat timer t0 de dem chinh xac ve thoi gian
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
giay equ r2 ;gan bien dem giay la R2
phut equ r3 ;gan bien dem phut cho R3
bdn equ r1 ;gan bien dem ngat
org 200h ;dia chi khai bao ma 7 doan tu so '0' den so '9'
ma7doan: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
org 0000h ;bat dau chuong trinh
ljmp main ;nhay den chtr chinh
org 000bh
ljmp int_t0 ;nhay den chtr con ngat timer0
main: mov tmod,#01h ;timer0: mod 1 - dem 16 bit
mov dptr,#0200h ;dptr quan ly vung ma 7 doan
clr tf0 ;xoa co tran timer0
mov ie,#10000010b ;cho ngat timer0
mov th0,#3ch ;khoi tao timer delay 50ms
mov tl0,#0b0h
setb tr0 ;cho timer0 bat dau dem
main3: mov phut,#00h ;phut=00
main0: mov giay,#00h ;giay=00
main1: mov bdn,#00 ;nap bien den so lan ngat
lcall gma
main2: lcall hthi ;goi chtr con hien thi
cjne bdn,#2,main2 ;chua dung 20 lan [tuc 1 giay]
mov a,giay ;chuyen giay sang A
add a,#1 ;tang giay len 1
da a ;hieu chinh so BCD trong A
mov giay,a ;tra lai cho giay
cjne giay,#60h,main1 ;ss giay voi 60
mov a,phut ;chuyen phut sang A
add a,#1 ;tang phut len 1
da a ;hieu chinh so BCD trong A
mov phut,a ;tra lai cho phut
cjne phut,#60h,main0 ;ss giay voi 60
sjmp main3 ;lam lai tu dau
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
; chuong trinh con giai ma
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
gma: mov a,giay
anl a,#0fh ;xoa 4 bit cao hang chuc giay
movc a,@a+dptr ;lay ma 7 doan
mov 27h,a ;cat ma vao o nho 20h
mov a,giay
anl a,#0f0h ;xoa 4 bit thap hang dvi
swap a ;chuyen 4 bit cao xuong vi tri thap
movc a,@a+dptr ;lay ma 7 doan hang chuc
mov 26h,a
mov a,phut
anl a,#0fh ;xoa 4 bit cao hang chuc phut
movc a,@a+dptr ;lay ma 7 doan
mov 25h,a ;cat ma vao o nho 20h
mov a,phut
anl a,#0f0h ;xoa 4 bit thap hang dvi phut
swap a ;chuyen 4 bit cao xuong vi tri thap
movc a,@a+dptr ;lay ma 7 doan hang chuc
mov 24h,a
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh delay co goi chuong trinh hien thi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh con ngat timer0 sau khoang thoi gian 50ms
int_t0: inc bdn ;tang bien dem giay
mov th0,#3ch ;khoi tao lai timer
mov tl0,#0b5h
clr tf0
reti
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh con hien thi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
hthi: mov a,#01111111b ;ma quet
mov r0,#27h
ht1: mov p0,@r0
mov p2,a
lcall delay1
mov p2,#0ffh
dec r0
rr a ;chuyen sang led ke
cjne r0,#23h,ht1
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay1
delay1:mov r7,#0fh
del11: djnz r7,del11
ret
end
5. Thực hiện các bước giống như bài chuẩn và xem kết quả mạch có đếm đúng
phút và giây hay không, nếu không đúng thì hiệu chỉnh lại.
Chú ý: thời gian trong chương trình này giảm nhỏ để giúp kiểm tra nhanh hàng phút, sau
khi đếm đúng thì hãy hiệu chỉnh lại lệnh so sánh bdn với số 20 thì mạch sẽ đếm đúng thời
gian.
III. Câu hỏi và bài tập ứng dụng:
1. Hãy điều chỉnh chương trình đếm phút giây để đếm BCD từ 0000 đến 9999
hiển thị ở các led 5,6,7,8.
2. Hãy viết chương trình đếm số hex từ 0000H đến FFFFH.
BÀI SỐ 2-5: CHƯƠNG TRÌNH ĐẾM GIỜ - PHÚT - GIÂY HIỂN THỊ Ở 6 LED
I. Mục đích yêu cầu: biết cách viết chương trình đếm giờ phút giây, cách kiểm tra
chương trình đếm.
II. Trình tự thực hiện:
1. Kết nối mạch theo trình tự :
- Dùng bus dây kết nối port 0 đến pinhd điều khiển các đoạn a,b,c,d,e,f,g,dp
và kết nối port 2 đến pinhd điều khiển quét hàng .
- Gắn vi điều khiển vào đế nạp 40 pin ( socket ) ở modul nạp của hệ thống 2
.
2. Khởi động phần mềm, mở File mới và đặt tên file.
3. Viết chương trình với tên file vừa đặt:
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh dem dong ho so gio phut giay
;su dung ngat timer t0 de dem chinh xac ve thoi gian
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
giay equ r2 ;gan bien dem giay la R2
phut equ r3 ;gan bien dem phut cho R3
gio equ r4 ;gan bien dem gio cho r4
bdn equ r1 ;gan bien dem ngat
org 200h ;dia chi khai bao ma 7 doan tu so '0' den so '9'
ma7doan: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
org 0000h ;bat dau chuong trinh
ljmp main ;nhay den chtr chinh
org 000bh
ljmp int_t0 ;nhay den chtr con ngat timer0
main: mov tmod,#01h ;timer0: mod 1 - dem 16 bit
mov dptr,#0200h ;dptr quan ly vung ma 7 doan
clr tf0 ;xoa co tran timer0
mov ie,#10000010b ;cho ngat timer0
mov th0,#3ch ;khoi tao timer delay 50ms
mov tl0,#0b0h
setb tr0 ;cho timer0 bat dau dem
main4: mov gio,#00 ;gio=00
main3: mov phut,#00h ;phut=00
main0: mov giay,#00h ;giay=00
main1: mov bdn,#00 ;nap bien den so lan ngat
lcall gma
main2: lcall hthi ;goi chtr con hien thi
cjne bdn,#2,main2 ;chua dung 20 lan [tuc 1 giay]
mov a,giay ;chuyen giay sang A
add a,#1 ;tang giay len 1
da a ;hieu chinh so BCD trong A
mov giay,a ;tra lai cho giay
cjne giay,#60h,main1 ;ss giay voi 60
mov a,phut ;chuyen phut sang A
add a,#1 ;tang phut len 1
da a ;hieu chinh so BCD trong A
mov phut,a ;tra lai cho phut
cjne phut,#60h,main0 ;ss phut voi 60
mov a,gio ;chuyen gio sang A
add a,#1 ;tang gio len 1
da a ;hieu chinh so BCD trong A
mov gio,a ;tra lai cho gio
cjne gio,#24h,main3 ;ss gio voi 24
sjmp main4 ;lam lai tu dau
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
; chuong trinh con giai ma
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
gma: mov a,giay
anl a,#0fh ;xoa 4 bit cao hang chuc giay
movc a,@a+dptr ;lay ma 7 doan
mov 27h,a ;cat ma vao o nho 27h
mov a,giay
anl a,#0f0h ;xoa 4 bit thap hang dvi
swap a ;chuyen 4 bit cao xuong vi tri thap
movc a,@a+dptr ;lay ma 7 doan hang chuc
mov 26h,a ;cat vao o nho 26h
mov a,phut
anl a,#0fh ;xoa 4 bit cao hang chuc phut
movc a,@a+dptr ;lay ma 7 doan
mov 25h,a ;cat ma vao o nho 25h
mov a,phut
anl a,#0f0h ;xoa 4 bit thap hang dvi phut
swap a ;chuyen 4 bit cao xuong vi tri thap
movc a,@a+dptr ;lay ma 7 doan hang chuc
mov 24h,a ;cat vao o nho 24h
mov a,gio
anl a,#0fh ;xoa 4 bit cao hang chuc gio
movc a,@a+dptr ;lay ma 7 doan
mov 23h,a ;cat ma vao o nho 23h
mov a,gio
anl a,#0f0h ;xoa 4 bit thap hang dvi gio
swap a ;chuyen 4 bit cao xuong vi tri thap
movc a,@a+dptr ;lay ma 7 doan hang chuc
mov 22h,a ;cat vao o nho 22h
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh delay co goi chuong trinh hien thi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh con ngat timer0 sau khoang thoi gian 50ms
int_t0: inc bdn ;tang bien dem giay
mov th0,#3ch ;khoi tao lai timer
mov tl0,#0b5h
clr tf0
reti
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
;chuong trinh con hien thi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
hthi: mov a,#01111111b ;ma quet
mov r0,#27h
ht1: mov p0,@r0
mov p2,a
lcall delay1
mov p2,#0ffh
dec r0
rr a ;chuyen sang led ke
cjne r0,#21h,ht1
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay1
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxx
delay1:mov r7,#0fh
del11: djnz r7,del11
ret
end
1. Thực hiện các bước giống như bài chuẩn và xem kết quả mạch có đếm đúng
phút và giây hay không, nếu không đúng thì hiệu chỉnh lại.
Chú ý: thời gian trong chương trình này giảm nhỏ để giúp kiểm tra nhanh hàng phút, sau
khi đếm đúng thì hãy hiệu chỉnh lại lệnh so sánh bdn với số 20 thì mạch sẽ đếm đúng thời
gian.
III. Bài tập ứng dụng:
1. Hãy điều chỉnh chương trình đếm giờ phút giây để đếm BCD từ 000000
đến 999999 hiển thị ở các led 3,4,5,6,7,8.
2. Hãy cho biết sai số và cách làm giảm sai số.
3. Chương trình trên luôn bắt đầu chạy tại 00 giờ 00 phút 00 giây. Hãy viết
chương trình quét phím để điều chỉnh giờ phút giây theo ý muốn.
BÀI SỐ 2-6: CHƯƠNG TRÌNH HIỂN THỊ CHỮ “-HA- NOI-” TRÊN 8 LED
I. Mục đích yêu cầu: biết cách viết chương trình điều khiển các led hiển thị các chuổi kí
tự.
II. Trình tự thực hiện:
1. Giải thuật:Begi
n
Khởi tạo vùng mã 7 đoạnKhởi tạo vùng mã quét
Gởi mã 7 đoạn ra led
thứ I (I:=18)
Gởi mã quét ra led
thứ I (I:=18)
Tăng I để xử lý led kế
tiếp
Kiểm tra
I:=8
End
Đ
S
2. Kết nối mạch theo trình tự :
- Dùng bus dây kết nối port 0 đến pinhd điều khiển các đoạn a,b,c,d,e,f,g,dp
và kết nối port 2 đến pinhd điều khiển quét hàng .
- Gắn vi điều khiển vào đế nạp 40 pin ( socket ) ở modul nạp chương trình ở
hệ thống 2 .
3. Khởi động phần mềm, mở File mới và đặt tên file.
4. Viết chương trình với tên file vừa đặt :
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; chuong trinh hien thi chu "-HA-NOI-"
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h ;bat dau chuong trinh
mov dptr,#0500h
main: mov r2,#11111110b ;luu ma quet
mov r3,#00
setb c
maina: mov a,r3
movc a,@a+dptr ;lay ma chu
mov p0,a
mov p2,r2
lcall delay
mov p2,#0FFh ;tat het de chong lem
inc r3 ;xu ly led ke
mov a,r2 ;xoay ma quet
rlc a
mov r2,a
jc maina
sjmp main ;quay lai lam lai tu dau
delay: mov r6,#01h
de2: mov r7,#050h
de1: djnz r7,de1
djnz r6,de2
ret
org 500h
machu:db 0bfh,089h,088h,0bfh,0c8h,0c0h,0f9h,0bfh
end
5. Thực hiện các bước giống như bài chuẩn và xem kết quả có hiển thị đúng yêu
cầu hay không và hiệu chỉnh lại cho đúng.
III. Bài tập ứng dụng:
1. Hãy viết chương trình hiển thị chuỗi “COCACOLA”.
BÀI SỐ 2-7: CHƯƠNG TRÌNH HIỂN THỊ VÀ NHẤP NHÁY CHỮ “-HA- NOI-”
TRÊN 8 LED.
I. Mục đích yêu cầu: biết cách viết chương trình điều khiển hiển thị chuỗi kí tự nhấp
nháy trên led sử dụng phương pháp quét.
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 đến pinhd điều khiển các đoạn a,b,c,d,e,f,g,dp
và kết nối port 2 đếm pinhd điều khiển quét hàng .
Begin
Hieån thò chuoãi kí töï treân 8 led lieân tuïc trong 1 khoaûng thôøi
gian.
Delay (taét 8 led)
End
- 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.
4. Viết chương trình với tên file vừa đặt :
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; chuong trinh hien thi chu "-HA-NOI-" nhap nhay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h ;bat dau chuong trinh
mov dptr,#0500h
mainb: mov r4,#255 ;so lan lap lai hien thi chuoi
main: mov r2,#11111110b ;luu ma quet
mov r3,#00
setb c
maina: mov a,r3
movc a,@a+dptr ;lay ma chu
mov p0,a
mov p2,r2
lcall delay
mov p2,#0FFh ;tat het de chong lem
inc r3 ;xu ly led ke
mov a,r2 ;xoay ma quet
rlc a
mov r2,a
jc maina
djnz r4,main
lcall delaytat ;goi chtr con delay de tat
ljmp mainb ;quay lai lam lai tu dau
delay: mov r6,#01h
de2: mov r7,#050h
djnz r7,$
djnz r6,de2
ret
delaytat: mov r6,#0h
de2a: mov r7,#0h
djnz r7,$
djnz r6,de2a
ret
org 500h
machu:db 0bfh,089h,088h,0bfh,0c8h,0c0h,0f9h,0bfh
end
5. Thực hiện các bước giống như bài chuẩn và xem kết quả có hiển thị đúng yêu
cầu hay không và hiệu chỉnh lại cho đúng.
III. Câu hỏi và bài tập ứng dụng:
1. Hãy cho biết chức năng con số 255 lưu trong thanh ghi R4 để làm gì ? nếu
không giải thích được bạn hãy thay con số 250 bằng con số nhỏ hơn ví dụ như
10.
2. Hãy viết chương trình hiển thị chữ “-HA-NOI-” 1 giây sau đó hiển thị chữ
“COCACOLA” 1 giây và lặp lại.
3. Hãy viết chương trình hiển thị chữ “-HA-NOI-” và nhấp nháy đúng 5 lần rồi
dừng hẳn nhưng chuổi vẫn hiển thị trên led.
BÀI SỐ 2-8: CHƯƠNG TRÌNH CHẠY CHỮ “-HA- NOI-” TRÊN 8 LED TỪ
PHẢI SANG TRÁI
I. Mục đích yêu cầu: biết cách viết chương trình xử lý chuỗi di chuyển từ trái sang phải
hoặc từ phải sang trái.
II. Trình tự thực hiện:
1. Kết nối mạch theo trình tự :
- Dùng bus dây kết nối port 0 đến pinhd điều khiển các đoạn a,b,c,d,e,f,g,dp
và kết nối port 2 đến pinhd điều khiển quét hàng.
- Gắn vi điều khiển vào đế nạp 40 pin ( socket ) ở modul nạp của hệ thống
2.
2. Khởi động phần mềm, mở File mới và đặt tên file.
3. Viết chương trình với tên file vừa đặt :
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh hien thi chu "-HA-NOI-" chay tu phai sang trai
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h ;bat dau chuong trinh
mainc: mov dptr,#0500h
mainb: mov r4,#255 ;so lan lap lai hien thi chuoi
main: mov r2,#11111110b ;luu ma quet
mov r3,#00
setb c
maina: mov a,r3
movc a,@a+dptr ;lay ma chu
mov p0,a
mov p2,r2
lcall delay
mov p2,#0FFh ;tat het de chong lem
inc r3 ;xu ly led ke
mov a,r2 ;xoay ma quet
rlc a
mov r2,a
jc maina
djnz r4,main
inc dptr
mov a,dpl
cjne a,#10h,mainb ;so sanh dia chi ket thuc vung data
ljmp mainc ;quay lai lam lai tu dau
delay: mov r6,#01h
de2: mov r7,#050h
djnz r7,$
djnz r6,de2
ret
delaytat: mov r6,#0h
de2a: mov r7,#0h
djnz r7,$
djnz r6,de2a
ret
org 508h
machu:db 0bfh,089h,088h,0bfh,0c8h,0c0h,0f9h,0bfh
end
4. Thực hiện các bước giống như bài chuẩn và xem kết quả có hiển thị đúng yêu
cầu hay không và hiệu chỉnh lại cho đúng.
III. Câu hỏi và bài tập ứng dụng:
1. Hãy viết chương trình chạy theo chiều ngược lại.
2. Hãy kết hợp 2 chương trình lại thành 1 chương trình chạy từ phải sang trái và
từ trái sang phải.
3. Khi muốn hiển thị thêm nhiều dữ liệu nữa thì ta phải điều chỉnh chương trình
như thế nào? Và điều chỉnh dữ liệu ra sao?
4. Khi vùng dữ liệu lớn hơn làm thay đổi cả dph ví dụ như 0500H đến 0600 thì
chương trình được thay đổi như thế nào?
BÀI SỐ 2-9: CHƯƠNG TRÌNH ĐIỀU KHIỂN BÀN PHÍM VÀ HIỂN THỊ MÃ
CỦA PHÍM NHẤN TRÊN LED 7 ĐOẠN
I. Mục đích yêu cầu: biết cách viết chương trình điều khiển quét phím, tạo mã phím và
hiển thị mã phím. Khi chạy chương trình này thì trên led sẽ có dấu chấm sáng và khi
nhấn phím nào thì mã của phím đó sáng trên led.
II. Trình tự thực hiện:
1. Giải thuật:
Maõ phím = 00
DCBA = 1111
Maõ phím := maõ phím + 04Xoay maõ queùt sang traùi gôûi ra coä t.Taêng coät leân 1
Ñ
Coät = 5
Ñ
Gaùn maõ phím = FF
Coät = 1Queùt = 1110
Ñoïc traïng thaùi haøng DCBA
S
S
Begin
End
Xoay DCBA qua Carry
Carry = 0
Ñ
S
2. Kết nối mạch theo trình tự :
- Dùng bus dây kết nối port 0 đến pinhd điều khiển các đoạn a,b,c,d,e,f,g,dp
và kết nối port 2 đến pinhd điều khiển quét hàng.
- Dùng port 1 chưa qua IC đệm kết nối với pindn của bàn phím.
- 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.
4. Viết chương trình với tên file vừa đặt :
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh quet phim dung he thong 1 ma phim hien thi tren 1led
;dung port 1 chua qua IC dem ket noi voi pinhd cua ban fim
;dung port0 va port 2 ket noi dieu khien led 7 doan
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h
mov sp,#60h
mov dptr,#0500h
mov p2,#0feh ;xuat ma quet cho 1 led sang
mov p0,#7fh
main: lcall keypres ;goi chtr con quet phim
cjne a,#0ffh,main1
sjmp main
main1: lcall gma_hthi ;goi chtr con giai ma hien thi
sjmp main
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;Chuong trinh con giai ma fim nhan va hien thi ra 1 led 7 doan
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
gma_hthi: movc a,@a+dptr
mov p0,a
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;Chuong trinh con quet phim va chong doi phim
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
keypres: mov r3,#10 ;nhap so dem 10 lan
keypres1 : lcall KEY ;Neu co phim an thi co c=1
jc pn1 ;kiem tra tiep neu c = 1
ret ;Neu khong co phim nhan thi co c=0
pn1: djnz r3,keypres1 ;Quay ve lap lai chong nay
push acc ;Cat noi dung ma phim trong A
keypres2: mov r3,#10 ;Nhap so dem 10 lan cho nha phim
keypres3: lcall key ;Co phim nhan hay khong
jc keypres2 ;Co thi kiem tra lai
djnz r3,keypres3 ;Khong thi lap lai 50 lan va dam bao
pop acc ;Khoi phuc lai gia tri cho A
ret ;ket thuc mot chuong trinh con
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;Chuong trinh con quet phim
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
key: mov r7,#0feh ;bat dau voi cot so 0(feh)
mov r6,#4 ;Su dung r6 lam bo dem
mov r5,#00
key1: mov p1,r7 ;xuat ma quet ra cot
mov a,p1 ;Doc lai port1 de xu ly tiep theo
anl a,#0f0h ;xoa 4 bit thap la hang
cjne a,#0f0h,key2 ;co nhan fim thi nhay
mov a,r7
rl a ;xoay de chuyen den cot ke tiep
mov r7,a
mov a,r5 ;chuyen ma fim sang cot ke
add a,#4
mov r5,a
djnz r6,key1 ;Neu nhu sau moi lan 1 cot ma khong
clr c ;clr c neu nhu khong co phim duoc an
mov a,#0ffh ;thoat voi ma trong a = FFh
ret
key2: swap a
key4: rrc a ;xoay sang phai tim bit 0
jnc key3 ;nhay neu (c)=0
inc r5 ;tang ma fim len cot ke
sjmp key4 ;tiep tuc cho den khi duoc (C)=0
key3: mov a,r5
setb c
ret
;khai bao du lieu ma phim
org 500h
mafim: db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h
db 080h,090h,088h,083h,0c6h,0a1h,086h,08eh
end
5. Thực hiện các bước giống như bài chuẩn và xem kết quả có hiển thị đúng yêu
cầu hay không và hiệu chỉnh lại cho đúng.
III. Bài tập ứng dụng:
1. Hãy viết chương trình hiển thị chuỗi ‘-HA- NOI- ‘ trên 8 led và khi nhấn 1
phím số 1 thì chuỗi đó dịch chuyển sang trái.
2. Hãy viết chương trình hiển thị chuỗi ‘-HA- NOI- ‘ trên 8 led và khi nhấn 1
phím số 1 thì chuỗi đó dịch chuyển sang trái. Nhấn phím số 2 thì chuỗi dịch
chuyển sang phải.
3. Hãy viết chương trình hiển thị chuỗi ‘-HA- NOI- ‘ trên 8 led và khi nhấn 1
phím số 1 thì tắt chuỗi nếu nhấn lại thì sáng chuỗi trở lại.