C51 如何写us级延时函数(不使用——nop_())
时间: 2024-06-10 07:04:52 浏览: 7
您可以使用定时器T0来实现us级延时。具体步骤如下:
1. 设置定时器T0的工作模式为模式1(16位自动重载模式);
2. 根据晶振频率和定时器分频系数计算出定时器每个计数值对应的时间,例如对于一个11.0592MHz的晶振和1分频,则一个计数值对应的时间为1/11.0592us;
3. 根据延时的时长计算出需要定时器计数的次数;
4. 使用循环实现定时器的计数,并在计数完成后清零计数器。
以下是示例代码:
void delay_us(unsigned int us)
{
unsigned int i;
// 设置定时器T0工作模式为模式1
TMOD &= 0xf0;
TMOD |= 0x01;
// 计算每个计数值对应的时间
TH0 = (65536 - us) / 256;
TL0 = (65536 - us) % 256;
// 启动定时器
TR0 = 1;
// 等待计数完成
for (i = 0; i < us; i++)
{
while (!TF0);
TF0 = 0;
}
// 停止定时器
TR0 = 0;
}
相关问题
c51单片机延时函数1ms
以下是两种c51单片机延时函数1ms的例子:
1. 使用intrins.h库函数的延时函数:
```c
#include <intrins.h>
void Delayms(unsigned int ms) //@11.0592MHz
{
unsigned char i, j;
while (ms--)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
```
2. 使用for循环的延时函数:
```c
void delay(unsigned int time) // time代表需要延时的毫秒数
{
unsigned int j=0;
for(;time>0;time--)
for(j=0;j<125;j++);
}
```
c51delay函数延时1秒,24.0000MHz的晶振
在24MHz的晶振下,精确延时1秒的方法如下:
```c
#include <reg52.h>
void delay_1s() {
unsigned char i, j, k;
for (i = 0; i < 100; i++) {
for (j = 0; j < 114; j++) {
for (k = 0; k < 6; k++) {
_nop_();
}
}
}
}
void main() {
while (1) {
delay_1s(); // 延时1秒
}
}
```
在24MHz的晶振下,每个机器周期的时间为1/24000000秒,即41.67ns。因此,我们可以通过不断执行空指令`_nop_()`来实现延时。在上面的代码中,内层循环执行了6次空指令,相当于延时6个机器周期,经过114次内层循环后,大约延时了1ms。因此,外层循环需要执行100次,才能延时1秒。
需要注意的是,这种方法的延时精度较低,受到许多因素的影响,如温度、电压等。如果需要高精度的延时,可以考虑使用定时器来实现。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)