其实很简单,在你的mfc程序里,声明你驱动里定义好的事件,然后在程序里wait event,然后处理。或是用iocontrol也可以啊。
上位机发,下位机收,下位机接收中断服务程序中进行判断接收数据正确性及是否接收完成。需要一个简单的通信协议。比如你定义第一个字节为数据类型(单字节/数组),第二个字节为数组长度,第三、四……为数组数据,最后一个字节定义为校验字节(也可以没有)。如果你要发送的数组为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.
另外,看看你的单片机手册,中断标志是自己清,还是需要你手动清
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)