已知AT89S51单片机的晶振频率是12MHz,某现场温度采集系统,要求 每隔2s对数据进行采集。若采集函数为void Sample_data( ),请利用T0 编程实现。要求说明定时器计数器工作方式如何设置,初值如何计算。写出代码
时间: 2024-03-31 16:32:52 浏览: 33
以下是AT89S51单片机实现每隔2s采集数据的代码:
```c
#include <reg51.h> // 头文件
void Sample_data(); // 声明采集函数
void main()
{
TMOD = 0x01; // 设置定时器T0的工作方式为模式1
TH0 = 0xD1; // 根据晶振频率为12MHz,计算得到T0计数器的初值为0xD100
TL0 = 0x00;
TR0 = 1; // 启动定时器T0,使其开始计数
ET0 = 1; // 开启定时器T0的中断功能
EA = 1; // 开启总中断
while(1)
{
// 主程序中可以执行其他操作,不需要关心定时器T0的计数
}
}
void Sample_data() interrupt 1 // 定时器T0的中断服务程序
{
TR0 = 0; // 关闭定时器T0
TF0 = 0; // 清除定时器T0的中断标志位
TH0 = 0xD1; // 重新设置计数器初值
TL0 = 0x00;
TR0 = 1; // 重新启动定时器T0
// 调用采集函数完成数据采集
Sample_data();
}
```
在上面的代码中,我们通过设置TMOD寄存器的低四位为0x01,将定时器T0的工作方式设置为模式1(16位自动重载模式)。然后根据晶振频率为12MHz,计算得到T0计数器的初值为0xD100,将其写入TH0和TL0寄存器中。
在主程序中,我们循环执行一些操作,不需要关心定时器T0的计数。当定时器T0溢出时,会产生中断,进入中断服务程序Sample_data()。在中断服务程序中,我们首先关闭定时器T0,然后清除定时器T0的中断标志位,重新设置计数器初值,并重新启动定时器T0。最后,我们调用采集函数Sample_data()完成数据采集的操作。
需要注意的是,我们在开启定时器T0的中断功能时,需要设置ET0为1;在开启总中断时,需要设置EA为1。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://img-home.csdnimg.cn/images/20210720083646.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)