在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级,也还是这种情况。不知道怎么回事,为此郁闷了好几天了《《
展开
 我来答
bd_myj
2012-09-04 · TA获得超过526个赞
知道小有建树答主
回答量:526
采纳率:0%
帮助的人:289万
展开全部
这个程序我看着有几个问题;
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)

以上建议仅供参考,希望学习愉快!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式