c51中50ms延时代码
时间: 2024-11-10 09:25:17 浏览: 46
在C51编译器中实现50毫秒的延时,通常会利用定时器功能。这里以8051单片机为例,假设你有一个可用的定时器,如Timer 0。以下是实现50ms延时的基本步骤:
```c
#include <reg51.h>
// 定义定时器0的工作模式
#define TIMER_MODE 0 // 使用模式1,即工作于自动重装定时器模式
// 定义定时器初值计算公式,假设系统时钟频率为fosc
unsigned short calculate_timer_value(unsigned long fosc) {
return (65536 - ((50 * 1000) / (fosc / 128))) - 1; // 128分频是为了得到准确的50ms
}
void delay_ms(unsigned long ms) {
unsigned long i;
unsigned short timer_val = calculate_timer_value(CSourgCC);
TMOD = TIMER_MODE | 0x01; // 设置TMOD寄存器为定时器0模式
TH0 = timer_val >> 8; // 高8位送TH0
TL0 = timer_val & 0xFF; // 低8位送TL0
for(i = 0; i < ms * 16; ++i); // 循环计数,16分频因为T0内部是16位计数器
}
// 调用函数,设置系统时钟频率(Hz)作为参数
void setup() {
CSourgCC = 128; // 设置晶振频率,假设是12MHz
delay_ms(1);
}
int main(void) {
setup();
while(1);
}
```
阅读全文