在main函数中调用子函数就会出错
我用的是AVRStudio4.14,编译器用的WinAVR20070525,之前没用过AVR单片机,现在做一个点灯的小程序做测试。却发现,所有的语句都写在main函数中就...
我用的是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级,也还是这种情况。不知道怎么回事,为此郁闷了好几天了《《 展开
运行正确的程序如下:
------------------------------------------------------------------
#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级,也还是这种情况。不知道怎么回事,为此郁闷了好几天了《《 展开
1个回答
展开全部
这个程序我看着有几个问题;
1、你的main不是一个带返回值的函数,retru 0;这句是不对的,只是在这个函数中程序一直在循环,所以没有反应出来。
2、你的子函数标准应该这样写
void my_fun(void)
{
unsigned char i=0;
for(i=0;i<10;i++)
{
_delay_loop_2(50000);
}
}
3,按AVR的编程方式,函数最好写成: void main (void)
以上建议仅供参考,希望学习愉快!
1、你的main不是一个带返回值的函数,retru 0;这句是不对的,只是在这个函数中程序一直在循环,所以没有反应出来。
2、你的子函数标准应该这样写
void my_fun(void)
{
unsigned char i=0;
for(i=0;i<10;i++)
{
_delay_loop_2(50000);
}
}
3,按AVR的编程方式,函数最好写成: void main (void)
以上建议仅供参考,希望学习愉快!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询