51单片机主频12Mhz写一个延时1ms的延时函数
时间: 2024-05-04 10:19:40 浏览: 12
在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。
相关问题
51单片机主频35Mhz写一个延时1ms的延时函数
可以使用以下的延时函数:void DelayMs(unsigned int Ms)
{
unsigned int i;
for(i=0;i<Ms;i++)
{
DelayUs(1000);
}
}
51单片机延时函数
51单片机的延时函数可以通过计算器计算出机器周期的时间,然后通过循环来实现延时。以下是一个简单的示例代码:
```c
void delay(unsigned int ms) // 延时函数
{
unsigned int i,j;
for(i = 0; i < ms; i++)
for(j = 0; j < 1000; j++);
}
```
其中,参数 `ms` 表示需要延时的毫秒数。这个函数的原理是利用循环来占用 CPU 时间,从而实现延时。具体实现时,循环的次数需要根据单片机的主频进行调整,以保证延时的准确性。