MSP430WARE是一套基于C++语言的开源的MSP430层次化软件架构,支持多种外设。本文将介绍modbus模块驱动程序的调用方法。
    1、硬件原理图 
    使用modbus模块驱动程序需要与MSP430单片机的UART0端口相连接。  
 
    
    2、使用方法
    a、加入驱动程序
    选中modbus文件夹,右键点击“Exclude from Build”即可。 
    modbus驱动程序由多个个文件组成,如下图所示。其中RSP1_config.hpp为RSP1的配置文件,RSP1.cpp为RSP1类的源程序,RSP1.hpp为RSP1类的头文件。
 
    
    b、使能外设
    在config.hpp中使能外设modbus,其源程序如下:
        #define
 PROTOCOL_MODBUS1
    c、驱动程序的配置。
        可以对下列选项进行设置,解释如下:
        MODBUS_REG_INPUT_START:输入寄存器起始地址
        MODBUS_REG_INPUT_NREGS:输入寄存器个数(双字节)
        MODBUS_REG_HOLDING_START:保持寄存器起始地址
        MODBUS_REG_HOLDING_NREGS:保持寄存器个数(双字节)
        MODBUS_MODE:模式,可以为MB_RTU(二进制模式)
                                 MB_ASCII(ASCII模式)
                                 MB_TCP(TCP模式)
        MODBUS_SLAVE_ID:从地址
        MODBUS_BAUD:波特率
        MODUBS_PARITY:效验位,可以为MB_PAR_NONE(无效验)
                                     MB_PAR_ODD(奇效验)
                                     MB_PAR_EVEN(偶效验)           
 
 
 
    根据项目的实际需求,更改modbus_config.hpp配置文件,其更改后的源程序如下:
        #define MODBUS_REG_INPUT_START   1
        #define
 MODBUS_REG_INPUT_NREGS   (2
 * 16)
        #define MODBUS_REG_HOLDING_START 1
 
        #define MODBUS_REG_HOLDING_NREGS (2
 * 64)
        #define MODBUS_MODE MB_RTU  
 
        #define MODBUS_BAUD 115200
 
 
       #define MODUBS_PARITY   MB_PAR_NONE
    d、类的派生
    已在PTL层设置完毕,不需要派生。
    e、对象的声明
    已在PTL层声明完毕,不需要声明。
    f、其它操作
    modbus模块自身占用了UART0和TIMERA,使用时,应在config.hpp中进行屏蔽,源程序如下:
        #define INTERNAL_PERIPHERAL_CLOCK_MODE
 1
        #define INTERNAL_PERIPHERAL_UART0_MODE
 0
        #define INTERNAL_PERIPHERAL_TIMERA_MODE
 0
    g、调用方法
    在主循环的第1行调用,如下语句:
        Target.PTL.Modbus.Dispose();
    可在主循环的任意位置,改变输入寄存器或者保持寄存器的数值,以备主modbus调用,样例代码如下:
        while(1)
Target.PTL.Modbus.Dispose();
 
if
 (Target.PTL.Modbus.flag == True)
 
Target.PTL.Modbus.flag
 = False;
 
Target.HAL.WatchDog.Feed();
 
} 
    3、CModbus类成员变量和成员函数的说明
    成员变量:
        uint16 usRegInputStart;                            输入寄存器起始地址
uint16
 usRegInputBuf[MODBUS_REG_INPUT_NREGS];      输入寄存器缓冲Buffer
uint16
 usRegHoldingStart;                          保持寄存器起始地址
uint16
 usRegHoldingBuf[MODBUS_REG_HOLDING_NREGS];  保持寄存器缓冲Buffer
    成员函数
        CModbus(void);                                     构造函数
void Dispose(void);                      
          在主循环的第1行调用
 
    注1:本文中示例代码用绿色标注。
    注2:本文中与使用密切相关的成员变量与成员函数用红色标注。