ATmega16A 求大师解释下这个现象,这什么问题~~~
#include <avr/io.h>int main(void)
{
int i = 0,j = 0;
DDRB = 0xff;
while(1)
{
for(j = 0;j < 10;j ++)
for(i = 0;i < 5000;i ++)
PORTB = 0xff;
for(j = 0;j < 10;j ++)
for(i = 0;i < 5000;i ++)
PORTB = 0x00;
}
}
烧完后,一闪一闪正常,但是。。。这样PORTB在不停赋值啊,常规不会这样去写的。如下
#include <avr/io.h>
int main(void)
{
int i = 0,j = 0;
DDRB = 0xff;
while(1)
{
PORTB = 0xff;
for(j = 0;j < 10;j ++)
for(i = 0;i < 5000;i ++);
PORTB = 0x00;
for(j = 0;j < 10;j ++)
for(i = 0;i < 5000;i ++);
}
}
为什么上面这段程序LED就全亮,延时肯定起作用了,就是好像没有锁存功能。。。。求大师帮忙~~~换一组IO也是如此。。。难道片子坏了? 编译器优化了,加上volatile int i = 0,j = 0; 回复【1楼】gliet_su
-----------------------------------------------------------------------
哇,成功了,感谢大师啊~~~受益了,太谢谢了~。~! 用的神马编译器?我杂没遇到过这种问题呢 回复【3楼】walshao万少
-----------------------------------------------------------------------
AVR Studio 4.18.716
GUI Version 4, 18, 0, 685
AVR Simulator 1, 0, 2, 1
ATmega16 247
Operating System
Major 6
Minor 1
PlatformID 2
Build 7601
Service Pack 1
Plugins:
AvrPluginAvrAsmObject 1, 0, 0, 48
AvrPluginavrgccplugin 1, 0, 0, 11
Stk500Dll 1, 0, 1, 15
不知道是不是这里看编译器哦~? 这个延时被优化很正常的。
直接写PINB位可以实现状态的翻转,延时可以用自带的_delay_ms(N) _delay_us(N),不过要注意包含延时的.H文件。 GNU gdb 6.8好像是这个版本。 回复【5楼】wzyllgx
这个延时被优化很正常的。
直接写pinb位可以实现状态的翻转,延时可以用自带的_delay_ms(n) _delay_us(n),不过要注意包含延时的.h文件。
-----------------------------------------------------------------------
谢谢指教,我是新手,向你学习啦~~ 收益了~ 受教了!!!
页:
[1]