C语言能子函数调用子函数么?我在C51中断程序中调用了延迟函数delay(),中断反应就不正常 30
源码:#include<reg52.h>sbitweia=P2^0;sbitweib=P2^1;sbitweic=P2^2;unsignedcharletter;unsi...
源码:
#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;
}
那该怎么修改呢???求指导 展开
#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;
}
那该怎么修改呢???求指导 展开
4个回答
展开全部
可以的
不过你的中断写错了,有固定的格式的,关中断、计数器TR0=0,设置TH0,TL0,中断优先级(需要时),TR0=1,开中断。
不过你的中断写错了,有固定的格式的,关中断、计数器TR0=0,设置TH0,TL0,中断优先级(需要时),TR0=1,开中断。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是c的编译规则的问题。对于int型7FFF次是可直接执行的 因为不管你定义的是什么型,对于1个循环跳转次数来说都是0-255是单跳转 0-7fff是2个跳转嵌套,16位数的最高位是符号的。这里不管i是什么型 对于循环就是把i的值带入入口而已。
通常做软循环不建议用INT的变量因为太不好就算了 而且切效率低。用UCHAR的2个循环嵌套就可完成你的要求
通常做软循环不建议用INT的变量因为太不好就算了 而且切效率低。用UCHAR的2个循环嵌套就可完成你的要求
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
中断的话,一般延时比较短,写几个_nop_就可以了。但是在其它程序里面调用延时函数一点问题也没有,可以放心的用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询