ICC avr 不执行语句
大家看看这个程序,我用protues仿真,LED可以亮灭,但是想加入延时,自己写的延时加上去没有反应,用个自减语句也没反应,发现除了IO口的亮灭语句执行外,在IO亮灭语句间加函数、FOR、WHILE、等都不会执行,而且加这些语句之后连它后面的亮灭语句也不执行了。如果只有IO口的亮灭语句和大循环的while语句,可以闪烁,但是跳不出循环,我估计这个大循环while也有问题。
就这个几个语句,我程序没问题的啊,有谁碰到过。好像我用AS6.2也有相同问题。真是太奇葩了
看你这个图,是低电平点亮。
你这个代码有两个很严重的问题。
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后面,也是要放延时的。
2、你的 while(i--)延时,里面是2000,我们粗略估算,假设执行一次是2us,那么执行2000次是4000us,也就是4ms。4ms的延时,人眼肯定是分辨不出来的,你的延时太短了!
要成功,那么你应该这样:每个PA状态后面都要放延时。然后每个延时时间要长。
自己顶一下,刚刚学了51,现在看AVR,感觉avr比51麻烦,不够直观。而且还有这个奇葩问题
计算一下你的延时时间,如果太长的话,要很长时间才有反映的,这种测试时的延时最好在半秒以上,一秒以内,容易看到反应
果真如此,竟然忘了在最后也加上延时。太不严谨了。多谢前辈指点!
果真如此,竟然忘了在最后也加上延时。太不严谨了。多谢前辈指点!
果真如此,竟然忘了在最后也加上延时。太不严谨了。多谢前辈指点!
果真如此,竟然忘了在最后也加上延时。太不严谨了。多谢前辈指点!
果真如此,竟然忘了在最后也加上延时。太不严谨了。多谢前辈指点!
果真如此,竟然忘了在最后也加上延时。太不严谨了。多谢前辈指点!ICC里面好像没有设置晶振频率啊,怎么计算自己写的延时呢
烧写程序是可以修改熔丝位来选择内部晶振,ATMEGA16芯片默认1M。
个人感觉AVR比51要简单得多呀!
得根据你自己的实际晶振是多少,再粗略计算了
表示关注中
放弃AVR,进军STM32