51单片机串口通信原理
計算機串行通信基礎
????????通信有串行通信和并行通信兩種方式
????????串行通信:
????????將數據字節分為一位一位的形式在一條數據線上逐個傳送。如下圖所示
? ? ? ? 串行通信特點:傳輸線少,長距離傳送時成本低,且可以利用電話網等現成設備,但數據的傳送控制比并行通信復雜。
? ? ? ? 并行通信:
???????? 通常是將數據字節的各位用多條數據線同時進行傳送。如下圖所示
? ? ? ? ?并行通行特點:控制簡單,傳輸速度快;但是由于傳輸線較多,長距離傳輸時成本高,且接收方各位同時接收存在困難。
串行通信的基本概念
? ? ? ? 異步通信與同步通信:
? ? ? ? ? ? ? ? 1、異步通信:
????????????????????????異步通信是指通信的發送與接收設備使用各自的時鐘控制數據的發送和接收過程。為使雙方的收發協調,要求發送和接收設備的時鐘盡可能一致。
? ? ? ? ? ? ? ? ? ? ? ? 異步通信數據格式:
? ? ? ? ? ? ? ? ? ? ? ? ?異步通信特點:
????????????????????????????????不要求收發雙方時鐘的嚴格一致,實現容易,設備開銷較小,但每個字符要附加2~3位用于起止位,各幀之間還有間隔,因此傳輸效率不高。
? ? ? ? ? ? ? ? 2、同步通信:
???????????????????????同步通信時要建立發送方時鐘對接收方時鐘的直接控制,使雙方達到完全同步。此時,傳輸數據的位之間的距離均為“位間隔”的整數倍,同時傳送的字符間不留間隙,即保持位同步關系,也保持字符同步關系。發送方對接收方的同步可以通過兩種方法實現。?
????????串行通信的傳輸方向
? ? ? ? ? ? ? ? 單工是指數據傳輸僅能沿一個方向,不能實現反向傳輸。
? ? ? ? ? ? ? ? 半雙工是指數據傳輸可以沿兩個方向,但是需要分時進行。
? ? ? ? ? ? ? ? 全雙工是指數據可以同時進行雙向傳輸。
????????串行通信常見的錯誤校驗?
? ? ? ? ? ? ? ? 1、奇偶校驗 (*)
? ? ? ? ? ? ? ? ? ? ? ? 在發送數據時,數據位尾隨的一位為奇偶校驗位(1或0)。奇校驗時,數據中"1"的個數與校驗位"1"的個數之和應為奇數;偶校驗時,數據中"1"的個數與校驗位"1"的個數之和應為偶數。接收字符時,對"1"的個數進行校驗,若發現不一致,則說明傳輸數據過程中出現了差錯。
? ? ? ? ? ? ? ? 2、代碼和校驗
? ? ? ? ? ? ? ? ? ? ? ? ........
? ? ? ? ? ? ? ? 3、循環冗余校驗
? ? ? ? ? ? ? ? ? ? ? ? ........
? ? ? ? 傳輸速率
? ? ? ? ? ? ? ? 比特率是每秒鐘傳輸二進制代碼的位數,單位是:位 / 秒(bps)。比如每秒鐘傳送240個字符,而每個字符格式包括10位(1個起始位,1個停止位,8個數據位),這時的比特率為:
? ? ? ? ? ? ? ? 10位 x 240個/秒 = 2400 bps
80C51的串行口
? ? ? ? 80c51的串行口結構:
????????????????有兩個物理上獨立的接收、發送緩沖器SBUF,它們占用同一地址99H ;接收器是雙緩沖結構 ;發送緩沖器,因為發送時CPU是主動的,不會產生重疊錯誤。
? ? ? ? 80c51串行口的控制寄存器
? ? ? ? ? ? ? ? 一、SCON 是一個特殊功能寄存器,用以設定串行口的工作方式、接收/發送控制以及設置狀態標志:????????????????
????????? ? ? ? △?SM0和SM1為工作方式選擇位,可選擇四種工作方式:
? ? ? ? ? ? ? ? △ SM2,多機通信控制位,主要用于方式2和方式3。當接收機的SM2=1時可以利用收到的RB8來控制是否激活RI(RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的數據進入SBUF,并激活RI,進而在中斷服務中將數據從SBUF讀走)。當SM2=0時,不論收到的RB8為0和1,均可以使收到的數據進入SBUF,并激活RI(即此時RB8不具有控制RI激活的功能)。通過控制SM2,可以實現多機通信。?在方式0時,SM2必須是0。在方式1時,如果SM2=1,則只有接收到有效停止位時,RI才置1。
? ? ? ? ? ? ? ? △ REN,允許串行接收位。由軟件置REN=1,則啟動串行口接收數據;若軟件置REN=0,則禁止接收
? ? ? ? ? ? ? ? △ TB8,在方式2或方式3中,是發送數據的第九位,可以用軟件規定其作用。可以用作數據的奇偶校驗位,或在多機通信中,作為地址幀/數據幀的標志位。在方式0和方式1中,該位未用。
? ? ? ? ? ? ? ? △ RB8, 在方式2或者方式3中,是接收到數據的第九位,作為奇偶校驗位或地址幀/數據幀的標志位。在方式1時,若SM2=0,則RB8是接收到的停止位。
? ? ? ? ? ? ? ? △ TI,發送中斷標志位。在方式0時,當串行發送第8位數據結束時,或在其它方式,串行發送停止位的開始時,由內部硬件使TI置1,向CPU發中斷申請。在中斷服務程序中,必須用軟件將其清0,取消此中斷申請。
? ? ? ? ? ? ? ? △ RI,接收中斷標志位。在方式0時,當串行接收第8位數據結束時,或在其它方式,串行接收停止位的中間時,由內部硬件使RI置1,向CPU發中斷申請。也必須在中斷服務程序中,用軟件將其清0,取消此中斷申請。
? ? ? ? ? ? ? ?二、PCON中只有一位SMOD與串行口工作有關:
????????????????SMOD(PCON.7)? 波特率倍增位。在串行口方式1、方式2、方式3時,波特率與SMOD有關,當SMOD=1時,波特率提高一倍。復位時,SMOD=0。?
????????80c51串行口的工作方式?
? ? ? ? 一、方式0
????????方式0時,串行口為同步移位寄存器的輸入輸出方式。主要用于擴展并行輸入或輸出口。數據由RXD(P3.0)引腳輸入或輸出,同步移位脈沖由TXD(P3.1)引腳輸出。發送和接收均為8位數據,低位在先,高位在后。波特率固定為fosc/12。
? ? ? ? 1、方式0輸出
? ? ? ? 2、方式0輸入
?
? ? ? ? 二、方式1
????????方式1是10位數據的異步通信口。TXD為數據發送引腳,RXD為數據接收引腳,傳送一幀數據的格式如圖所示。其中1位起始位,8位數據位,1位停止位。?
????????1、方式1輸出:
? ? ? ? 2、方式1輸入
????????用軟件置REN為1時,接收器以所選擇波特率的16倍速率采樣RXD引腳電平,檢測到RXD引腳輸入電平發生負跳變時,則說明起始位有效,將其移入輸入移位寄存器,并開始接收這一幀信息的其余位。接收過程中,數據從輸入移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時,控制電路進行最后一次移位。當RI=0,且SM2=0(或接收到的停止位為1)時,將接收到的9位數據的前8位數據裝入接收SBUF,第9位(停止位)進入RB8,并置RI=1,向CPU請求中斷。?
????????三、方式2和方式3
????????方式2或方式3時為11位數據的異步通信口。TXD為數據發送引腳,RXD為數據接收引腳。
?????????方式2和方式3時起始位1位,數據9位(含1位附加的第9位,發送時為SCON中的TB8,接收時為RB8),停止位1位,一幀數據為11位。方式2的波特率固定為晶振頻率的1/64或1/32,方式3的波特率由定時器T1的溢出率決定。
????????1、方式2和方式3輸出
????????發送開始時,先把起始位0輸出到TXD引腳,然后發送移位寄存器的輸出位(D0) 到TXD引腳。每一個移位脈沖都使輸出移位寄存器的各位右移一位,并由TXD引腳輸出。第一次移位時,停止位“1”移入輸出移位寄存器的第九位上,以后每次移位,左邊都移入0.當停止位移至輸出位時,左邊其余位全為0,檢測電路檢測到這一條件時,使控制電路進行最后一次移位,并置T1=1,向CPU請求中斷。
????????2、方式2和方式3輸入? ?
????????接收時,數據從右邊移入輸入移位寄存器,在起始位0移到最左邊時,控制電路進行最后一次移位。當RI=0,且SM2=0(或接收到的第9位數據為1)時,接收到的數據裝入接收緩沖器SBUF和RB8(接收數據的第9位),置RI=1,向CPU請求中斷。如果條件不滿足,則數據丟失,且不置位RI,繼續搜索RXD引腳的負跳變。??
? ? ? 波特率計算?
在串行通信中,收發雙方對發送或接收數據的速率要有約定。
通過軟件可對單片機串行口編程為四種工作方式,其中方式0和
方式2的波特率是固定的,而方式1和方式3的波特率是可變的,
由定時器T1的溢出率來決定。
串行口的四種工作方式對應三種波特率。由于輸入的移位時鐘
的來源不同,所以,各種方式的波特率計算公式也不相同。
方式0的波特率 =? fosc/12
方式2的波特率 =(2SMOD/64)· fosc
方式1的波特率 =(2SMOD/32)·(T1溢出率)
方式3的波特率 =(2SMOD/32)·(T1溢出率)
????????當T1作為波特率發生器時,最典型的用法是使T1工作在自動再裝入的8位定時器方式(即方式2,且TCON的TR1=1,以啟動定時器)。這時溢出率取決于TH1中的計數值。
????????T1 溢出率 = fosc /{12×[256 -(TH1)]}
????????在單片機的應用中,常用的晶振頻率為:12MHz和11.0592MHz。所以,選用的波特率也相對固定。常用的串行口波特率以及各參數的關系如表所示。
???????串口如何使用?
串行口工作之前,應對其進行初始化,主要是設置產
生波特率的定時器1、串行口控制和中斷控制。具體
步驟如下:
1、確定T1的工作方式(編程TMOD寄存器);
2、計算T1的初值,裝載TH1、TL1;
3、啟動T1(編程TCON中的TR1位);
4、確定串行口控制(編程SCON寄存器);
串行口在中斷方式工作時,要進行中斷設置(編程IE、
IP寄存器)。
????????單片機與單片機的通信?
????????一、點對點通信
? ? ? ?1、硬件連接
? ? 二、多機通信
? ? 1、硬件連接
????????單片機構成的多機系統常采用總線型主從式結構。所謂主從式,即在數個單片機中,有一個是主機,其余的是從機,從機要服從主機的調度、支配。80C51單片機的串行口方式2和方式3適于這種主從式的通信結構。當然采用不同的通信標準時,還需進行相應的電平轉換,有時還要對信號進行光電隔離。在實際的多機應用系統中,常采用RS-485串行標準總線進行數據傳輸。
????????中斷源
示例:
/***************************串口通信***************************定時器工作方式為2*晶振頻率:12MHz*波特率:9600*實現功能:串口發送一個字節,單片機將其再發送出去*SM0D:1*************************************************************/ #include "reg52.h"typedef unsigned char u8; typedef unsigned int u32; /***Funtion:串口初始化*IN : void*OUT : void**/ void UartInit(void) {SCON = 0x50; //設定串行口的工作方式為01(10位異步收發器(8位數據))PCON = 0x80; //SMOD=1TMOD = 0x20; //設定采用定時器T1,并且定時器工作方式2TH1 = 0xF9; //注意這里波特率為9600TL1 = 0xF9;TR1 = 1; //打開定時器1ES = 1; //打開接收中斷EA = 1;//打開總中斷 } /***Funtion:串口中斷處理函數(格式固定 interrupt 4(4為中斷號))*IN : void*OUT : void**/ void UartRcve() interrupt 4 {u8 recvdata;recvdata = SBUF;//接收到的值緩存在recvdata中RI = 0;//清除接收中斷標志位SBUF = recvdata; //將接收到的數據放入到發送寄存器while(!TI);TI = 0;//清除發送完成標志位 }int main( void ) {UartInit();while(1){} }需要用到定時器的知識,請參考:https://blog.csdn.net/weixin_42216720/article/details/120600278
總結
以上是生活随笔為你收集整理的51单片机串口通信原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复杂命令行参数gcc的-Wl的含义,注意
- 下一篇: K210识别数字(0~9)并与单片机通信