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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 71217|回復(fù): 33
收起左側(cè)

手把手教你單片機(jī)串口通信-基礎(chǔ)篇

  [復(fù)制鏈接]
ID:285356 發(fā)表于 2018-2-25 11:46 | 顯示全部樓層 |閱讀模式
通信方式
并行
適合短距離通信,并行通信控制簡單、相對(duì)傳輸速度快(8位一起傳輸)。
串行
只能一位一位的傳送。
同步(了解)
建立發(fā)送方時(shí)鐘對(duì)接收方時(shí)鐘的直接控制,使雙方達(dá)到完全同步。此時(shí),傳輸數(shù)據(jù)的位之間的距離均為“位間隔”的整數(shù)倍,同時(shí)傳送的字符間不留間隙。
發(fā)送方對(duì)接收方的同步可以通過外同步和自同步
異步
以字符(構(gòu)成的幀)為單位進(jìn)行傳輸。數(shù)據(jù)位從低到高傳送。
格式:
這里的空閑時(shí)間是任意的。
串行通信的制式(傳輸方向)
單工(僅能沿一個(gè)方向)
半雙工(可進(jìn)行雙向,但需分時(shí))
全雙工
串行通信的錯(cuò)誤校驗(yàn)
奇偶校驗(yàn)
在發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)位尾隨的1位為奇偶校驗(yàn)位(1/0)。奇校驗(yàn)時(shí),數(shù)據(jù)中1的個(gè)數(shù)與檢驗(yàn)位1的個(gè)數(shù)之和應(yīng)為奇數(shù);偶校驗(yàn)時(shí),數(shù)據(jù)中1的個(gè)數(shù)與校驗(yàn)位1的個(gè)數(shù)之和應(yīng)為偶數(shù)。接收字符時(shí),對(duì)1的個(gè)數(shù)進(jìn)行校驗(yàn),若字符不一致,則說明傳輸數(shù)據(jù)過程中出現(xiàn)錯(cuò)誤。
代碼和校驗(yàn)
發(fā)送方將所發(fā)數(shù)據(jù)塊求和(或各字節(jié)異或),產(chǎn)生一個(gè)字節(jié)的校驗(yàn)字符(校驗(yàn)和)附加到數(shù)據(jù)塊末尾。接收方接收數(shù)據(jù)時(shí),同時(shí)對(duì)數(shù)據(jù)塊(除校驗(yàn)字節(jié)外)求和(或各字節(jié)異或),將所得的結(jié)果與發(fā)送方的“校驗(yàn)和”進(jìn)行比較,一致則無差。
循環(huán)冗余校驗(yàn)
通過某種數(shù)學(xué)預(yù)算實(shí)現(xiàn)有效信息與校驗(yàn)位之間的循環(huán)校驗(yàn),常用語對(duì)磁盤信息的傳輸、存儲(chǔ)區(qū)的完整性校驗(yàn)。
串口的基本結(jié)構(gòu)
SBUF:51單片機(jī)中的特殊寄存器,串行數(shù)據(jù)緩沖器(一個(gè)接收一個(gè)發(fā)送),兩個(gè)其實(shí)是共用的一個(gè)地址99H,但是兩個(gè)在物理上面是分開的。
當(dāng)發(fā)送使用時(shí),就采用SBUF=XXX;  (XXX為需要傳送的數(shù)據(jù))
當(dāng)接收使用時(shí),采用XXX=SBUF;
記得因?yàn)槭谴械乃詡鬏敹际且晃灰晃贿M(jìn)行的。
T1溢出率:T1計(jì)時(shí)器的溢出頻率(就是計(jì)時(shí)器每次低位計(jì)滿向高位進(jìn)位時(shí)間的倒數(shù))
用處:用于計(jì)算波特率(每秒傳輸二進(jìn)制代碼的位數(shù))
實(shí)現(xiàn)單片機(jī)與電腦之間的互相傳送字符串通信代碼:
  1.      #include <reg52.h>  
  2.      #include <stdio.h>              //printf頭文件  
  3.      #define uc unsigned char   
  4.      #define uint unsigned int  
  5.       
  6.      uc flag,i,flag_t,s[50]="",j=0,flag_n=0;  
  7.      uc code table[]="I get ";         
  8.       
  9.      void init()  
  10. {  
  11.      TMOD=0x20;    //定時(shí)器工作方式,選擇了定時(shí)器1,工作方式2 八位初值自動(dòng)重裝的8位定時(shí)器。         
  12.      TH1=0xfd;     //定時(shí)器1初值  ,設(shè)置波特率為9600 晶振11.0529MHZ?  
  13.      TL1=0xfd;  
  14.      TR1=1;        //開啟定時(shí)器1  
  15.    
  16.      SM0=0;  
  17.      SM1=1;        //10位異步接收,(8位數(shù)據(jù))波特率可變  
  18.      REN=1;        //允許串行口接收位  
  19.      EA=1;         //允許中斷(總閘)  
  20.      ES=1;         //允許串口中斷  
  21. }  
  22. void main()  
  23. {  
  24.      init();  
  25.      while(1)  
  26. {  
  27.        if(flag==1)  
  28.      {     if(flag_n!=0)        //使第二個(gè)及以后I get xx 換行,不與You transfer在一行(單純?yōu)榱烁袷胶每矗?nbsp; 
  29.              {TI=1;  
  30.              printf("\n");  
  31.              while(!TI);  
  32.              TI=0;  
  33.              }  
  34.          for(i=0;i<6;i++)  
  35.          {  
  36.              SBUF=table[i];  
  37.              while(!TI);  
  38.              TI=0;  
  39.          }  
  40.              for(i=0;s[i]!='#'&&i<50;i++)  
  41.          {  
  42.              SBUF=s[i];  
  43.              while(!TI);  
  44.              TI=0;  
  45.          }  
  46.          flag=0;  
  47.      }  
  48.      if(flag_t==1)                          //發(fā)送完畢之后,在電腦端輸出。  
  49.      {  
  50.          TI=1;                              //printf之前必須將T1置為1才行。  
  51.          printf ("\nYou transfer %s",s);  
  52.          while(!TI);  
  53.          TI=0;  
  54.          flag_t=0;  
  55.      }     
  56. }  
  57. }  
  58.    
  59. void ser() interrupt 4  
  60. {  
  61.          if(RI)       //接收數(shù)據(jù),手動(dòng)將RI清0  
  62.      {         
  63.          RI=0;  
  64.            
  65.          if(flag==0&&j!=0)//1.循環(huán)賦值為'\0'(字符串結(jié)尾標(biāo)志符),j=0,為了第二次傳遞字符串是又是從頭輸出  
  66.          {            //2.flag為0和j不為0時(shí),保證是第二次及以后,傳輸字符串(控制輸出格式)  
  67.              flag_n++;              
  68.              for(j=0;s[j]!='#'&&j<50;j++)  
  69.                    s[j]='\0';  
  70.                    j=0;  
  71.          }  
  72.          s[j]=SBUF;  
  73.          flag=1;  
  74.          if(s[j]=='#'||j==49)     //以'#'作為傳送字符串的結(jié)尾符,我定義的字符數(shù)組最長為50所以49也應(yīng)該結(jié)束。  
  75.              flag_t=1;  
  76.          else  
  77.              j++;  
  78.      }  
  79.    
  80.      if(TI)     //發(fā)送數(shù)據(jù)  
  81.      {  
  82.      }      
  83. }  
