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

QQ登錄

只需一步,快速開始

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

單片機(jī)串行通信技術(shù)

[復(fù)制鏈接]
ID:929577 發(fā)表于 2021-6-6 12:21 | 顯示全部樓層 |閱讀模式
通信,單片機(jī)與外部設(shè)備之間的信息交換。
通信方式包含:串行通信和并行通信。
1.串行通信特點(diǎn):傳輸速度慢,接線簡單;并行通信傳輸速度快,接線復(fù)雜。
串行通信分為異步串行通信和同步串行通信。
1.異步串行通信:起始位(0)、數(shù)據(jù)位、停止位(1)。串行通信時(shí),約定好波特率;
2.同步串行通信:無起始位和停止位,使用的時(shí)同步字符指示,由時(shí)鐘控制發(fā)送和接收端的同步。
串行通信的數(shù)據(jù)傳送方向
1.單工、半雙工、全雙工
串行通信的奇偶校驗(yàn)位
1.為了保證數(shù)據(jù)的正確傳輸,使用程序狀態(tài)子(PSW)的奇偶校驗(yàn)位。如果發(fā)送端的奇偶校驗(yàn)位與接收端的奇偶校驗(yàn)位相同,則接收,否則不接收,重新發(fā)送。
串行通信的結(jié)構(gòu)
1.兩個(gè)數(shù)據(jù)緩沖器SBUF;2輸入移位寄存器;3.串行控制寄存器SCON;4.定時(shí)器T1(用作波特率發(fā)生器)
進(jìn)行串行通信,主要是控制寄存器的使用。
串行口控制寄存器SCON:SM0和SM1控制串行口的工作方式;SM2控制多機(jī)通信;REN允許/禁止數(shù)據(jù)接收位;TB8:發(fā)送第9位,RB8接收第9位;TI和RI分別為發(fā)送和接收中斷標(biāo)志。
電源控制寄存器PCON只影響波特率的大小
4種工作方式與波特率設(shè)置
1.方式0
1.1數(shù)據(jù)發(fā)送
方式0是同步移位寄存方式,因此串行通信中使用8位串/并轉(zhuǎn)換移位寄存器74LS164,RXD輸出串行數(shù)據(jù),TXD輸出移位脈沖,還需要引腳對(duì)74LS136清零.  發(fā)送數(shù)據(jù)前,P1.7引腳對(duì)74LS164清零,D0~D7引腳輸出0,然后執(zhí)行寫命令,向SBUF寫數(shù)據(jù),從RXD引腳送出8位數(shù)據(jù),74LS164從RXD引腳接收8位數(shù)據(jù);
1.2數(shù)據(jù)接收
接收數(shù)據(jù),需要在外部接并/串轉(zhuǎn)換移位寄存器74LS165,RXD斷用來接收輸入的串行數(shù)據(jù),TXD端用來輸出移位寄存器,P3.7端用來對(duì)74LS165的數(shù)據(jù)進(jìn)行所存。
2.方式1
方式1是八位異步收發(fā)。可以發(fā)送或接收10位數(shù)據(jù)格式信息。1位起始位,8位數(shù)據(jù)位,1停止位。
2.1數(shù)據(jù)發(fā)送:從TXD引腳輸出一個(gè)起始位,然后將8位數(shù)據(jù)依次輸出,然后將TI=1,從TXD輸出停止位。
2.2數(shù)據(jù)接收:REN=1,串行口采樣由1到0的負(fù)跳變,啟動(dòng)接收位,八位數(shù)據(jù)依次被接收。
3.方式2
9位異步通信方式,每幀數(shù)據(jù)是11位。1起始位,1停止位,8數(shù)據(jù)位,1可編程的第九位。其中TB8可以作為奇偶校驗(yàn)位使用。
3.1發(fā)送數(shù)據(jù):首先設(shè)置TB8,然后將要發(fā)送的數(shù)據(jù)寫入sbuf,開始發(fā)送數(shù)據(jù)。串行口自動(dòng)取走TB8的數(shù)據(jù),逐一發(fā)送數(shù)據(jù)。發(fā)送完成后,將TI=1.
3.2數(shù)據(jù)接收:REN=1,才可以接收數(shù)據(jù)。當(dāng)RXD發(fā)生負(fù)跳變,開始接收數(shù)據(jù)。
3.方式3
與方式2工作原理相同,僅僅波特率不同。

單片機(jī)串行通訊發(fā)送數(shù)據(jù),控制流水燈的實(shí)現(xiàn)
發(fā)送端程序
  1. #include<reg52.h>
  2. unsigned char code Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  3. void Send(unsigned char dat)
  4. {
  5.    SBUF=dat;
  6.    while(TI==0)        //若發(fā)送中斷標(biāo)志位沒有置"1",就等待
  7.    {
  8.       ;
  9.    }
  10.    TI=0;
  11. }
  12. void delay(void)
  13. {
  14.    unsigned char m,n;
  15.    for(m=0;m<200;m++)
  16.         for(n=0;n<250;n++)
  17.             ;
  18. }
  19. void main()
  20. {
  21.    unsigned char i;
  22.    TMOD=0x20;           //定時(shí)器工作在方式2
  23.    SCON=0x40;           //串口工作方式1
  24.    PCON=0x00;           //設(shè)置波特率為9600b/s
  25.    TH1=0xfd;
  26.    TL1=0xfd;
  27.    TR1=1;
  28.    while(1)
  29.    {
  30.       for(i=0;i<8;i++)
  31.          {
  32.              Send(Tab[i]);
  33.                 delay();
  34.          }                  
  35.    }
  36. }








  37. 接收端
  38. #include<reg52.h>
  39. unsigned char code Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  40. void Send(unsigned char dat)
  41. {
  42.    SBUF=dat;
  43.    while(TI==0)        //若發(fā)送中斷標(biāo)志位沒有置"1",就等待
  44.    {
  45.       ;
  46.    }
  47.    TI=0;
  48. }
  49. void delay(void)
  50. {
  51.    unsigned char m,n;
  52.    for(m=0;m<200;m++)
  53.         for(n=0;n<250;n++)
  54.             ;
  55. }
  56. void main()
  57. {
  58.    unsigned char i;
  59.    TMOD=0x20;           //定時(shí)器工作在方式2
  60.    SCON=0x40;           //串口工作方式1
  61.    PCON=0x00;           //設(shè)置波特率為9600b/s
  62.    TH1=0xfd;
  63.    TL1=0xfd;
  64.    TR1=1;
  65.    while(1)
  66.    {
  67.       for(i=0;i<8;i++)
  68.          {
  69.              Send(Tab[i]);
  70.                 delay();
  71.          }                  
  72.    }
  73. }
復(fù)制代碼
1.png

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表