找回密码
 立即注册
楼主: manz***

STC8系列4组串口同时通信的程序,Modbus 演示程序

  [复制链接]
  • TA的每日心情
    开心
    昨天 06:45
  • 签到天数: 149 天

    [LV.7]常住居民III

    108

    主题

    452

    回帖

    826

    积分

    高级会员

    积分
    826
    发表于 2023-7-27 21:36:47 | 显示全部楼层
    有这么一个帖子:求STC8系列4个串口同时通信的程序,Modbus 演示程序,我想收藏,始终没找收藏二字,https://www.stcaimcu.com/forum.p ... amp;page=3#pid22194,大家有兴趣的看一下,可能是我新注册,级别不够吧,
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    45

    主题

    2920

    回帖

    6564

    积分

    超级版主

    积分
    6564
    发表于 2023-7-27 22:05:16 | 显示全部楼层
    380091044 发表于 2023-7-27 21:26
    感谢的您支持,其实不理解的发送后面是读,接收后面是写,接收后面是写,我理解的就是接收后,写入指定内 ...

    读出要发送的字节,写入接收到的字节。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    5

    回帖

    38

    积分

    新手上路

    积分
    38
    发表于 2023-8-15 11:54:54 | 显示全部楼层
    学习了。到时候  借鉴一下。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    5

    回帖

    38

    积分

    新手上路

    积分
    38
    发表于 2023-9-2 16:49:36 | 显示全部楼层
    上边的modbus 文件  经过测试室可以的。   但是把他对应的改为串口2

    void        UART2_config(u32 brt, u8 timer, u8 io)        // brt: 通信波特率,  timer=2: 波特率使用定时器2, 其它值: 使用Timer1做波特率. io=0: 串口1切换到P3.0 P3.1,  =1: 切换到P3.6 P3.7, =2: 切换到P1.6 P1.7,  =3: 切换到P4.3 P4.4.
    {
            brt = 65536UL - (MAIN_Fosc / 4) / brt;
            if(timer == 2)        //波特率使用定时器2
            {
                    AUXR |= 0x01;                //S1 BRT Use Timer2;
                    SetTimer2Baudraye((u16)brt);
            }

            else                //波特率使用定时器1
            {
                    TR1 = 0;
                    AUXR &= ~0x01;                //S1 BRT Use Timer1;
                    AUXR |=  (1<<6);        //Timer1 set as 1T mode
                    TMOD &= ~(1<<6);        //Timer1 set As Timer
                    TMOD &= ~0x30;                //Timer1_16bitAutoReload;
                    TH1 = (u8)(brt >> 8);
                    TL1 = (u8)brt;
                    ET1 = 0;                        // 禁止Timer1中断
                    INT_CLKO &= ~0x02;        // Timer1不输出高速时钟
                    TR1  = 1;                        // 运行Timer1
            }

                     if(io == 1)        {S1_USE_P36P37();        P3n_standard(0xc0);}        //切换到 P3.6 P3.7
            else if(io == 2)        {S1_USE_P16P17();        P1n_standard(0xc0);}        //切换到 P1.6 P1.7
            else if(io == 3)        {S1_USE_P43P44();        P4n_standard(0x18);}        //切换到 P4.3 P4.4
    //        else                                {S1_USE_P30P31();        P3n_standard(0x03);}        //切换到 P3.0 P3.1
            else                                {S2_USE_P10P11();        P1n_standard(0xc0);}        //切换到 P1.0 P1.1

            S2CON = (S2CON & 0x3f) | (1<<6);        // 8位数据, 1位起始位, 1位停止位, 无校验
    //        PS  = 1;        //高优先级中断
            ES  = 1;        //允许中断
            REN = 1;        //允许接收

         切换到 P1.0 P1.1,且用RS485的格式   P37=1;为从机发送   P37=0;为从机接收。
    没有成功。

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:08
  • 签到天数: 109 天

    [LV.6]常住居民II

    34

    主题

    164

    回帖

    397

    积分

    中级会员

    积分
    397
    发表于 2023-9-3 21:59:46 | 显示全部楼层


    今天利用周末时间,看到了腾讯会议上梁工讲的MODBUS协议部分的讲解。梁工讲的太棒了。
    梁工的程序一直那么严谨,思路清淅,讲的也很透彻。




    1111.png
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    5

    回帖

    38

    积分

    新手上路

    积分
    38
    发表于 2023-9-14 19:10:38 | 显示全部楼层
    已经  调通了。  注意如果用串口2的接出串口线的话,,串口2又接了RS485的芯片是会有影响的。要去掉RS485芯片  ,在试串口2.
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    8

    主题

    29

    回帖

    164

    积分

    注册会员

    积分
    164
    发表于 2023-9-26 10:49:26 | 显示全部楼层
    梁工 发表于 2022-12-19 13:09
    STC8H/STC8G 的 4组独立串口程序, 通用
    Modbus 演示程序, 2023/8/28更新
    解压缩后参考、测试“08-串口1中 ...

    怎么在降龙棍里实验

    点评

    直接下载HEX文件就可以测试了。  详情 回复 发表于 2023-9-26 11:28
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    45

    主题

    2920

    回帖

    6564

    积分

    超级版主

    积分
    6564
    发表于 2023-9-26 11:28:42 | 显示全部楼层
    本帖最后由 梁工 于 2023-9-26 11:31 编辑
    18220866638 发表于 2023-9-26 10:49
    怎么在降龙棍里实验

    直接下载HEX文件就可以测试了,不过要用引线接串口出来(降龙棍只有USB口)。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    8

    主题

    29

    回帖

    164

    积分

    注册会员

    积分
    164
    发表于 2023-9-30 19:32:42 | 显示全部楼层
    梁工 发表于 2023-9-26 11:28
    直接下载HEX文件就可以测试了,不过要用引线接串口出来(降龙棍只有USB口)。 ...

    降龙棍的P3.0和P3.1口自己焊接了排针,外接串口不行

    点评

    不好意思!我的例程是STC8系列的,降龙棍勇的是STC32G,不能直接下载运行(我记混了)。 下面的工程我改为STC32G的了,直接下载"Objects"里的"UART1.hex"测试即可, 主频选择11.0592MHZ。 /***********************  详情 回复 发表于 2023-9-30 21:21
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    45

    主题

    2920

    回帖

    6564

    积分

    超级版主

    积分
    6564
    发表于 2023-9-30 21:21:40 | 显示全部楼层
    18220866638 发表于 2023-9-30 19:32
    降龙棍的P3.0和P3.1口自己焊接了排针,外接串口不行

    不好意思!我的例程是STC8系列的,降龙棍勇的是STC32G,不能直接下载运行(我记混了)。
    下面的工程我改为STC32G的了,直接下载"Objects"里的"UART1.hex"测试即可, 主频选择11.0592MHZ。


    /*********************************************************/
    #define MAIN_Fosc                11059200L        //定义主时钟
    #include        "..\..\STC32G.h"


    /*************        功能说明        **************
    请先别修改程序, 直接下载"08-串口1中断收发-C语言-MODBUS-RTU协议"里的"Objects"里的"UART1.hex"测试, 主频选择11.0592MHZ. 测试正常后再修改移植.

    串口1按MODBUS-RTU协议通信. 本例为从机程序.


    本例程只支持多寄存器读和多寄存器写, 寄存器长度为64个, 别的命令用户可以根据需要按MODBUS-RTU协议自行添加.
    本例子数据使用大端模式(与C51一致), CRC16使用小端模式(与PC一致).


    默认参数:
    串口1设置均为 1位起始位, 8位数据位, 1位停止位, 无校验.
    串口1(P3.0 P3.1): 9600bps.

    定时器0用于超时计时. 串口每收到一个字节都会重置超时计数, 当串口空闲超过35bit时间时(9600bps对应3.6ms)则接收完成.
    用户修改波特率时注意要修改这个超时时间.

    本例程只是一个应用例子, 科普MODBUS-RTU协议并不在本例子职责范围, 用户可以上网搜索相关协议文本参考.
    本例定义了64个寄存器, 访问地址为0x1000~0x103f.
    命令例子:
    写入4个寄存器(8个字节):
    10 10 1000 0004 08 1234 5678 90AB CDEF 4930
    返回:
    10 10 10 00 00 04 C64B
    读出4个寄存器:
    10 03 1000 0004 4388
    返回:
    10 03 08 12 34 56 78 90 AB CD EF D53D

    命令错误返回信息(自定义):
    0x90: 功能码错误. 收到了不支持的功能码.
    0x91: 命令长度错误.
    0x92: 写入或读出寄存器个数或字节数错误.
    0x93: 寄存器地址错误.

    注意: 收到广播地址0x00时要处理信息, 但不返回应答.

    ******************************************/


    STC32G-串口相关程序.rar (65.97 KB, 下载次数: 33)


    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-29 00:12 , Processed in 0.071255 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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