Nghiên cứu Khoa học
Sự khác nhau khi sử dụng ngắt Timer và chức năng chờ cờ TF
Ví dụ sau cho phép người sử dụng tăng giá trị của LED 7 đoạn sau khoản thời gian 1s, và chương trình delay 1s sử dụng chức năng ngắt Timer. Như các bạn đã biết Timer có nghĩa là thời gian trễ, khi ta viết chương trình delay 1s, để tăng giá trị của led 7 đoạn lên 1 đơn vị, có nghĩa là trong khoảng thời gian đó việc hiển thị lên 2 led 7 đoạn sẽ bị gián đoạn. Do nó vi phạm nguyên tắc quét led khi điều khiển led 7 đoạn.
Chính vì vây, khi muốn quet led liên tục và vừa muốn tạo ra khoảng thời gian trễ 1s, chúng ta sử dụng chức năng ngắt của Timer. Trong thời gian tạo ra khoảng thời gian 1s của Timer, vi điều khiển chạy chương trình quét led, và khi đạt được 1s tự động ngắt để tăng giá trị của led lên 1, sau đó quay về chương trình chính. Và thời gian thực hiện việc ngắt chương trình này chỉ mất vài us, không làm ảnh hưởng đến thời gian quet led. Hay có thể ngầm hiểu ngắt Timer có thể giúp vi điều khiển chạy 2 công việc xem như cùng lúc.
ORG 00H
JMP MAIN
ORG 001BH
;KHI TIMER CHAYJ XONG 50ms TU DONG VAO DAY
; TU DONG CLR TR1 VA TF1
DJNZ R0,THOAT
INC R7 ; GIA TRI DEM
MOV R0,#20
THOAT:
MOV TH1,#HIGH(-50000)
MOV TL1,#LOW(-50000)
RETI
DELAY:
LAP:
MOV TH0,#HIGH(-20000)
MOV TL0,#LOW(-20000)
SETB TR0
JNB TF0,$
CLR TF0
RET
MAIN:
MOV TMOD,#00010001B
MOV R0,#20
MOV TH1,#HIGH(-50000)
MOV TL1,#LOW(-50000)
SETB TR1
MOV DPTR,#100H
MOV R7,#00
MOV IE,#10001000B; NGAT TIMER 1
LAP1:
MOV A,R7
MOV B,#10
DIV AB; A=HANG CHU
MOV P1,#0; TAT LED
SETB P1.0
MOVC A,@A+DPTR ;
MOV P2,A
CALL DELAY
MOV P1,#0
SETB P1.1
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY
CJNE R7,#100,LAP1
SJMP MAIN
ORG 100H
TABLE: DB 0C0H,0f9H,0a4H,0b0h,99h,92H,82h,0f8h,80h,90h
END