用delayMicroseconds()遇上问题了!
我用delayMicroseconds()做一个简单的延时时,用示波器测量的脉宽与延时的脉宽差很远啊,WHY?intled=13;
void setup()
{
pinMode(led,OUTPUT);
}
void loop()
{
analogWrite(led,254);
delayMicroseconds(20);
analogWrite(led,0);
delayMicroseconds(40);
}
结果测量时发现,高电平脉冲宽度是30微秒,低电平宽度是50微秒,这种情况正常吗? 貌似其他语句执行也要耗时,再说要精确延时你得用定时器中断,而不是依赖这个函数 嗯你说的是,我只是觉得16M晶振语句占用的时间应该不会那么长, intled=13;
void setup()
{
pinMode(led,OUTPUT);
}
void loop()
{
digitalWrite(led,HIGH);
digitalWrite(led,LOW);
}
我又试了一下这个程序,用示波器观察,高电平约要持续7微秒的时间才会跳到低电平,然后低电平又要持续约7微秒时间,这正常吗? 反编译出来看看 思丶无邪 发表于 2012-9-7 11:24 static/image/common/back.gif
intled=13;
void setup()
{
这个是没有问题的,因为在程序运行时,每一条指令都是需要时间的。几微秒的时间是可以的! Randy 发表于 2012-9-26 13:55 static/image/common/back.gif
这个是没有问题的,因为在程序运行时,每一条指令都是需要时间的。几微秒的时间是可以的!
嗯是的! 但如果用PORT 来取代digitalWrite(); 占用的时间就会大幅的减少 思丶无邪 发表于 2012-9-27 17:17 static/image/common/back.gif
嗯是的! 但如果用PORT 来取代digitalWrite(); 占用的时间就会大幅的减少
您发现了更少的函数就好了!呵呵!
页:
[1]