TH1 = 0; TL1 = 0; 为什么
时间: 2023-10-28 11:05:49 浏览: 76
在使用定时器1计算脉冲信号频率的时候,需要先将定时器1的计数值清零,以便从零开始计数。在你提供的代码中,TH1 和 TL1 寄存器被赋值为0,这样就可以将定时器1的计数值清零。
需要注意的是,定时器1的计数值是不断增加的,当计数值达到最大值(对于8位定时器而言,最大值为255),就会自动清零重新开始计数。因此,在每次使用定时器1计算脉冲信号频率之前,都需要将定时器1的计数值清零。
相关问题
TL1 = 0x66; TH1 = 0xEA; 怎么计算的?
这是关于计算串口通信波特率的问题。在计算波特率时,需要知道串口通信的时钟频率和预设的波特率。在8051单片机中,串口通信的时钟频率是系统时钟频率的1/12,而TH1和TL1是定时器1的重载值,用于计算波特率。
具体计算方法是:
波特率 = 时钟频率 / (32 * (256 - TH1 + TL1))
其中,时钟频率是系统时钟频率的1/12,32是串口通信的采样点数,256是定时器1的计数上限。
在这个问题中,TH1 = 0xEA,TL1 = 0x66,假设系统时钟频率为12MHz,那么计算公式为:
波特率 = 12MHz / (32 * (256 - 0xEA + 0x66)) = 9600bps
因此,这个配置可以实现9600bps的串口通信。
解释代码TMOD=0x20; TH1=0xFD; TL1=0xFD;
这段代码是针对基于8051架构的单片机进行串口通信的设置。
其中,TMOD寄存器是定时器/计数器模式寄存器,0x20表示将定时器1设置为模式2,即8位自动重装载定时器。
TH1和TL1分别是定时器1的高8位和低8位计数器初值寄存器。根据波特率公式,波特率=晶振频率/(12*定时器初值),因此这里的初值设置为0xFD,对应9600波特率。
综合起来,这段代码的作用是设置定时器1为8位自动重装载定时器,并将其初值设置为0xFD,从而实现单片机与外部设备的9600波特率的串口通信。