单片机c语言编写的程序在main{}主函数中程序的问题求解,很急!!!
单片机c语言main{}主函数中的程序是不管有没有大循环while(1){},程序执行完毕,都会从main{}的第一句开始再次执行吗?小弟新手,不是很明白,求解!!!下面...
单片机c语言main{}主函数中的程序是不管有没有大循环while(1){},程序执行完毕,都会从main{}的第一句开始再次执行吗?小弟新手,不是很明白,求解!!!
下面这段单片机C语言代码就会重复执行是我测试小车左转90度的代码,请自测过,没有大循环,但是会自己重新执行,求解~~
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit a0=P1^0;
sbit a1=P1^1;
sbit a2=P1^2;
sbit a3=P1^3;
sbit b1=P1^4;
sbit b2=P1^5;
void zuozhuan()//左转
{
a0=1;
a1=1;
a2=0;
a3=1;
}
/*void youzhuan()//右转
{
a0=1;
a1=0;
a2=1;
a3=1;
} */
void tingche()//停车
{
a0=1;
a1=1;
a2=1;
a3=1;
}
void delay(uint z)//延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
//左转90度测试
zuozhuan();
delay(1000);
tingche();
delay(5000);
zuozhuan();
delay(950);
tingche();
delay(5000);
zuozhuan();
delay(900);
tingche();
delay(5000);
zuozhuan();
delay(850);
tingche();
delay(5000);
zuozhuan();
delay(800);
tingche();
delay(5000);
zuozhuan();
delay(750);
tingche();
delay(5000);
} 展开
下面这段单片机C语言代码就会重复执行是我测试小车左转90度的代码,请自测过,没有大循环,但是会自己重新执行,求解~~
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit a0=P1^0;
sbit a1=P1^1;
sbit a2=P1^2;
sbit a3=P1^3;
sbit b1=P1^4;
sbit b2=P1^5;
void zuozhuan()//左转
{
a0=1;
a1=1;
a2=0;
a3=1;
}
/*void youzhuan()//右转
{
a0=1;
a1=0;
a2=1;
a3=1;
} */
void tingche()//停车
{
a0=1;
a1=1;
a2=1;
a3=1;
}
void delay(uint z)//延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
//左转90度测试
zuozhuan();
delay(1000);
tingche();
delay(5000);
zuozhuan();
delay(950);
tingche();
delay(5000);
zuozhuan();
delay(900);
tingche();
delay(5000);
zuozhuan();
delay(850);
tingche();
delay(5000);
zuozhuan();
delay(800);
tingche();
delay(5000);
zuozhuan();
delay(750);
tingche();
delay(5000);
} 展开
11个回答
展开全部
如果你没有任何控制的话,执行完全部的程序,会从main()开始,如果要控制的话,也很简单
分为两类:
一类是不执行下面的指令,返回main()第一句指令,那直接使用return;就可以了
另一类是不范围main()第一句指令,而从中间某一句开始执行,有两种方法
1.对于循环层数较少的循环,可以使用break;
2.对于循环层数较多,不建议每层都使用break那就利用标签也可以做到,你只要在程序需要的位置设个标签,在程序最后返回标签,就可以了
例如:
main()
{
k=1;
start:
P0=0x00;
//后面程序省略
//程序最后书写如下这里可以加个你需要的条件,满足条件后,跳转从main{}的第一句开始再次执行
goto start;
}
我经常这样做,实践证明,真的很好用,你可以试试
分为两类:
一类是不执行下面的指令,返回main()第一句指令,那直接使用return;就可以了
另一类是不范围main()第一句指令,而从中间某一句开始执行,有两种方法
1.对于循环层数较少的循环,可以使用break;
2.对于循环层数较多,不建议每层都使用break那就利用标签也可以做到,你只要在程序需要的位置设个标签,在程序最后返回标签,就可以了
例如:
main()
{
k=1;
start:
P0=0x00;
//后面程序省略
//程序最后书写如下这里可以加个你需要的条件,满足条件后,跳转从main{}的第一句开始再次执行
goto start;
}
我经常这样做,实践证明,真的很好用,你可以试试
展开全部
想循环必须用循环语句,循环语句包含哪些就会重复执行哪些。不包含的不会被重复执行!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不会呀,C语言不会这么“主动”的。不过大循环还可以用do……while、:……goto、for语句也可以,或者调用main([int argc,char []*argv])(参数可有可无,名字可变)
参考资料: 经验…………
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在main外
外加一个中断,while(1)
外加一个中断,while(1)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不会的,这样只会顺序执行一遍
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询