6.4.3 方式3应用
当TMOD的最低两位设置为11时,定时器/计数器T0的工作方式为方式3。定时器/计数器T0工作在方式3时,定时器/计数器T0的16位定时器/计数器分为两个独立的8位定时器/计数器TL0和TH0。TL0可作为8位的定时器/计数器,使用TMOD中定时器/计数器T0的控制位,可以工作在定时模式或计数模式,由TMOD中定时器/计数器T0的工作模式选择位设置。而TH0只能作为8位的定时器/计数器,使用定时器/计数器T1的运行控制位TR1和中断标志位TF1,占用定时器/计数器T1的中断源,此时定时器/计数器T1可以工作在方式0、方式1或方式2,用作串行口的波特率发生器或用于不需要中断的场合。
一般情况下,当定时器/计数器T1用作串行口的波特率发生器时,定时器/计数器T0才设置为方式3。此时,常把定时器/计数器T1设置为方式2,用作串行口的波特率发生器。
【例6-4】 假设某AT89S51单片机应用系统的两个外部中断源已被占用,设置定时器/计数器T1工作在方式2,用作串行口的波特率发生器。现要求增加一个外部中断源,并控制P1.0引脚输出一个5 kHz(周期为200μs)的方波。设时钟为12 MHz。
基本思想:设置TL0工作在方式3计数模式,TL0的初值设为0FFH,当检测到定时器/计数器T0脚信号出现负跳变时,TL0溢出,同时向CPU申请中断,这里定时器/计数器T0脚作为一个负跳变沿触发的外部中断请求输入端。在中断处理子程序中,启动TH0,TH0事先被设置为方式3的100μs定时,从而控制P1.0输出周期为200μs的方波信号。
首先计算计数初值,TL0的初值设为0FFH。
5 kHz方波的周期为200μs,因此TH0的定时时间为100μs。初值X计算如下:
汇编语言源程序设计如下:
当系统时钟频率为11.0592 MHz,串行口的波特率为4 800 bit/s定时器/计数器,用定时器/计数器T1(工作在方式2)作为串行口的波特率发生器时,定时器/计数器T1的计数初值为FAH(计算方法详见第7章)。
例6-4的C51语言源程序如下: