C语言能子函数调用子函数么?我在C51中断程序中调用了延迟函数delay(),中断反应就不正常

源码:
#include <reg52.h>
sbit weia=P2^0;
sbit weib=P2^1;
sbit weic=P2^2;
unsigned char letter;
unsigned char num;
unsigned char table[5]={0x76,0x79,0x38,0x38,0x3f};
void delay(unsigned int yc);
void ls();/*数码管流水灯效果函数*/
void main()
{
EA=1;
EX0=1;
IT0=1;
while(1)
{
for(num=0;num<5;num++)
{
letter=table[num];
ls();
}

}
}
void delay(unsigned int yc)
{
unsigned long a;
unsigned long b;
for(a=yc;a>0;a--)
for(b=20;b>0;b--);
}
void ls()
{
weia=1;
weib=1;
weic=1;
P0=letter;
delay(350);//8
weia=0;
weib=1;
weic=1;
P0=letter;
delay(350);//7
weia=1;
weib=0;
weic=1;
P0=letter;
delay(350);//6
weia=0;
weib=0;
weic=1;
P0=letter;
delay(350);//5
weia=1;
weib=1;
weic=0;
P0=letter;
delay(350);//4
weia=0;
weib=1;
weic=0;
P0=letter;
delay(350);//3
weia=1;
weib=0;
weic=0;
P0=letter;
delay(350);//2
weia=0;
weib=0;
weic=0;
P0=letter;
delay(350);//1
}
/*中断函数不需要声明*/
void exter0() interrupt 0
{
P1=0X55;//为什么中断函数中引用delay延迟函数会出问题
delay(1000);//出问题的地方
P1=0XFF;
}
那该怎么修改呢???求指导

和调用延时无关,是你中断使用有问题,你在中断函数中需要做到以下几步才行,1,关闭中断,2,重设中断计数值,3,功能实现部分,在你的程序里就是P1的赋值及延时部分,4,开启中断
这样才是正确的中断调用
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-21
可以的
不过你的中断写错了,有固定的格式的,关中断、计数器TR0=0,设置TH0,TL0,中断优先级(需要时),TR0=1,开中断。
第2个回答  2011-01-26
这是c的编译规则的问题。对于int型7FFF次是可直接执行的 因为不管你定义的是什么型,对于1个循环跳转次数来说都是0-255是单跳转 0-7fff是2个跳转嵌套,16位数的最高位是符号的。这里不管i是什么型 对于循环就是把i的值带入入口而已。

通常做软循环不建议用INT的变量因为太不好就算了 而且切效率低。用UCHAR的2个循环嵌套就可完成你的要求
第3个回答  2011-01-26
中断的话,一般延时比较短,写几个_nop_就可以了。但是在其它程序里面调用延时函数一点问题也没有,可以放心的用

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网