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.. 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
Trang 1Chương 7: 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 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
Đ
Trang 22 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 :
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh dem phut giay
;su dung ngat timer t0 de dem chinh xac ve thoi gian
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
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
Trang 3ljmp 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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
Trang 4; chuong trinh con giai ma
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh delay co goi chuong trinh hien thi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con ngat timer0 sau khoang thoi gian 50ms
Trang 5int_t0: inc bdn ;tang bien dem giay
mov th0,#3ch ;khoi tao lai timer mov tl0,#0b5h
clr tf0 reti
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con hien thi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxx
;chuong trinh con delay1
delay1: mov r7,#0fh
del11: djnz r7,del11
ret end
Trang 65 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