5.4 定时/计数器编程方法
5.4.1 定时/计数器中断法
定时/计数器中断法,是执行完整个中断处理过程的方法。
1.中断法初始化编程基本步骤
第一步,根据定时时间或计数要求,确定计数初值。
第二步,预置定时或者计数的初值到THx和TLx。
第三步,确定工作方式,写控制字到TMOD。
第四步,根据需求开放定时/计数器的中断。
第五步,启动定时/计数器。
2.中断法初始化编程举例
例5 单片机主频为6MHz,要求定时器0用于定时、软件启动、工作方式为方式0、定时时间为10ms,试完成初始化工作。
第一步,计数初值=8 192-10 000/2=3 192。
第二步,将3 192转化为二进制为 1100011 11000,如图5-11所示。

图5-11 16位内存单元值
TL0取低5位,高位补0,则有TL0=0x18;
TH0取高8位,不足8位,高位补0,则有TH0=0x63。
第三步,TMOD=0000 0000B=0x00。
第四步,EA=1,ET0=1。
第五步,TR0=1。
例6 单片机主频为6MHz,要求定时器1用于计数、软件启动、工作方式为方式2、计数长度为100,试完成初始化工作。
第一步,计数初值=256-100=156=0x9C。
第二步,TH1=0x9C,TL1=0x9C。
第三步,TMOD=0110 0000B=0x60。(https://www.daowen.com)
第四步,EA=1,ET1=1。
第五步,TR1=1。
3.中断法编程举例
例7 单片机主频为6MHz,要求定时器0用于定时、软件启动、工作方式为方式0、定时时间为10ms,试产生周期为20ms的正方波。


例8 单片机主频为6 MHz,要求定时器1用于计数、软件启动、工作方式为方式2、计数长度为100,计数值满使得P1.0引脚LED灯亮,再计下一个100次后,LED灯灭,依次循环。


5.4.2 定时/计数器查询法
定时/计数器查询法,只查询TF0或TF1是否发生溢出为1,而不执行完整个中断处理过程的方法。
1.查询法初始化编程基本步骤
与中断法的不同之处在于不需要开放定时/计数器的中断,只有四步。
第一步,根据定时时间或计数要求,确定计数初值。
第二步,预置定时或者计数的初值到THx和TLx。
第三步,确定工作方式,写控制字到TMOD。
第四步,启动定时/计数器。
2.查询法编程举例
例9 单片机主频为6MHz,要求定时器0用于定时、软件启动、工作方式为方式0、定时时间为10ms,试产生周期为20ms的正方波,采用查询法。

例10 单片机主频为6MHz,要求定时器1用于计数、软件启动、工作方式为方式2、计数长度为100,计数值满使得P1.0引脚LED灯亮,再计下一个100次后,LED灯灭,依次循环,采用查询法。
![]()
