51单片机定时器方式1
时间: 2023-09-19 13:10:07 浏览: 131
方式1:
首先需要设置定时器/计数器t的工作模式和计数值。由于at89s51单片机的晶体振荡器频率为6mhz,我们可以选择将t设置为模式1,计数值为60(每计数1次相当于计数10个脉冲,因为6mhz的频率下,1个脉冲的时间为1/600000秒,10个脉冲的时间为1/600000秒,即1.67微秒)。
接下来,我们需要编写程序,使t能够在计数100个脉冲后转为定时工作方式,并在定时1ms后再次转为计数工作方式。具体实现方法如下:
1. 定义计数器变量count,初始值为。
2. 设置t的工作模式为模式1,计数值为60。
3. 在主程序中,不断循环执行以下步骤:
a. 判断t是否溢出,如果溢出则将count加1,并清除t的溢出标志位。
b. 判断count是否达到100,如果达到则将t的工作模式设置为模式2,定时1ms,并将t的工作模式重新设置为模式1,计数值为60,同时将count清零。
c. 如果count未达到100,则继续计数。
完整程序如下:
#include <reg51.h>
sbit pulse = P1^; // 外部脉冲输入口
unsigned char count = ; // 计数器变量
void main()
{
TMOD = x01; // 设置t的工作模式为模式1
TH = ; // 初始化t的计数值
TL = ;
TR = 1; // 启动t计数器
while(1)
{
if(TF) // 判断t是否溢出
{
TF = ; // 清除溢出标志位
count++; // 计数器加1
}
if(count == 100) // 判断是否计数100个脉冲
{
TR = ; // 停止t计数器
TMOD = x02; // 将t的工作模式设置为模式2
TH = xFC; // 设置t的计数值,定时1ms
TL = x66;
TR = 1; // 启动t计数器
while(!TF); // 等待定时1ms
TF = ; // 清除溢出标志位
TR = ; // 停止t计数器
TMOD = x01; // 将t的工作模式重新设置为模式1
TH = ; // 初始化t的计数值
TL = ;
TR = 1; // 启动t计数器
count = ; // 计数器清零
}
}
}
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)