单片机串口中断中怎么设置程序,使得上位机能发送数组给单片机?
1个回答
展开全部
上位机发,下位机收,下位机接收中断服务程序中进行判断接收数据正确性及是否接收完成。需要一个简单的通信协议。比如你定义第一个字节为数据类型(单字节/数组),第二个字节为数组长度,第三、四……为数组数据,最后一个字节定义为校验字节(也可以没有)。如果你要发送的数组为a[7],那么你通过这个通信协议发共要发送十个字节。假设你发送的数组最大长度为20(所有条件下,如果更长到几百,建议分包发),那你一包数据最大长度也就是23,你定义一个长度为23的接收数组,定义一个接收字节数的全局变量counter,在下位机接收程序里每接收一次,数组指针+1,当counter>2时就可以开始判断是不是接收完了。
volatile unsigned char counter;
volatile unsigned char rxarray[30];
void ComRx(void)
{
rxarray[counter] = buffer;//假设buffer为你单片机串口接收寄存器
counter ++;
if(counter < 2)
return;
if(counter < rxarray[1] )
return;
//接收完成
counter = 0;
//do what you want to do
}
ComRx()可以在中断中调用,但不能把程序拷进中断,因为中断函数中不能用return.
另外,看看你的单片机手册,中断标志是自己清,还是需要你手动清
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询