復(fù)制代碼

運(yùn)行截圖:
代碼解讀:基本上就是幾個(gè)模塊:計(jì)時(shí)器、中斷以及串口通信中斷寄存器介紹IE(interrupt enable):(可位尋址)設(shè)定各個(gè)中斷源的打開和關(guān)閉IP(interrupt prior)中斷優(yōu)先級(jí)寄存器:(可位尋址)用來設(shè)定各個(gè)中斷源屬于兩級(jí)中斷中的哪一級(jí)
中斷源:
中斷響應(yīng)條件:
1.中斷源有中斷請(qǐng)求
2.此中斷源的中斷允許位為1
3.CPU開中斷(EA=1)
代碼書寫:
1.先開總中斷EA
2
.然后再開特定的中斷去控制
3.如果有特殊需要優(yōu)先級(jí)問題再設(shè)置IP
4.中斷函數(shù)書寫
格式
void 函數(shù)名() interrupt 中斷號(hào)(上面圖示的序號(hào))
//中斷函數(shù)返回值一定是void  
//函數(shù)名隨便寫
//中斷號(hào)用來判斷是哪個(gè)中斷源
計(jì)時(shí)器寄存器介紹TCON 支持位尋址 :控制寄存器,控制T1、T0的啟動(dòng)和停止及設(shè)置溢出標(biāo)志
TMOD,不支持位尋址:定時(shí)/計(jì)數(shù)器的工作方式寄存器,確定工作方式和功能
計(jì)時(shí)器代碼書寫步驟:1.EA=1;
2.ETX=1;                            //開啟計(jì)時(shí)器X中斷
3.配置工作方式  TMOD=0x..; //根據(jù)自己需求按照上表來配     
3.配置計(jì)時(shí)器初值
//THX=(65535-N)/256;
//TLX=(65535-N)%256;   
//N由你要計(jì)時(shí)的時(shí)長決定。計(jì)時(shí)器計(jì)一個(gè)數(shù)花費(fèi)一個(gè)時(shí)鐘周期來計(jì)算。
4.TRX=1;                           //開啟計(jì)時(shí)器X
串口通信寄存器介紹PCON電源管理寄存器 :(不可位尋址)
用來管理單片機(jī)的電源部分,包括上電復(fù)位檢測、掉電模式
、空閑模式等
SCON:(可位尋址)用以設(shè)定串行口的工作方式、接收/發(fā)送控制以及設(shè)置狀態(tài)標(biāo)志
波特率計(jì)算
SMOD就是PCON中的第一位,默認(rèn)為0
fosc為晶振頻率,所以自己設(shè)定不同波特率時(shí),也要考慮晶振不同的問題。
代碼書寫
1.上面都書寫完畢之后
2.還需要ES=1
3.傳輸數(shù)據(jù)時(shí),SBUF=XX
   接收數(shù)據(jù)時(shí),XX=SBUF
