Honsiti 发表于 2024-1-11 16:49:16

梁工 发表于 2023-2-21 16:31
如果依旧无法解压缩,那是你的解压软件版本太旧了,升级一下吧。


bit busy;
char wptr;
char rptr;
char buffer;

void UART_Init()//9600bps@11.0592MHz
{
          SCON = 0x50;
    TMOD = 0x00;
    TL1 = BRT;
    TH1 = BRT >> 8;
    TR1 = 1;
    AUXR = 0x40;
    wptr = 0x00;
    rptr = 0x00;
    busy = 0;
       
}

void UART_SendByte(u16 Data)
{

                while (busy);
    busy = 1;
    SBUF = Data;
}


void UartIsr() interrupt 4
{
    if (TI)
    {
      TI = 0;
      busy = 0;
    }
//    if (RI)
//    {
//      RI = 0;
//      buffer = SBUF;
//      wptr &= 0x0f;
//    }
}

void main(void)
{
        Io_Init();
        UART_Init();
ES = 1;
EA = 1;
   
    while (1)
    {
//      if (rptr != wptr)
//      {
//            UART_SendByte(0x33);
//            rptr &= 0x0f;
//      }
                        UART_SendByte(0x33);


    }

}

梁工你好这是我参考历程改写的串口代码,我希望实现只发送数据给PC 不接收数据,但是我发现这样子传输发送的是乱码,我不确定是什么问题所导致的。我尝试过用ISP助手生成的初始化配置以选择以选择比较低的波特率,但是发现还是传输乱码,所以想请教一下梁工是哪里出现了问题

梁工 发表于 2024-1-11 19:13:57

Honsiti 发表于 2024-1-11 16:49
bit busy;
char wptr;
char rptr;


你的实际主频多少MHz?BRT是在怎么定义的?

Honsiti 发表于 2024-1-11 22:50:21

梁工 发表于 2024-1-11 19:13
你的实际主频多少MHz?BRT是在怎么定义的?

#define FOSC      11059200UL
#define BRT         (65536 - FOSC / 115200 / 4)
是这个

梁工 发表于 2024-1-11 23:07:25

Honsiti 发表于 2024-1-11 22:50
#define FOSC      11059200UL
#define BRT         (65536 - FOSC / 115200 / 4)
是这个

编译测试了你的程序,PC接收正确,没有问题:


MYKJ 发表于 2024-1-25 15:32:39

梁 工,你好!
我的串口3发送不数据,帮我看一下,哪 里出了问题?
                              MOV       S3CON,#00H       ;不接收数据,=10允许接收数据S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI S3RI
                                MOV       S3BUF,#00H       ;模式0,S3T3=0,选T2为波发器,可变波率8位数据方式
                                MOV       IE2,#08H         ;允许UART3中断- ET4 ET3 ES4 ES3 ET2 ESPI ES2
;--------------------------------------------------------------------------------------
UART3_ISR:
               PUSH      ACC
               PUSH      PSW
               ;MOV       PSW,#08H      ;CY AC F0 RS1 RS0 OV - P
               MOV       S3DA,S3CON            
                           ;MOV       S3DA,A         ;S3DA=2EH
            JB      S3DA.1,U3RT1
               MOV       S3CON,#00H
               SJMP      UART3ISR_EXIT
;----------------------------------------------
U3RT1:         SETB      T3BA
               CLR       S3DA.1
                           ;MOV       A,S3DA
                           MOV       S3CON,S3DA
                          
;==============================================
UART3ISR_EXIT:
               POP       PSW
               POP       ACC
               RETI
;===============================================
                                ;发送BIO的7个数据
//================================================================
SENDS:          CLR      TR0
                     MOV      R1,#56H
                     MOV      R7,#07D
;-----
SENDS1:         MOV      A,@R1
                      MOV      S3BUF,A
;----
SENDS1A:
                                JBC      T3BA,SENDS1B
                                SJMP   SENDS1A
;---
SENDS1B:                  CPL      OUT_YL             ;指示作用,
                                INC      R1
                                DJNZ   R7,SENDS1
                                CALL   ADJ_ON
                                RET                          

MYKJ 发表于 2024-1-25 15:33:54

我的串口1和串口3都用T2作为波特率发生器,115200

小坤 发表于 2024-1-28 21:22:05

梁工 发表于 2022-12-19 13:09
STC8H/STC8G 的 4组 独立串口程序, 通用
Modbus 演示程序, 2023/8/28更新
解压缩后参考、测试“08-串口1中 ...

波特率相同可以共用定时器T2,又学到了一个精华,@梁工,还有其他类似精华共享吗

梁工 发表于 2024-1-28 22:11:02

小坤 发表于 2024-1-28 21:22
波特率相同可以共用定时器T2,又学到了一个精华,@梁工,还有其他类似精华共享吗 ...

4个串口如果波特率相同,都可以使用定时器2做波特率。
应用类,可以在本论坛找,很多干货!

内卷123 发表于 2024-1-29 11:03:09

{:4_197:}

神农鼎 发表于 2024-2-9 21:37:23


页: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14
查看完整版本: 8H/8G/8C/8A系列4组串口同时通信的程序,Modbus 演示程序;可共享T2做波特率发生器