Chủ Nhật, 9 tháng 2, 2014

Tài liệu Các bài thực hành về vi điều khiển pdf


162
S





I. Mục đích yêu cầu:
Nắm vững lệnh điều khiển xuất dữ liệu ra các port, biết cách viết chương trình con delay.
Làm quen với phần mềm soạn thảo chương trình, cách hiệu chỉnh lỗi.
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 (8 sợi ) kết nối port 0 với một trong bốn PINHD của dãy 32 led.
3. Khởi động phần mềm, tạo File mới, biên soạn chương trình sau:

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh dieu khien 8 led chop tat ket noi voi port 0
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h ;khai bao dia chi bat dau cua chuong trinh

lb: mov p0,#00h ;nap 00 vao port0 de tat 8 led
lcall delay ;goi chuong trinh con delay
mov p0,#0ffh ;nap FF vao port0 de sang 8 led
lcall delay ;goi chuong trinh con delay
sjmp lb ;nhay den de lam lai tu dau

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

delay: mov r6,#0ffh ;nap hang so FFH vao thanh ghi r6
de: mov r7,#0ffh ;nap hang so FFH vao thanh ghi r7
djnz r7,$ ;giam r7 di 1 va nhay khi r7 khac 00
djnz r6,de ;giam r6 di 1 va nhay khi r6 khac 00
ret ;thoat khoi chuong trinh con
end


NGÀY :
SỐ TIẾT :
LỚP :
MSSV :
THỰC HÀNH VI ĐIỀU KHIỂN
BÀI SỐ : 1-1
CHƯƠNG TRÌNH ĐIỀU KHIỂN LED CHÓP TẮT.
Tắt 8 led
Delay
Sáng 8 led
Delay
END
BEGIN

163
4. Lưu chương trình và biên dòch chương trình. Kiểm tra lỗi và hiệu chỉnh rồi biên dòch lại.
5. Nạp chương trình vào vi điều khiển.
6. Quan sát kết quả hiển thò của chương trình, nếu kết quả hiển thò không đúng yêu cầu đề
bài thì phải quay lại chương trình chỉnh sửa và làm lại.
III. Chương trình mẫu:

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh dieu khien port 16 led chop tat dung port0, 1
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h

lb: mov p0,#00h ;tat port0
mov p1,#00h ;tat port1
lcall delay ;delay

mov p0,#0ffh ;sang 8 led
mov p1,#0ffh ;sang 8 led
lcall delay ;delay
sjmp lb ;lam lai tu dau

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
delay: mov r6,#0ffh
de: mov r7,#0ffh
djnz r7,$
djnz r6,de
ret
end
IV. Bài tập:
1. Hãy xem chương trình mẫu điều khiển 16 led chóp tắt dùng 2 port 0 và 1 và hãy viết
chương trình sáng tắt 3 port 0, 1 và 3.
2. Hãy viết chương trình sáng tắt 4 port: port0, port1, port2, port3.






















164




s

I. Mục đích yêu cầu:
Hiểu cách sử dụng lệnh xoay 8 bit, lệnh nhảy có điều kiện để thực hiện chương trình điều
khiển led sáng dần, tắt dần.
II. Trình tự thực hiện :
1. Giải thuật: sáng dần và tắt hết sáng dần và tắt dần

















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.
3. Khởi động phần mềm, tạo File mới và biên soạn chương trình sau:

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh dieu khien port 0 sang dan len va tat het - cach I
;ket noi port 0 den 8 led bang cap 8 soi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h

lb: mov p0,#00000000b ;tat port 0
lcall delay ;goi chuong trinh con delay

mov p0,#00000001b ;sang 1 led
lcall delay ;goi chuong trinh con delay

mov p0,#00000011b ;sang 2 led
lcall delay ;goi chuong trinh con delay

mov p0,#00000111b ;sang 3 led
lcall delay ;goi chuong trinh con delay

mov p0,#00001111b ;sang 4 led
lcall delay ;goi chuong trinh con delay

NGÀY :
SỐ TIẾT :
LỚP :
MSSV :
THỰC HÀNH VI ĐIỀU KHIỂN
BÀI SỐ : 1-2
CHƯƠNG TRÌNH ĐIỀU KHIỂN LED SÁNG VÀ TẮT DẦN.
Begin
Tắt 8 led
Dòch chuyển dữ liệu
11111111 lần lượt ra 8 led
Xóa 8 led
End
Begin
Tắt 8 led
Dòch chuyển dữ liệu
11111111 lần lượt ra 8 led
Dòch chuyển dữ liệu
00000000 lần lượt ra 8 led
End

