单片机串口通信中非常奇怪的现象,WHILE循环内不能进行串口接收中断???请大家帮忙解决。

JLK1=0;//启动电机正转JLK2=1;guzhang_flag=1;while(guzhang_flag){DS1302_GetTime(&CurrentTime1... JLK1=0;//启动电机正转
JLK2=1;
guzhang_flag=1;

while(guzhang_flag)
{
DS1302_GetTime(&CurrentTime1); //记录等待霍尔脉冲开始时刻
huoer_jl=1;
while(huoer_jl==1)//等待霍尔负脉冲到来(第一圈)
{
if(panduan_sjjg(CurrentTime1,25)) //判断时间间隔函数,第一个参数为与当前时间相比较的时间,
//第二个参数为时间间隔。返回1说明时间间隔已到,返回0说
//明间隔未到
{
JLK1=1; //给电机断电
senddata1(255); //表示电机故障
while(1){}; //进入死循环,避免引起其他问题。同时单片机1会有合适的提示内容给用户
}

if(jiancestop_flag)
//goto HERE1;
guzhang_flag=0;
}
huoer_jl=1;
while((huoer_jl==0))
{
if(jiancestop_flag)
//goto HERE1;
guzhang_flag=0;
};//等第一个脉冲信号消失

senddata1(226);
}
HERE1:
JLK1=1;//给电机断电
senddata1(220);

jiancestop_flag=0;
SystemBuf1[0]=' ';
Rx1=0;
上面的程序为单片机2的,主要是在检测电机转动,检测到霍尔负脉冲就向单片机1发送226。 同时还要查询单片机1发来的停止命令:jiancestop_flag。这个jiancestop_flag是在单片机2串口接收中断中被赋值的。
最奇怪的是,如果单片机1通知单片机2启动电机,但在单片机2检测到霍尔脉冲之前,单片机1又通知单片机2停止,那单片机2就能正常停止电机,并且发回220给单片机1;
一旦单片机2检测到了霍尔脉冲,并向单片机1发送了226,那即使单片机1发送停止命令220给单片机2,单片机2也不会响应。
展开
 我来答
意法半导体(中国)投资有限公司 2020-01-15
展开全部
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
百度网友3fe025987
2013-09-26 · TA获得超过1874个赞
知道小有建树答主
回答量:1055
采纳率:62%
帮助的人:615万
展开全部
1、单片机2检测到霍尔脉冲,便发226给单片机1 ,单片机2发了没有?单片机1 收到226了没?
2、接着单片机1发220给单片机2使其停止,单片机1发了没有?单片机2收到220了没有?
你单步看下标志位,或者用示波器看有无脉冲
更多追问追答
追问
回答1:单片机2发了226给,单片机1,单片机1能正常接收并显示在液晶上。 回答2:单片机1发了220给单片机2(发完后我在液晶上有个提示),但是单片机2的串口中断没有响应(为了调试,我在单片机2的串口中断中有个点亮LED操作)。到现在只能得出如下结论:在WHILE循环中接收串口数据,存在不确定性。再次谢谢各位的帮助,本人比较喜欢单片机设计,有兴趣可以保持联系。QQ;871211336
追答
are you sure !!!
你这个结论真是 ~(>_<)~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
意法半导体(中国)投资有限公司
2020-01-15 广告
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
数字术士
2013-09-25 · 超过11用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:34.1万
展开全部
while(1){}; //进入死循环,避免引起其他问题。同时单片机1会有合适的提示内容给用户

加个判断
while(1){
if(jiancestop_flag){
break;
}

};
追问
我把那个判断循环给注释掉了,问题还存在。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yyl123hf
2013-09-26
知道答主
回答量:11
采纳率:0%
帮助的人:7.7万
展开全部
while(1)里面加点延时或者空语句试试
追问
谢谢各位网友的热心帮助,由于本人手里的金币不足10个,所以就给第一位回答的朋友了。我在进入上面程序段前先关串口中断,之后利用查询串口的方式来响应单片机1的控制命令。问题解决了。不知道,为什么在while循环中不能响应串口接收数据中断。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式