找回密码
 立即注册
查看: 447|回复: 6

STC89C52RC单片机串口循环发送问题

[复制链接]

该用户从未签到

2

主题

11

回帖

44

积分

新手上路

积分
44
发表于 2023-7-7 22:16:50 | 显示全部楼层 |阅读模式
请问用STC89C52串口1,用T2做接收波特率,T1做发送波特率。收进来1组7个字节后,马上单独转发20-30组7个字节出去,汇编程序怎么做呢?想了好几天了。
回复 送花

使用道具 举报

  • TA的每日心情
    开心
    8 小时前
  • 签到天数: 98 天

    [LV.6]常住居民II

    41

    主题

    1011

    回帖

    6949

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6949
    QQ
    发表于 2023-7-12 13:44:16 | 显示全部楼层
    “用T2做接收波特率,T1做发送波特率”这个是什么梗??发送和接收不是同一个定时器做波特率发生器就好了吗
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    15 小时前
  • 签到天数: 130 天

    [LV.7]常住居民III

    8

    主题

    79

    回帖

    1076

    积分

    金牌会员

    机长

    积分
    1076
    发表于 2023-7-12 14:23:38 | 显示全部楼层
    请教一下,串口1是怎么使用不同的收发波特率的?
    业余撸代码,专业开飞机
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    11

    回帖

    44

    积分

    新手上路

    积分
    44
     楼主| 发表于 2023-7-13 22:05:34 | 显示全部楼层
    电子DIY小家 发表于 2023-7-12 13:44
    “用T2做接收波特率,T1做发送波特率”这个是什么梗??发送和接收不是同一个定时器做波特率发生器就好了吗 ...

    如果发生和接收需要不同的波特率。有两种方法。89C系列单片机可用T2做接收波特率或者发送波特率,可用T1定时器做接收或者发送波特率。你仔细看T2CON的RCLK时钟标志的定义就知道了。当RCLK=1,定时器做串口1的接收波特率。当TCLK=1,定时器做串口1的发送波特率
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    11

    回帖

    44

    积分

    新手上路

    积分
    44
     楼主| 发表于 2023-7-13 22:09:11 | 显示全部楼层
    hsrzq 发表于 2023-7-12 14:23
    请教一下,串口1是怎么使用不同的收发波特率的?

    如果发送和接收需要不同的波特率。有两种方法。89C系列单片机可用T2做接收波特率或者发送波特率,可用T1定时器做接收或者发送波特率。你仔细看T2CON的RCLK时钟标志的定义就知道了。当RCLK=1,定时器做串口1的接收波特率。当TCLK=1,定时器做串口1的发送波特率;                                                           另外一种方法就是用:STC12C系列 晶振11.0592  串口1  2400波特率 8位数据
    独立波特率发生器 倍速SMOD打开 定时器时钟12T

    ORL                PCON,#80H   ;使能波特率倍速位SMOD
    MOV                SCON,#50H   ;8位数据,可变波特率
    ANL                AUXR,#0FBH  ;定时器时钟12T模式
    ORL                AUXR,#01H   ;串口1使用独立波特率发生器
    ORL                AUXR,#10H   ;启动独立波特率发射

         ;思路 初始化检测拨码定位当前接收波特率。
         ;串口RXD接收完,再改固定2400波特率发送,发完了再检测拨码改回去

    MOV        BRT,#0E8H ;2400重载值
    MOV        BRT,#0F4H ;4800重载值
    MOV        BRT,#0FAH ;9600重载值
    MOV        BRT,#0FFH ;115200重载值

    以上成功,但不能用1T模式,速率稍慢
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    下面再改进:
    11.0592  串口1通用 8位数据 定时器1-8位自动重载 不倍增 选择1T模式

    ANL        PCON,#7FH  ;波特率不倍速
    MOV        SCON,#50H  ;8位数据,可变波特率
    ORL        AUXR,#40H  ;定时器时钟1T模式
    ANL        AUXR,#0FEH ;串口1选择定时器1为波特率发生器
    ANL        TMOD,#0FH  ;设置定时器模式
    ORL        TMOD,#20H  ;设置定时器模式
    CLR        ET1        ;禁止定时器中断
    SETB        TR1           ;定时器1开始计时

    MOV        TL1,#070H  ;2400设置定时初始值
    MOV        TH1,#070H  ;2400设置定时重载值

    MOV        TL1,#0B8H  ;4800设置定时初始值
    MOV        TH1,#0B8H  ;4800设置定时重载值

    MOV        TL1,#0DCH  ;9600设置定时初始值
    MOV        TH1,#0DCH  ;9600设置定时重载值

    MOV        TL1,#0FDH  ;115200设置定时初始值
    MOV        TH1,#0FDH  ;115200设置定时重载值

    以上成功,但1T模式,4800 9600停止码还是乱码,改成12T试试(不能115200)换回此程序
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    下面再改进:
    11.0592  串口1通用 8位数据 定时器1-8位自动重载 倍增,倍增才能产生115200 选择12T模式

    ANL PCON,#80H  ;波特率倍速
    MOV SCON,#50H  ;8位数据,可变波特率
    ANL AUXR,#0BFH ;定时器时钟12T模式
    ANL AUXR,#0FEH ;串口1选择定时器1为波特率发生器
    ANL TMOD,#0FH  ;设置定时器模式
    ORL TMOD,#20H  ;设置定时器模式
    CLR  ET1       ;禁止定时器中断
    SETB TR1       ;定时器1开始计时

    MOV TL1,#0E8H  ;2400设置定时初始值
    MOV TH1,#0E8H  ;2400设置定时重载值

    MOV TL1,#0F4H  ;4800设置定时初始值
    MOV TH1,#0F4H  ;4800设置定时重载值

    MOV TL1,#0FAH  ;9600设置定时初始值
    MOV TH1,#0FAH  ;9600设置定时重载值


    MOV TL1,#0FFH        ;115200设置定时初始值   11.0592 12T模式 倍增出来的115200误差50%无法用
    MOV TH1,#0FFH        ;115200设置定时重载值
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


















    程序初始化的时候:接收的时候选择T1做波特率,
    串口中断产生后,进接收程序,接收完后转发前,修改T1定时器做发送波特率的数值。发送完再改回来接收的波特率。我试过可以的。很好用。
    回复 支持 1 反对 0 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9428

    回帖

    1万

    积分

    管理员

    积分
    14003
    发表于 2023-7-14 07:52:27 | 显示全部楼层
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9428

    回帖

    1万

    积分

    管理员

    积分
    14003
    发表于 2023-7-14 07:55:21 | 显示全部楼层
    还停留在STC89C52RC的学习者,
    立即切换到支持内置硬件USB直接仿真的STC8H8K64U,

    内置硬件USB直接仿真4组串口的STC8H8K64U, 有SKDIP28, PDIP40封装
    1.png
    1.png
    8051如何仿真,STC8H8K64U自带硬件USB直接仿真 - 编译器/仿真器/ISP下载/做自己的ISP - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

    1.png






    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-14 16:10 , Processed in 0.070162 second(s), 56 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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