51单片机-串口通信
目錄
1.什么是通信
1.1.通信的概念
1.2.傳送方式
1.3.同步方式
1.4.傳送方向
1.5.校驗方式
2.單片機串口介紹
2.1.硬件電路
2.2.電平標準
2.3.常見接口
2.4.內部結構
2.5.相關寄存器
2.6.工作模式(模式1)
2.7.如何配置串口中斷
3.實際應用
3.1.單片機向電腦發(fā)送數據
3.2.電腦向單片機發(fā)送數據
1.什么是通信
1.1.通信的概念
????????簡單來說,通信就是傳遞信息;我把信息發(fā)給你,你把信息發(fā)給我,這就是通信;但是我如何把信息準確傳遞給你,方式有很多。
????????在硬件領域,通信的方式也有很多種,從簡單的串口通信,到I2C,SPI,CAN,MIPI等,不同的通信總線,對應的協(xié)議也不同;但通信的本質有相同之處;
- 按照數據傳送方式可分為串行通信和并行通信;
- 按照通信的數據同步方式,可分為異步通信和同步通信;
- 按照數據的傳輸方向又可分為單工、半雙工和全雙工通信
1.2.傳送方式
????????計算機與外界的信息交換稱為通信,通信傳送的基本方式可分為并行通信和串行通信兩種;
并行通信:將數據字節(jié)的各位用多條數據線同時進行傳送,如系統(tǒng)總線;
- 優(yōu)點:控制簡單,傳輸速度快;
- 缺點:由于傳輸線較多,長距離傳送時成本高;抗干擾能力差,固接受方的各位同時接收存在困難;
串行通信:將數據字節(jié)分成一位一位的形式,在一條傳輸線上逐位傳送
- 優(yōu)點:傳輸線少,長距離傳送時,成本低;抗干擾能力強,適合長距離傳送;
- 缺點:控制復雜,傳輸速度慢;
1.3.同步方式
同步通信:同步通信是一種連續(xù)傳送數據的通信方式,一次通信傳送多個字符數據,稱為一幀信息。
- 特點:數據傳輸速率較高;其缺點是通信雙方必須建立準確的位定時信號,也就是發(fā)送時鐘和接收時鐘保持嚴格同步;
- 同步字符:傳送數據前,傳送同步字符進行聯(lián)絡;
- 信息幀:包含同步字符,數據場,校驗字符;
- 數據場:多個數據字節(jié)之間沒有間隙,連續(xù)發(fā)送;
異步通信:在異步通信中,數據通常是以字符或字節(jié)為單位組成數據幀進行傳送的。收、發(fā)端各有一套彼此獨立,互不同步的通信機構,由于收發(fā)數據的幀格式相同,因此可以相互識別接收到的數據信息
- 特點:不要求收發(fā)雙方時鐘的嚴格一致,實現容易,設備開銷較小,但每個字符要附加2~3位用于起止位,各幀之間還有間隔,因此傳輸效率不高。
- 起始位:起始位必須是持續(xù)一個比特時間的邏輯0電平,標志傳輸一個字符的開始,接收方可用起始位使自己的接收時鐘與發(fā)送方的數據同步;
- 數據位:數據位緊跟在起始位之后,是通信中的真正有效信息;數據位的位數可以由通信雙方共同約定;傳輸數據時先傳送字符的低位,后傳送字符的高位;
- 校驗位:奇偶校驗位僅占一位,用于進行奇校驗或偶校驗,奇偶檢驗位不是必須有的。如果是奇校驗,需要保證傳輸的數據總共有奇數個邏輯高位;如果是偶校驗,需要保證傳輸的數據總共有偶數個邏輯高位。
- 停止位:停止位可以是是1位、1.5位或2位,可以由軟件設定;它一定是邏輯1電平,標志著傳輸一個字符的結束;
- 空閑位:空閑位是指從一個字符的停止位結束到下一個字符的起始位開始,表示線路處于空閑狀態(tài),必須由高電平來填充;
1.4.傳送方向
????????串行通信的傳送方式有三種,分別是單工、半雙工和全雙工。
單工:?數據傳輸只支持數據在一個方向上傳輸;
半雙工:?允許數據在兩個方向上傳輸,但某一時刻只允許數據在一個方向上傳輸,實際上是一種切換方向的單工通信,不需要獨立的接收端和發(fā)送端,兩者可合并為一個端口;
全雙工:?允許數據同時在兩個方向上傳輸,因此全雙工通信是兩個單工方式的結合,需要獨立的接收端和發(fā)送端。
1.5.校驗方式
- 奇偶校驗:在發(fā)送數據時,數據位尾隨的1位為奇偶校驗位(1或0)。奇校驗時,數據中“1”的個數與校驗位“1”的個數之和應為奇數;偶校驗時,數據中“1”的個數與校驗位“1”的個數之和應為偶數。接收字符時,對“1”的個數進行校驗,若發(fā)現不一致,則說明傳輸數據過程中出現了差錯。
- 代碼和校驗:代碼和校驗是發(fā)送方將所發(fā)數據塊求和(或各字節(jié)異或),產生一個字節(jié)的校驗字符(校驗和)附加到數據塊末尾。接收方接收數據同時對數據塊(除校驗字節(jié)外)求和(或各字節(jié)異或),將所得的結果與發(fā)送方的“校驗和”進行比較,相符則無差錯,否則即認為傳送過程中出現了差錯。
- 循環(huán)冗余校驗:這種校驗是通過某種數學運算實現有效信息與校驗位之間的循環(huán)校驗,常用于對磁盤信息的傳輸、存儲區(qū)的完整性校驗等。這種校驗方法糾錯能力強,廣泛應用于同步通信中。
2.單片機串口介紹
????????串口通信(Serial Communication),是指外設和計算機間通過數據信號線地線等按位進行傳輸數據的一種通信方式,屬于串行通信方式。串口是一種接口標準,它規(guī)定了接口的電氣標準,沒有規(guī)定接口插件電纜以及使用的協(xié)議。
????????51單片機內部自帶UART(Universal Asynchronous Receiver Transmitter,通用異步收發(fā)器),可實現單片機的串口通信。
2.1.硬件電路
????????簡單雙向串口通信有兩根通信線(發(fā)送端TXD和接收端RXD),交叉連接,并且共GND,如圖:
2.2.電平標準
????????電平標準是數據1和數據0的表達方式,是傳輸線纜中人為規(guī)定的電壓與數據的對應關系,串口常用的電平標準有如下三種:
- TTL電平:+5V表示1,0V表示0
- RS232電平:-3~-15V表示1,+3~+15V表示0
- RS485電平:兩線壓差+2~+6V表示1,-2~-6V表示0(差分信號)
2.3.常見接口
?此外,還有CAN、USB等;
2.4.內部結構
????????有兩個物理上獨立的接收、發(fā)送緩沖器SBUF,它們占用同一地址99H ;接收器是雙緩沖結構 ;發(fā)送緩沖器,因為發(fā)送時CPU是主動的,不會產生重疊錯誤
2.5.相關寄存器
?1.串口控制寄存器SCON
- SM0/SM1:工作方式選擇位;
- SM2:多機通訊控制位;方式2/3中使用,控制接收數據;SM2=1,只有當RB8=1才能激活R1,接收數據;
- REN:允許串行接收位;REN=1,啟動串行口接收數據;REN=0,禁止接收;
- TB8:在方式2或方式3中,是發(fā)送數據的第9位,可以用軟件規(guī)定其作用;可以用作數據基偶校驗位,或在多機通信中,作為地址幀/數據幀的標志位;
- RB8:在方式2或方式3中,是發(fā)送數據的第9位,可以用軟件規(guī)定其作用;可以用作數據基偶校驗位;在方式1時,若SM2=0,則RB8是接收到的停止位;
- TI:發(fā)送中斷標志位;在方式0時,當串行發(fā)送第8位數據結束時,或在其他方式,串行發(fā)送停止位的開始時,由內部硬件使TI置1,向CPU發(fā)送中斷申請;在中斷服務程序中,必須用軟件將其清0,取消此中斷申請
- RI:接收專斷標志位;在方式0時,當串行發(fā)送第8位數據結束時,或在其他方式,串行接收停止位的中間時,由內部硬件使RI置1,向CPU發(fā)送中斷申請;在中斷服務程序中,必須用軟件將其清0,取消此中斷申請;
2.電源控制寄存器PCON
只有一位SMOD和串口工作相關,其他位是電源控制相關;那為什么和串口相關的控制位,會放到PCON去呢,原因是串口控制位超過了8位,剛好電源的控制位用不到8位,所以...
- SMOD:波特率倍增位;在串口方式1/2/3時,波特率與SMOD有關,當SMOD=1,波特率加倍;復位時,SMOD=0;
2.6.工作模式(模式1)
模式1:模式1是10位數據的異步通信口,其中1位起始位,8位數據位,1位停止位,TXD和RXD分別為數據的發(fā)送和接收引腳;其傳輸波特率是可變的,對于51單片機,波特率由定時器1的溢出率決定;通常我們在做單片機與單片機串口通信,單片機與計算機串口通信,計算機與計算機串口通信時,基本都選擇模式1,其傳輸一幀的數據格式如下:
????????模式1傳輸一幀的數據共10位,1位起始位(0),8位數據位,最低位在前,最高位在后,1位停止位(1),幀與幀之間可以有空閑,也可以無空閑,模式1數據輸出和輸入時序圖如下:
波特率:模式1的波特率是可變的,波特率=2^SMOD/32*溢出率;
- 當單片機工作在12T模式時,定時器1的溢出率=SYSclk/12/(256-TH1)
- 當單片機工作在6T模式時,定時器1的溢出率=SYSclk/6/(256-TH1)
溢出率:單位時間(秒)內定時器/計數器1回0溢出的次數,即定時器/計數器1的溢出率=定時器/計數器1的溢出次數/秒
2.7.如何配置串口中斷
????????在具體操作串行口之前,需要對單片機的一些與串口有關的特殊功能寄存器進行初始化設置,主要是設置產生波特率的定時器1,串行口控制,和中斷控制,具體步驟如下:
- 配置TMOD寄存器:確定定時器的工作模式(T2);
- 配置TCON寄存器:定時器的控制開關;
- 計數器初值配置:裝載TH1,TL1;
- 配置SCON寄存器:確定串行口工作模式;
- 中斷配置:串行口在中斷方式時,要進行中斷設置(配置IE,I);
3.實際應用
3.1.單片機向電腦發(fā)送數據
功能需求:串口向電腦發(fā)送遞增的16進制數據(單片機每隔一段時間通過串口向電腦發(fā)送數據)
程序設計:首先,將串口有關的特殊功能寄存器進行初始化設置(初始化);其次,定義串口需要發(fā)送的字節(jié)(子函數);最后,通過主函數實現想要的效果
#include <REGX51.H> #include "Delay.h"unsigned char Sec;//全局變量//*串口初始化函數 /******************************************** 因定時器1在工作模式2時,為8位自動重裝方式,我們進中斷后無事可做, 因此,無需打開定時器1的中斷,更無需寫定時器1的中斷服務程序 **********************************************/ void UART_Init() {TMOD&=0x0F;TMOD|=0x20;TR1=1;TH1=0xF3;TL1=0xF3;ET1=0;SCON=0x40;PCON|=0x80; }//*子函數 void UART_SendByte(unsigned char Byte) {SBUF=Byte; //把Byte的值賦給緩存SBUFwhile(TI==0); //確認發(fā)送控制器TI標志位的狀態(tài),只有當TI不等于0時,才會跳出循環(huán)TI=0; //清除發(fā)送完成標志位 }//*主函數 void main() {UART_Init();while(1){UART_SendByte(Sec);Sec++;Delay(1000);//延時1s} }3.2.電腦向單片機發(fā)送數據
功能需求:電腦向單片機發(fā)送數據,同時控制LED燈亮滅
程序設計:首先,將串口有關的特殊功能寄存器進行初始化設置(初始化);其次,定義串口需要發(fā)送的數據(子函數);最后,通過主函數和中斷服務程序,實現想要功能
#include <REGX51.H>//*串口初始化函數 void UART_Init() {TMOD&=0x0F;TMOD|=0x20;TR1=1;TH1=0xF3;TL1=0xF3;ET1=0;SCON=0x50;PCON|=0x80;ES=1;EA=1; }//*子函數 void UART_SendByte(unsigned char Byte) {SBUF=Byte; //把Byte的值賦給緩存SBUFwhile(TI==0); //確認發(fā)送控制器TI標志位的狀態(tài),只有當TI不等于0時,才會跳出循環(huán)TI=0; //清除發(fā)送完成標志位 }//*主函數 void main() {UART_Init();while(1){} }//*中斷函數 void UART_Routine() interrupt 4 {if(RI==1) //接收中斷{P2=~SBUF;//將P2口賦值為~SBUF,控制LED亮滅UART_SendByte(SBUF);//單片機接收電腦發(fā)送的數據RI=0; //清除接收完成標志位} }總結
以上是生活随笔為你收集整理的51单片机-串口通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《重说中国近代史》—张鸣—(4)古老命题
- 下一篇: 汉堡王什么汉堡好吃_KFC、汉堡王、麦当