亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1107|回復: 3
打印 上一主題 下一主題
收起左側

stc8g1k08a單片機串口返回數據終于無亂碼了 波特率9600正常顯示

[復制鏈接]
跳轉到指定樓層
樓主
#include "STC8G.H"

// 串口發送"你好世界"的GB2312編碼對照表:
// "你"的GB2312編碼:0xC4, 0xE3
// "好"的GB2312編碼:0xBA, 0xC3  
// "世"的GB2312編碼:0xCA, 0xC0
// "界"的GB2312編碼:0xBD, 0xE7

void main()
{
    unsigned int i;
   
    // 配置P3.1引腳模式(串口TXD引腳,推挽輸出)
    P3M0 = 0x02;
   
    // 串口初始化配置
    SCON = 0x40;  // 串口工作模式1(8位UART,波特率可變)
    TMOD = 0x20;  // 定時器1工作模式2(8位自動重裝)
    TH1 = 0xE8;   // 定時器1重裝值,對應1200波特率(11.0592MHz晶振)
    TL1 = 0xE8;
    TR1 = 1;      // 啟動定時器1(作為串口波特率發生器)
   
    // 上電延時,確保硬件穩定
    for(i = 0; i < 60000; i++);
   
    while(1)
    {
        // 發送"你"(GB2312雙字節編碼)
        SBUF = 0xC4; while(!TI); TI = 0;
        SBUF = 0xE3; while(!TI); TI = 0;
        
        // 發送"好"(GB2312雙字節編碼)
        SBUF = 0xBA; while(!TI); TI = 0;
        SBUF = 0xC3; while(!TI); TI = 0;
        
        // 發送"世"(GB2312雙字節編碼)
        SBUF = 0xCA; while(!TI); TI = 0;
        SBUF = 0xC0; while(!TI); TI = 0;
        
        // 發送"界"(GB2312雙字節編碼)
        SBUF = 0xBD; while(!TI); TI = 0;
        SBUF = 0xE7; while(!TI); TI = 0;
        
        // 發送回車+換行符,優化串口顯示格式
        SBUF = '\r'; while(!TI); TI = 0;
        SBUF = '\n'; while(!TI); TI = 0;
        
        // 延時約1秒,控制發送頻率
        for(i = 0; i < 12000; i++);
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1155837 發表于 2026-2-4 18:48 | 只看該作者
學習了,原來這么簡單啊,之前看別人寫的USBCDC好復雜
回復

使用道具 舉報

板凳
ID:1133081 發表于 2026-2-4 20:19 | 只看該作者
可以直接發漢字


  1. #include "STC8G.h"
  2. #include "intrins.h"

  3. #define FOSC        11059200UL
  4. #define BRT         (65536 - FOSC / 115200 / 4)

  5. bit busy;
  6. char wptr;
  7. char rptr;
  8. char buffer[16];

  9. void UartIsr() interrupt 4
  10. {
  11.     if (TI)
  12.     {
  13.         TI = 0;
  14.         busy = 0;
  15.     }
  16.     if (RI)
  17.     {
  18.         RI = 0;
  19.         buffer[wptr++] = SBUF;
  20.         wptr &= 0x0f;
  21.     }
  22. }

  23. void UartInit()
  24. {
  25.     SCON = 0x50;
  26.     TMOD = 0x00;
  27.     TL1 = BRT;
  28.     TH1 = BRT >> 8;
  29.     TR1 = 1;
  30.     AUXR = 0x40;
  31.     wptr = 0x00;
  32.     rptr = 0x00;
  33.     busy = 0;
  34. }

  35. void UartSend(char dat)
  36. {
  37.     while (busy);
  38.     busy = 1;
  39.     SBUF = dat;
  40. }

  41. void UartSendStr(char *p)
  42. {
  43.     while (*p)
  44.     {
  45.         UartSend(*p++);
  46.     }
  47. }

  48. void main()
  49. {
  50.     P0M0 = 0x00;
  51.     P0M1 = 0x00;
  52.     P1M0 = 0x00;
  53.     P1M1 = 0x00;
  54.     P2M0 = 0x00;
  55.     P2M1 = 0x00;
  56.     P3M0 = 0x00;
  57.     P3M1 = 0x00;
  58.     P4M0 = 0x00;
  59.     P4M1 = 0x00;
  60.     P5M0 = 0x00;
  61.     P5M1 = 0x00;

  62.     UartInit();
  63.     ES = 1;
  64.     EA = 1;
  65.     UartSendStr("歡迎使用 !\r\n");

  66.     while (1)
  67.     {
  68.         if (rptr != wptr)
  69.         {
  70.             UartSend(buffer[rptr++]);
  71.             rptr &= 0x0f;
  72.         }
  73.     }
  74. }

復制代碼



回復

使用道具 舉報

地板
ID:1161211 發表于 2026-2-4 21:21 | 只看該作者
千早愛音愛玩51 發表于 2026-2-4 18:48
學習了,原來這么簡單啊,之前看別人寫的USBCDC好復雜

這個程序僅是單向發送,沒有交互及功能控制相對簡單,但對于原理的理解是有幫助的。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表