ba_wang_mao 发表于 2008-8-27 10:07:44

串口通讯,如何确保上位机及时的收到MODBUS协议的应答信息

我的《主程序》执行时间很长,大约1秒钟。
  因为在主程序中调用模入采集程序,使用的是“国产”24位模入芯片,一共采集8个通道,大约800毫秒(因为价格便宜)。
1、串口接收采用中断方式
2、串口发送采用中断方式
3、通讯协议采用MODBUS-RTU,接收到完整的一帧数据后,分析处理程序在主程序中执行


   如何确保上位机能够及时接收到单片机回送的应答信号呢?因为光采集模入就要花费800毫秒,也就是说,上位机至少要800毫秒
以后才能收到数据,能有其它方法让上位机快速收到数据吗?

   void main()
{
      ai();//采集模入,大约执行800毫秒
   USART_Deal();//串口处理程序,当接收到一帧完成的数据后,在这给《上位机》发送应答信息的第一个字节。
}

ba_wang_mao 发表于 2008-8-29 15:54:57

难道只能采取《嵌入式操作系统》编程思路,来编程实现了吗?

ba_wang_mao 发表于 2008-9-1 11:40:53

难道只能采取《嵌入式操作系统》编程思路,将串口处理程序设置为最高优先级任务,当接收到一帧完整的数据
后,立即启动该任务?

mingyuexin1981 发表于 2008-9-1 13:23:49

中断里收数
收满一个数据帧处理

eking 发表于 2008-9-1 15:14:09

使用状态机,采集每个通道后发送一次,还没准备好的通道发送前一次数据

ba_wang_mao 发表于 2008-9-4 16:49:23

明白了,定义一个全局指针 PRT;
    定时中断每隔150毫秒PTR++,如果PTR>=8,则PTR=0
void main(void)
{
    初始化
    PTR = 0;

    while (1)
    {
          采集PTR对应通道的模入;   //主程序中,每次只采集1个通道
          串口分析处理程序;
    }
}
页: [1]
查看完整版本: 串口通讯,如何确保上位机及时的收到MODBUS协议的应答信息