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

ICC avr 不执行语句

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
ICC avr 不执行语句
6 Y: U2 v& f$ s+ ]. e- O
4 v+ e! [) \1 V- |2 i3 K1 F
; m/ d5 N1 ~$ s  G; ?& o! d4 s

0 b; j( K+ L( _3 z( B大家看看这个程序,我用protues仿真,LED可以亮灭,但是想加入延时,自己写的延时加上去没有反应,用个自减语句也没反应,发现除了IO口的亮灭语句执行外,在IO亮灭语句间加函数、FOR、WHILE、等都不会执行,而且加这些语句之后连它后面的亮灭语句也不执行了。如果只有IO口的亮灭语句和大循环的while语句,可以闪烁,但是跳不出循环,我估计这个大循环while也有问题。; Y7 d  O$ R5 g- B- f( F
就这个几个语句,我程序没问题的啊,有谁碰到过。好像我用AS6.2也有相同问题。真是太奇葩了
3 H: g8 |+ Q/ C% [0 P6 B* o4 W# i! h

该用户从未签到

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

点评

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

该用户从未签到

3#
 楼主| 发表于 2019-3-27 11:18 | 只看该作者
helendcany 发表于 2019-3-27 10:58
: j* q; P) U. P# m计算一下你的延时时间,如果太长的话,要很长时间才有反映的,这种测试时的延时最好在半秒以上,一秒以内, ...

, K9 X8 r' \# g  c+ d  a1 I$ L果真如此,竟然忘了在最后也加上延时。太不严谨了。多谢前辈指点!9 r6 }- y0 K) k2 N; r6 D+ q

该用户从未签到

4#
发表于 2019-3-27 11:33 | 只看该作者
看你这个图,是低电平点亮。* n. B; _/ \* {% y' n" ]5 P: K
你这个代码有两个很严重的问题。
& o- T* T2 P5 C1、PA口先0X01,然后延时,最后0XFF,这个时候执行完马上又会回到最开始PA=0X01,因为是while(1)这个无限循环。第一个问题就在这里了,AVR执行速度很快,PA=0XFF,然后回到开始PA=0X01,也就是说PA=0XFF根本没有保持长时间。那么,人眼肯定是看不到LED全灭,因为马上变成0X01。因为你在PA=0X01后面加了一点延时,说明PA=0X01保持时间比PA=0XFF久,所以宏观上看,肯定是看到七个灯亮,一个灯灭的效果。所以在PA=0XFF后面,也是要放延时的。/ f9 e2 v0 ]! }- b
2、你的 while(i--)延时,里面是2000,我们粗略估算,假设执行一次是2us,那么执行2000次是4000us,也就是4ms。4ms的延时,人眼肯定是分辨不出来的,你的延时太短了!
9 P. G* ~; i8 a/ w2 G- M$ m* F0 j4 \* C
, ^. |1 M. ^5 @9 J- ^+ A要成功,那么你应该这样:每个PA状态后面都要放延时。然后每个延时时间要长。

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-23 13:52 , Processed in 0.140625 second(s), 31 queries , Gzip On.

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

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

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