要求采用定时器0、中断模式,控制单片机P3.0引脚输出如下图所示的波形。 1)说明选择的定时器工作方式并写出初值计算过程。 2)编写程序
时间: 2023-12-10 11:42:31 浏览: 43
1)选择的定时器工作方式为定时器/计数器模式,并设置为16位定时器模式。初值计算过程如下:
时钟频率:Fosc/12 = 11.0592MHz/12 = 921.6kHz
所需计数次数:921.6kHz / 2kHz = 460
最大计数值:2^16 - 1 = 65535
因此,初值为65535 - 460 + 1 = 65176(0xFE38)
2)程序如下:
```c
#include <reg52.h>
void main()
{
TMOD = 0x01; // 定时器0工作在16位定时器模式
TH0 = 0xFE; // 初始化定时器初值
TL0 = 0x38;
ET0 = 1; // 允许定时器0中断
TR0 = 1; // 启动定时器0
P3 = 0x00; // 初始化P3.0引脚输出为低电平
while (1); // 主程序空循环
}
void Timer0_ISR() interrupt 1 // 定时器0中断服务函数
{
static bit flag = 0; // 定义静态变量flag,用于切换高低电平输出
TH0 = 0xFE; // 重新赋初值
TL0 = 0x38;
if (flag == 0) // 输出高电平
{
P3 |= 0x01;
flag = 1;
}
else // 输出低电平
{
P3 &= ~0x01;
flag = 0;
}
}
```
注意:由于定时器0中断服务函数中使用了静态变量,因此需要在函数外定义。另外,由于需要控制P3.0引脚输出高低电平,因此需要在程序中初始化该引脚的输出状态为低电平。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)