写出51单片机12M晶振1us延时和1ms延时的代码
时间: 2024-01-25 20:03:05 浏览: 742
下面是51单片机12M晶振的1us延时和1ms延时的代码:
// 定义时钟源频率
#define FREQ_SYSCLK 12000000UL
// 定义延时函数
void Delay_us(unsigned int n_us)
{
unsigned char i;
while(n_us--)
{
for (i = 0; i < FREQ_SYSCLK / 12000000; i++);
}
}
void Delay_ms(unsigned int n_ms)
{
unsigned int i;
while(n_ms--)
{
for (i = 0; i < 12000; i++);
}
}
希望可以帮到你。
相关问题
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延时。
51单片机12mhz晶振一个nop是延时1us么
不是的,一个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的延时。
阅读全文