51单片机循环延迟函数,外循环和内循环讲解
时间: 2023-11-29 13:59:44 浏览: 47
51单片机循环延迟函数通常使用两个循环,一个外循环和一个内循环。
外循环是用来控制延迟的时间,内循环是用来控制延迟的次数。
具体来说,外循环的计数器通常是一个较大的数值,比如1000或者2000,用来控制整个延迟的总时间。内循环的计数器通常是一个较小的数值,比如10或者20,用来控制每个小时间段内延迟的次数。
在程序中,循环延迟函数的代码通常类似于下面的样子:
```c
void delay(unsigned int xms) //延时函数
{
unsigned int i,j;
for(i=0;i<xms;i++)
for(j=0;j<20;j++);
}
```
其中,外循环的计数器 i 控制总的延迟时间,内循环的计数器 j 控制每个小时间段内的延迟次数。这个函数的作用是延迟 xms 毫秒。
需要注意的是,循环延迟函数的精度不是很高,因为它的延迟时间是由 CPU 的执行速度决定的,而 CPU 的执行速度受到很多因素的影响,比如主频、工作温度等等。因此,如果需要更高精度的延迟,可以考虑使用定时器或者外部晶振来实现。
相关问题
写一个51单片机延时循环函数
以下是一个简单的51单片机延时循环函数:
```c
void delay(unsigned int ms)
{
unsigned int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 1141; j++);
}
```
该函数接受一个无符号整数参数 `ms`,表示需要延时的毫秒数。函数中使用了两个嵌套的循环,第一个循环控制延时的次数,第二个循环执行空操作来消耗时间。根据实际情况,可以调整第二个循环中的常数值来控制延时的精度。
12HZ的51单片机循环延迟50ms函数
在51单片机中,循环延迟的方法是通过空循环来实现的,即在循环内部不做任何操作,等待一定的时间后再退出循环。对于一个12MHz的单片机,可以通过以下代码实现50ms的循环延迟:
```c
void delay_50ms() {
unsigned char i, j;
for(i = 0; i < 114; i++) {
for(j = 0; j < 110; j++) {
// 一个空循环大约需要12个时钟周期,这里将其调整到110
}
}
}
```
这里的具体参数值需要根据实际情况进行调整,以保证延迟时间的准确性。