void delay_us(uint z)
{
for(z;z>0 ; z--)
{
nop(); nop();
nop(); nop();
}
nop(); nop();
}
一个nop(); 一个机器周期
一个机器周期 12*(1/12 M) =1us
for循环 32次 32*4=128
for外 2次
所以延时128+2*1us=130us
F = 1/T ;其中F是频率,T是周期,关于时钟周期、机器周期、指令周期的概念及三者之间的关系,https://zhidao.baidu.com/question/60373878.html
12MHZ就是1秒12000000个时钟周期,12个时钟周期等于一个指令周期nop(),也就是1秒1000000个nop();1us一个nop();所以你那里for循环32次就是128us,再加上2us,总共130us
12个时钟周期等于一个指令周期nop(),一个机器周期 12*(1/12 M) =1us,所以你那里for循环32次就是128us,再加上2us,总共130us
一个nop(); 一个机器周期, 12*(1/12 M) =1us,for循环 32次 32*4=128us,再加2us
所以延时130us
考虑放循环中加上一个IO口翻转直接抓一下就出来了
while(1)
{
P10=1;
delay(32);
P10=0;
delay(32);
}
根据编译器的优化等级不同,延时时间会不一样,最好是根据IO翻转进行实测。