在单片机上实现MODBUS通信的从机协议,首先需要解决的问题是如何保证主机发送的MODBUS的数据帧能够可靠的接收。
方法1:
1. 开串口接收中断,设置接收缓冲区ReceBuf[100],发送缓冲区SendBuf[100],指向两个缓冲区的指针*pr,*ps
2. 当单片机接收到一帧数据之后,进入串口接收中断,在串口中断函数中做如下处理:开启定时器,延时一段时间,在这个时间段内认为一帧数据接收完毕,定时结束后,进入定时器中断,这个时候置数据帧接收标志位Flag,认为一帧数据接收完毕。
3. 当Flag被置位后,关闭定时器,开始对接收缓冲区ReceBuf[100]内的这一帧数据进行解析。根据具体的数据内容完成相应操作后,重新赋定时器初值,清空接收缓冲区,等待下一帧数据的接收和处理。
方法2:
1. 设置循环接收缓冲区ReceBuf[100];为该缓冲区设置两个指针:接收指针*pr,处理指针*pw;设置接收完成时间rececount,开定时器;
2. 开串口中断,当接收到数据之后,进入串口中断,将数据存入接收缓冲区,接收指针pr开始移位,并将rececount赋值为20,在定时器中断中rececount--。
3. 判断rececount是否为0,若为0,表示1帧数据接收完毕;
4. 判断接收指针pr与处理指针pw是否相同,若不相同,说明这帧数据还没有被处理,进入数据帧处理函数,
思考:
是否存在丢帧现象;
数据能否及时被解析;