永发信息网

51单片机间串口通讯,接收端程序调用完接收子程序,主程序不能继续运行

答案:4  悬赏:0  手机版
解决时间 2021-01-28 00:29
接收部分程序如下:
#include
#define uchar unsigned char
#define uint unsigned int
#define TR 1
sbit led1=P1^0;
sbit led2=P1^1;
uchar idata buf[10];
uchar pf;
void init()
{
TMOD=0x20;
TH1=0xe8;
TL1=0xe8;
PCON=0x00;
TR1=1;
SCON=0x50;
}

void recieve(uchar idata *d)
{
uchar i;
do
{
while(RI==0);
RI=0;
}while((SBUF^0xaa)!=0);
SBUF=0xbb;
while(TI==0);
TI=0;

while(1)
{
pf=0;
for(i=0;i<16;i++)
{
while(RI==0);
RI=0;
d[i]=SBUF;
pf+=d[i];
}
while(RI==0);
RI=0;
if((SBUF^pf)==0)
{
SBUF=0x00;
break;
}
else
{
SBUF=0xff;
while(TI==0);
TI=0;
}
}
}
void main()
{
init();
recieve(buf);
led1=0;
}

主程序最后一句:led1=0无法执行就结束了
最佳答案
void main()
{
init();
recieve(buf);
led1=0;
while(1);//这句必须有,不然程序就是不可控
}
全部回答
主程序要加入一个循环 在循环内是你要完成的工作 void main() {     init();     while(1)     {         你要完成的工作     } }
在recieve中的while(1)里一旦【校验和】校验正确就会break退出循环。 但是你这个代码在main中没有while(1),就算你第一次有数据接收,但是代码执行完之后,就从新来过,那么recieve中的while(1)就不满足退出的条件了,死循环。
因为在你recieve()函数里有一个while(1)循环处理过程,其实你这程序在用KEIL编译的时候会有警告提示的,即:led1=0这句将永远不会被执行的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
南方哪个地方有槐树
新瑞网苑地址在什么地方,想过去办事
证人和线人是一个电影吗
道得应得的意思是什么啊?知道的请说下!
手机光线强就强光线黑就黑为什么
朱墩村怎么去啊,我要去那办事
果c益佰和果C100甜品加盟费是多少
榴莲饼什么牌子好
关于做(西餐)中餐的电影有哪些
梁岗村地址在什么地方,想过去办事
二次元网咖地址有知道的么?有点事想过去
进口零食报关需要交多少关税
德国慕尼黑工业大学亚洲校区硕士 怎么样
希壤忽浓的意思是什么啊?知道的请说下!
中国人民大学好还是东北财经大学好
推荐资讯
哪段背景音乐可以烘托出欢腾热闹的气氛的?急
1986年正月十九属虎出些的女运程怎样?
我的电脑开始菜单,任务栏点不动了??
PAUL&SHARK的中国门店
如果在梦中梦到自己的女朋友对自己说我喜欢你
我是1990年农历闰5月29日出生的人,请问是双
手机自带内存还剩很大空间,为什么下载不了软
金山手机维修地址有知道的么?有点事想过去
受不了上司整天无理取闹!我该怎么应对?
【背景材料】某广场地下车库工程,建筑面积18
从汉密顿岛到airlie beach的轮船时间表?
50兆网连无线,玩cf卡吗,卡多少,求解!
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?