START: MOV TH0, #0F0H ; T0赋初值
MOV TL0, #0CH
MOV TMOD, #00H
SETB ET0 ; 开T0中断
SETB EA ; 开总允许中断
SETB TR0 ; 启动T0
MAIN: AJMP MAIN ; 主程序
T0INT: CPL P1.0
MOV TL0, #0CH
MOV TH0, #0F0H
RETI
2) 方式 1应用
方式 1 与方式 0 基本相同, 只是方式 1 改用了 16 位计数器。 要求定时周期较长时, 13 位计数器不够用, 可改用 16 位计数器。
例2 已知某生产线的传送带上不断地有产品单向传送, 产品之间有较大间隔。使用光电开关统计一定时间内的产品个数。 假定红灯亮时停止统计, 红灯灭时才在上次统计结果的基础上继续统计, 试用单片机定时器 /计数器T1的方式 1完成该项产品的计数任务。
(1) 初始化: TMOD=11010000B=0D0H
(GATE=1, C/T=1, M0M1=01)
TCON=00H
(2) T1在方式1时, 溢出产生中断, 且计数器回零, 故在中断服务程序中, 需用R0计数中断次数, 以保护累积计数结果。
(3) 启动T1计数, 开T1中断。
程序清单如下: ORG 0000H
AJMP START ; 复位入口
ORG 001BH
AJMP T1INT ; T1中断入口
ORG 0100H
START: MOV SP, #60H ; 初始化程序
MOV TCON, #00H
MOV TMOD, #0D0H
MOV TH1, #00H
MOV TL1, #00H
MOV R0, #00H ; 清中断次数计数单元
MOV P3, #28H; 设置P3.5第二功能
SETB TR1 ; 启动T1
SETB ET1; 开T1中断
SETB EA ; 开总中断
MAIN: ACALL DISP ; 主程序, 调显示子程序
ORG 0A00H
T1INT: INC R0 ; 中断服务子程序
RETI