找回密码
 注册
关于网站域名变更的通知
查看: 733|回复: 7
打印 上一主题 下一主题

ICC avr 不执行语句

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-27 10:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
ICC avr 不执行语句
  n* Q* ?+ v! z( X5 V9 ^
5 `+ W+ Z9 p) D' |. D
! q4 `7 C' |& k
% R8 t# V0 B- y% T$ d4 L5 b. P4 j6 q
大家看看这个程序,我用protues仿真,LED可以亮灭,但是想加入延时,自己写的延时加上去没有反应,用个自减语句也没反应,发现除了IO口的亮灭语句执行外,在IO亮灭语句间加函数、FOR、WHILE、等都不会执行,而且加这些语句之后连它后面的亮灭语句也不执行了。如果只有IO口的亮灭语句和大循环的while语句,可以闪烁,但是跳不出循环,我估计这个大循环while也有问题。8 W% H6 q5 M. \
就这个几个语句,我程序没问题的啊,有谁碰到过。好像我用AS6.2也有相同问题。真是太奇葩了

. x) A8 Z) B1 X+ }/ w7 E9 g

该用户从未签到

2#
发表于 2019-3-27 10:58 | 只看该作者
计算一下你的延时时间,如果太长的话,要很长时间才有反映的,这种测试时的延时最好在半秒以上,一秒以内,容易看到反应

点评

果真如此,竟然忘了在最后也加上延时。太不严谨了。多谢前辈指点!  详情 回复 发表于 2019-3-27 11:18

该用户从未签到

3#
 楼主| 发表于 2019-3-27 11:18 | 只看该作者
helendcany 发表于 2019-3-27 10:58! Y" [, g0 i# u, C) w( J3 H9 h
计算一下你的延时时间,如果太长的话,要很长时间才有反映的,这种测试时的延时最好在半秒以上,一秒以内, ...

$ E* A; r- G! s果真如此,竟然忘了在最后也加上延时。太不严谨了。多谢前辈指点!
# B! n1 f# p; b  R9 y( b- T

该用户从未签到

4#
发表于 2019-3-27 11:33 | 只看该作者
看你这个图,是低电平点亮。
' A( ^1 C2 \5 K8 p5 K你这个代码有两个很严重的问题。. x7 [0 g/ o7 e5 {
1、PA口先0X01,然后延时,最后0XFF,这个时候执行完马上又会回到最开始PA=0X01,因为是while(1)这个无限循环。第一个问题就在这里了,AVR执行速度很快,PA=0XFF,然后回到开始PA=0X01,也就是说PA=0XFF根本没有保持长时间。那么,人眼肯定是看不到LED全灭,因为马上变成0X01。因为你在PA=0X01后面加了一点延时,说明PA=0X01保持时间比PA=0XFF久,所以宏观上看,肯定是看到七个灯亮,一个灯灭的效果。所以在PA=0XFF后面,也是要放延时的。+ V5 J2 G/ F7 F6 s1 |' n
2、你的 while(i--)延时,里面是2000,我们粗略估算,假设执行一次是2us,那么执行2000次是4000us,也就是4ms。4ms的延时,人眼肯定是分辨不出来的,你的延时太短了!1 V1 B; x' Q/ k& T
# e0 d3 t5 z1 q& |8 \/ e
要成功,那么你应该这样:每个PA状态后面都要放延时。然后每个延时时间要长。

该用户从未签到

5#
发表于 2019-3-27 13:45 | 只看该作者
烧写程序是可以修改熔丝位来选择内部晶振,ATMEGA16芯片默认1M。

该用户从未签到

6#
 楼主| 发表于 2019-3-27 13:50 | 只看该作者
谢谢各位的指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-18 20:39 , Processed in 0.140625 second(s), 30 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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