单片机循环里面接收PC数据

voidserial()interrupt4using3{if(RI==1){unsignedcharshuju;//定义接收数据变量RI=0;shuju=SBUF;//... void serial () interrupt 4 using 3
{
if (RI==1)
{
unsigned char shuju; //定义接收数据变量
RI = 0;
shuju=SBUF; //接收到PC数据
if(shuju == 1) //当接收到 1 执行循环
{
while(1)
{
motor_rev(); //电机正转
}
}
}
}

请问大家,循环里面要怎么接收PC数据,然后在退出循环
展开
 我来答
lxmzyh
2012-08-21 · TA获得超过1615个赞
知道小有建树答主
回答量:972
采纳率:50%
帮助的人:740万
展开全部
给你提供个思路:
在中断函数里:
1、接收第一个数据(用于判断是否呼叫本机/地址识别)。
2、接收第二个数据(转动速度)
3、接收第三个数据(旋转方向和启停)
4、执行完第三个数据后发送一个成功标志给PC。

最好建立一个接收超时判断子程序,在中断程序中调用。
追问
明白你的意思,是叫我自己定义协议通信,避免误通信。
追答
是的,这样就不用考虑在循环中接收数据了,串口工作在中断状态,电机转动控制在主程序中循环,任意时刻只要你发数据都可以可靠控制的
upupsky_lai
2012-08-23
知道答主
回答量:17
采纳率:0%
帮助的人:4.9万
展开全部
while(1) 最好放到main里面处理..不要再串口中断里处理..这样的话就拖住了时序..
你在中断里放个标记位.再main的while里面判断就ok了..能明白我的意思么?
追问
你的意思是把while(1)放在主程序里面,中断接收到一个标志用来启动主程序里面的while(1)循环,中断收到另一个标准就退出主程序里面的循环。
追答
"启动主程序里面的while(1)"  这句话说的不对..while是一直运行的...在这个一直运行的里面判断.
while(1)
{
//判断串口是否收到数据
if(Uart_Rec_Flag == 1)
{
Uart_Rec_Flag = 0;
//添加你需要处理的事务
}
}

大致结构就是这样的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式