165
mov p0,#00011111b ;sang 5 led
lcall delay ;goi chuong trinh con delay

mov p0,#00111111b ;sang 6 led
lcall delay ;goi chuong trinh con delay

mov p0,#01111111b ;sang 7 led
lcall delay ;goi chuong trinh con delay

mov p0,#11111111b ;sang 8 led
lcall delay ;goi chuong trinh con delay

sjmp lb

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
delay: mov r6,#0ffh
de: mov r7,#0ffh
djnz r7,$
djnz r6,de
ret
end

Trong lập trình có nhiều cách viết chương trình từ đơn giản dễ hiểu nhưng dài dòng đến
chương trình phức tạp khó hiểu nhưng ngắn gọn tùy thuộc vào đối tượng nghiên cứu và đối tượng
học. Ở đây trình bày luôn cả 2 cách viết.
Trong cách viết trên ta thấy chương trình dễ hiểu nhưng khá dài. Hãy cho chạy chương trình
trên và xem cách viết thứ 2.

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh dieu khien port 0 sang dan len va tat het – cach II
;ket noi port 0 den 8 led bang cap 8 soi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h

lb: mov p0,#00h ;tat port 0
lb1: lcall delay ;goi chuong trinh con delay
setb c ;lam cho bit C = 1
mov a,p0 ;chuyen noi dung port0 vao thanh ghi A
rlc a ;xoay noi dung thanh ghi A sang trai
mov p0,a ;tra lai cho port0
jnc lb1 ;nhay ve de thuc hien tiep
sjmp lb ;quay lai tu dau
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
delay: mov r6,#0ffh
de : mov r7,#0ffh
djnz r7,$
djnz r6,de
ret
end

Giải thích : để led sáng dần lên ta phải dòch mức 1 vào thanh ghi A, mức 1 được chứa trong
bit Cy, lệnh xoay thanh ghi A sang trái sẽ dòch mức 1 từ C vào bit A0 của thanh ghi A. Bit A7 sẽ
dòch sang bit Cy.

166
Trong 8 lần dòch đầu tiên thì sau khi dòch, bit Cy luôn bằng 0. Nên ta dùng lệnh nhảy có
điều kiện khi C = 0 thì nhảy để quay lại tiếp tục thực hiện.
Cho đến lần xoay thứ 9 thì C = 1 thì điều kiện không còn thõa mãn nên lệnh nhảy có điều
kiện thì lệnh nhảy “sjmp ” mới được thực hiện để làm lại từ đầu.
4. Thực hiện các bước giống như các bài trước.
III. Các chương trình mẫu:
1. Chương trình điều khiển port 0 sáng dần và tắt dần:
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh dieu khien port 0 sang dan len va tat dan
;ket noi port 0 den 8 led bang cap 8 soi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h
lb: mov p0,#00h ;tat port 0

lb1: lcall delay ;goi chuong trinh con delay
setb c ;lam cho bit C = 1
mov a,p0 ;chuyen noi dung port0 vao thanh ghi A
rlc a ;xoay noi dung thanh ghi A sang trai
mov p0,a ;tra lai cho port0
jnc lb1 ;nhay ve de thuc hien tiep khi c=0

lb2: lcall delay ;goi chuong trinh con delay
clr c ;lam cho bit C = 0
mov a,p0 ;chuyen noi dung port0 vao thanh ghi A
rlc a ;xoay noi dung thanh ghi A sang trai
mov p0,a ;tra lai cho port0
jc b2 ;nhay ve de thuc hien tiep khi c=1

sjmp lb ;quay ve lam lai tu dau

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
delay: mov r6,#0ffh
de: mov r7,#0ffh
djnz r7,$
djnz r6,de
ret
end

2. Chương trình điều khiển port 0 và port 1 sáng dần và tắt dần:
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh dieu khien port 0, 1 sang dan len va tat dan
;ket noi port 0 den 8 led bang cap 8 soi tuong tu cho port1
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h
lb: mov p0,#00h ;tat port 0
mov p1,#00h ;tat port 1

lb1: lcall delay ;goi chuong trinh con delay
setb c ;lam cho bit C = 1
mov a,p0 ;chuyen noi dung port0 vao thanh ghi A
rlc a ;xoay noi dung thanh ghi A sang trai
mov p0,a ;tra lai cho port0

mov a,p1 ;chuyen noi dung port1 vao thanh ghi A
rlc a ;xoay noi dung thanh ghi A sang trai
mov p1,a ;tra lai cho port1


167
jnc lb1 ;nhay ve de thuc hien tiep khi c=0

