1689【毕设课设】基于PIC单片机MODBUS总线通信仿真设计

基于PIC单片机MODBUS总线通信仿真设计,一主机和四从机的控制设计。

//-----------------------------------------------------------------
//  名称: MODBUS总线通信仿真(从机程序)
//-----------------------------------------------------------------
//  说明: 本例运行时,从机接收主机命令,然后将A/D转换值通过485回发给主机显示.
//
//-----------------------------------------------------------------
#define _XTAL_FREQ 4000000UL
#define INT8U  unsigned char
#define INT16U unsigned int
#define INT32U unsigned long
#include <pic.h>
#include <stdio.h>
//配置字,注意禁用MCLR,因为RA3/MCLR/VPP引脚用于485从机地址次高位输入
__CONFIG(MCLRDIS & WDTDIS & INTIO);
volatile INT8U recv_Data[4];           //串口接收数据缓冲区(4字节)
volatile INT8U recv_idx = 0;           //串口接收数据缓冲区索引
volatile INT8U sl_Addr;                //485从机地址           
INT16U CRC;                            //16位CRC校验结果
//-----------------------------------------------------------------
#define  LED_Ptr   RC0                 //本机收/发指示灯
#define  RDE_485   RC3                 //RS485通信控制端
#define  ADC_REQ   65                  //要求从机返回A/D值的自定义命令码(范围65~72)
//19200波特率每字符时间为: 1/19200*(1+8+2) ≈  572us
//帧  间: 3.5个字符时间为: 572 * (3.5 + 1) ≈ 2574us
//字节间: 1.5个字符时间为: 572 * (1.5 + 1) ≈ 1430us
#define FRAME_SPAN  2574                  //相临帧之间的间隔时间
#define BYTE_SPAN   1430                  //帧内字节之间的间隔时间
bit     b, F_T1, T_BYTE, T_FRAME, Recv_OK;//相关标识位
INT8U   AD_Result[2];                     //2字节的A/D转换结果