我用的是AVR Studio 4.14,编译器用的WinAVR20070525,之前没用过AVR单片机,现在做一个点灯的小程序做测试。却发现,所有的语句都写在main函数中就没有问题,只要是写成单独的子函数,在main函数中调用,就不会出现结果,灯也不会闪,请达人指教!谢谢! 运行正确的程序如下: ------------------------------------------------------------------ #include <avr/io.h> #include <util/delay.h>
int main(void) { unsigned char i=0; unsigned char led = 0xfe; DDRA = 0x07; while(1) { PORTA = led; for(i=0;i<10;i=i+1) { _delay_loop_2(50000); }
led <<= 1; led |= 0xf1; if(led == 0xf7) { led = 0xfe; } } return 0; } ------------------------------------------------------------------ 写成单独的函数,在main中调用,就出不来结果了 ------------------------------------------------------------------ #include <avr/io.h> #include <util/delay.h>
void my_fun(void);
int main(void) { // unsigned char i=0; unsigned char led = 0xfe; DDRA = 0x07; while(1) { PORTA = led; // for(i=0;i<10;i=i+1) // { // _delay_loop_2(50000); // } my_fun(); led <<= 1; led |= 0xf1; if(led == 0xf7) { led = 0xfe; } } return 0; }
void my_fun(void) { unsigned char i=0; for(i=0;i<10;i=i+1) { _delay_loop_2(50000); } } ------------------------------------------------------------------ 我在网上查了一下,也有一些人出现这种情况,大多是说是优化级、熔丝位设置的问题,但是我将M103C的熔丝位也设置成1,优化级设置成00级,也还是这种情况。不知道怎么回事,为此郁闷了好几天了《《 |