如何用8位51单片机写出100ms的高电平方波1ms的低电平方波代码
时间: 2024-10-19 10:17:49 浏览: 33
为了在8位的51单片机上编写出100ms的高电平(通常称为“1”状态)和1ms的低电平(通常称为“0”状态)的方波,我们首先需要了解该单片机的定时器和中断系统。51系列常用的定时器如Timer 0或Timer 1可以用来实现这个功能。这里假设我们使用的是无外部计数器模式,即寄存器TMOD配置为模式2。
以下是一个简单的示例代码:
```c
#include <reg51.h>
void delay_ms(unsigned char ms) {
unsigned long count = 192; // 对于11.0592MHz晶振,1ms大约对应这个值
for (unsigned long i = 0; i < count * ms; i++);
}
void set_square_wave(void) {
TMOD = 0x01; // 设置定时器0工作于模式2
TH0 = 0xFF; // 高电平持续时间,满载计数
TL0 = 0xFD; // 高电平周期 = 1 + 2^(8-TH0 - TL0)
EA = 1; // 开启全局中断
ET0 = 1; // 启动定时器0中断
}
void low_level() {
TR0 = 0; // 关闭定时器0,进入低电平
while(TF0 == 0); // 等待定时器溢出标志TF0变为1,表示低电平结束
}
void high_level() {
TR0 = 1; // 启动定时器0,进入高电平
while(!TF0); // 等待定时器溢出标志TF0变为0,表示高电平开始
delay_ms(100); // 调用延时函数等待100ms
low_level(); // 切换到低电平
}
int main(void) {
set_square_wave();
while(1);
}
阅读全文