lb2: lcall delay ;goi chuong trinh con delay
clr c ;lam cho bit C = 0
mov a,p0 ;chuyen noi dung port0 vao thanh ghi A
rlc a ;xoay noi dung thanh ghi A sang trai
mov p0,a ;tra lai cho port0

mov a,p1 ;chuyen noi dung port1 vao thanh ghi A
rlc a ;xoay noi dung thanh ghi A sang trai
mov p1,a ;tra lai cho port1

jc lb2 ;nhay ve de thuc hien tiep khi c=1

sjmp lb ;quay ve lam lai tu dau

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
delay: mov r6,#0ffh
de: mov r7,#0ffh
djnz r7,$
djnz r6,de
ret
end
IV. Bài tập ứng dụng:
1. Dùng port 0 kết nối với 8 led, hãy viết chương trình điều khiển 1 led sáng và di chuyển từ
trái sang phải.
2. Hãy viết chương trình điều khiển 4 port 0, 1, 2, 3 sáng dần và tắt dần từ trên xuống và từ
dưới lên.
3. Hãy viết chương trình điều khiển 4 port 0, 1, 2, 3 sáng dần và tắt dần từ ngoài vào trong
và từ trong ra ngoài.























168






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.
3. Khởi động phần mềm, tạo File mới, và biên soạn chương trình sau :

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh dieu khien port 0 sang don va tat het - cach I
;ket noi port 0 den 8 led bang cap 8 soi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0800h ;khai bao dia chi luu tru vung du lieu
ma: db 00000000b
db 00000001b
NGÀY :
SỐ TIẾT :
LỚP :
MSSV :
THỰC HÀNH VI ĐIỀU KHIỂN
BÀI SỐ : 1-3
CHƯƠNG TRÌNH ĐIỀU KHIỂN LED SÁNG DỒN
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ào led 1

169
db 00000010b
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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h ;khai bao dia chi chtr chinh

lb: mov dptr,#0800h ;nap dia chi luu du lieu vao thghi dptr
lb1: clr a
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,lb1 ;ktra co phai la byte ket thuc hay chua
sjmp lb ;quay tro lam lai khi da het du lieu
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
delay: mov r6,#0ffh
de2 : mov r7,#0ffh
djnz r7,$
djnz r6,de
ret
end

170
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ỉ 0800H.
Byte cuối cùng là FFH là byte báo cho biết hết d74 liệu.
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 0800h ;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:

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh dieu khien 8 led sang don dung port 0
;ket noi port 0 den 8 led bang 1 soi cap 8 soi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;dinh nghia cac bien
x0 equ 10h
y0 equ 20h

dem equ 30h
tam equ 31h

led0 equ p0
led1 equ p1
led2 equ p2
led3 equ p3

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;bat dau chuong trinh chinh
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h
mov led2,#0 ;tat cac led chua su dung
mov led3,#0
mov led1,#0

lb: mov led0,#0
lcall delay ;tat 16 led va delay

mov dem,#8 ;led 1 se di chuyen 8 vi tri
mov x0,#0

lb2: mov tam,dem
mov y0,#00000001b ;luu trng thai ban dau

lb1: mov a,y0
orl a,x0
mov led0,a

lcall delay


171
clr c ;xoa Cy de chi dich 1 led di
mov a,y0
rlc a
mov y0,a

djnz tam,lb1 ;giam ndung o nho (11h)<> 0 thi quay lai
mov x0,led0

djnz dem,lb2 ;giam bien dem de xu li lan ke
ljmp lb

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
delay: mov 7eh,#040h
del: mov 7fh,#0ffh
djnz 7fh,$
djnz 7eh,del
ret
end

Chương trình không khó !, bạn hãy tự nghiên cứu giải thuật?

III. Các chương trình mẫu:
Chương trình điều khiển 16 led sáng dồn:

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh dieu khien 16 led sang don dung port 0, 1
;ket noi port 0 va port 1 den 16 led bang 2 soi cap 8 soi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;dinh nghia cac bien
x0 equ 10h
x1 equ 11h

y0 equ 20h
y1 equ 21h

dem equ 30h
tam equ 31h

led0 equ p0
led1 equ p1
led2 equ p2
led3 equ p3

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;bat dau chuong trinh chinh
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
org 0000h
mov led2,#0 ;tat cac led chua su dung
mov led3,#0

lb: mov led1,#0
mov led0,#0
lcall delay ;tat 16 led va delay

mov dem,#16 ;led 1 se di chuyen 16 vi tri

mov x0,#0
mov x1,#0

Không có nhận xét nào:

Đăng nhận xét