51单片机12mhz晶振一个nop是延时1us么
时间: 2024-02-12 19:03:08 浏览: 28
不是的,一个NOP指令并不能延时1us。在51单片机使用12MHz晶振时,每个机器周期为1/12MHz=83.3ns。因此,要延时1us,需要执行1us/83.3ns=12个机器周期。也就是说,需要执行12个NOP指令才能实现1us的延时。因此,可以使用如下代码实现1us延时:
```
void Delay1us() {
unsigned char i;
for(i=0; i<12; i++) {
_nop_();
}
}
```
在上述代码中,`_nop_()`是汇编指令,表示空操作。在每次循环中,执行一次空操作需要一个机器周期,因此循环12次就可以实现1us的延时。
相关问题
51单片机12mhz晶振延时1us
在51单片机使用12MHz晶振时,每个机器周期为1/12MHz=83.3ns。要延时1us,就需要执行1us/83.3ns=12个机器周期。可以通过以下代码实现1us延时:
```
void Delay1us() {
unsigned char i;
for(i=0; i<12; i++) {
_nop_();
}
}
```
在上述代码中,`_nop_()`是汇编指令,表示空操作。执行一次空操作需要一个机器周期,因此循环12次就可以实现1us延时。
单片机编写延时15ms的延时子程序,晶振12Mhz,一个机器周期1us
好的,以下是延时15ms的延时子程序的代码,基于12Mhz晶振和1us的机器周期:
```c
void delay15ms() {
unsigned int i, j;
for (i = 0; i < 15000; i++) {
for (j = 0; j < 12; j++) {
asm("nop"); // 1us 等待
}
}
}
```
使用方法:在需要延时的地方调用 `delay15ms()` 即可。