51怎么跳出正在执行的函数
时间:10-02
整理:3721RD
点击:
问题是这样的 ······ 写一函数·· 但是因为函数里面有while 所以会一直执行 但这次想问的问题和有没有while没有关系·· 主要是想知道怎么才能够跳出函数去执行完其他的任务后不用再回到刚才执行的函数 因为中断结束后会继续完成刚才的函数 所以不知道该怎么办才能达到自己想的那样 求大神指点指点一条活路。
自己曾想过用 goto函数跳出去指向其他东西··· 可是根本就行不通 ·· 因为连编译也不成功·· 下面是编译不成功的代码:
#include"reg52.h"
sbit key1=P3^0;
void delay_s(uchar a)/*延时*/
{
uint i,j;
while(a--)
{
for(j=3;j>0;j--)
for(i=41640;i>0;i--);
}
}
void x_x(void)/*位操作的一种流水灯函数*/
{
uchar i,j,a=0xfe,b;
while(1)
{
b=0xff;
for(j=8;j>0;j--)
{
a=0xfe&b;
for(i=j-1;i>0;i--)
{
P2=a;
a=((a<<1)|0x01)&b;
delay_s(1);
}
b=a;
P2=b;
delay_s(1);
}
}
}
int main(void)
{
EA=1;
EX0=1;
IT0=1;
while(1)
{
P3=0xff;
if(key1==0)
{
x_x();
}
loop:P2=0xff;
}
return 0;
}
void int0() interrupt 0
{
goto loop;
}
自己曾想过用 goto函数跳出去指向其他东西··· 可是根本就行不通 ·· 因为连编译也不成功·· 下面是编译不成功的代码:
#include"reg52.h"
sbit key1=P3^0;
void delay_s(uchar a)/*延时*/
{
uint i,j;
while(a--)
{
for(j=3;j>0;j--)
for(i=41640;i>0;i--);
}
}
void x_x(void)/*位操作的一种流水灯函数*/
{
uchar i,j,a=0xfe,b;
while(1)
{
b=0xff;
for(j=8;j>0;j--)
{
a=0xfe&b;
for(i=j-1;i>0;i--)
{
P2=a;
a=((a<<1)|0x01)&b;
delay_s(1);
}
b=a;
P2=b;
delay_s(1);
}
}
}
int main(void)
{
EA=1;
EX0=1;
IT0=1;
while(1)
{
P3=0xff;
if(key1==0)
{
x_x();
}
loop:P2=0xff;
}
return 0;
}
void int0() interrupt 0
{
goto loop;
}
goto只能跳到本函数的某一个位置
可以弄个全局变量,中断里控制这个变量。
函数根据这个变量来判断是是否继续执行
跳出循环,用break语句。
嗯,冒失三楼的说的更靠谱
为什么要用while(1)呢?你这个程序不必用的
break,continue,或者自己编写寄存器,然后判断
嗯·· 用全局变量可以实现 谢了哈···
如果是多重循环··· break只能跳一个啊··有没有什么语句是从一个函数跳到另一个函数的啊?
嗯··确实不该用while···已经换成标志位来判断了··
自己编写寄存器是是什么意思啊?
有几个循环就用几个break,你想从哪跳出都可以的。如果用按键的话就更方便了。我现在一直这样用。
恩恩·· 我也把按键加进去··
goto 或者采用楼上的建议