找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1556|回复: 6
收起左侧

51单片机stc8系列单片机modbus-rtu通信程序,本人亲测正常

  [复制链接]
ID:94445 发表于 2023-3-5 09:48 | 显示全部楼层 |阅读模式
  1. #define _MAIN_C_
  2. //============================
  3. #include "includeFile.h"
  4. //============================


  5. /******************************************************************
  6. 功能: 初始化
  7. 输入:        无
  8. 输出: 无
  9. 版本: V15.10.0
  10. 作者: 姚工
  11. 修改日期: 2015-10
  12. 说明:系统上电之后,先取得系统设置的参数,然后用这些参数来对相应的模块进行初始化,如下:
  13.                 1. 串口通信的波特率 和 校验值 [决定本从机的通信参数];
  14.                 2. modbus 从机的站号 ,可以使用拨码开关来设定站号,或者使用EEPROM存储站号;
  15. ******************************************************************/
  16. void SYSinit(void)
  17. {
  18.     TimesMsinitInt();                                        //Ms定时器初始化,用作产生1ms的系统时间基准

  19.     //先写相应的函数,取得系统参数....
  20.     //以下例程使用固定值:19200 ,无校验, 站号 =1
  21.     UartInit(19200, NONE_PARITY);                //串口初始化[须要确定好波特率和校验值]
  22.     ModbusInit(1,StartSend);                         //Modbus串口初始化[须要确定好站号]
  23.     //
  24.     EA = 1;
  25. }


  26. //----------------------------START-------------------------------
  27. //=================================================================
  28. void main(void)
  29. {
  30.     SYSinit();                                                        //系统初始化
  31.     while (1)
  32.     {
  33.         UartRxPoll();                                   //串口数据帧检查处理
  34.         TEST1();
  35.         //......
  36.         //继续添加您的应用程序代码...
  37.     }
  38. }
复制代码
  1. #define  __APP_C__
  2. //============================
  3. #include "includeFile.h"
  4. #include "ModbusCodeAp.h"
  5. //============================
  6. /*********************************************
  7. 功能: 应用例子 ;
  8.                 这只是一个例子而已,实际应用时就是对各个功能码的数组(ModbusApi.h中定义)
  9.                 进行读取或写入数据就可以与modbus 设备进行数据交换了;
  10.                 数据的具体应用,请自由发挥

  11. 输入: 无
  12. 输出: 无
  13. 版本: V15.02.0
  14. 作者: 大姆指测控 - 姚工,   QQ:657874307
  15. 修改日期: 2015-02-20
  16. *********************************************/

  17. void TEST1(void)
  18. {

  19.     //开关量输入:02功能码 ,读寄存器
  20.     //单片机端口状态读取到 SwBuf_IN[x],
  21.     //SwBuf_IN 是8位的寄存器,使用时把SwBuf_IN的8位值拆分出来使用
  22.     SwBuf_IN[0] = ~P1;  //P1.0-P1.7接8个开关
  23.     //......
  24.     //--------------------------------------

  25.     //04功能码 ,读寄存器
  26.     //实时数据(比如传感器数据)转移到 RegBuf_Input[x]
  27.     RegBuf_Input[0] = 800;        //800为要传递出去的值,相当于数据采集的值...
  28.     RegBuf_Input[1] = 801;        //801为要传递出去的值,相当于数据采集的值...
  29.     //......
  30.     //--------------------------------------

  31.     //05,15功能码 ,写寄存器
  32.     //SwBuf_Output 是8位的寄存器,使用时把SwBuf_Output的8位值拆分出来使用
  33.     if (ModbusAskFlag._0515_Flag == TRUE)
  34.     {
  35.         ModbusAskFlag._0515_Flag = FALSE;

  36.         //SwBuf_Output[x] 状态输出到单片机端口
  37.         P0 = ~SwBuf_Output[0];  //P0.0-P0.7接8个LED

  38.     }
  39.     //......
  40.     //--------------------------------------

  41.     //06,16功能码 ,写寄存器
  42.     if (ModbusAskFlag._0616_Flag == TRUE)
  43.     {
  44.         ModbusAskFlag._0616_Flag = FALSE;
  45.         //EEPROM_Save_data(_SET_DATA);                                        //保存数据
  46.     }
  47. }
复制代码

Modbus rtu_C51_STC8.rar

2.59 MB, 下载次数: 114, 下载积分: 黑币 -5

51单片机stc8系列modbus-rtu通信程序,本人亲测正常

评分

参与人数 2黑币 +80 收起 理由
略略略我走了 + 30 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:65956 发表于 2023-3-8 08:49 | 显示全部楼层
太过于复杂,移植性才烦索,还是根据自己写的能更好理解
回复

使用道具 举报

ID:562099 发表于 2023-3-8 21:21 | 显示全部楼层
一个通信程序,难到了。好复杂的
回复

使用道具 举报

ID:462629 发表于 2023-3-20 11:34 | 显示全部楼层
这个可以有,正在找,谢谢了
回复

使用道具 举报

ID:462629 发表于 2023-3-25 20:59 | 显示全部楼层
串口屏的演示软件能共享一下吗?
回复

使用道具 举报

ID:285803 发表于 2023-4-7 10:29 | 显示全部楼层
你好! 感谢分享, 程序移植可以使用.  但加添加程序部分. 我加了一个ADC采集赋值后, 怎么就不能正常通讯了呢 !
回复

使用道具 举报

ID:285803 发表于 2023-4-7 10:30 | 显示全部楼层
你好! 程序移植可以正常进行 MODBUS RTU 通讯了. 但我加了一个 ADC 采集赋值后 MODBUS 通讯就不行了 ! 有办法解决吗?  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表