串口通讯,如何确保上位机及时的收到MODBUS协议的应答信息
我的《主程序》执行时间很长,大约1秒钟。因为在主程序中调用模入采集程序,使用的是“国产”24位模入芯片,一共采集8个通道,大约800毫秒(因为价格便宜)。
1、串口接收采用中断方式
2、串口发送采用中断方式
3、通讯协议采用MODBUS-RTU,接收到完整的一帧数据后,分析处理程序在主程序中执行
如何确保上位机能够及时接收到单片机回送的应答信号呢?因为光采集模入就要花费800毫秒,也就是说,上位机至少要800毫秒
以后才能收到数据,能有其它方法让上位机快速收到数据吗?
void main()
{
ai();//采集模入,大约执行800毫秒
USART_Deal();//串口处理程序,当接收到一帧完成的数据后,在这给《上位机》发送应答信息的第一个字节。
} 难道只能采取《嵌入式操作系统》编程思路,来编程实现了吗? 难道只能采取《嵌入式操作系统》编程思路,将串口处理程序设置为最高优先级任务,当接收到一帧完整的数据
后,立即启动该任务? 中断里收数
收满一个数据帧处理 使用状态机,采集每个通道后发送一次,还没准备好的通道发送前一次数据 明白了,定义一个全局指针 PRT;
定时中断每隔150毫秒PTR++,如果PTR>=8,则PTR=0
void main(void)
{
初始化
PTR = 0;
while (1)
{
采集PTR对应通道的模入; //主程序中,每次只采集1个通道
串口分析处理程序;
}
}
页:
[1]