刚开始学AVR(atmega16),写了下面一个流水灯的程序,但下载后发现延时语句不起作用,avrstudio里(软件仿真)调试的时候怎么也不执行延时的for语句,但编译能通过,不知道哪里出了问题。用的是avrstudio和winavr2010(2008的也用过),for语句有没有都一样。
#include <avr/io.h>
int main(void)
{
unsigned char i=0;
unsigned int x,y;
DDRA=0xff;
PORTA=0b00000001;
while(1)
{
PORTA=PORTA<<1;
for(x=0;x<1000;x++)
for(y=0;y<1000;y++);
}
return 0;
}
------解决方案--------------------
可能被优化掉了。这样试试:
volatile unsigned int x,y;
------解决方案--------------------
一般不要关闭优化,这样对效率不好。不需要优化的代码自己处理一下就是了。