arduino中 阻塞延时
今天在弄一个脉冲的宽度是时候我不用delayMicroseconds()这个函数 就用asm("nop")这个语句在那里产生阻塞延时,板子的晶振是16M的,结果发现怪事了,我用的是这语句int i=7;
PORTB|=(1<<PORTB7);
do{
i--;
asm("nop");
}
while(i);
产生的延时时间是3.2微秒,结果i=6时 就立马跳到了440纳秒。i小于6时,延时的步长是62.5纳秒,如果i大于7,延时的步长就变成了440纳秒,不再是之前的62.5纳秒了,这让我有点搞不懂啊.....
结果我为了要产生1微妙的延时我用了笨的方法
for(int i=0;i<3;i++) // delay 1 microsecond
{
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
} 上面那里延时1微秒应该是
for(int i=0;i<2;i++) // delay 1 microsecond
{
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
} 调用之前 asm("cli") 关全局中断 之后 asm("sei") 恢复。 linhaimi 发表于 2012-12-3 12:17 static/image/common/back.gif
之后 asm("sei") 恢复。
我直接在loop的开始就用noIterrupts();关掉中断了...
页:
[1]