51单片机延时函数用for循环200ms
时间: 2024-10-15 21:02:04 浏览: 41
用C51编写单片机延时函数
在51单片机中,由于其资源有限,尤其是缺乏硬件计数器,我们通常不会直接使用for循环来实现精确的200毫秒延时。但是,可以借助定时器T0配合中断机制来模拟延时效果。
首先,你需要设置定时器T0的工作模式,通常是工作于模式1,此时需要外部中断1触发。然后通过软件控制P3.4(TF0)口作为输入引脚,当外部中断到来时,会自动将TF0清零并启动定时器。
```c
#include <reg52.h>
void delay(unsigned int time) {
unsigned char i;
TMOD = 0x01; // 设置定时器T0为模式1
TH0 = (65536 - time * 256) / 256; // 设置初始计数值,假设系统频率是12MHz
ET0 = 1; // 开启外部中断0
EA = 1; // 启动总中断
TR0 = 1; // 启动定时器
for(i = 0; i < 256; i++) { // 主循环用于占位,外部中断会打断这个循环
// 这里不做其他操作,因为主要延迟来自定时器
}
TF0 = 1; // 当达到设定值时手动置位TF0,外部中断才会触发
while(!TF0); // 等待TF0变为0,表示定时结束
TF0 = 0; // 清除TF0
ET0 = 0; // 关闭外部中断
}
// 调用延时函数
void main() {
delay(200);
}
```
注意,这种方法并不提供绝对准确的200ms,实际延时可能会因为处理器速度、干扰等因素有所波动。如果需要更精确的延时,可能需要使用外部晶振或者其他硬件辅助。
阅读全文