vi dieu khien atmega

69
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. Begi n 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

Upload: the-hung-le

Post on 11-Dec-2015

39 views

Category:

Documents


11 download

DESCRIPTION

Vi Dieu Khien atmega

TRANSCRIPT

Page 1: Vi Dieu Khien atmega

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

Page 2: Vi Dieu Khien atmega

;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

Page 3: Vi Dieu Khien atmega

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

Page 4: Vi Dieu Khien atmega

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

Page 5: Vi Dieu Khien atmega

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

Page 6: Vi Dieu Khien atmega

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.

Page 7: Vi Dieu Khien atmega

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

Page 8: Vi Dieu Khien atmega

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

Page 9: Vi Dieu Khien atmega

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:

Page 10: Vi Dieu Khien atmega

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

Page 11: Vi Dieu Khien atmega

;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

Page 12: Vi Dieu Khien atmega

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

Page 13: Vi Dieu Khien atmega

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

Page 14: Vi Dieu Khien atmega

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

Page 15: Vi Dieu Khien atmega

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

Page 16: Vi Dieu Khien atmega

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

Page 17: Vi Dieu Khien atmega

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

Page 18: Vi Dieu Khien atmega

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

Page 19: Vi Dieu Khien atmega

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

Page 20: Vi Dieu Khien atmega

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.

Page 21: Vi Dieu Khien atmega

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

Page 22: Vi Dieu Khien atmega

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

Page 23: Vi Dieu Khien atmega

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

Page 24: Vi Dieu Khien atmega

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

Page 25: Vi Dieu Khien atmega

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

Page 26: Vi Dieu Khien atmega

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

Page 27: Vi Dieu Khien atmega

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

Page 28: Vi Dieu Khien atmega

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

Page 29: Vi Dieu Khien atmega

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

Page 30: Vi Dieu Khien atmega

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'

Page 31: Vi Dieu Khien atmega

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

Page 32: Vi Dieu Khien atmega

;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

Page 33: Vi Dieu Khien atmega

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.

Page 34: Vi Dieu Khien atmega

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

Page 35: Vi Dieu Khien atmega

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

Page 36: Vi Dieu Khien atmega

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

Page 37: Vi Dieu Khien atmega

;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?

Page 38: Vi Dieu Khien atmega

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

Ñ

Page 39: Vi Dieu Khien atmega

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

Page 40: Vi Dieu Khien atmega

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

Page 41: Vi Dieu Khien atmega

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

Page 42: Vi Dieu Khien atmega

;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

Page 43: Vi Dieu Khien atmega

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ự :

Page 44: Vi Dieu Khien atmega

- 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

Page 45: Vi Dieu Khien atmega

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

Page 46: Vi Dieu Khien atmega

;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

Page 47: Vi Dieu Khien atmega

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

Page 48: Vi Dieu Khien atmega

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.

Page 49: Vi Dieu Khien atmega

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

Page 50: Vi Dieu Khien atmega

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

Page 51: Vi Dieu Khien atmega

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

Page 52: Vi Dieu Khien atmega

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

Page 53: Vi Dieu Khien atmega

- 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

Page 54: Vi Dieu Khien atmega

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.

Page 55: Vi Dieu Khien atmega

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

Page 56: Vi Dieu Khien atmega

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,$

Page 57: Vi Dieu Khien atmega

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?

Page 58: Vi Dieu Khien atmega

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

Page 59: Vi Dieu Khien atmega

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

Page 60: Vi Dieu Khien atmega

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

Page 61: Vi Dieu Khien atmega

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

Page 62: Vi Dieu Khien atmega

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.

Page 63: Vi Dieu Khien atmega