久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機串口通信C語言程序 編碼標準

[復制鏈接]
跳轉到指定樓層
樓主
我們知道,單片機(計算機)只能識別0和1,那么單片機串口發送數據也是如此,發送的無非就是二進制數據0和1,然后由8位二進制數據組成一個字符(字節)發送出去被接收方接收。比如:我們發送字符'0'-'9','a'-'z','A'-'Z'等等,我們知道發送的這類字符遵ASCII碼。其中,查表可知字符'a'對應ASCII碼中的值,十六進制:0x61,十進制97,二進制0110 0001
那么問題來了,當我們使用單片機發送一串中文字符的時候,單片機是怎么發送的?接收方又是怎么接收和識別的?
以前我做項目都是直接在程序里面使用" "字符串直接發送,根本不理會程序是怎么編譯的,單片機到底發了啥,反正能正確接收就好了。其實,這對學習成長來說是非常糟糕的,自我檢討下!
回歸正題,首先我們可以肯定的是,單片機只能發送0和1,只不過發送和接收對應的一套標準,即編碼協議,不同罷了!
于是,我便做了如下探究。編寫了一個串口程序,使用上位機接收。

在上位機使用hex顯示:


然后使用邏輯分析儀捕獲傳輸的數據內容:


發現,結果是一致的,使用了同一套標準協議。該協議為GB2312編碼。
查找編碼可知:




所有內容一致!
至此,我們便清楚了單片機發送的中文漢字是怎么回事了!
希望對大家有所幫助!


參考51單片機C語言代碼如下:
  1. #include<reg52.h>
  2. #include"delay.h"
  3. /*------------------------------------------------
  4.                    函數聲明
  5. ------------------------------------------------*/
  6. void SendStr(unsigned char *s);
  7. /*------------------------------------------------
  8.                     串口初始化
  9. ------------------------------------------------*/
  10. void InitUART  (void)
  11. {
  12.     SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
  13.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重裝
  14.     TH1   = 0xFD;               // TH1:  重裝值 9600 波特率 晶振 11.0592MHz  
  15.     TR1   = 1;                  // TR1:  timer 1 打開                        
  16.     EA    = 1;                  //打開總中斷
  17.     //ES    = 1;                  //打開串口中斷
  18. }                           
  19. /*------------------------------------------------
  20.                     主函數
  21. ------------------------------------------------*/
  22. void main (void)
  23. {
  24. InitUART();
  25. while (1)                       
  26.     {
  27.     SendStr("串口發送中文測試");
  28.         DelayMs(240);//延時循環發送
  29.     DelayMs(240);
  30.     }
  31. }

  32. /*------------------------------------------------
  33.                     發送一個字節
  34. ------------------------------------------------*/
  35. void SendByte(unsigned char dat)
  36. {
  37. SBUF = dat;
  38. while(!TI);
  39.       TI = 0;
  40. }
  41. /*------------------------------------------------
  42.                     發送一個字符串
  43. ------------------------------------------------*/
  44. void SendStr(unsigned char *s)
  45. {
  46. while(*s!='\0')// \0 表示字符串結束標志,
  47.                 //通過檢測是否字符串末尾
  48.   {
  49.   SendByte(*s);
  50.   s++;
  51.   }
  52. }
復制代碼
GB2312編碼表.zip (19.55 KB, 下載次數: 16)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:115923 發表于 2020-10-20 08:55 | 只看該作者
這有什么好研究的,  漢字是占用兩個byte.  單片機在發送漢字的時候,  自動會把" "內的內容做轉換,
完全不用擔心編寫的代碼需要注意的事項.

一句話,  編寫代碼是一樣的. 可以通用在ASCII 和漢字上.
回復

使用道具 舉報

板凳
ID:187947 發表于 2020-10-24 12:59 | 只看該作者
刨根問底   
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品欧美一区二区三区 | 成年女人免费v片 | 男人天堂手机在线视频 | avav在线看 | 毛片一级片 | 成人激情视频 | 在线观看黄色 | 亚洲国产看片 | 91亚洲精品国偷拍自产在线观看 | 欧美激情综合 | 久久久99国产精品免费 | 精品一区二区免费视频 | 99热在线免费 | 色精品视频 | 天天操天天拍 | 亚洲高清av | 成人欧美一区二区三区在线播放 | 欧美精品福利视频 | 日本午夜在线视频 | 欧美成人猛片aaaaaaa | 黄色片免费看 | 福利视频网址 | 中文字幕日韩欧美 | 亚洲97 | 免费观看www | 日韩午夜在线观看 | 在线播放国产视频 | 综合九九 | 久久国产综合 | 正在播放国产精品 | 精品国产青草久久久久福利 | 久久五月婷 | 日韩欧美中文字幕在线观看 | 国产福利视频 | 成人精品久久久 | 香蕉视频在线播放 | 亚洲一区二区三区免费视频 | 中文字幕成人在线 | 日本视频一区二区 | 国产欧美精品 | 在线色 |