4.中斷函數(shù)書寫
一定要將RI清0,但是TI的清0在主函數(shù)中進(jìn)行
//因?yàn)門I在中斷中進(jìn)行,(1)沒有if(TI)的判斷,那么就會(huì)和RI的處理混淆(2)如果有TI判斷
//那么有可能永遠(yuǎn)進(jìn)行不了傳輸數(shù)據(jù),因?yàn)樽铋_始TI是為0的,無法進(jìn)入TI條件,就無傳
//輸數(shù)據(jù)(SBUF=XX)。而且在傳輸數(shù)據(jù)的時(shí)候會(huì)又一次進(jìn)入中斷,就是還沒處理中
//斷就又進(jìn)入了另外一個(gè)中斷,導(dǎo)致通信出現(xiàn)異常。

完整的Word格式文檔51黑下載地址:
單片機(jī)串口詳解.doc (958 KB, 下載次數(shù): 506)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:382700 發(fā)表于 2018-8-3 21:04 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報(bào)

ID:191393 發(fā)表于 2018-10-9 16:38 | 顯示全部樓層
謝          謝
回復(fù)

使用道具 舉報(bào)

ID:65880 發(fā)表于 2018-10-10 08:29 | 顯示全部樓層
不錯(cuò),謝謝了
回復(fù)

使用道具 舉報(bào)

ID:396581 發(fā)表于 2018-10-26 09:09 | 顯示全部樓層
很全,很仔細(xì)的內(nèi)容,謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:450403 發(fā)表于 2018-12-20 00:03 | 顯示全部樓層
寫的很好,我們剛剛期末需要
回復(fù)

使用道具 舉報(bào)

ID:130345 發(fā)表于 2018-12-21 08:26 | 顯示全部樓層
串口通信,太感謝了
回復(fù)

使用道具 舉報(bào)

ID:387908 發(fā)表于 2019-2-15 21:44 | 顯示全部樓層
為啥我的返回的是亂碼?
捕獲.PNG
回復(fù)

使用道具 舉報(bào)

ID:48127 發(fā)表于 2019-3-27 06:59 來自手機(jī) | 顯示全部樓層
寫的好
回復(fù)

使用道具 舉報(bào)

ID:290290 發(fā)表于 2019-3-28 00:12 | 顯示全部樓層
寫的很好,不錯(cuò)。
回復(fù)

使用道具 舉報(bào)

ID:501991 發(fā)表于 2019-3-31 21:01 | 顯示全部樓層
對(duì)于小白很有幫助,支持樓主。
回復(fù)

使用道具 舉報(bào)

ID:500383 發(fā)表于 2019-4-1 09:43 | 顯示全部樓層
吃瓜子不吐殼 發(fā)表于 2019-2-15 21:44
為啥我的返回的是亂碼?

把波特率設(shè)為9600試試看。
回復(fù)

使用道具 舉報(bào)

ID:535994 發(fā)表于 2019-5-12 11:16 | 顯示全部樓層
寫的很好
回復(fù)

使用道具 舉報(bào)

ID:520638 發(fā)表于 2019-5-12 18:28 | 顯示全部樓層
樓主能不能講解下 單片機(jī)和模塊的接線問題,
我 想把單片機(jī)和UBLOX GPS模塊和SIM800c模塊連接一起
回復(fù)

使用道具 舉報(bào)

ID:547657 發(fā)表于 2019-5-26 16:52 | 顯示全部樓層
寫的很好
回復(fù)

