用定时器输出方波代码
时间: 2024-06-12 11:10:59 浏览: 21
以下是两种用定时器输出方波的代码:
写法1:采用while(1)循环,使用查询方式,不使用中断
#include <reg51.h>
sbit rect_wave = P1^0;
void timelover(void);
void main() {
TMOD = 0x00; // 不门控,定时器方式,13位定时器/计数器
TH0 = 0xf0; // 高8位
TL0 = 0x0c; // 低5位
IE = 0x00; // 不允许中断,这里采用查询方式,不触发中断
TR0 = 1; // 启动T0计数
while(1) {
if(TF0) // 如果T0溢出
{
timelover();
TF0 = 0; // 软件清除标志位
}
}
}
void timelover(void) {
TR0 = 0; // 停止计数
TH0 = 0xf0; //重赋初值
TL0 = 0x0c;
rect_wave = !rect_wave; // 信号反转
TR0 = 1; // 启动计数
}
写法2:采用中断方式
#include <reg52.h>
sbit FB = P1^0;
void Init_ET_0()//定时器初始化函数
{
TMOD = 0x01;//启用定时器 0 ,工作模式为 模式1 。
EA = 1;//开总中断
ET0 = 1;//开定时器开关
TR0 = 1;//启动定时器
TH0 = (65536 - 500)/256;//给高八位赋初值
TL0 = (65536 - 500)%256;//给低八位赋初值
}
void Servoce_ET_0() interrupt 1 //定时器服务函数
{
TH0 = (65536 - 500)/256;//重装高八位
TL0 = (65536 - 500)%256;//重装低八位
FB = ~FB;
}
void main() {
Init_ET_0();
while(1) {
}
}
相关问题:
1. 定时器的工作原理是什么?
2. 定时器的计数模式有哪些?
3. 定时器的中断模式有哪些?
相关推荐
![](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)