6.4.1 方式1应用

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语言源程序实现: