8051 us延时函数
时间: 2023-06-22 15:30:17 浏览: 80
下面是一个基于8051微控制器的us延时函数:
```
void delay_us(unsigned int us)
{
while(us--)
{
// 1 us 延时需要的指令周期
_nop_();
_nop_();
_nop_();
_nop_();
}
}
```
在这个函数中,我们使用了一个while循环来进行延时。因为8051的时钟频率为12MHz,即每个时钟周期为1/12MHz = 83.33ns,因此当我们使用一个空的循环来延时时,每次循环的时间为4个时钟周期,即4 * 83.33ns ≈ 333.33ns ≈ 0.33us。这样,当我们将要延时的时间us传入函数后,我们可以通过不断地循环来实现指定的延时时间。
需要注意的是,由于8051芯片的定时器精度较低,因此在使用延时函数时可能会存在一定的误差。在实际应用中,我们需要根据具体情况进行调整。
相关问题
8051 1t 48mhz us延时函数
在8051芯片中,1T指的是每个指令需要1个时钟周期,而48MHz则表示时钟频率为48MHz,即每个时钟周期为1/48MHz ≈ 20.83ns。
下面是一个基于1T 48MHz的8051微控制器的us延时函数:
```
void delay_us(unsigned int us)
{
unsigned int i;
while(us--)
{
for(i=0;i<4;i++);
}
}
```
在这个函数中,我们使用了一个for循环来进行延时。因为每个指令需要1个时钟周期,所以在48MHz的时钟频率下,每个时钟周期为1/48MHz ≈ 20.83ns。因此,当我们使用一个空的for循环来延时时,每次循环的时间为4个时钟周期,即4 * 20.83ns = 83.33ns。这样,当我们将要延时的时间us传入函数后,我们可以通过不断地循环来实现指定的延时时间。
需要注意的是,由于8051芯片的定时器精度较低,因此在使用延时函数时可能会存在一定的误差。在实际应用中,我们需要根据具体情况进行调整。
stm32 us延时函数
在STM32系列微控制器中,可以使用以下代码来实现us级别的延时函数:
```c
void Delay_us(uint32_t nus)
{
uint32_t ticks;
uint32_t told, tnow, tcnt = 0;
uint32_t reload = SysTick->LOAD;
ticks = nus * (SystemCoreClock / 1000000);
tcnt = 0;
told = SysTick->VAL;
while (1) {
tnow = SysTick->VAL;
if (tnow != told) {
if (tnow < told)
tcnt += told - tnow;
else
tcnt += reload - tnow + told;
told = tnow;
if (tcnt >= ticks)
break;
}
}
}
```
该函数基于系统滴答定时器(SysTick)实现。首先计算出需要延时的系统滴答定时器的滴答次数,然后在while循环中不断读取SysTick->VAL寄存器的值,直到延时时间到达。需要注意的是,该函数可能会受到其他中断的干扰,因此在实际使用中需要进行一定的优化和调试。