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

Một phần của tài liệu vi dieu khien (Trang 40 - 54)

trình đếm.

II. Trình tự thực hiện:

1. Giải thuật:

Begin

Khởi tạo vùng nhớ lưu trữ biến đếm hàng chục, đơn vị của phút, giây = 00

Khởi tạo vùng nhớ lưu trữ mã 7 đoạn từ 0 đến 9

Giải mã hàng chục, đon vị của phút giây (từ mã nhị phân sang mã 7 đoạn)

End Delay và hiển thị đúng 1s Tăng biến đếm hàng chục,đơn vị giây-so sánh với 60 Đ S Tăng biến đếm hàng chục,đơn vị phút-so sá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

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

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

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

;

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 LEDI. 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í 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ạn Khởi tạo vùng mã quét Gởi mã 7 đoạn ra led thứ I (I:=1÷8) Gởi mã quét ra led thứ I (I:=1÷8) 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 .

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. TRÊN 8 LED.

Một phần của tài liệu vi dieu khien (Trang 40 - 54)

Tải bản đầy đủ (DOC)

(65 trang)
w