Chương 6: 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ươn
Trang 1Chương 6:
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 :
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
;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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
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
Trang 2org 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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
; chuong trinh con giai ma
Trang 3;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
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh delay co goi chuong trinh hien thi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
;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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con hien thi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
hthi: mov a,#01111111b ;ma quet
Trang 4mov 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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay1
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx
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?