上面的程序,我的52单片机主频是24Mhz,延时函数需要更改吗
时间: 2023-05-21 11:04:59 浏览: 74
根据常规的编程经验,如果你的52单片机主频是24MHz,那么你的延时函数就需要相应地进行更改。由于每个延时循环实际上取决于 CPU 的时钟速度,因此如果不进行修改,你可能会得到错误的延迟时间。因此,建议在更改延时函数之前先确认你的函数与主频是否匹配。
相关问题
LED_Init(); while(1) { for(i=0;i<16;i++) { GPIO_Write(GPIOA,lamp[i]); Delay(50000); } } } 单片机主频为10MHz延时函数是多少 点
如果单片机主频为10MHz,则延时函数的时间间隔应该为5000左右。这是因为延时函数的参数是一个计数值,每个计数值的时间长度是由单片机的主频和延时函数的实现方式来决定的。一般来说,可以通过实验或参考单片机的数据手册来确定延时函数的时间间隔。在这里,我们可以根据单片机主频为10MHz来估算延时函数的时间间隔,即:
1秒钟 = 10,000,000个计数值
1毫秒 = 10,000个计数值
1微秒 = 10个计数值
因此,50000个计数值大约对应5毫秒的延时时间。因此,延时函数的时间间隔应该为5000左右。
51单片机主频12Mhz写一个延时1ms的延时函数
在51单片机中,可以通过定时器来实现延时操作。以下是一个基于定时器的延时函数示例,可以实现1ms的延时:
```
void delay_ms(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 120; j++) { // 12MHz / 12 = 1MHz
// 使用定时器1计数1us
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = 0xFC;
TL0 = 0x66;
TR0 = 1;
while (!TF0);
TR0 = 0;
TF0 = 0;
}
}
}
```
在上面的代码中,使用定时器1来计数1us,并通过嵌套循环实现1ms的延时。具体来说,每次外层循环执行一次时,内层循环会执行120次,每次执行1us,总共就是120us,也就是1ms。
阅读全文