使用道具 舉報(bào)

ID:511328 發(fā)表于 2019-6-10 12:56 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:511588 發(fā)表于 2019-7-22 19:29 | 顯示全部樓層
吃瓜子不吐殼 發(fā)表于 2019-2-15 21:44
為啥我的返回的是亂碼?

可能波特率不一致
回復(fù)

使用道具 舉報(bào)

ID:542954 發(fā)表于 2019-8-4 18:09 | 顯示全部樓層
萬分感謝
回復(fù)

使用道具 舉報(bào)

ID:684539 發(fā)表于 2020-2-8 10:43 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報(bào)

ID:208733 發(fā)表于 2020-2-8 17:43 | 顯示全部樓層
感覺自己還是搞不太清
回復(fù)

使用道具 舉報(bào)

ID:769583 發(fā)表于 2020-6-5 21:27 | 顯示全部樓層
你這種人活該活到一百歲
回復(fù)

使用道具 舉報(bào)

ID:808940 發(fā)表于 2020-8-7 10:23 來自手機(jī) | 顯示全部樓層
為什么我的發(fā)送1,就一直在發(fā)送
回復(fù)

使用道具 舉報(bào)

ID:168971 發(fā)表于 2020-11-5 19:00 | 顯示全部樓層
感謝大神指路,,,!!!
回復(fù)

使用道具 舉報(bào)

ID:168971 發(fā)表于 2020-11-5 21:29 | 顯示全部樓層
大神的寫法好高級(jí),有沒有大神幫忙注釋一下啊
回復(fù)

使用道具 舉報(bào)

ID:865268 發(fā)表于 2020-12-22 10:09 | 顯示全部樓層
為啥我的接受顯示是亂碼
回復(fù)

使用道具 舉報(bào)

ID:832201 發(fā)表于 2020-12-23 22:37 | 顯示全部樓層
寫的非常清晰,感謝
回復(fù)

使用道具 舉報(bào)

ID:882811 發(fā)表于 2021-2-18 10:23 | 顯示全部樓層
和教材一樣,就是記不住中斷啥的的寄存器名字
回復(fù)

使用道具 舉報(bào)

ID:160932 發(fā)表于 2021-2-18 14:53 | 顯示全部樓層
正在學(xué)習(xí)串口通信,就看到這個(gè)帖子了,非常好,學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

ID:66328 發(fā)表于 2021-2-20 11:35 | 顯示全部樓層
教程寫的非常好,學(xué)習(xí)了,謝謝分享!
回復(fù)

使用道具 舉報(bào)

ID:937091 發(fā)表于 2021-6-20 19:31 | 顯示全部樓層
謝謝您,非常有用
回復(fù)

使用道具 舉報(bào)

ID:88606 發(fā)表于 2021-6-21 09:15 | 顯示全部樓層
收下了,慢慢看!多看才會(huì)有收獲!
回復(fù)

使用道具 舉報(bào)

ID:937201 發(fā)表于 2021-6-22 19:45 | 顯示全部樓層
感謝分享,正在學(xué)習(xí)串口
回復(fù)

使用道具 舉報(bào)

ID:577554 發(fā)表于 2022-1-22 17:35 | 顯示全部樓層
示例程序及筆記簡單易懂,感謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩精品视频 | 日本不卡视频在线播放 | 日韩精品在线观看一区二区三区 | 99热这里都是精品 | 日本一区二区视频 | 国产特级毛片 | 日韩中文字幕高清 | 国产精品高潮呻吟久久aⅴ码 | 亚洲一级淫片 | 国产精品久久久久久久免费观看 | 毛片免费在线观看 | 午夜在线视频 | 视频一区 国产精品 | 精品国产精品国产偷麻豆 | av网站免费在线观看 | 国产成人精品一区二区三区网站观看 | 国产精品永久久久久 | 欧美精三区欧美精三区 | 成人精品视频在线观看 | 激情伊人网 | 2022国产精品 | 亚洲精品视频导航 | 在线婷婷 | 国产999精品久久久久久 | 91免费视频观看 | 九九热在线免费视频 | 性一爱一乱一交一视频 | 午夜精品一区二区三区在线观看 | 欧美日韩免费视频 | 亚洲欧美日韩久久 | 欧美视频一区二区三区 | 欧美成人精品在线观看 | wwww.xxxx免费 | 国产色婷婷精品综合在线手机播放 | 久久久久久国产精品免费 | 欧美日韩专区 | 亚洲激情在线 | 国产一级一级国产 | 精品国产乱码久久久久久影片 | 午夜影院在线观看 | 在线播放中文字幕 |