首页 理论教育 单片机定时/计数器应用实例及分析

单片机定时/计数器应用实例及分析

时间:2023-10-22 理论教育 版权反馈
【摘要】:图6-36 脉冲频率测定程序结构与工作关系示意图6.参考程序中定时器/计数器初始化分析从图6-36的结构分析可以看出,程序采用T0作为0.1s的定时器,T1作为外部输入脉冲的计数器,每1s重新计数一次,则T1可测定输入T1引脚外部脉冲的频率。

单片机定时/计数器应用实例及分析

1.实验名称

脉冲频率测定实验

2.实验内容

定时器0按0.1s循环,作为计时单位定时;定时器1对外部输入脉冲计数求出其脉冲频率。

主程序流程如图6-34所示,中断子程序流程如图6-35所示。

3.实验方法

用插针把8MHz脉冲发生器插孔和T插孔连接,使T0~T7插孔上分别可以输出8.0MHz、4.0MHz、2.0MHz、1.0MHz、500kHz、250kHz、125kHz、62.5kHz的脉冲。P3.5依次接T0~T7插孔,执行程序,每次观察存储器40H、41H的数值。

978-7-111-46831-8-Chapter06-118.jpg

图6-34 主程序流程图

978-7-111-46831-8-Chapter06-119.jpg

图6-35 中断子程序流程图

4.参考程序

978-7-111-46831-8-Chapter06-120.jpg

978-7-111-46831-8-Chapter06-121.jpg

5.参考程序结构分析

此应用程序主要由主程序、T0中断子程序与显示子程序等模块组成,其程序结构与工作关系如图6-36所示。图中左侧显示部分程序省略。(虚框部分)

978-7-111-46831-8-Chapter06-122.jpg

图6-36 脉冲频率测定程序结构与工作关系示意图

6.参考程序中定时器/计数器初始化分析

从图6-36的结构分析可以看出,程序采用T0作为0.1s的定时器,T1作为外部输入脉冲的计数器,每1s重新计数一次,则T1可测定输入T1引脚(P3.5)外部脉冲的频率。

T0与T1的初始化主要在应用程序的初始化阶段进行,并在T0每次0.1s定时值到产生中断请求被响应时重新恢复初值,重新启动。

(1)初始化语句的作用 定时器T0与T1初始化程序段为0733~0748语句共8条,对TMOD、T0、T1、IE及TCON等相关的特殊功能寄存器设置初值。具体情况如下:

1)0733语句“MOV TMOD,#51H”,用以设置T0与T1的工作方式,执行后TMOD←51H,则此定时器工作模式控制器的各位情况如图6-37所示。

2)0736语句与“MOV TH0,#3CH”0739语句“MOV TL0,#0B7H”,用以对T0定时器设置0.1s的定时初值,其中TH0是T0定时器的高8位寄存器,在SFR区中地址是8CH;TL0是(www.xing528.com)

978-7-111-46831-8-Chapter06-123.jpg

图6-37 执行MOV TMOD,#51H后的情况

T0定时器的低8位寄存器,在SFR区中地地址是8AH。

3)073C语句与073F语句:

MOV TL1,#00H;用以对T1计数器低8位清零;

MOV TH1,#00H;用以对T1计数器高8位清零。

执行此两条语句后,T1计数器为零,则T1从初始值零开始计数,以测定每秒从T1引脚(P3.5)输入的外部脉冲频率。

4)0745语句“ORL IE,#82H”,用以开启T0内部中断源,使MCS-51中断系统允许T0在计数溢出16位时向CPU申请中断。

执行此语句后的IE寄存器情况如图6-38所示。

978-7-111-46831-8-Chapter06-124.jpg

图6-38 执行ORL IE,#82H用以开启T0内部中断源的寄存器情况

5)0748语句“MOV TCON,#50H”,用以启动T0、T1计数,使两者立即从初值开始增1计数,即程序进入如图6-39所示的启动T0、T1阶段。

执行此语句后的定时器控制寄存器TCON情况如图6-39所示。

978-7-111-46831-8-Chapter06-125.jpg

图6-39 执行MOV TCON,#50H后用以启动T0、T1计数的情况

(2)程序中T0初值计算法

1)MCS-51时钟频率:

978-7-111-46831-8-Chapter06-126.jpg

定时12分频计数脉冲周期978-7-111-46831-8-Chapter06-127.jpg

2)0.1s=105μs=5×104个内部定时脉冲周期。

3)考虑到T0响应中断时,中断查询1周期、中断响应2周期(中断响应:PC→SP,PC←000BH)、从入口跳转指令(LJMP ZO00)、重装初值T0两条指令“MOV TL0,#0B7H”“MOV TH0,#3CH”,费时4×2+1机器周期=9机器周期,计数脉冲=18μs,则实际定时T0的需要值为50000-9=49991,转换为十六进制为C349H。

4)T0工作方式1,模值=216=10000H。

5)T0的初值计算:T0的初值=模值-需要值(0.1s)=10000H-C349H=3CB7H

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