6.4.4 定时器/计数器扩展外部中断源应用实例

6.4.4 定时器/计数器扩展外部中断源应用实例

定时器/计数器可以实现定时或计数功能,此外,也可以将其扩展为一个负跳变沿触发的外部中断源。

【例6-5】 设系统时钟频率为6 MHz,编程实现时用定时器/计数器T0(P3.4)引脚上发生的负跳变信号作为启动信号,从P1.0引脚上输出一个周期为1 ms的方波。

定时器/计数器T0设为方式1计数,初值为FFFFH。当外部计数输入端定时器/计数器T0(P3.4)发生一次负跳变时,定时器/计数器T0加1且溢出,溢出标志TF0置1,向CPU发出中断请求,此时定时器/计数器T0相当于一个负跳变沿触发的外部中断源。

进入定时器/计数器T0中断程序后,F0标志置“1”,说明T0引脚上已接收过负跳变信号。定时器/计数器T1定义为方式2定时。在定时器/计数器T0引脚产生一次负跳变后,可启动定时器/计数器T1每500μs产生一次中断,然后在中断服务子程序中对P1.0求反,可使P1.0产生周期1 ms的方波,时序图如图6-6所示。由于省去重新装初值指令,所以可产生精确的定时时间。

图6-6 负跳变沿触发1 ms周期方波时序图

首先计算定时器/计数器T1的初值,设定时器/计数器T1的初值为X,则

汇编语言源程序设计如下:

程序说明:主程序中设置定时定时器/计数器T0来检测外部下降沿信号。检测到信号以后程序转入中断入口地址000BH,中断服务程序将F0置1,外部信号的下降沿作为方波的启动信号,使用定时器/计数器T1来输出方波。程序中F0位的作用为检测外部脉冲信号的标志位。该程序实现了用定时器/计数器中断扩展为负跳边沿触发的外部中断源。

C51语言源程序如下: