极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20834|回复: 7

用delayMicroseconds()遇上问题了!

[复制链接]
发表于 2012-9-6 15:46:59 | 显示全部楼层 |阅读模式
我用delayMicroseconds()做一个简单的延时时,用示波器测量的脉宽与延时的脉宽差很远啊,WHY?
int  led=13;
void setup()
{
pinMode(led,OUTPUT);
}
void loop()
{
analogWrite(led,254);
delayMicroseconds(20);
analogWrite(led,0);
delayMicroseconds(40);
}
结果测量时发现,高电平脉冲宽度是30微秒,低电平宽度是50微秒,这种情况正常吗?
回复

使用道具 举报

发表于 2012-9-6 15:59:46 | 显示全部楼层
貌似其他语句执行也要耗时,再说要精确延时你得用定时器中断,而不是依赖这个函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-6 16:42:15 | 显示全部楼层
嗯  你说的是,我只是觉得16M晶振语句占用的时间应该不会那么长,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-7 11:24:02 | 显示全部楼层
int  led=13;
void setup()
{
pinMode(led,OUTPUT);
}
void loop()
{
digitalWrite(led,HIGH);
digitalWrite(led,LOW);
}
我又试了一下这个程序,用示波器观察,高电平约要持续7微秒的时间才会跳到低电平,然后低电平又要持续约7微秒时间,这正常吗?
回复 支持 反对

使用道具 举报

发表于 2012-9-7 15:21:47 | 显示全部楼层
反编译出来看看
回复 支持 反对

使用道具 举报

发表于 2012-9-26 13:55:51 | 显示全部楼层
思丶无邪 发表于 2012-9-7 11:24
int  led=13;
void setup()
{

这个是没有问题的,因为在程序运行时,每一条指令都是需要时间的。几微秒的时间是可以的!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-27 17:17:47 | 显示全部楼层
Randy 发表于 2012-9-26 13:55
这个是没有问题的,因为在程序运行时,每一条指令都是需要时间的。几微秒的时间是可以的!

嗯  是的! 但如果用PORT 来取代digitalWrite(); 占用的时间就会大幅的减少
回复 支持 反对

使用道具 举报

发表于 2012-9-27 19:31:53 | 显示全部楼层
思丶无邪 发表于 2012-9-27 17:17
嗯  是的! 但如果用PORT 来取代digitalWrite(); 占用的时间就会大幅的减少

您发现了更少的函数就好了!呵呵!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-3 17:26 , Processed in 0.039422 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表