关于运行出现的结果与实际运行不一致的原因分析;

jasenwan 2010-11-21 05:36:11
while(1){
P2 = 0xfd;
delay(500);
P2 = 0xff;
}
这个程序在编译器中调试与自己当初设定的一样,烧录进单片机中进行运行时,结果显示为
P2=OXFD的结果,而且不会出现闪烁的情况,请问什么会出现此现象,请各位分析下;
...全文
150 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
arong1234 2010-11-21
  • 打赏
  • 举报
回复
延时500ms确实很长了,但是考虑你循环末的那个赋值和下次循环开始的那个赋值之间延时多少?延时0!

改成

while(1){
P2 = 0xfd;
delay(500);
P2 = 0xff;
delay(500);//这里缺少延时

}


[Quote=引用 5 楼 jasenwan 的回复:]
这个延时如果太快,我使用给蜂鸣器也是用这个延时的,声音也不是那么急处啊;而且我在进行流水灯设计时也是用这个延时的啊,看得很明显示啊;
[/Quote]
kingstarer 2010-11-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jasenwan 的回复:]
这个延时如果太快,我使用给蜂鸣器也是用这个延时的,声音也不是那么急处啊;而且我在进行流水灯设计时也是用这个延时的啊,看得很明显示啊;
[/Quote]
不是说延时太快,而是说你在循环中第二次给P2赋值后要再延时,再次调用delay
漫步者、 2010-11-21
  • 打赏
  • 举报
回复

clock_t begin,finish;
while(1)
{
long secs;
P2=0xfd;
cin>>secs;// 多少秒
finish=secs*CLOCKS_PER_SEC;
begin=clock();
while(clock()-begin < finish );
P2=0xff;
}
// 这样试一试!
jasenwan 2010-11-21
  • 打赏
  • 举报
回复
这个延时如果太快,我使用给蜂鸣器也是用这个延时的,声音也不是那么急处啊;而且我在进行流水灯设计时也是用这个延时的啊,看得很明显示啊;
hk2305621_1 2010-11-21
  • 打赏
  • 举报
回复
顶上,呵呵,嵌入式开发。正要学习
arong1234 2010-11-21
  • 打赏
  • 举报
回复
P2设置为0xFF的时间太短,这么长的闪烁眼睛是感觉不出来的,你需要在P2=0xFF后也delay(500)才行
dubiousway 2010-11-21
  • 打赏
  • 举报
回复
烧录进单片机中进行运行的时候,
你是怎么观察结果的,很好奇。一个无穷循环,运行的时候,你为什么说“结果显示为 ”
“不会出现闪烁”什么意思。不太懂
apn172 2010-11-21
  • 打赏
  • 举报
回复
是否写的太快了,delay长点是否有变化。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