6.4.1 方式1应用
【例6-1】 假设系统时钟频率采用6 MHz,在P1.0引脚上输出一个周期为2 ms的方波,如图6-5所示。
图6-5 P1.0引脚输出波形
在P1.0输出周期为2 ms的方波,高电平和低电平的时间都是1 ms,所以需要通过定时器/计数器定时1 ms的时间,然后对当前的电平状态进行翻转。首先要计算装入定时器/计数器的初值。
机器周期T=2μs=2×10—6 s,设需要装入T0的初值为X,则有:
(216—X)×2×10—6=1×10—3,216—X=500,X=65 036。
X化为十六进制数,即X=65 036=FE0CH。
定时器/计数器T0的初值为TH0=FEH,TL0=0CH。
采用定时器/计数器中断方式工作。初始化程序包括定时器/计数器初始化和中断系统初始化,主要是对IP、IE、TCON、TMOD的相应位进行正确的设置,并将计数初值送入定时器/计数器中。
参考程序如下:
该程序除了采用中断的方法外还可以采用查询的方式编写。如CPU不做其他工作,采用查询方式的程序要简单些。
采用查询方式的参考程序:
采用查询方式的程序虽简单,但CPU必须要不断查询TF0标志,工作效率低。
采用中断方式的C51语言源程序为:
【例6-2】 系统时钟为6 MHz,编写定时器/计数器T0产生1s定时的程序。
基本思想:采用定时模式。因定时时间较长,首先应确定采用哪一种工作方式。时钟为6 MHz的条件下,定时器各种工作方式最长可定时时间为:
方式0最长可定时16.384 ms;
方式1最长可定时131.072 ms;
方式2最长可定时512μs。
可见,可以选择方式1,每隔100 ms中断一次,这样中断10次为1 s。
(1)计数初值X的计算
因为(216—X)×2×10—6=10—1,所以X=15 536=3CB0H。
可得:TH0=3CH,TL0=B0 H。
(2)10次计数的实现
对于中断10次的计数,采用寄存器B作为中断次数计数器。
(3)程序的设计
参考程序如下:
“SJMP HERE”指令实际是一段主程序。在这段主程序中通过对F0标志的判定,可知1 s定时是否达到,然后再进行具体处理。
同样,可以采用C51语言源程序实现: