Modbus Slave RTU 在 AVP28335(兼容德州仪器TMS 320 28335) 上实现含源码及注释。

news/2025/2/5 14:21:51/

今天先把题目先给出来, 在近两天会把源码 (含详细注释 )及部署、测试结果给出来, 希望能给大家帮助。(原来这个程序在CSDN中,有小伙伴已经写了一些,但是发现里面埋了很多坑,例如:

坑1:传输数据只能传输200个Uint16-无符号16位整数,

坑2:3,4区数据寄存器只能放置<=400(dec)的数据,不能传输65535(DEC)最大数,

坑3:传输数据时一般要加CRC16校验码 2个字节, 源代码中故意少发两个字节,导致测试软件接收不到。

为了不让后面的小伙伴在这里在花费时间研究,我把已知的坑给填了,并源码放在这里,全免费,我有点缺德,断了别人的一个财路)。

嗨,我去,先给出2个截图,用来吹嘘一下这个程序真的可以用。

第一部分:截图看结果,真的可以用。

1、输入寄存器截图

2、保持寄存器截图

先给出两张图 每张图左边图是 AVP28335 系统的Slave 端数据,右边是Modscan32测试软件数据。 

第一张图是3区输入寄存器数据;第二张图是4区 保持寄存器数据。

地址:=1 显示数据 长度 100

下面将给出部署方法,有点困了,明天再说吧。:)

第二部分、此程序部署前提条件:

1、使用芯片德州仪器或湖南进芯28335的SCIC-串口;(SCIA SCIB 基本相同)

2、使用了收发控制管脚 GPIO61;(其实不使用更好处理)

3、外围电路采用 Max485芯片;(电气原理图省略,典型应用图纸图纸,算了,还是给一张图吧)

4、编译环境CCS15 芯片28335 编译器6.0.1

第三部分、编程,主要文件及部署方法:

1、创建头文件,该文件是Modbus 485 Slave 数据结构体文件:

文件名:MODBUS.h

文件内容:


#ifndef INCLUDE_MODBUS_H_
#define INCLUDE_MODBUS_H_//SCIC-MODBUS 485 应用数据结构体//MODBUS数据结构
typedef enum {MB_FUNC_READ_COIL = 1,MB_FUNC_READ_INPUT,MB_FUNC_READ_HOLDINGREGISTERS,MB_FUNC_READ_INPUTREGISTERS,MB_FUNC_FORCE_COIL,MB_FUNC_WRITE_HOLDINGREGISTER,MB_FUNC_FORCE_NCOILS = 15,MB_FUNC_WRITE_NREGISTERS = 16
} ModbusFunctionCode;//MODBUS错误数据结构
typedef enum {MB_ERROR_ILLEGALFUNC = 1,MB_ERROR_ILLEGALADDR,MB_ERROR_ILLEGALDATA,MB_ERROR_SLVFAILURE,MB_ERROR_ACKNOWLEDGE,MB_ERROR_SLVBUSY,MB_ERROR_NEGACKNOWLEDGE,MB_ERROR_MEMPARITY,MB_ERROR_GATEWAYPATHUN
} ModbusError;//状态机常数
typedef enum {MB_CREATE,MB_START,MB_TIMER_T35_WAIT,MB_IDLE,MB_RECEIVE,MB_PROCESS,MB_TRANSMIT,MB_DESTROY
} ModbusState;//MODBUS数据结构
typedef struct ModbusData ModbusData;
struct ModbusData {Uint16 slaveAddress;Uint16 functionCode;Uint32 contentIdx;Uint32 numofregisters;Uint16 content[125];//20Uint16 size;Uint16 crc;
};//P3方式互联网找的程序(modbus.c)
extern void SCIC_Modbus_Init(void);//CoilsMap 数据结构
typedef struct ModbusCoilsMap ModbusCoilsMap;
struct ModbusCoilsMap{Uint16   dummy1;
//    Uint16   dummy2;
//    Uint16   dummy3;
//    Uint16   dummy4;
//    Uint16   dummy5;
//    Uint16   dummy6;
//    Uint16   dummy7;
//    Uint16   dummy8;
//    Uint16   dummy9;
//    Uint16   dummy10;
//    Uint16   dummy11;
//    Uint16   dummy12;
//    Uint16   dummy13;
//    Uint16   dummy14;
//    Uint16   dummy15;
//    Uint16   dummy16;
//    Uint16   dummy17;
//    Uint16   dummy18;
//    Uint16   dummy19;
//    Uint16   dummy20;
//    Uint16   dummy21;
//    Uint16   dummy22;
//    Uint16   dummy23;
//    Uint16   dummy24;
//    Uint16   dummy25;
//    Uint16   dummy26;
//    Uint16   dummy27;
//    Uint16   dummy28;
//    Uint16   dummy29;
//    Uint16   dummy30;
//    Uint16   dummy31;
//    Uint16   dummy32;
//    Uint16   dummy33;
//    Uint16   dummy34;
//    Uint16   dummy35;
//    Uint16   dummy36;
//    Uint16   dummy37;
//    Uint16   dummy38;
//    Uint16   dummy39;
//    Uint16   dummy40;
//    Uint16   dummy41;
//    Uint16   dummy42;
//    Uint16   dummy43;
//    Uint16   dummy44;
//    Uint16   dummy45;
//    Uint16   dummy46;
//    Uint16   dummy47;
//    Uint16   dummy48;
//    Uint16   dummy49;
//    Uint16   dummy50;
//    Uint16   dummy51;
//    Uint16   dummy52;
//    Uint16   dummy53;
//    Uint16   dummy54;
//    Uint16   dummy55;
//    Uint16   dummy56;
//    Uint16   dummy57;
//    Uint16   dummy58;
//    Uint16   dummy59;
//    Uint16   dummy60;
//    Uint16   dummy61;
//    Uint16   dummy62;
//    Uint16   dummy63;
//    Uint16   dummy64;
//    Uint16   dummy65;
//    Uint16   dummy66;
//    Uint16   dummy67;
//    Uint16   dummy68;
//    Uint16   dummy69;
//    Uint16   dummy70;
//    Uint16   dummy71;
//    Uint16   dummy72;
//    Uint16   dummy73;
//    Uint16   dummy74;
//    Uint16   dummy75;
//    Uint16   dummy76;
//    Uint16   dummy77;
//    Uint16   dummy78;
//    Uint16   dummy79;
//    Uint16   dummy80;
//    Uint16   dummy81;
//    Uint16   dummy82;
//    Uint16   dummy83;
//    Uint16   dummy84;
//    Uint16   dummy85;
//    Uint16   dummy86;
//    Uint16   dummy87;
//    Uint16   dummy88;
//    Uint16   dummy89;
//    Uint16   dummy90;
//    Uint16   dummy91;
//    Uint16   dummy92;
//    Uint16   dummy93;
//    Uint16   dummy94;
//    Uint16   dummy95;
//    Uint16   dummy96;
//    Uint16   dummy97;
//    Uint16   dummy98;
//    Uint16   dummy99;
//    Uint16   dummy100;
};//InputsMap 数据结构
typedef struct ModbusInputsMap ModbusInputsMap;
struct ModbusInputsMap{Uint16     dummy1;
//    Uint16     dummy2;
//    Uint16     dummy3;
//    Uint16     dummy4;
//    Uint16     dummy5;
//    Uint16     dummy6;
//    Uint16     dummy7;
//    Uint16     dummy8;
//    Uint16     dummy9;
//    Uint16     dummy10;
//    Uint16     dummy11;
//    Uint16     dummy12;
//    Uint16     dummy13;
//    Uint16     dummy14;
//    Uint16     dummy15;
//    Uint16     dummy16;
//    Uint16     dummy17;
//    Uint16     dummy18;
//    Uint16     dummy19;
//    Uint16     dummy20;
//    Uint16     dummy21;
//    Uint16     dummy22;
//    Uint16     dummy23;
//    Uint16     dummy24;
//    Uint16     dummy25;
//    Uint16     dummy26;
//    Uint16     dummy27;
//    Uint16     dummy28;
//    Uint16     dummy29;
//    Uint16     dummy30;
//    Uint16     dummy31;
//    Uint16     dummy32;
//    Uint16     dummy33;
//    Uint16     dummy34;
//    Uint16     dummy35;
//    Uint16     dummy36;
//    Uint16     dummy37;
//    Uint16     dummy38;
//    Uint16     dummy39;
//    Uint16     dummy40;
//    Uint16     dummy41;
//    Uint16     dummy42;
//    Uint16     dummy43;
//    Uint16     dummy44;
//    Uint16     dummy45;
//    Uint16     dummy46;
//    Uint16     dummy47;
//    Uint16     dummy48;
//    Uint16     dummy49;
//    Uint16     dummy50;
//    Uint16     dummy51;
//    Uint16     dummy52;
//    Uint16     dummy53;
//    Uint16     dummy54;
//    Uint16     dummy55;
//    Uint16     dummy56;
//    Uint16     dummy57;
//    Uint16     dummy58;
//    Uint16     dummy59;
//    Uint16     dummy60;
//    Uint16     dummy61;
//    Uint16     dummy62;
//    Uint16     dummy63;
//    Uint16     dummy64;
//    Uint16     dummy65;
//    Uint16     dummy66;
//    Uint16     dummy67;
//    Uint16     dummy68;
//    Uint16     dummy69;
//    Uint16     dummy70;
//    Uint16     dummy71;
//    Uint16     dummy72;
//    Uint16     dummy73;
//    Uint16     dummy74;
//    Uint16     dummy75;
//    Uint16     dummy76;
//    Uint16     dummy77;
//    Uint16     dummy78;
//    Uint16     dummy79;
//    Uint16     dummy80;
//    Uint16     dummy81;
//    Uint16     dummy82;
//    Uint16     dummy83;
//    Uint16     dummy84;
//    Uint16     dummy85;
//    Uint16     dummy86;
//    Uint16     dummy87;
//    Uint16     dummy88;
//    Uint16     dummy89;
//    Uint16     dummy90;
//    Uint16     dummy91;
//    Uint16     dummy92;
//    Uint16     dummy93;
//    Uint16     dummy94;
//    Uint16     dummy95;
//    Uint16     dummy96;
//    Uint16     dummy97;
//    Uint16     dummy98;
//    Uint16     dummy99;
//    Uint16     dummy100;
};//HoldingRegistersMap数据结构
typedef struct ModbusHoldingRegistersMap ModbusHoldingRegistersMap;
struct ModbusHoldingRegistersMap {Uint16  dummy1;Uint16  dummy2;Uint16  dummy3;Uint16  dummy4;Uint16  dummy5;Uint16  dummy6;Uint16  dummy7;Uint16  dummy8;Uint16  dummy9;Uint16  dummy10;Uint16  dummy11;Uint16  dummy12;Uint16  dummy13;Uint16  dummy14;Uint16  dummy15;Uint16  dummy16;Uint16  dummy17;Uint16  dummy18;Uint16  dummy19;Uint16  dummy20;Uint16  dummy21;Uint16  dummy22;Uint16  dummy23;Uint16  dummy24;Uint16  dummy25;Uint16  dummy26;Uint16  dummy27;Uint16  dummy28;Uint16  dummy29;Uint16  dummy30;Uint16  dummy31;Uint16  dummy32;Uint16  dummy33;Uint16  dummy34;Uint16  dummy35;Uint16  dummy36;Uint16  dummy37;Uint16  dummy38;Uint16  dummy39;Uint16  dummy40;Uint16  dummy41;Uint16  dummy42;Uint16  dummy43;Uint16  dummy44;Uint16  dummy45;Uint16  dummy46;Uint16  dummy47;Uint16  dummy48;Uint16  dummy49;Uint16  dummy50;
//    Uint16  dummy51;
//    Uint16  dummy52;
//    Uint16  dummy53;
//    Uint16  dummy54;
//    Uint16  dummy55;
//    Uint16  dummy56;
//    Uint16  dummy57;
//    Uint16  dummy58;
//    Uint16  dummy59;
//    Uint16  dummy60;
//    Uint16  dummy61;
//    Uint16  dummy62;
//    Uint16  dummy63;
//    Uint16  dummy64;
//    Uint16  dummy65;
//    Uint16  dummy66;
//    Uint16  dummy67;
//    Uint16  dummy68;
//    Uint16  dummy69;
//    Uint16  dummy70;
//    Uint16  dummy71;
//    Uint16  dummy72;
//    Uint16  dummy73;
//    Uint16  dummy74;
//    Uint16  dummy75;
//    Uint16  dummy76;
//    Uint16  dummy77;
//    Uint16  dummy78;
//    Uint16  dummy79;
//    Uint16  dummy80;
//    Uint16  dummy81;
//    Uint16  dummy82;
//    Uint16  dummy83;
//    Uint16  dummy84;
//    Uint16  dummy85;
//    Uint16  dummy86;
//    Uint16  dummy87;
//    Uint16  dummy88;
//    Uint16  dummy89;
//    Uint16  dummy90;
//    Uint16  dummy91;
//    Uint16  dummy92;
//    Uint16  dummy93;
//    Uint16  dummy94;
//    Uint16  dummy95;
//    Uint16  dummy96;
//    Uint16  dummy97;
//    Uint16  dummy98;
//    Uint16  dummy99;
//    Uint16  dummy100;
};//InputRegistersMap数据结构
typedef struct ModbusInputRegistersMap ModbusInputRegistersMap;
struct ModbusInputRegistersMap {Uint16  dummy1;Uint16  dummy2;Uint16  dummy3;Uint16  dummy4;Uint16  dummy5;Uint16  dummy6;Uint16  dummy7;Uint16  dummy8;Uint16  dummy9;Uint16  dummy10;Uint16  dummy11;Uint16  dummy12;Uint16  dummy13;Uint16  dummy14;Uint16  dummy15;Uint16  dummy16;Uint16  dummy17;Uint16  dummy18;Uint16  dummy19;Uint16  dummy20;Uint16  dummy21;Uint16  dummy22;Uint16  dummy23;Uint16  dummy24;Uint16  dummy25;Uint16  dummy26;Uint16  dummy27;Uint16  dummy28;Uint16  dummy29;Uint16  dummy30;Uint16  dummy31;Uint16  dummy32;Uint16  dummy33;Uint16  dummy34;Uint16  dummy35;Uint16  dummy36;Uint16  dummy37;Uint16  dummy38;Uint16  dummy39;Uint16  dummy40;Uint16  dummy41;Uint16  dummy42;Uint16  dummy43;Uint16  dummy44;Uint16  dummy45;Uint16  dummy46;Uint16  dummy47;Uint16  dummy48;Uint16  dummy49;Uint16  dummy50;Uint16  dummy51;Uint16  dummy52;Uint16  dummy53;Uint16  dummy54;Uint16  dummy55;Uint16  dummy56;Uint16  dummy57;Uint16  dummy58;Uint16  dummy59;Uint16  dummy60;Uint16  dummy61;Uint16  dummy62;Uint16  dummy63;Uint16  dummy64;Uint16  dummy65;Uint16  dummy66;Uint16  dummy67;Uint16  dummy68;Uint16  dummy69;Uint16  dummy70;Uint16  dummy71;Uint16  dummy72;Uint16  dummy73;Uint16  dummy74;Uint16  dummy75;Uint16  dummy76;Uint16  dummy77;Uint16  dummy78;Uint16  dummy79;Uint16  dummy80;Uint16  dummy81;Uint16  dummy82;Uint16  dummy83;Uint16  dummy84;Uint16  dummy85;Uint16  dummy86;Uint16  dummy87;Uint16  dummy88;Uint16  dummy89;Uint16  dummy90;Uint16  dummy91;Uint16  dummy92;Uint16  dummy93;Uint16  dummy94;Uint16  dummy95;Uint16  dummy96;Uint16  dummy97;Uint16  dummy98;Uint16  dummy99;Uint16  dummy100;Uint16  dummy101;Uint16  dummy102;Uint16  dummy103;Uint16  dummy104;Uint16  dummy105;Uint16  dummy106;Uint16  dummy107;Uint16  dummy108;Uint16  dummy109;Uint16  dummy110;Uint16  dummy111;Uint16  dummy112;Uint16  dummy113;Uint16  dummy114;Uint16  dummy115;Uint16  dummy116;Uint16  dummy117;Uint16  dummy118;Uint16  dummy119;Uint16  dummy120;Uint16  dummy121;Uint16  dummy122;Uint16  dummy123;Uint16  dummy124;Uint16  dummy125;Uint16  dummy126;Uint16  dummy127;Uint16  dummy128;Uint16  dummy129;Uint16  dummy130;Uint16  dummy131;Uint16  dummy132;Uint16  dummy133;Uint16  dummy134;Uint16  dummy135;Uint16  dummy136;Uint16  dummy137;Uint16  dummy138;Uint16  dummy139;Uint16  dummy140;Uint16  dummy141;Uint16  dummy142;Uint16  dummy143;Uint16  dummy144;Uint16  dummy145;Uint16  dummy146;Uint16  dummy147;Uint16  dummy148;Uint16  dumm1y49;Uint16  dummy150;Uint16  dummy151;Uint16  dummy152;Uint16  dummy153;Uint16  dummy154;Uint16  dummy155;Uint16  dummy156;Uint16  dummy157;Uint16  dummy158;Uint16  dummy159;Uint16  dummy160;Uint16  dummy161;Uint16  dummy162;Uint16  dummy163;Uint16  dummy164;Uint16  dummy165;Uint16  dummy166;Uint16  dummy167;Uint16  dummy168;Uint16  dummy169;Uint16  dummy170;Uint16  dummy171;Uint16  dummy172;Uint16  dummy173;Uint16  dummy174;Uint16  dummy175;Uint16  dummy176;Uint16  dummy177;Uint16  dummy178;Uint16  dummy179;Uint16  dummy180;Uint16  dummy181;Uint16  dummy182;Uint16  dummy183;Uint16  dummy184;Uint16  dummy185;Uint16  dummy186;Uint16  dummy187;Uint16  dummy188;Uint16  dummy189;Uint16  dummy190;Uint16  dummy191;Uint16  dummy192;Uint16  dummy193;Uint16  dummy194;Uint16  dummy195;Uint16  dummy196;Uint16  dummy197;Uint16  dummy198;Uint16  dummy199;Uint16  dummy200;Uint16  dummy201;Uint16  dummy202;Uint16  dummy203;Uint16  dummy204;Uint16  dummy205;Uint16  dummy206;Uint16  dummy207;Uint16  dummy208;Uint16  dummy209;Uint16  dummy210;Uint16  dummy211;Uint16  dummy212;Uint16  dummy213;Uint16  dummy214;Uint16  dummy215;Uint16  dummy216;Uint16  dummy217;Uint16  dummy218;Uint16  dummy219;Uint16  dummy220;Uint16  dummy221;Uint16  dummy222;Uint16  dummy223;Uint16  dummy224;Uint16  dummy225;Uint16  dummy226;Uint16  dummy227;Uint16  dummy228;Uint16  dummy229;Uint16  dummy230;Uint16  dummy231;Uint16  dummy232;Uint16  dummy233;Uint16  dummy234;Uint16  dummy235;Uint16  dummy236;Uint16  dummy237;Uint16  dummy238;Uint16  dummy239;Uint16  dummy240;Uint16  dummy241;Uint16  dummy242;Uint16  dummy243;Uint16  dummy244;Uint16  dummy245;Uint16  dummy246;Uint16  dummy247;Uint16  dummy248;Uint16  dummy249;Uint16  dummy250;
};//MODBUS Slave数据结构
typedef struct ModbusSlaveStruc{ModbusState state;Uint16 rdata[51];       //30Uint16 sdata[251];      //100 //250Uint16 recvlen;Uint16 sendlen;ModbusCoilsMap coils,*pcoils;ModbusInputsMap inputs,*pinputs;ModbusHoldingRegistersMap holdingRegisters,*pholdingRegisters;ModbusInputRegistersMap inputRegisters,*pinputRegisters;
}MBSLSTRU;#endif /* INCLUDE_MODBUS_H_ */

该文件定义了3个枚举数据,5个结构数据。 主要完成 MODBUS SLAVE 的帧结构,功能码01,02 ,03,04 数据结构,错误码帧,状态机数据结构。 一般情况创建项目后放在头文件目录中,便于引用。 

2,创建Modbus Slave RTU 源文件

MODBUS_COM.c

#include <DSP2833x_Device.h>
#include <DSP2833x_Examples.h>
#include <MODBUS.h>                                                            //MODBUS SLAVE 数据结构体头文件
#include <string.h>                                                   //用于清零数组extern void receieve_handler(MBSLSTRU *pModbusSlave);                 //数据接收处理
extern Uint16 CRC16 (Uint16 *nData, Uint16 wLength);                  //CRC16校验函数
extern uint32_t floatToIEEE754_H(float value);             //32位浮点数处理函数高16位
extern uint32_t floatToIEEE754_L(float value);             //32位浮点数处理函数低16位
//extern float ieee754ToFloat(uint32_t ieee);//SCIC通信用
//#define ModbusSlaveAddress 1         //地址,本程序段用MOD_CODE替换,便于更改地址                                                     //MODBUS SLAVE RTU 地址
#define bufferdepth 0x10 //10     //20                                                  //BUFFER 发送起始深度 (0x10 = 16 字节)//CycleQueue ScicRecvMsgQueue;
//struct ScicRecvMsgQueueStruc ScicRecvMsgBox[ScicRecvMsgLen], *pScicRecvMsgQueueStruc;MBSLSTRU public_struc_modbus;                         //MODBUS SLAVE 数据结构体变量Uint16 *pcoils_sub;
Uint16 *pinputs_sub;
Uint16 *pholdingRegisters_sub;
Uint16 *pinputRegisters_sub;__interrupt void SCICTX_MODBUS_ISR(void)     //发送中断(不考虑校验,校验字节已经被计算)
{Uint16 i, Temp;if((public_struc_modbus.sendlen&0xff)>bufferdepth)           //判断发送字节长度>{Temp = bufferdepth;                //发送字节长度 本程序 0-16 0x00-0x10ScicRegs.SCIFFTX.bit.TXFFIENA = 1; //FIFO 发送中断使能ScicRegs.SCIFFTX.bit.TXFFIL = 0;   //发送中断级别=0
//        ScicRegs.SCIFFTX.bit.TXFFST = 0; //FIFO状态
//        SCIC_TX_485;                     //允许发送标志(硬件接口 GPIO61 拉低)for(i=0; i< Temp+2; i++){
//            ScicRegs.SCITXBUF = public_struc_modbus.sdata[i + bufferdepth*(public_struc_modbus.sendlen>>12)];     //发送缓存区数据scic_xmit(public_struc_modbus.sdata[i + bufferdepth*(public_struc_modbus.sendlen>>12)]);                //发送缓存区数据
//            scic_xmit(public_struc_modbus.sdata[i]);                //发送缓存区数据}
//        SCIC_RX_485;                   //发送完毕后允许接收(硬件接口 GPIO61 拉高)DELAY_US(20000);       //25000   //发送完0.02秒后接收 20000 原 10000public_struc_modbus.sendlen = public_struc_modbus.sendlen - bufferdepth + 0x1000;                       //?}else                                                     //判断发送字节长度<{Temp = (public_struc_modbus.sendlen&0xff);if((public_struc_modbus.sendlen&0xff)>0){ScicRegs.SCIFFTX.bit.TXFFIENA = 1;               //FIFO 发送中断使能ScicRegs.SCIFFTX.bit.TXFFIL = 0;                 //发送中断级别=0
//            ScicRegs.SCIFFTX.bit.TXFFST = 0;                                      //FIFO状态
//            SCIC_TX_485;for(i=0; i< Temp+2; i++){
//                ScicRegs.SCITXBUF = public_struc_modbus.sdata[i + bufferdepth*(public_struc_modbus.sendlen>>12)]; //发送缓存区数据scic_xmit(public_struc_modbus.sdata[i + bufferdepth*(public_struc_modbus.sendlen>>12)]);            //发送缓存区数据
//                scic_xmit(public_struc_modbus.sdata[i]);                //发送缓存区数据}
//            SCIC_RX_485;DELAY_US(20000);//25000public_struc_modbus.sendlen = 0;     //一帧完毕,清除发送长度}else{if(public_struc_modbus.sendlen==0)   //发送长度置 0 (无){ScicRegs.SCIFFTX.bit.TXFFIENA = 0; //发送关闭(为接收做准备)}}}ScicRegs.SCIFFTX.bit.TXFFINTCLR=1;   //完整一帧结束,清除发送中断标志,(为接收做准备) Clear Interrupt flagPieCtrlRegs.PIEACK.all|=0x0080;                                                 //Issue PIE ACK
//    PieCtrlRegs.PIEACK.bit.ACK8=1;
}__interrupt void SCICRX_MODBUS_ISR(void)             //MODBUS接收中断函数
{Uint16 i;if(ScicRegs.SCIFFRX.bit.RXFFIL != 1) //接收状态字 非 1{if(public_struc_modbus.rdata[1]==0){for(i=1;i<8;i++){public_struc_modbus.rdata[i]=ScicRegs.SCIRXBUF.all;                                 //读数据并保存(8个字节)}}if((public_struc_modbus.rdata[1]==15)||(public_struc_modbus.rdata[1]==16))                  //rdata[1]=存放功能吗  15 16{if(public_struc_modbus.recvlen == 0)                                                    //长度=0{public_struc_modbus.recvlen = public_struc_modbus.rdata[6] + 9 + 0x1000;            //计算功能码 15/16 的接收长度 = rdata[6] + 9 + 0x1000ScicRegs.SCIFFRX.bit.RXFFIL = 8;                                                    //FIFO深度为8i = public_struc_modbus.recvlen&0xff - ((public_struc_modbus.recvlen>>12)*8);       //设置中断级别if(i>8){ScicRegs.SCIFFRX.bit.RXFFIL = 8;}                                                  //FIFO深度为8,那当接收到8个Word后,即RXFFST>=RXFFIL时,就会触发接受中断else{ScicRegs.SCIFFRX.bit.RXFFIL = i;}                                                  //FIFO深度为 0-7}else                                                                                    //长度不为0{if((public_struc_modbus.recvlen>>12)<((public_struc_modbus.recvlen&0xFF)/8)){for(i=0;i<8;i++){public_struc_modbus.rdata[i+(public_struc_modbus.recvlen>>12)*8]=ScicRegs.SCIRXBUF.all;  // Read data r[0+x]-r[7+x]}public_struc_modbus.recvlen = public_struc_modbus.recvlen + 0x1000;i = public_struc_modbus.recvlen&0xff - ((public_struc_modbus.recvlen>>12)*8);if(i>8){ScicRegs.SCIFFRX.bit.RXFFIL = 8;}else{ScicRegs.SCIFFRX.bit.RXFFIL = i;}}else{for(i=0;i<((public_struc_modbus.recvlen&0xFF)%8);i++){public_struc_modbus.rdata[i+(public_struc_modbus.recvlen>>12)*8]=ScicRegs.SCIRXBUF.all;  // Read data}if((public_struc_modbus.recvlen&0xFF) <= (i+(public_struc_modbus.recvlen>>12)*8)){receieve_handler(&public_struc_modbus);public_struc_modbus.rdata[1] = 0;ScicRegs.SCIFFRX.bit.RXFFIL = 1;public_struc_modbus.recvlen = 0;}}}}else //如果功能码 其他{public_struc_modbus.recvlen = 8;if((public_struc_modbus.rdata[1]>=1)&&(public_struc_modbus.rdata[1]<=6))  //功能码 1-6{receieve_handler(&public_struc_modbus);public_struc_modbus.rdata[1] = 0;public_struc_modbus.recvlen = 0;ScicRegs.SCIFFRX.bit.RXFFIL = 1;}else{receieve_handler(&public_struc_modbus);public_struc_modbus.rdata[1] = 0;ScicRegs.SCIFFRX.bit.RXFFIL = 1;}}}else //接收状态字  1{public_struc_modbus.rdata[0]=ScicRegs.SCIRXBUF.all;                         //读数据if(public_struc_modbus.rdata[0] == MOD_CODE)                                //字节0 - 补全MODBUS RTU 地址   ModbusSlaveAddress{ScicRegs.SCIFFRX.bit.RXFFIL = 7;}                                          //接收状态字 置 7else{ScicRegs.SCIFFRX.bit.RXFFIL = 1;}                                          //接收状态字 置 1}//    ScicRegs.SCIFFTX.bit.TXFFINTCLR=1;                                              // FIFO 清除ScicRegs.SCIFFRX.bit.RXFFOVRCLR=1;                                              // Clear Overflow flagScicRegs.SCIFFRX.bit.RXFFINTCLR=1;                                              // Clear Interrupt flagPieCtrlRegs.PIEACK.all|=0x0080;                                                 // Issue PIE ack
}
//#ifdef FLASH
//#pragma CODE_SECTION(SCIC_Modbus_Init,"ramfuncs")
//#endif
void SCIC_Modbus_Init(void)
{InitScicGpio();                                                                 //初始化收发管脚InitSCICDIR();                                                                  //初始化收发控制管脚scic_fifo_init();                                                               // Initialize the SCIC FIFO Initial send data.  After each transmission this datascic_echoback_init();                                                           // Initialize the SCIC echo_backEALLOW;PieVectTable.SCIRXINTC = &SCICRX_MODBUS_ISR;                                    //配置SCIC接收中断PieVectTable.SCITXINTC = &SCICTX_MODBUS_ISR;                                    //配置SCIC发送中断EDIS;//    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;                                            //主程序中已定义 此处删除PieCtrlRegs.PIEIER8.bit.INTx5=1;                                                // PIE Group 8, int5PieCtrlRegs.PIEIER8.bit.INTx6=1;                                                // PIE Group 8, INT6IER|=M_INT8; // Enable CPU INT                                                  //使能SCIC GROUP 8public_struc_modbus.recvlen = 0;                                                //初始化接收长度public_struc_modbus.sendlen = 0;                                                //初始化发送长度Uint16 i;public_struc_modbus.pcoils = &public_struc_modbus.coils;public_struc_modbus.pinputs = &public_struc_modbus.inputs;public_struc_modbus.pholdingRegisters = &public_struc_modbus.holdingRegisters;public_struc_modbus.pinputRegisters = &public_struc_modbus.inputRegisters;pcoils_sub =(Uint16 *) public_struc_modbus.pcoils;pinputs_sub =(Uint16 *) public_struc_modbus.pinputs;pholdingRegisters_sub =(Uint16 *) public_struc_modbus.pholdingRegisters;pinputRegisters_sub =(Uint16 *) public_struc_modbus.pinputRegisters;for(i=0;i<sizeof(public_struc_modbus.coils);i++){(i%2==1)?(*(pcoils_sub+i)=1):(*(pcoils_sub+i)=0);}for(i=0;i<sizeof(public_struc_modbus.inputs);i++){(i%2==0)?(*(pinputs_sub+i)=1):(*(pinputs_sub+i)=0);}for(i=0;i<sizeof(public_struc_modbus.holdingRegisters);i++)                     //3区保持寄存器初始化{*(pholdingRegisters_sub+i)=i+1;}for(i=0;i<sizeof(public_struc_modbus.inputRegisters);i++)                       //4区输入寄存器初始化{*(pinputRegisters_sub+i)=i+1;}memset(public_struc_modbus.rdata,0,sizeof(public_struc_modbus.rdata));          //初始化寄存器并分配空间
}//#ifdef FLASH
//#pragma CODE_SECTION(receieve_handler,"ramfuncs")
//#endif
void receieve_handler(MBSLSTRU *pModbusSlave)                                                                               //接收到字符串后处理
{Uint16 i, lentemp = public_struc_modbus.recvlen & 0xff;Uint16 *pcoils_sub, *pinputs_sub, *pholdingRegisters_sub, *pinputRegisters_sub;                                         //ModbusData pTempData;                                                                                                   //临时保存数据//    struct ScicRecvMsgQueueStruc KD_ScicRecvMsg;pcoils_sub =(Uint16 *) pModbusSlave->pcoils;                                                                            //线圈pinputs_sub =(Uint16 *) pModbusSlave->pinputs;                                                                          //输入态pholdingRegisters_sub =(Uint16 *) pModbusSlave->pholdingRegisters;                                                      //保持寄存器pinputRegisters_sub =(Uint16 *) pModbusSlave->pinputRegisters;                                                          //输入寄存器memset(pModbusSlave->sdata,0,sizeof(pModbusSlave->sdata));                                                              //初始化寄存器并分配空间pTempData.crc = ((pModbusSlave->rdata[lentemp-2])<<8)+pModbusSlave->rdata[lentemp-1];                                   //接收总字节校验码pModbusSlave->sdata[0] = pModbusSlave->rdata[0];                                                                        //0字节 为 RTU 地址, 发送时考虑返回if(pModbusSlave->rdata[0]==MOD_CODE)                                                                                    //数据地址与本客户端一致 ModbusSlaveAddress{//从地址检查pModbusSlave->sdata[1] = pModbusSlave->rdata[1];                                                                    //第1字节 为 RTU 功能码 ,发送时考虑返回if(CRC16(pModbusSlave->rdata, lentemp-2) == pTempData.crc)                                                          //如果校验CRC准确,接收正确{pTempData.contentIdx = (pModbusSlave->rdata[2]<<8)+pModbusSlave->rdata[3];                                      //2字节 3字节 内容索引pTempData.numofregisters = (pModbusSlave->rdata[4]<<8)+pModbusSlave->rdata[5];                                  //4字节 5字节 这里不表示寄存器数目,表示线圈的状态if((pTempData.contentIdx+pTempData.numofregisters)>65535)                                                       //数值超限判定 > 65535{pModbusSlave->sdata[1]|= 0x80;                                                                              //发送1字节 赋值 0x80pModbusSlave->sdata[2]|= 0x03;                                                                              //发送2字节 赋值 0x03i=CRC16(pModbusSlave->sdata, 3);                                                                            //前三字节做CRC16校验pModbusSlave->sdata[3]= (i>>8)&0xff;                                                                        //3字节 CRC16 高位 赋值 赋值 (i>>8)&0xffpModbusSlave->sdata[4]= i&0xff;                                                                             //4字节 CRC16 地位 赋值  i&0xffpModbusSlave->sendlen=5;                                                                                    //发送长度 5字节ScicRegs.SCIFFTX.bit.TXFFIL = pModbusSlave->sendlen;                                                        //填写发送长度ScicRegs.SCIFFTX.bit.TXFFIENA = 1;                                                                          //发送使能}else                                                                                                            //数值超限判定 <=40{switch(pModbusSlave->rdata[1])                                                                              //功能码字 第一字节{case MB_FUNC_READ_COIL:                                                                                 //功能码字=1--表示线圈pModbusSlave->sdata[2] = (pTempData.numofregisters+7)/8;                                            //向上取整for(i=0;i<pTempData.numofregisters;i++){pModbusSlave->sdata[3+(i/8)] |= (*(pcoils_sub+i+pTempData.contentIdx) << (i%8));}i=CRC16(pModbusSlave->sdata, pModbusSlave->sdata[2]+3);pModbusSlave->sdata[2+pModbusSlave->sdata[2]+1]=(i>>8)&0xff;pModbusSlave->sdata[2+pModbusSlave->sdata[2]+2]=i&0xff;pModbusSlave->sendlen= pModbusSlave->sendlen + 5 + pModbusSlave->sdata[2];if(pModbusSlave->sendlen > bufferdepth){ScicRegs.SCIFFTX.bit.TXFFIL = bufferdepth;}else{ScicRegs.SCIFFTX.bit.TXFFIL = pModbusSlave->sendlen;}ScicRegs.SCIFFTX.bit.TXFFIENA = 1;break;case MB_FUNC_READ_INPUT:                                                                                //功能码字=2--表示输入态pModbusSlave->sdata[2] = (pTempData.numofregisters+7)/8;                                            //向上取整for(i=0;i<pTempData.numofregisters;i++){pModbusSlave->sdata[3+(i/8)]|=*(pinputs_sub+i+pTempData.contentIdx) << (i%8);}i=CRC16(pModbusSlave->sdata, pModbusSlave->sdata[2]+3);pModbusSlave->sdata[2+pModbusSlave->sdata[2]+1]=(i>>8)&0xff;pModbusSlave->sdata[2+pModbusSlave->sdata[2]+2]=i&0xff;pModbusSlave->sendlen= pModbusSlave->sendlen + 5 + pModbusSlave->sdata[2];if(pModbusSlave->sendlen > bufferdepth){ScicRegs.SCIFFTX.bit.TXFFIL = bufferdepth;}else{ScicRegs.SCIFFTX.bit.TXFFIL = pModbusSlave->sendlen;}ScicRegs.SCIFFTX.bit.TXFFIENA = 1;break;case MB_FUNC_READ_HOLDINGREGISTERS:                                                                     //功能码字=3--表示保持寄存器pModbusSlave->sdata[2] = pTempData.numofregisters*2;                                                //向上取整for(i=0;i<(pTempData.numofregisters);i++){pModbusSlave->sdata[3+i*2+1]=*(pholdingRegisters_sub+i+pTempData.contentIdx) ;                  //发送高16位pModbusSlave->sdata[3+i*2+1] = (pModbusSlave->sdata[3+i*2+1]) & 0xff;pModbusSlave->sdata[3+i*2]=*(pholdingRegisters_sub+i+pTempData.contentIdx) ;                    //发送低16位pModbusSlave->sdata[3+i*2]=(pModbusSlave->sdata[3+i*2])>>8;}i=CRC16(pModbusSlave->sdata, pModbusSlave->sdata[2]+3);pModbusSlave->sdata[2+pModbusSlave->sdata[2]+1]=(i>>8)&0xff;pModbusSlave->sdata[2+pModbusSlave->sdata[2]+2]=i&0xff;pModbusSlave->sendlen= pModbusSlave->sendlen + 5 + pModbusSlave->sdata[2];if(pModbusSlave->sendlen > bufferdepth){ScicRegs.SCIFFTX.bit.TXFFIL = bufferdepth;}else{ScicRegs.SCIFFTX.bit.TXFFIL = pModbusSlave->sendlen;}ScicRegs.SCIFFTX.bit.TXFFIENA = 1;break;case MB_FUNC_READ_INPUTREGISTERS:                                                                       //功能码字=4--表示输入寄存器pModbusSlave->sdata[2] = pTempData.numofregisters*2;                                                //向上取整for(i=0;i<(pTempData.numofregisters);i++){pModbusSlave->sdata[3+i*2+1]=*(pinputRegisters_sub+i+pTempData.contentIdx) ;pModbusSlave->sdata[3+i*2+1] = (pModbusSlave->sdata[3+i*2+1]) & 0xff;pModbusSlave->sdata[3+i*2]=*(pinputRegisters_sub+i+pTempData.contentIdx) ;pModbusSlave->sdata[3+i*2]=(pModbusSlave->sdata[3+i*2])>>8;}i=CRC16(pModbusSlave->sdata, pModbusSlave->sdata[2]+3);pModbusSlave->sdata[2+pModbusSlave->sdata[2]+1]=(i>>8)&0xff;pModbusSlave->sdata[2+pModbusSlave->sdata[2]+2]=i&0xff;pModbusSlave->sendlen= pModbusSlave->sendlen + 5 + pModbusSlave->sdata[2];if(pModbusSlave->sendlen > bufferdepth){ScicRegs.SCIFFTX.bit.TXFFIL = bufferdepth;}else{ScicRegs.SCIFFTX.bit.TXFFIL = pModbusSlave->sendlen;}ScicRegs.SCIFFTX.bit.TXFFIENA = 1;break;case MB_FUNC_FORCE_COIL:                                                                                //功能码字=5--表示for(i=2;i<8;i++){pModbusSlave->sdata[i] = pModbusSlave->rdata[i];}if(pTempData.numofregisters==0xFF00){*(pcoils_sub+pTempData.contentIdx)=1;pModbusSlave->sendlen=8;}else{if(pTempData.numofregisters==0x0000){*(pcoils_sub+pTempData.contentIdx)=0;pModbusSlave->sendlen=8;}else//命令错误{pModbusSlave->sdata[1]= 0x85;pModbusSlave->sdata[2]= 0x03;i=CRC16(pModbusSlave->sdata, 3);pModbusSlave->sdata[3]= (i>>8)&0xff;pModbusSlave->sdata[4]= i&0xff;pModbusSlave->sendlen=5;}}ScicRegs.SCIFFTX.bit.TXFFIL = pModbusSlave->sendlen;ScicRegs.SCIFFTX.bit.TXFFIENA = 1;break;case MB_FUNC_WRITE_HOLDINGREGISTER:                                                                     //功能码字=6--表示for(i=2;i<8;i++){pModbusSlave->sdata[i] = pModbusSlave->rdata[i];}*(pholdingRegisters_sub+pTempData.contentIdx)=pTempData.numofregisters;pModbusSlave->sendlen=8;ScicRegs.SCIFFTX.bit.TXFFIL = pModbusSlave->sendlen;ScicRegs.SCIFFTX.bit.TXFFIENA = 1;break;case MB_FUNC_FORCE_NCOILS:                                                                              //功能码字=15--表示for(i=0;i<pTempData.numofregisters;i++){*(pcoils_sub+i+pTempData.contentIdx) = ((pModbusSlave->rdata[i/8+7])>>(i%8))&0x01;}for(i=2;i<7;i++){pModbusSlave->sdata[i] = pModbusSlave->rdata[i];}i=CRC16(pModbusSlave->sdata, 7);pModbusSlave->sdata[7]=(i>>8)&0xff;pModbusSlave->sdata[8]=i&0xff;pModbusSlave->sendlen=9;ScicRegs.SCIFFTX.bit.TXFFIL = pModbusSlave->sendlen;ScicRegs.SCIFFTX.bit.TXFFIENA = 1;break;case MB_FUNC_WRITE_NREGISTERS:                                                                          //功能码字=16--表示for(i=0;i<pTempData.numofregisters;i++){*(pholdingRegisters_sub+i+pTempData.contentIdx) =(Uint16)(pModbusSlave->rdata[i*2+7]<<8) + (pModbusSlave->rdata[i*2+8]&0xFF);}for(i=2;i<6;i++){pModbusSlave->sdata[i] = pModbusSlave->rdata[i];}i=CRC16(pModbusSlave->sdata, 6);pModbusSlave->sdata[6]=(i>>8)&0xff;pModbusSlave->sdata[7]=i&0xff;pModbusSlave->sendlen=8;ScicRegs.SCIFFTX.bit.TXFFIL = pModbusSlave->sendlen;ScicRegs.SCIFFTX.bit.TXFFIENA = 1;break;default:                                                                                                //功能码字=其他--表示pModbusSlave->sdata[2]= 0x03;i=CRC16(pModbusSlave->sdata, 3);pModbusSlave->sdata[3]= (i>>8)&0xff;pModbusSlave->sdata[4]= i&0xff;pModbusSlave->sendlen=5;ScicRegs.SCIFFTX.bit.TXFFIL = pModbusSlave->sendlen;ScicRegs.SCIFFTX.bit.TXFFIENA = 1;break;}}}else                                                                                                                //如果校验CRC校验码错误{pModbusSlave->sdata[1]|= 0x80;                                                                                  //返回错误功能码 01 80 03 CRC1-H CRC2-LpModbusSlave->sdata[2]|= 0x03;                                                                                  //i=CRC16(pModbusSlave->sdata, 3);pModbusSlave->sdata[3]= (i>>8)&0xff;                                                                            //CRC16-HpModbusSlave->sdata[4]= i&0xff;                                                                                 //CRC16-LpModbusSlave->sendlen=5;                                                                                        //5个字节ScicRegs.SCIFFTX.bit.TXFFIL = pModbusSlave->sendlen;ScicRegs.SCIFFTX.bit.TXFFIENA = 1;}}else                                                                                                                    //RTU地址错误不处理{     }
}
//#ifdef FLASH
//#pragma CODE_SECTION(CRC16,"ramfuncs")
//#endif
Uint16 CRC16 (Uint16 *nData, Uint16 wLength)                                                                                //CRC16校验函数
{static const Uint16 wCRCTable[] ={0X0000, 0XC0C1, 0XC181, 0X0140, 0XC301, 0X03C0, 0X0280, 0XC241,0XC601, 0X06C0, 0X0780, 0XC741, 0X0500, 0XC5C1, 0XC481, 0X0440,0XCC01, 0X0CC0, 0X0D80, 0XCD41, 0X0F00, 0XCFC1, 0XCE81, 0X0E40,0X0A00, 0XCAC1, 0XCB81, 0X0B40, 0XC901, 0X09C0, 0X0880, 0XC841,0XD801, 0X18C0, 0X1980, 0XD941, 0X1B00, 0XDBC1, 0XDA81, 0X1A40,0X1E00, 0XDEC1, 0XDF81, 0X1F40, 0XDD01, 0X1DC0, 0X1C80, 0XDC41,0X1400, 0XD4C1, 0XD581, 0X1540, 0XD701, 0X17C0, 0X1680, 0XD641,0XD201, 0X12C0, 0X1380, 0XD341, 0X1100, 0XD1C1, 0XD081, 0X1040,0XF001, 0X30C0, 0X3180, 0XF141, 0X3300, 0XF3C1, 0XF281, 0X3240,0X3600, 0XF6C1, 0XF781, 0X3740, 0XF501, 0X35C0, 0X3480, 0XF441,0X3C00, 0XFCC1, 0XFD81, 0X3D40, 0XFF01, 0X3FC0, 0X3E80, 0XFE41,0XFA01, 0X3AC0, 0X3B80, 0XFB41, 0X3900, 0XF9C1, 0XF881, 0X3840,0X2800, 0XE8C1, 0XE981, 0X2940, 0XEB01, 0X2BC0, 0X2A80, 0XEA41,0XEE01, 0X2EC0, 0X2F80, 0XEF41, 0X2D00, 0XEDC1, 0XEC81, 0X2C40,0XE401, 0X24C0, 0X2580, 0XE541, 0X2700, 0XE7C1, 0XE681, 0X2640,0X2200, 0XE2C1, 0XE381, 0X2340, 0XE101, 0X21C0, 0X2080, 0XE041,0XA001, 0X60C0, 0X6180, 0XA141, 0X6300, 0XA3C1, 0XA281, 0X6240,0X6600, 0XA6C1, 0XA781, 0X6740, 0XA501, 0X65C0, 0X6480, 0XA441,0X6C00, 0XACC1, 0XAD81, 0X6D40, 0XAF01, 0X6FC0, 0X6E80, 0XAE41,0XAA01, 0X6AC0, 0X6B80, 0XAB41, 0X6900, 0XA9C1, 0XA881, 0X6840,0X7800, 0XB8C1, 0XB981, 0X7940, 0XBB01, 0X7BC0, 0X7A80, 0XBA41,0XBE01, 0X7EC0, 0X7F80, 0XBF41, 0X7D00, 0XBDC1, 0XBC81, 0X7C40,0XB401, 0X74C0, 0X7580, 0XB541, 0X7700, 0XB7C1, 0XB681, 0X7640,0X7200, 0XB2C1, 0XB381, 0X7340, 0XB101, 0X71C0, 0X7080, 0XB041,0X5000, 0X90C1, 0X9181, 0X5140, 0X9301, 0X53C0, 0X5280, 0X9241,0X9601, 0X56C0, 0X5780, 0X9741, 0X5500, 0X95C1, 0X9481, 0X5440,0X9C01, 0X5CC0, 0X5D80, 0X9D41, 0X5F00, 0X9FC1, 0X9E81, 0X5E40,0X5A00, 0X9AC1, 0X9B81, 0X5B40, 0X9901, 0X59C0, 0X5880, 0X9841,0X8801, 0X48C0, 0X4980, 0X8941, 0X4B00, 0X8BC1, 0X8A81, 0X4A40,0X4E00, 0X8EC1, 0X8F81, 0X4F40, 0X8D01, 0X4DC0, 0X4C80, 0X8C41,0X4400, 0X84C1, 0X8581, 0X4540, 0X8701, 0X47C0, 0X4680, 0X8641,0X8201, 0X42C0, 0X4380, 0X8341, 0X4100, 0X81C1, 0X8081, 0X4040
//         0x00000,0x0C0C1,0x0C181,0x00140,0x0C301,0x003C0,0x00280,0x0C241,
//         0x0C601,0x006C0,0x00780,0x0C741,0x00500,0x0C5C1,0x0C481,0x00440,
//         0x0CC01,0x00CC0,0x00D80,0x0CD41,0x00F00,0x0CFC1,0x0CE81,0x00E40,
//         0x00A00,0x0CAC1,0x0CB81,0x00B40,0x0C901,0x009C0,0x00880,0x0C841,
//         0x0D801,0x018C0,0x01980,0x0D941,0x01B00,0x0DBC1,0x0DA81,0x01A40,
//         0x01E00,0x0DEC1,0x0DF81,0x01F40,0x0DD01,0x01DC0,0x01C80,0x0DC41,
//         0x01400,0x0D4C1,0x0D581,0x01540,0x0D701,0x017C0,0x01680,0x0D641,
//         0x0D201,0x012C0,0x01380,0x0D341,0x01100,0x0D1C1,0x0D081,0x01040,
//         0x0F001,0x030C0,0x03180,0x0F141,0x03300,0x0F3C1,0x0F281,0x03240,
//         0x03600,0x0F6C1,0x0F781,0x03740,0x0F501,0x035C0,0x03480,0x0F441,
//         0x03C00,0x0FCC1,0x0FD81,0x03D40,0x0FF01,0x03FC0,0x03E80,0x0FE41,
//         0x0FA01,0x03AC0,0x03B80,0x0FB41,0x03900,0x0F9C1,0x0F881,0x03840,
//         0x02800,0x0E8C1,0x0E981,0x02940,0x0EB01,0x02BC0,0x02A80,0x0EA41,
//         0x0EE01,0x02EC0,0x02F80,0x0EF41,0x02D00,0x0EDC1,0x0EC81,0x02C40,
//         0x0E401,0x024C0,0x02580,0x0E541,0x02700,0x0E7C1,0x0E681,0x02640,
//         0x02200,0x0E2C1,0x0E381,0x02340,0x0E101,0x021C0,0x02080,0x0E041,
//         0x0A001,0x060C0,0x06180,0x0A141,0x06300,0x0A3C1,0x0A281,0x06240,
//         0x06600,0x0A6C1,0x0A781,0x06740,0x0A501,0x065C0,0x06480,0x0A441,
//         0x06C00,0x0ACC1,0x0AD81,0x06D40,0x0AF01,0x06FC0,0x06E80,0x0AE41,
//         0x0AA01,0x06AC0,0x06B80,0x0AB41,0x06900,0x0A9C1,0x0A881,0x06840,
//         0x07800,0x0B8C1,0x0B981,0x07940,0x0BB01,0x07BC0,0x07A80,0x0BA41,
//         0x0BE01,0x07EC0,0x07F80,0x0BF41,0x07D00,0x0BDC1,0x0BC81,0x07C40,
//         0x0B401,0x074C0,0x07580,0x0B541,0x07700,0x0B7C1,0x0B681,0x07640,
//         0x07200,0x0B2C1,0x0B381,0x07340,0x0B101,0x071C0,0x07080,0x0B041,
//         0x05000,0x090C1,0x09181,0x05140,0x09301,0x053C0,0x05280,0x09241,
//         0x09601,0x056C0,0x05780,0x09741,0x05500,0x095C1,0x09481,0x05440,
//         0x09C01,0x05CC0,0x05D80,0x09D41,0x05F00,0x09FC1,0x09E81,0x05E40,
//         0x05A00,0x09AC1,0x09B81,0x05B40,0x09901,0x059C0,0x05880,0x09841,
//         0x08801,0x048C0,0x04980,0x08941,0x04B00,0x08BC1,0x08A81,0x04A40,
//         0x04E00,0x08EC1,0x08F81,0x04F40,0x08D01,0x04DC0,0x04C80,0x08C41,
//         0x04400,0x084C1,0x08581,0x04540,0x08701,0x047C0,0x04680,0x08641,
//         0x08201,0x042C0,0x04380,0x08341,0x04100,0x081C1,0x08081,0x04040};Uint16 nTemp;Uint16 wCRCWord = 0xFFFF;while (wLength--){nTemp = (*nData++ ^ wCRCWord)&0xff;wCRCWord >>= 8;wCRCWord  ^= wCRCTable[nTemp];}wCRCWord = (Uint16) ((wCRCWord<<8)+(wCRCWord>>8));return wCRCWord;
}void scic_rx_test()
{if(SCIC_TXRX_485_ST==1)                                                         //发送状态正确{scicsendmsg = "\r\nEnter a character:\0";                                   //发送语句  \r-13  \n-10scic_msg(scicsendmsg);                                                      //发送函数}if((ScicRegs.SCIFFRX.bit.RXFFST == 1)&&(SCIC_TXRX_485_ST==0))                   //接收状态正确并且状态字接收{scicReceivedChar = ScicRegs.SCIRXBUF.all;                                   //把接收BUF里的数据赋值给ReceivedCharscic_xmit(scicReceivedChar);                                                //发送ReceivedCharSCIC_TX_485;                                                               //高电平scicsendmsg = "be send!\0";                                                 //发送语句scic_msg(scicsendmsg);                                                      //发送函数}
}void scic_xmit(int Schar)                                                               // SCIC发送一个字符函数
{SCIC_TX_485;while (ScicRegs.SCIFFTX.bit.TXFFST != 0) { }                                    //表示未发送完毕时等待ScicRegs.SCITXBUF=Schar;SCIC_RX_485;                                                                    //拉低
}void scic_msg(char *scisendcmsg)                                                    //发送整个数组的函数
{int i;i = 0;while(scicsendmsg[i] != '\0')                                                   //发送一个字符串 并且 以  \0 字符结束{scic_xmit(scicsendmsg[i]);i++;}
}void scic_fifo_init()
{ScicRegs.SCICTL2.bit.TXINTENA =1;ScicRegs.SCICTL2.bit.RXBKINTENA =1;ScicRegs.SCIHBAUD    =0x0001;ScicRegs.SCILBAUD    =0x00E7;ScicRegs.SCIFFCT.all =0x00;             //为默认值 效果为  禁用自动波特率调整  fifo传送延时为0ScicRegs.SCIFFTX.bit.SCIFFENA = 1;      //使能sci fifo功能ScicRegs.SCIFFTX.bit.TXFIFOXRESET=1;    //重新使能发送fifo操作ScicRegs.SCIFFTX.bit.TXFFIENA = 1;      //fifo 发送中断使能ScicRegs.SCIFFTX.bit.TXFFIL = 0;        //发送中断级别,此时为上电默认值0ScicRegs.SCIFFRX.bit.RXFFOVRCLR = 1;    //清接收fifo溢出标志ScicRegs.SCIFFRX.bit.RXFFINTCLR = 1;    //清接收fifo中断标志位ScicRegs.SCIFFRX.bit.RXFFIENA = 1;      //使能fifo接收中断ScicRegs.SCIFFRX.bit.RXFFIL = 1;        //fifo接收中断级别为8ScicRegs.SCIFFRX.bit.RXFIFORESET=1;     //重新使能接收fifo操作
}void scic_echoback_init(void)
{
// Note: Clocks were turned on to the SCIC peripheral in the InitSysCtrl() functionScicRegs.SCICCR.all =0x0007;            // 1 stop bit, No loopback, No parity,8 char bits,async mode, idle-line protocol
//    ScicRegs.SCICTL1.all =0x0003;           // enable TX, RX, internal SCICLK, Disable RX ERR, SLEEP, TXWAKEScicRegs.SCICTL1.all =0x0023;           // Relinquish SCI from ResetScicRegs.SCICTL1.bit.RXERRINTENA=1;
}void DATA_TRANSFER_DSP_HMI(void)
{//系统运行参数赋值sys_mod_quantity=*(pholdingRegisters_sub+0);sys_DC_VOLTAGE_set=*(pholdingRegisters_sub+1);sys_wired_mode=*(pholdingRegisters_sub+2);sys_LO_V=*(pholdingRegisters_sub+3);sys_OL_V=*(pholdingRegisters_sub+4);sys_OV_V=*(pholdingRegisters_sub+5);sys_OV_HZ=*(pholdingRegisters_sub+6);sys_OL_HZ=*(pholdingRegisters_sub+7);sys_mini_current=*(pholdingRegisters_sub+8);sys_maxi_current=*(pholdingRegisters_sub+9);sys_IGBT_over_temperature=*(pholdingRegisters_sub+10);sys_VH_O=*(pholdingRegisters_sub+11);sys_CH_O=*(pholdingRegisters_sub+12);sys_COMPENSATION_mode=*(pholdingRegisters_sub+13);sys_HLCOMPENSATION_transf=*(pholdingRegisters_sub+14);sys_HL_COMPENSATIONA_direction=(*(pholdingRegisters_sub+15)&0x0001);sys_HL_COMPENSATIONB_direction=((*(pholdingRegisters_sub+15))&0x0002)>>1;sys_HL_COMPENSATIONC_direction=((*(pholdingRegisters_sub+15))&0x0004)>>2;sys_HLGRID_transf=*(pholdingRegisters_sub+16);sys_HL_GRIDA_direction=(*(pholdingRegisters_sub+17)&0x0001);sys_HL_GRIDB_direction=((*(pholdingRegisters_sub+17))&0x0002)>>1;sys_HL_GRIDC_direction=((*(pholdingRegisters_sub+17))&0x0004)>>2;sys_HL_GRID_position=((*(pholdingRegisters_sub+17))&0x0008)>>3;sys_HLDEVICE_transf=*(pholdingRegisters_sub+18);sys_HL_DEVICEA_direction=*(pholdingRegisters_sub+19);sys_HL_DEVICEB_direction=((*(pholdingRegisters_sub+19))&0x0002)>>1;sys_HL_DEVICEC_direction=((*(pholdingRegisters_sub+19))&0x0004)>>2;sys_odd_sel_1=*(pholdingRegisters_sub+20);sys_odd_sel_2=*(pholdingRegisters_sub+21);sys_even_sel_1=*(pholdingRegisters_sub+22);sys_even_sel_2=*(pholdingRegisters_sub+23);sys_mod_start_mode=*(pholdingRegisters_sub+24);sys_limit_current=*(pholdingRegisters_sub+25);sys_mod_power_on_off=*(pholdingRegisters_sub+26);sys_meter_mode=*(pholdingRegisters_sub+27);sys_cap_on_off_logic_mode=*(pholdingRegisters_sub+28);sys_cap_relay_total=*(pholdingRegisters_sub+29);sys_cap_capacity=*(pholdingRegisters_sub+30);sys_cap_on_off_delay_time=*(pholdingRegisters_sub+31);sys_cap_live_time_max=*(pholdingRegisters_sub+32);sys_cap_rest_time_min=*(pholdingRegisters_sub+33);sys_extinguish_pf=*(pholdingRegisters_sub+34);sys_extinguish_pf_Tan=*(pholdingRegisters_sub+35);sys_generate_pf=*(pholdingRegisters_sub+36);sys_generate_pf_tan=*(pholdingRegisters_sub+37);sys_mod_cap_unit=*(pholdingRegisters_sub+38);sys_device_comp_max=*(pholdingRegisters_sub+39);sys_mod_DA1=*(pholdingRegisters_sub+40);sys_mod_DA2=*(pholdingRegisters_sub+41);sys_test_cur_max=*(pholdingRegisters_sub+42);sys_test_Q_instruction=*(pholdingRegisters_sub+43);sys_test_3_instruction=*(pholdingRegisters_sub+44);sys_test_5_instruction=*(pholdingRegisters_sub+45);sys_test_7_instruction=*(pholdingRegisters_sub+46);sys_LC_on_num=*(pholdingRegisters_sub+47);LC_Relay_ON(sys_LC_on_num);sys_LC_off_num=*(pholdingRegisters_sub+48);LC_Relay_OFF(sys_LC_off_num);//系统信息上传//电网三相电压有效值*(pinputRegisters_sub+0)=cal_ua_rms*10; //floatToIEEE754_H(cal_ua_rms);*(pinputRegisters_sub+1)=cal_ub_rms*10; //cal_ub_rms*10;*(pinputRegisters_sub+2)=cal_uc_rms*10;//电源侧三相电流有效值*(pinputRegisters_sub+3)=cal_ias_rms*10;*(pinputRegisters_sub+4)=cal_ibs_rms*10;*(pinputRegisters_sub+5)=cal_ics_rms*10;//负载侧三相电流有效值*(pinputRegisters_sub+6)=cal_ial_rms*10;*(pinputRegisters_sub+7)=cal_ibl_rms*10;*(pinputRegisters_sub+8)=cal_icl_rms*10;//装置侧三相补偿电流有效值*(pinputRegisters_sub+9)=cal_iad_rms*10;*(pinputRegisters_sub+10)=cal_ibd_rms*10;*(pinputRegisters_sub+11)=cal_icd_rms*10;//本模块三相补偿电流有效值*(pinputRegisters_sub+12)=cal_iac_rms*10;*(pinputRegisters_sub+13)=cal_ibc_rms*10;*(pinputRegisters_sub+14)=cal_icc_rms*10;//电网频率*(pinputRegisters_sub+15)=cal_Grid_frequency*10;//直流母线上下电压*(pinputRegisters_sub+16)=cal_DC_U_rms*10;*(pinputRegisters_sub+17)=cal_DC_D_rms*10;//IGBT温度*(pinputRegisters_sub+18)=cal_TEMP_IGBTA_rms*10;*(pinputRegisters_sub+19)=cal_TEMP_IGBTB_rms*10;*(pinputRegisters_sub+20)=0;//电网相序*(pinputRegisters_sub+21)=cal_Phase_seq;//电源侧功率及功率因数*(pinputRegisters_sub+22)=cal_aPs*10;*(pinputRegisters_sub+23)=cal_bPs*10;*(pinputRegisters_sub+24)=cal_cPs*10;*(pinputRegisters_sub+25)=cal_aQs*10;*(pinputRegisters_sub+26)=cal_bQs*10;*(pinputRegisters_sub+27)=cal_cQs*10;*(pinputRegisters_sub+28)=cal_aSs*10;*(pinputRegisters_sub+29)=cal_bSs*10;*(pinputRegisters_sub+30)=cal_cSs*10;*(pinputRegisters_sub+31)=cal_flag_apfs;*(pinputRegisters_sub+32)=cal_flag_bpfs;*(pinputRegisters_sub+33)=cal_flag_bpfs;*(pinputRegisters_sub+34)=cal_aPFs*1000;*(pinputRegisters_sub+35)=cal_bPFs*1000;*(pinputRegisters_sub+36)=cal_cPFs*1000;*(pinputRegisters_sub+37)=cal_Har_aPFs*1000;*(pinputRegisters_sub+38)=cal_Har_bPFs*1000;*(pinputRegisters_sub+39)=cal_Har_cPFs*1000;*(pinputRegisters_sub+40)=cal_ind_caps_flag;*(pinputRegisters_sub+41)=cal_pfs_average*1000;*(pinputRegisters_sub+42)=cal_har_pfs_average*1000;//负载侧功率及功率因数*(pinputRegisters_sub+43)=cal_aPl*10;*(pinputRegisters_sub+44)=cal_bPl*10;*(pinputRegisters_sub+45)=cal_cPl*10;*(pinputRegisters_sub+46)=cal_aQl*10;*(pinputRegisters_sub+47)=cal_bQl*10;*(pinputRegisters_sub+48)=cal_bQl*10;*(pinputRegisters_sub+49)=cal_aSl*10;*(pinputRegisters_sub+50)=cal_bSl*10;*(pinputRegisters_sub+51)=cal_cSl*10;*(pinputRegisters_sub+52)=cal_flag_apfl;*(pinputRegisters_sub+53)=cal_flag_bpfl;*(pinputRegisters_sub+54)=cal_flag_bpfl;*(pinputRegisters_sub+55)=cal_aPFl*1000;*(pinputRegisters_sub+56)=cal_bPFl*1000;*(pinputRegisters_sub+57)=cal_cPFl*1000;*(pinputRegisters_sub+58)=cal_Har_aPFl*1000;*(pinputRegisters_sub+59)=cal_Har_bPFl*1000;*(pinputRegisters_sub+60)=cal_Har_cPFl*1000;*(pinputRegisters_sub+61)=cal_ind_capl_flag;*(pinputRegisters_sub+62)=cal_pfl_average*1000;*(pinputRegisters_sub+63)=cal_har_pfl_average*1000;//电网电压、电源侧电流、负载侧电流谐波总含量*(pinputRegisters_sub+64)=cal_THDu_a_total*10;*(pinputRegisters_sub+65)=cal_THDu_b_total*10;*(pinputRegisters_sub+66)=cal_THDu_c_total*10;*(pinputRegisters_sub+67)=cal_THDi_as_total*10;*(pinputRegisters_sub+68)=cal_THDi_bs_total*10;*(pinputRegisters_sub+69)=cal_THDi_cs_total*10;*(pinputRegisters_sub+70)=cal_THDi_al_total*10;*(pinputRegisters_sub+71)=cal_THDi_bl_total*10;*(pinputRegisters_sub+72)=cal_THDi_cl_total*10;//告警码*(pinputRegisters_sub+73)=err_err_byte[0];*(pinputRegisters_sub+74)=err_err_byte[1];*(pinputRegisters_sub+75)=err_err_byte[2];//LC继电器状态*(pinputRegisters_sub+76)=cap_relay_status_top;*(pinputRegisters_sub+76)=((*(pinputRegisters_sub+76))<<8)|(cap_relay_status_bottom);//     *(pinputRegisters_sub+77)=(cap_relay_status_bottom<<16);//投入LC电流测试*(pinputRegisters_sub+78)=cal_diff_cur[0];*(pinputRegisters_sub+79)=cal_diff_cur[1];*(pinputRegisters_sub+80)=cal_diff_cur[2];*(pinputRegisters_sub+81)=cal_diff_cur[3];*(pinputRegisters_sub+82)=cal_diff_cur[4];*(pinputRegisters_sub+83)=cal_diff_cur[5];*(pinputRegisters_sub+84)=cal_diff_cur[6];*(pinputRegisters_sub+85)=cal_diff_cur[7];*(pinputRegisters_sub+86)=cal_diff_cur[8];*(pinputRegisters_sub+87)=cal_diff_cur[9];*(pinputRegisters_sub+88)=cal_diff_cur[10];*(pinputRegisters_sub+89)=cal_diff_cur[11];*(pinputRegisters_sub+90)=cal_diff_cur[12];*(pinputRegisters_sub+91)=cal_diff_cur[13];*(pinputRegisters_sub+92)=cal_diff_cur[14];*(pinputRegisters_sub+93)=cal_diff_cur[15];//A相电源侧各次谐波含量*(pinputRegisters_sub+94)=cal_thdi_as[1];*(pinputRegisters_sub+94)=((*(pinputRegisters_sub+94))<<8)|((int)cal_thdi_as[2]);*(pinputRegisters_sub+95)=cal_thdi_as[3];*(pinputRegisters_sub+95)=((*(pinputRegisters_sub+95))<<8)|((int)cal_thdi_as[4]);*(pinputRegisters_sub+96)=cal_thdi_as[5];*(pinputRegisters_sub+96)=((*(pinputRegisters_sub+96))<<8)|((int)cal_thdi_as[6]);*(pinputRegisters_sub+97)=cal_thdi_as[7];*(pinputRegisters_sub+97)=((*(pinputRegisters_sub+97))<<8)|((int)cal_thdi_as[8]);*(pinputRegisters_sub+98)=cal_thdi_as[9];*(pinputRegisters_sub+98)=((*(pinputRegisters_sub+98))<<8)|((int)cal_thdi_as[10]);*(pinputRegisters_sub+99)=cal_thdi_as[11];*(pinputRegisters_sub+99)=((*(pinputRegisters_sub+99))<<8)|((int)cal_thdi_as[12]);*(pinputRegisters_sub+100)=cal_thdi_as[13];*(pinputRegisters_sub+100)=((*(pinputRegisters_sub+100))<<8)|((int)cal_thdi_as[14]);*(pinputRegisters_sub+101)=cal_thdi_as[15];*(pinputRegisters_sub+101)=((*(pinputRegisters_sub+101))<<8)|((int)cal_thdi_as[16]);*(pinputRegisters_sub+102)=cal_thdi_as[17];*(pinputRegisters_sub+102)=((*(pinputRegisters_sub+102))<<8)|((int)cal_thdi_as[18]);*(pinputRegisters_sub+103)=cal_thdi_as[19];*(pinputRegisters_sub+103)=((*(pinputRegisters_sub+103))<<8)|((int)cal_thdi_as[21]);*(pinputRegisters_sub+104)=cal_thdi_as[23];*(pinputRegisters_sub+104)=((*(pinputRegisters_sub+104))<<8)|((int)cal_thdi_as[25]);*(pinputRegisters_sub+105)=cal_thdi_as[27];*(pinputRegisters_sub+105)=((*(pinputRegisters_sub+105))<<8)|((int)cal_thdi_as[29]);*(pinputRegisters_sub+106)=cal_thdi_as[31];*(pinputRegisters_sub+106)=((*(pinputRegisters_sub+106))<<8)|((int)cal_thdi_as[33]);*(pinputRegisters_sub+107)=cal_thdi_as[35];*(pinputRegisters_sub+107)=((*(pinputRegisters_sub+107))<<8)|((int)cal_thdi_as[37]);*(pinputRegisters_sub+108)=cal_thdi_as[39];*(pinputRegisters_sub+108)=((*(pinputRegisters_sub+108))<<8)|((int)cal_thdi_as[41]);*(pinputRegisters_sub+109)=cal_thdi_as[43];*(pinputRegisters_sub+109)=((*(pinputRegisters_sub+109))<<8)|((int)cal_thdi_as[45]);*(pinputRegisters_sub+110)=cal_thdi_as[47];*(pinputRegisters_sub+110)=((*(pinputRegisters_sub+110))<<8)|((int)cal_thdi_as[49]);//B相电源侧各次谐波含量*(pinputRegisters_sub+111)=cal_thdi_bs[1];*(pinputRegisters_sub+111)=((*(pinputRegisters_sub+111))<<8)|((int)cal_thdi_bs[2]);*(pinputRegisters_sub+112)=cal_thdi_bs[3];*(pinputRegisters_sub+112)=((*(pinputRegisters_sub+112))<<8)|((int)cal_thdi_bs[4]);*(pinputRegisters_sub+113)=cal_thdi_bs[5];*(pinputRegisters_sub+113)=((*(pinputRegisters_sub+113))<<8)|((int)cal_thdi_bs[6]);*(pinputRegisters_sub+114)=cal_thdi_bs[7];*(pinputRegisters_sub+114)=((*(pinputRegisters_sub+114))<<8)|((int)cal_thdi_bs[8]);*(pinputRegisters_sub+115)=cal_thdi_bs[9];*(pinputRegisters_sub+115)=((*(pinputRegisters_sub+115))<<8)|((int)cal_thdi_bs[10]);*(pinputRegisters_sub+116)=cal_thdi_bs[11];*(pinputRegisters_sub+116)=((*(pinputRegisters_sub+116))<<8)|((int)cal_thdi_bs[12]);*(pinputRegisters_sub+117)=cal_thdi_bs[13];*(pinputRegisters_sub+117)=((*(pinputRegisters_sub+117))<<8)|((int)cal_thdi_bs[14]);*(pinputRegisters_sub+118)=cal_thdi_bs[15];*(pinputRegisters_sub+118)=((*(pinputRegisters_sub+118))<<8)|((int)cal_thdi_bs[16]);*(pinputRegisters_sub+119)=cal_thdi_bs[17];*(pinputRegisters_sub+119)=((*(pinputRegisters_sub+119))<<8)|((int)cal_thdi_bs[18]);*(pinputRegisters_sub+120)=cal_thdi_bs[19];*(pinputRegisters_sub+120)=((*(pinputRegisters_sub+120))<<8)|((int)cal_thdi_bs[21]);*(pinputRegisters_sub+121)=cal_thdi_bs[23];*(pinputRegisters_sub+121)=((*(pinputRegisters_sub+121))<<8)|((int)cal_thdi_bs[25]);*(pinputRegisters_sub+122)=cal_thdi_bs[27];*(pinputRegisters_sub+122)=((*(pinputRegisters_sub+122))<<8)|((int)cal_thdi_bs[29]);*(pinputRegisters_sub+123)=cal_thdi_bs[31];*(pinputRegisters_sub+123)=((*(pinputRegisters_sub+123))<<8)|((int)cal_thdi_bs[33]);*(pinputRegisters_sub+124)=cal_thdi_bs[35];*(pinputRegisters_sub+124)=((*(pinputRegisters_sub+124))<<8)|((int)cal_thdi_bs[37]);*(pinputRegisters_sub+125)=cal_thdi_bs[39];*(pinputRegisters_sub+125)=((*(pinputRegisters_sub+125))<<8)|((int)cal_thdi_bs[41]);*(pinputRegisters_sub+126)=cal_thdi_bs[43];*(pinputRegisters_sub+126)=((*(pinputRegisters_sub+126))<<8)|((int)cal_thdi_bs[45]);*(pinputRegisters_sub+127)=cal_thdi_bs[47];*(pinputRegisters_sub+127)=((*(pinputRegisters_sub+127))<<8)|((int)cal_thdi_bs[49]);//C相电源侧各次谐波含量*(pinputRegisters_sub+128)=cal_thdi_cs[1];*(pinputRegisters_sub+128)=((*(pinputRegisters_sub+128))<<8)|((int)cal_thdi_cs[2]);*(pinputRegisters_sub+129)=cal_thdi_cs[3];*(pinputRegisters_sub+129)=((*(pinputRegisters_sub+129))<<8)|((int)cal_thdi_cs[4]);*(pinputRegisters_sub+130)=cal_thdi_cs[5];*(pinputRegisters_sub+130)=((*(pinputRegisters_sub+130))<<8)|((int)cal_thdi_cs[6]);*(pinputRegisters_sub+131)=cal_thdi_cs[7];*(pinputRegisters_sub+131)=((*(pinputRegisters_sub+131))<<8)|((int)cal_thdi_cs[8]);*(pinputRegisters_sub+132)=cal_thdi_cs[9];*(pinputRegisters_sub+132)=((*(pinputRegisters_sub+132))<<8)|((int)cal_thdi_cs[10]);*(pinputRegisters_sub+133)=cal_thdi_cs[11];*(pinputRegisters_sub+133)=((*(pinputRegisters_sub+133))<<8)|((int)cal_thdi_cs[12]);*(pinputRegisters_sub+134)=cal_thdi_cs[13];*(pinputRegisters_sub+134)=((*(pinputRegisters_sub+134))<<8)|((int)cal_thdi_cs[14]);*(pinputRegisters_sub+135)=cal_thdi_cs[15];*(pinputRegisters_sub+135)=((*(pinputRegisters_sub+135))<<8)|((int)cal_thdi_cs[16]);*(pinputRegisters_sub+136)=cal_thdi_cs[17];*(pinputRegisters_sub+136)=((*(pinputRegisters_sub+136))<<8)|((int)cal_thdi_cs[18]);*(pinputRegisters_sub+137)=cal_thdi_cs[19];*(pinputRegisters_sub+137)=((*(pinputRegisters_sub+137))<<8)|((int)cal_thdi_cs[21]);*(pinputRegisters_sub+138)=cal_thdi_cs[23];*(pinputRegisters_sub+138)=((*(pinputRegisters_sub+138))<<8)|((int)cal_thdi_cs[25]);*(pinputRegisters_sub+139)=cal_thdi_cs[27];*(pinputRegisters_sub+139)=((*(pinputRegisters_sub+139))<<8)|((int)cal_thdi_cs[29]);*(pinputRegisters_sub+140)=cal_thdi_cs[31];*(pinputRegisters_sub+140)=((*(pinputRegisters_sub+140))<<8)|((int)cal_thdi_cs[33]);*(pinputRegisters_sub+141)=cal_thdi_cs[35];*(pinputRegisters_sub+141)=((*(pinputRegisters_sub+141))<<8)|((int)cal_thdi_cs[37]);*(pinputRegisters_sub+142)=cal_thdi_cs[39];*(pinputRegisters_sub+142)=((*(pinputRegisters_sub+142))<<8)|((int)cal_thdi_cs[41]);*(pinputRegisters_sub+143)=cal_thdi_cs[43];*(pinputRegisters_sub+143)=((*(pinputRegisters_sub+143))<<8)|((int)cal_thdi_cs[45]);*(pinputRegisters_sub+144)=cal_thdi_cs[47];*(pinputRegisters_sub+144)=((*(pinputRegisters_sub+144))<<8)|((int)cal_thdi_cs[49]);//A相负载侧各次谐波含量*(pinputRegisters_sub+145)=cal_thdi_al[1];*(pinputRegisters_sub+145)=((*(pinputRegisters_sub+145))<<8)|((int)cal_thdi_al[2]);*(pinputRegisters_sub+146)=cal_thdi_al[3];*(pinputRegisters_sub+146)=((*(pinputRegisters_sub+146))<<8)|((int)cal_thdi_al[4]);*(pinputRegisters_sub+147)=cal_thdi_al[5];*(pinputRegisters_sub+147)=((*(pinputRegisters_sub+147))<<8)|((int)cal_thdi_al[6]);*(pinputRegisters_sub+148)=cal_thdi_al[7];*(pinputRegisters_sub+148)=((*(pinputRegisters_sub+148))<<8)|((int)cal_thdi_al[8]);*(pinputRegisters_sub+149)=cal_thdi_al[9];*(pinputRegisters_sub+149)=((*(pinputRegisters_sub+149))<<8)|((int)cal_thdi_al[10]);*(pinputRegisters_sub+150)=cal_thdi_al[11];*(pinputRegisters_sub+150)=((*(pinputRegisters_sub+150))<<8)|((int)cal_thdi_al[12]);*(pinputRegisters_sub+151)=cal_thdi_al[13];*(pinputRegisters_sub+151)=((*(pinputRegisters_sub+151))<<8)|((int)cal_thdi_al[14]);*(pinputRegisters_sub+152)=cal_thdi_al[15];*(pinputRegisters_sub+152)=((*(pinputRegisters_sub+152))<<8)|((int)cal_thdi_al[16]);*(pinputRegisters_sub+153)=cal_thdi_al[17];*(pinputRegisters_sub+153)=((*(pinputRegisters_sub+153))<<8)|((int)cal_thdi_al[18]);*(pinputRegisters_sub+154)=cal_thdi_al[19];*(pinputRegisters_sub+154)=((*(pinputRegisters_sub+154))<<8)|((int)cal_thdi_al[21]);*(pinputRegisters_sub+155)=cal_thdi_al[23];*(pinputRegisters_sub+155)=((*(pinputRegisters_sub+155))<<8)|((int)cal_thdi_al[25]);*(pinputRegisters_sub+156)=cal_thdi_al[27];*(pinputRegisters_sub+156)=((*(pinputRegisters_sub+156))<<8)|((int)cal_thdi_al[29]);*(pinputRegisters_sub+157)=cal_thdi_al[31];*(pinputRegisters_sub+157)=((*(pinputRegisters_sub+157))<<8)|((int)cal_thdi_al[33]);*(pinputRegisters_sub+158)=cal_thdi_al[35];*(pinputRegisters_sub+158)=((*(pinputRegisters_sub+158))<<8)|((int)cal_thdi_al[37]);*(pinputRegisters_sub+159)=cal_thdi_al[39];*(pinputRegisters_sub+159)=((*(pinputRegisters_sub+159))<<8)|((int)cal_thdi_al[41]);*(pinputRegisters_sub+160)=cal_thdi_al[43];*(pinputRegisters_sub+160)=((*(pinputRegisters_sub+160))<<8)|((int)cal_thdi_al[45]);*(pinputRegisters_sub+161)=cal_thdi_al[47];*(pinputRegisters_sub+161)=((*(pinputRegisters_sub+161))<<8)|((int)cal_thdi_al[49]);//B相负载侧各次谐波含量*(pinputRegisters_sub+162)=cal_thdi_bl[1];*(pinputRegisters_sub+162)=((*(pinputRegisters_sub+162))<<8)|((int)cal_thdi_bl[2]);*(pinputRegisters_sub+163)=cal_thdi_bl[3];*(pinputRegisters_sub+163)=((*(pinputRegisters_sub+163))<<8)|((int)cal_thdi_bl[4]);*(pinputRegisters_sub+164)=cal_thdi_bl[5];*(pinputRegisters_sub+164)=((*(pinputRegisters_sub+164))<<8)|((int)cal_thdi_bl[6]);*(pinputRegisters_sub+165)=cal_thdi_bl[7];*(pinputRegisters_sub+165)=((*(pinputRegisters_sub+165))<<8)|((int)cal_thdi_bl[8]);*(pinputRegisters_sub+166)=cal_thdi_bl[9];*(pinputRegisters_sub+166)=((*(pinputRegisters_sub+166))<<8)|((int)cal_thdi_bl[10]);*(pinputRegisters_sub+167)=cal_thdi_bl[11];*(pinputRegisters_sub+167)=((*(pinputRegisters_sub+167))<<8)|((int)cal_thdi_bl[12]);*(pinputRegisters_sub+168)=cal_thdi_bl[13];*(pinputRegisters_sub+168)=((*(pinputRegisters_sub+168))<<8)|((int)cal_thdi_bl[14]);*(pinputRegisters_sub+169)=cal_thdi_bl[15];*(pinputRegisters_sub+169)=((*(pinputRegisters_sub+169))<<8)|((int)cal_thdi_bl[16]);*(pinputRegisters_sub+170)=cal_thdi_bl[17];*(pinputRegisters_sub+170)=((*(pinputRegisters_sub+170))<<8)|((int)cal_thdi_bl[18]);*(pinputRegisters_sub+171)=cal_thdi_bl[19];*(pinputRegisters_sub+171)=((*(pinputRegisters_sub+171))<<8)|((int)cal_thdi_bl[21]);*(pinputRegisters_sub+172)=cal_thdi_bl[23];*(pinputRegisters_sub+172)=((*(pinputRegisters_sub+172))<<8)|((int)cal_thdi_bl[25]);*(pinputRegisters_sub+173)=cal_thdi_bl[27];*(pinputRegisters_sub+173)=((*(pinputRegisters_sub+173))<<8)|((int)cal_thdi_bl[29]);*(pinputRegisters_sub+174)=cal_thdi_bl[31];*(pinputRegisters_sub+174)=((*(pinputRegisters_sub+174))<<8)|((int)cal_thdi_bl[33]);*(pinputRegisters_sub+175)=cal_thdi_bl[35];*(pinputRegisters_sub+175)=((*(pinputRegisters_sub+175))<<8)|((int)cal_thdi_bl[37]);*(pinputRegisters_sub+176)=cal_thdi_bl[39];*(pinputRegisters_sub+176)=((*(pinputRegisters_sub+176))<<8)|((int)cal_thdi_bl[41]);*(pinputRegisters_sub+177)=cal_thdi_bl[43];*(pinputRegisters_sub+177)=((*(pinputRegisters_sub+177))<<8)|((int)cal_thdi_bl[45]);*(pinputRegisters_sub+178)=cal_thdi_bl[47];*(pinputRegisters_sub+178)=((*(pinputRegisters_sub+178))<<8)|((int)cal_thdi_bl[49]);//C相负载侧各次谐波含量*(pinputRegisters_sub+179)=cal_thdi_cl[1];*(pinputRegisters_sub+179)=((*(pinputRegisters_sub+179))<<8)|((int)cal_thdi_cl[2]);*(pinputRegisters_sub+180)=cal_thdi_cl[3];*(pinputRegisters_sub+180)=((*(pinputRegisters_sub+180))<<8)|((int)cal_thdi_cl[4]);*(pinputRegisters_sub+181)=cal_thdi_cl[5];*(pinputRegisters_sub+181)=((*(pinputRegisters_sub+181))<<8)|((int)cal_thdi_cl[6]);*(pinputRegisters_sub+182)=cal_thdi_cl[7];*(pinputRegisters_sub+182)=((*(pinputRegisters_sub+182))<<8)|((int)cal_thdi_cl[8]);*(pinputRegisters_sub+183)=cal_thdi_cl[9];*(pinputRegisters_sub+183)=((*(pinputRegisters_sub+183))<<8)|((int)cal_thdi_cl[10]);*(pinputRegisters_sub+184)=cal_thdi_cl[11];*(pinputRegisters_sub+184)=((*(pinputRegisters_sub+184))<<8)|((int)cal_thdi_cl[12]);*(pinputRegisters_sub+185)=cal_thdi_cl[13];*(pinputRegisters_sub+185)=((*(pinputRegisters_sub+185))<<8)|((int)cal_thdi_cl[14]);*(pinputRegisters_sub+186)=cal_thdi_cl[15];*(pinputRegisters_sub+186)=((*(pinputRegisters_sub+186))<<8)|((int)cal_thdi_cl[16]);*(pinputRegisters_sub+187)=cal_thdi_cl[17];*(pinputRegisters_sub+187)=((*(pinputRegisters_sub+187))<<8)|((int)cal_thdi_cl[18]);*(pinputRegisters_sub+188)=cal_thdi_cl[19];*(pinputRegisters_sub+188)=((*(pinputRegisters_sub+188))<<8)|((int)cal_thdi_cl[21]);*(pinputRegisters_sub+189)=cal_thdi_cl[23];*(pinputRegisters_sub+189)=((*(pinputRegisters_sub+189))<<8)|((int)cal_thdi_cl[25]);*(pinputRegisters_sub+190)=cal_thdi_cl[27];*(pinputRegisters_sub+190)=((*(pinputRegisters_sub+190))<<8)|((int)cal_thdi_cl[29]);*(pinputRegisters_sub+191)=cal_thdi_cl[31];*(pinputRegisters_sub+191)=((*(pinputRegisters_sub+191))<<8)|((int)cal_thdi_cl[33]);*(pinputRegisters_sub+192)=cal_thdi_cl[35];*(pinputRegisters_sub+192)=((*(pinputRegisters_sub+192))<<8)|((int)cal_thdi_cl[37]);*(pinputRegisters_sub+193)=cal_thdi_cl[39];*(pinputRegisters_sub+193)=((*(pinputRegisters_sub+193))<<8)|((int)cal_thdi_cl[41]);*(pinputRegisters_sub+194)=cal_thdi_cl[43];*(pinputRegisters_sub+194)=((*(pinputRegisters_sub+194))<<8)|((int)cal_thdi_cl[45]);*(pinputRegisters_sub+195)=cal_thdi_cl[47];*(pinputRegisters_sub+195)=((*(pinputRegisters_sub+195))<<8)|((int)cal_thdi_cl[49]);//A相电压各次谐波含量*(pinputRegisters_sub+196)=cal_thdu_a[1];*(pinputRegisters_sub+196)=((*(pinputRegisters_sub+196))<<8)|((int)cal_thdu_a[2]);*(pinputRegisters_sub+197)=cal_thdu_a[3];*(pinputRegisters_sub+197)=((*(pinputRegisters_sub+197))<<8)|((int)cal_thdu_a[4]);*(pinputRegisters_sub+198)=cal_thdu_a[5];*(pinputRegisters_sub+198)=((*(pinputRegisters_sub+198))<<8)|((int)cal_thdu_a[6]);*(pinputRegisters_sub+199)=cal_thdu_a[7];*(pinputRegisters_sub+199)=((*(pinputRegisters_sub+199))<<8)|((int)cal_thdu_a[8]);*(pinputRegisters_sub+200)=cal_thdu_a[9];*(pinputRegisters_sub+200)=((*(pinputRegisters_sub+200))<<8)|((int)cal_thdu_a[10]);*(pinputRegisters_sub+201)=cal_thdu_a[11];*(pinputRegisters_sub+201)=((*(pinputRegisters_sub+201))<<8)|((int)cal_thdu_a[12]);*(pinputRegisters_sub+202)=cal_thdu_a[13];*(pinputRegisters_sub+202)=((*(pinputRegisters_sub+202))<<8)|((int)cal_thdu_a[14]);*(pinputRegisters_sub+203)=cal_thdu_a[15];*(pinputRegisters_sub+203)=((*(pinputRegisters_sub+203))<<8)|((int)cal_thdu_a[16]);*(pinputRegisters_sub+204)=cal_thdu_a[17];*(pinputRegisters_sub+204)=((*(pinputRegisters_sub+204))<<8)|((int)cal_thdu_a[18]);*(pinputRegisters_sub+205)=cal_thdu_a[19];*(pinputRegisters_sub+205)=((*(pinputRegisters_sub+205))<<8)|((int)cal_thdu_a[21]);*(pinputRegisters_sub+206)=cal_thdu_a[23];*(pinputRegisters_sub+206)=((*(pinputRegisters_sub+206))<<8)|((int)cal_thdu_a[25]);*(pinputRegisters_sub+207)=cal_thdu_a[27];*(pinputRegisters_sub+207)=((*(pinputRegisters_sub+207))<<8)|((int)cal_thdu_a[29]);*(pinputRegisters_sub+208)=cal_thdu_a[31];*(pinputRegisters_sub+208)=((*(pinputRegisters_sub+208))<<8)|((int)cal_thdu_a[33]);*(pinputRegisters_sub+209)=cal_thdu_a[35];*(pinputRegisters_sub+209)=((*(pinputRegisters_sub+209))<<8)|((int)cal_thdu_a[37]);*(pinputRegisters_sub+210)=cal_thdu_a[39];*(pinputRegisters_sub+210)=((*(pinputRegisters_sub+210))<<8)|((int)cal_thdu_a[41]);*(pinputRegisters_sub+211)=cal_thdu_a[43];*(pinputRegisters_sub+211)=((*(pinputRegisters_sub+211))<<8)|((int)cal_thdu_a[45]);*(pinputRegisters_sub+212)=cal_thdu_a[47];*(pinputRegisters_sub+212)=((*(pinputRegisters_sub+212))<<8)|((int)cal_thdu_a[49]);//B相电压各次谐波含量*(pinputRegisters_sub+213)=cal_thdu_b[1];*(pinputRegisters_sub+213)=((*(pinputRegisters_sub+213))<<8)|((int)cal_thdu_b[2]);*(pinputRegisters_sub+214)=cal_thdu_b[3];*(pinputRegisters_sub+214)=((*(pinputRegisters_sub+214))<<8)|((int)cal_thdu_b[4]);*(pinputRegisters_sub+215)=cal_thdu_b[5];*(pinputRegisters_sub+215)=((*(pinputRegisters_sub+215))<<8)|((int)cal_thdu_b[6]);*(pinputRegisters_sub+216)=cal_thdu_b[7];*(pinputRegisters_sub+216)=((*(pinputRegisters_sub+216))<<8)|((int)cal_thdu_b[8]);*(pinputRegisters_sub+217)=cal_thdu_b[9];*(pinputRegisters_sub+217)=((*(pinputRegisters_sub+217))<<8)|((int)cal_thdu_b[10]);*(pinputRegisters_sub+218)=cal_thdu_b[11];*(pinputRegisters_sub+218)=((*(pinputRegisters_sub+218))<<8)|((int)cal_thdu_b[12]);*(pinputRegisters_sub+219)=cal_thdu_b[13];*(pinputRegisters_sub+219)=((*(pinputRegisters_sub+219))<<8)|((int)cal_thdu_b[14]);*(pinputRegisters_sub+220)=cal_thdu_b[15];*(pinputRegisters_sub+220)=((*(pinputRegisters_sub+220))<<8)|((int)cal_thdu_b[16]);*(pinputRegisters_sub+221)=cal_thdu_b[17];*(pinputRegisters_sub+221)=((*(pinputRegisters_sub+221))<<8)|((int)cal_thdu_b[18]);*(pinputRegisters_sub+222)=cal_thdu_b[19];*(pinputRegisters_sub+222)=((*(pinputRegisters_sub+222))<<8)|((int)cal_thdu_b[21]);*(pinputRegisters_sub+223)=cal_thdu_b[23];*(pinputRegisters_sub+223)=((*(pinputRegisters_sub+223))<<8)|((int)cal_thdu_b[25]);*(pinputRegisters_sub+224)=cal_thdu_b[27];*(pinputRegisters_sub+224)=((*(pinputRegisters_sub+224))<<8)|((int)cal_thdu_b[29]);*(pinputRegisters_sub+225)=cal_thdu_b[31];*(pinputRegisters_sub+225)=((*(pinputRegisters_sub+225))<<8)|((int)cal_thdu_b[33]);*(pinputRegisters_sub+226)=cal_thdu_b[35];*(pinputRegisters_sub+226)=((*(pinputRegisters_sub+226))<<8)|((int)cal_thdu_b[37]);*(pinputRegisters_sub+227)=cal_thdu_b[39];*(pinputRegisters_sub+227)=((*(pinputRegisters_sub+227))<<8)|((int)cal_thdu_b[41]);*(pinputRegisters_sub+228)=cal_thdu_b[43];*(pinputRegisters_sub+228)=((*(pinputRegisters_sub+228))<<8)|((int)cal_thdu_b[45]);*(pinputRegisters_sub+229)=cal_thdu_b[47];*(pinputRegisters_sub+229)=((*(pinputRegisters_sub+229))<<8)|((int)cal_thdu_b[49]);//C相电压各次谐波含量*(pinputRegisters_sub+230)=cal_thdi_cl[1];*(pinputRegisters_sub+230)=((*(pinputRegisters_sub+230))<<8)|((int)cal_thdi_cl[2]);*(pinputRegisters_sub+231)=cal_thdi_cl[3];*(pinputRegisters_sub+231)=((*(pinputRegisters_sub+231))<<8)|((int)cal_thdi_cl[4]);*(pinputRegisters_sub+232)=cal_thdi_cl[5];*(pinputRegisters_sub+232)=((*(pinputRegisters_sub+232))<<8)|((int)cal_thdi_cl[6]);*(pinputRegisters_sub+233)=cal_thdi_cl[7];*(pinputRegisters_sub+233)=((*(pinputRegisters_sub+233))<<8)|((int)cal_thdi_cl[8]);*(pinputRegisters_sub+234)=cal_thdi_cl[9];*(pinputRegisters_sub+234)=((*(pinputRegisters_sub+234))<<8)|((int)cal_thdi_cl[10]);*(pinputRegisters_sub+235)=cal_thdi_cl[11];*(pinputRegisters_sub+235)=((*(pinputRegisters_sub+235))<<8)|((int)cal_thdi_cl[12]);*(pinputRegisters_sub+236)=cal_thdi_cl[13];*(pinputRegisters_sub+236)=((*(pinputRegisters_sub+236))<<8)|((int)cal_thdi_cl[14]);*(pinputRegisters_sub+237)=cal_thdi_cl[15];*(pinputRegisters_sub+237)=((*(pinputRegisters_sub+237))<<8)|((int)cal_thdi_cl[16]);*(pinputRegisters_sub+238)=cal_thdi_cl[17];*(pinputRegisters_sub+238)=((*(pinputRegisters_sub+238))<<8)|((int)cal_thdi_cl[18]);*(pinputRegisters_sub+239)=cal_thdi_cl[19];*(pinputRegisters_sub+239)=((*(pinputRegisters_sub+239))<<8)|((int)cal_thdi_cl[21]);*(pinputRegisters_sub+240)=cal_thdi_cl[23];*(pinputRegisters_sub+240)=((*(pinputRegisters_sub+240))<<8)|((int)cal_thdi_cl[25]);*(pinputRegisters_sub+241)=cal_thdi_cl[27];*(pinputRegisters_sub+241)=((*(pinputRegisters_sub+241))<<8)|((int)cal_thdi_cl[29]);*(pinputRegisters_sub+242)=cal_thdi_cl[31];*(pinputRegisters_sub+242)=((*(pinputRegisters_sub+242))<<8)|((int)cal_thdi_cl[33]);*(pinputRegisters_sub+243)=cal_thdi_cl[35];*(pinputRegisters_sub+243)=((*(pinputRegisters_sub+243))<<8)|((int)cal_thdi_cl[37]);*(pinputRegisters_sub+244)=cal_thdi_cl[39];*(pinputRegisters_sub+244)=((*(pinputRegisters_sub+244))<<8)|((int)cal_thdi_cl[41]);*(pinputRegisters_sub+245)=cal_thdi_cl[43];*(pinputRegisters_sub+245)=((*(pinputRegisters_sub+245))<<8)|((int)cal_thdi_cl[45]);*(pinputRegisters_sub+246)=cal_thdi_cl[47];*(pinputRegisters_sub+246)=((*(pinputRegisters_sub+246))<<8)|((int)cal_thdi_cl[49]);//    memset(public_struc_modbus.rdata,0,sizeof(public_struc_modbus.rdata));          //初始化寄存器并分配空间
}uint32_t floatToIEEE754_H(float value)
{// Use a union to interpret the float as a 32-bit integerunion {float f;uint32_t u;} converter;converter.f = value; // Assign the float value to the unionreturn converter.u>>16;  // Return the 32-bit integer representation
}uint32_t floatToIEEE754_L(float value)
{// Use a union to interpret the float as a 32-bit integerunion {float f;uint32_t u;} converter;converter.f = value; // Assign the float value to the unionreturn converter.u;  // Return the 32-bit integer representation
}//float ieee754ToFloat(uint32_t ieee)
//{
//    // Extract the sign bit (1 bit)
//    int sign = (ieee >> 31) & 1;
//
//    // Extract the exponent (8 bits)
//    int exponent = (ieee >> 23) & 0xFF;
//
//    // Extract the mantissa (23 bits)
//    uint32_t mantissa = ieee & 0x7FFFFF;
//
//    // Handle special cases
//    if (exponent == 255) {
//        if (mantissa == 0) {
//            return sign ? -INFINITY : INFINITY; // Infinity
//        } else {
//            return NAN; // Not a Number (NaN)
//        }
//    } else if (exponent == 0) {
//        // Denormalized numbers (exponent = 0)
//        float result = (mantissa / (float)(1 << 23)) * pow(2, -126);
//        return sign ? -result : result;
//    }
//
//    // Normalized numbers
//    float result = (1 + (mantissa / (float)(1 << 23))) * pow(2, exponent - 127);
//    return sign ? -result : result;
//}

上面源程序中:定义了SCIC 控制字初始化函数,收发中断函数,CRC16校验函数,收发处理函数。数据传送接收赋值函数。 

sys_XXX 等变量是接收数据(从上位机MODBUS Master下发下来的数据)

cal_XXX 等变量是发送数据(发送给上位机MODBUS Master的数据)

注:程序中IEEE754是用于处理32位浮点数的函数,如果有兴趣额可以放开自己试一下

3、如何在主函数中调用。

#include "PeripheralHeaderIncludes.h" //TI公司标准头文件
#include "DSP2833x_Project.h"    //
#include "string.h"       //用于清零数组
#include <EUCO_MODBUS.h>  //包含MODBUS协议头文件
//##################################################################################//void main(void) //主函数入口
{
//  Step 1. Initialize System Control:PLL, WatchDog, enable Peripheral Clocks;
//  This example function is found in the DSP2833x_SysCtrl.c file.InitSysCtrl();      //系统控制初始化//  This example function is found in the HVPM_Sensorless-DevInit_F2833x.c file.DeviceInit();       //设备初始化 30M 5倍频150M赫兹#ifdef FLASHmemcpy(&RamfuncsRunStart,&RamfuncsLoadStart,&RamfuncsLoadEnd-&RamfuncsLoadStart);   //将执行代码从RAM中拷贝到FLASH中,下次上电后从FLASH加载程序并运行#endifInitFlash();     //初始化DSP片内闪存 (掉电再上电可运行)DELAY_US(5000);  //延迟5ms完成程序装载, 函数包含在DSP2833x_usDelay.asm//  Step 2. Initialize GPIO: This example function is found in the DSP2833x_Gpio.c file;
//  and illustrates how to set the GPIO to it's default state.InitGpio();      //系统应用的GPIO口初始化 DSP2833x_Gpio.c// Step 3. Clear all interrupts and initialize PIE vector table: Disable CPU interruptsDINT;            //清除所有中断初始化中断向量表: 禁止CPU全局中断// Initialize the PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags are cleared.
// This function is found in the DSP2833x_PieCtrl.c file.InitPieCtrl();  
// 初始化PIE中断向量表,并使其指向中断服务子程序(ISR) 这个函数放在了DSP2833x_PieVect.c源文件里面.
// 中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中
// Disable CPU interrupts and clear all CPU interrupt flags:IER = 0x0000;                                                                   // 中断使能寄存器 禁止CPU中断和清除所有CPU中断标志IFR = 0x0000;                                                                   // 中断标志寄存器 禁止CPU中断和清除所有CPU中断标志// Initialize the PIE vector table with pointers to the shell Interrupt Service Routines (ISR).
// This will populate the entire table, even if the interrupt is not used in this example.  This is useful for debug purposes.
// The shell ISR routines are found in DSP2833x_DefaultIsr.c.
// This function is found in DSP2833x_PieVect.c.InitPieVectTable();                                                             
// PIE 向量表指针指向中断服务程(ISR)完成其初始化. 即使在程序里不需要使用中断功能,也要对 PIE 向量表进行初始化.这样做是为了避免PIE引起的错误.SCIC_Modbus_Init(); //P3 初始化SCICMODBUS控制寄存器及数据寄存器初始化 该函数在MODBUS.c中for(;;)//主循环开始
{DATA_TRANSFER_DSP_HMI(); // 用于循环接收发送 MODBUS 数据, 该函数在MODBUS.c中}
}

行了,先写到这里。 反正测试可以用,并且利用昆仑通态和显控科技的屏幕都还行。 以昆仑通态截屏为例:

输入寄存器:

保持寄存器

屏幕发下来给DSP的数据,看看,还能对上。


http://www.ppmy.cn/news/1569525.html

相关文章

idea隐藏无关文件

idea隐藏无关文件 如果你想隐藏某些特定类型的文件&#xff08;例如 .log 文件或 .tmp 文件&#xff09;&#xff0c;可以通过以下步骤设置&#xff1a; 打开设置 在菜单栏中选择 File > Settings&#xff08;Windows/Linux&#xff09;或 IntelliJ IDEA > Preference…

Linux——网络(tcp)

文章目录 目录 文章目录 前言 一、TCP逻辑 1. 面向连接 三次握手&#xff08;建立连接&#xff09; 四次挥手&#xff08;关闭连接&#xff09; 2. 可靠性 3. 流量控制 4. 拥塞控制 5. 基于字节流 6. 全双工通信 7. 状态机 8. TCP头部结构 9. TCP的应用场景 二、编写tcp代码函数…

【BUUCTF杂项题】荷兰宽带数据泄露、九连环

一.荷兰宽带数据泄露 打开发现是一个.bin为后缀的二进制文件&#xff0c;因为提示宽带数据泄露&#xff0c;考虑是宽带路由器方向的隐写 补充&#xff1a;大多数现代路由器都可以让您备份一个文件路由器的配置文件&#xff0c;软件RouterPassView可以读取这个路由配置文件。 用…

Vue3 插槽系统详解

Vue3 插槽系统详解 1. 默认插槽 重点掌握&#xff1a; 插槽的基本概念默认插槽的使用方法后备内容的设置 示例代码&#xff1a; <!-- BaseCard.vue --> <template><div class"card"><div class"card-header"><!-- 后备内容…

visual studio安装

一、下载Visual Studio 访问Visual Studio官方网站。下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 在主页上找到并点击“下载 Visual Studio”按钮。 选择适合需求的版本&#xff0c;例如“Visual Studio Community”&#xff08;免费版本&#xff09;&#x…

计算机毕业设计Python+CNN卷积神经网络考研院校推荐系统 考研分数线预测 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

std::reverse 和 ranges::reverse、std::sort 和 ranges::sort

1. std::reverse 和 ranges::reverse 的区别 std::reverse 定义&#xff1a;定义在 <algorithm> 头文件中。 参数&#xff1a;接受两个迭代器&#xff08;begin 和 end&#xff09;&#xff0c;表示要反转的范围。 用法&#xff1a; std::reverse(iterator begin, ite…

java使用pcap4j进行报文发送和接收

1、pcap4j框架使用的驱动Npcap需要进行安装 2、获取自己window电脑的mac地址设备 在cmd中使用的命令是getmac 使用程序获取服务器本身的mac地址 import org.pcap4j.core.PcapNativeException; import org.pcap4j.core.PcapNetworkInterface; import org.pcap4j.core.Pcaps;…