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也不会响应。
回答1:单片机2发了226给,单片机1,单片机1能正常接收并显示在液晶上。 回答2:单片机1发了220给单片机2(发完后我在液晶上有个提示),但是单片机2的串口中断没有响应(为了调试,我在单片机2的串口中断中有个点亮LED操作)。到现在只能得出如下结论:在WHILE循环中接收串口数据,存在不确定性。再次谢谢各位的帮助,本人比较喜欢单片机设计,有兴趣可以保持联系。QQ;871211336
追答are you sure !!!
你这个结论真是 ~(>_<)~~
可以加我为好友吗?希望与您进一步探讨。
我把那个判断循环给注释掉了,问题还存在。
本回答被提问者采纳谢谢各位网友的热心帮助,由于本人手里的金币不足10个,所以就给第一位回答的朋友了。我在进入上面程序段前先关串口中断,之后利用查询串口的方式来响应单片机1的控制命令。问题解决了。不知道,为什么在while循环中不能响应串口接收数据中断。
单片机串口通信中非常奇怪的现象,WHILE循环内不能进行串口接收中断...
while(1){}; \/\/进入死循环,避免引起其他问题。同时单片机1会有合适的提示内容给用户 加个判断 while(1){ if(jiancestop_flag){ break;} };
串口通信 关于sbuf的问题。
1、SBUF 是两个寄存器,名字虽然一样,发送的只能写,接受的只能读。2、SBUF收到数据会产生接收中断,接收中断产生后无法再接收其他数据,知道读取SBUF后将接收中断清零,因此 recdat=SBUF;while(RI==0);应该交换次序。3、未产生接收中断时,SBUF值并不固定,串口数据串行传入也是一位一位的改变的,可...