|
- #define _MAIN_C_
- //============================
- #include "includeFile.h"
- //============================
- /******************************************************************
- 功能: 初始化
- 輸入: 無
- 輸出: 無
- 版本: V15.10.0
- 作者: 姚工
- 修改日期: 2015-10
- 說明:系統(tǒng)上電之后,先取得系統(tǒng)設(shè)置的參數(shù),然后用這些參數(shù)來對相應(yīng)的模塊進(jìn)行初始化,如下:
- 1. 串口通信的波特率 和 校驗(yàn)值 [決定本從機(jī)的通信參數(shù)];
- 2. modbus 從機(jī)的站號(hào) ,可以使用撥碼開關(guān)來設(shè)定站號(hào),或者使用EEPROM存儲(chǔ)站號(hào);
- ******************************************************************/
- void SYSinit(void)
- {
- TimesMsinitInt(); //Ms定時(shí)器初始化,用作產(chǎn)生1ms的系統(tǒng)時(shí)間基準(zhǔn)
- //先寫相應(yīng)的函數(shù),取得系統(tǒng)參數(shù)....
- //以下例程使用固定值:19200 ,無校驗(yàn), 站號(hào) =1
- UartInit(19200, NONE_PARITY); //串口初始化[須要確定好波特率和校驗(yàn)值]
- ModbusInit(1,StartSend); //Modbus串口初始化[須要確定好站號(hào)]
- //
- EA = 1;
- }
- //----------------------------START-------------------------------
- //=================================================================
- void main(void)
- {
- SYSinit(); //系統(tǒng)初始化
- while (1)
- {
- UartRxPoll(); //串口數(shù)據(jù)幀檢查處理
- TEST1();
- //......
- //繼續(xù)添加您的應(yīng)用程序代碼...
- }
- }
復(fù)制代碼- #define __APP_C__
- //============================
- #include "includeFile.h"
- #include "ModbusCodeAp.h"
- //============================
- /*********************************************
- 功能: 應(yīng)用例子 ;
- 這只是一個(gè)例子而已,實(shí)際應(yīng)用時(shí)就是對各個(gè)功能碼的數(shù)組(ModbusApi.h中定義)
- 進(jìn)行讀取或?qū)懭霐?shù)據(jù)就可以與modbus 設(shè)備進(jìn)行數(shù)據(jù)交換了;
- 數(shù)據(jù)的具體應(yīng)用,請自由發(fā)揮
- 輸入: 無
- 輸出: 無
- 版本: V15.02.0
- 作者: 大姆指測控 - 姚工, QQ:657874307
- 修改日期: 2015-02-20
- *********************************************/
- void TEST1(void)
- {
- //開關(guān)量輸入:02功能碼 ,讀寄存器
- //單片機(jī)端口狀態(tài)讀取到 SwBuf_IN[x],
- //SwBuf_IN 是8位的寄存器,使用時(shí)把SwBuf_IN的8位值拆分出來使用
- SwBuf_IN[0] = ~P1; //P1.0-P1.7接8個(gè)開關(guān)
- //......
- //--------------------------------------
- //04功能碼 ,讀寄存器
- //實(shí)時(shí)數(shù)據(jù)(比如傳感器數(shù)據(jù))轉(zhuǎn)移到 RegBuf_Input[x]
- RegBuf_Input[0] = 800; //800為要傳遞出去的值,相當(dāng)于數(shù)據(jù)采集的值...
- RegBuf_Input[1] = 801; //801為要傳遞出去的值,相當(dāng)于數(shù)據(jù)采集的值...
- //......
- //--------------------------------------
- //05,15功能碼 ,寫寄存器
- //SwBuf_Output 是8位的寄存器,使用時(shí)把SwBuf_Output的8位值拆分出來使用
- if (ModbusAskFlag._0515_Flag == TRUE)
- {
- ModbusAskFlag._0515_Flag = FALSE;
- //SwBuf_Output[x] 狀態(tài)輸出到單片機(jī)端口
- P0 = ~SwBuf_Output[0]; //P0.0-P0.7接8個(gè)LED
- }
- //......
- //--------------------------------------
- //06,16功能碼 ,寫寄存器
- if (ModbusAskFlag._0616_Flag == TRUE)
- {
- ModbusAskFlag._0616_Flag = FALSE;
- //EEPROM_Save_data(_SET_DATA); //保存數(shù)據(jù)
- }
- }
復(fù)制代碼 |
-
-
Modbus rtu_C51_STC8.rar
2023-3-5 09:48 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
2.59 MB, 下載次數(shù): 139, 下載積分: 黑幣 -5
51單片機(jī)stc8系列modbus-rtu通信程序,本人親測正常
評(píng)分
-
查看全部評(píng)分
|