目錄
通信的基本概念和種類
? ?1.1串行通信與并行通信
?編輯
1.2同步通信與異步通信
1.3單工,半雙工,全雙工??
1.4通信速率?
二、波特率和比特率的關系
串口通信簡介:
1.接口標準
RS-232
2、D型9針接口定義
3.通信協(xié)議:
2.串口內(nèi)部結構?
51單片機串口相關寄存器?
?1.80c51串行口的控制寄存器
2.串口的使用方法?
串口實驗?
1.單片機向電腦發(fā)送數(shù)據(jù)。
?2.電腦通過串口控制LED(且把數(shù)據(jù)傳回電腦串口顯示)
通信的基本概念和種類
? ?1.1串行通信與并行通信
什么是數(shù)據(jù)通信:數(shù)據(jù)通信就是指單片機與單片機之間或者單片機和其他設備之間的信息交換
而數(shù)據(jù)通信又分為串行通信和并行通信
1.串行通信:
-
串行通信:一位一位的按順序的進行發(fā)送或接收的通信方式。優(yōu)點是需要的傳輸線少,成本低。缺點是傳輸?shù)乃俾事m合遠距離的數(shù)據(jù)通信。
-
并行通信:數(shù)據(jù)的各位同時進行發(fā)送或接收的通信方式。優(yōu)點是速率高。缺點是需要的傳輸線多,成本高,只適合近距離的數(shù)據(jù)通信。
1.2同步通信與異步通信
同步通信與異步通信:簡單來說就是發(fā)送方和接收方按照同一個時鐘節(jié)拍工作就叫同步,發(fā)送方和接收方?jīng)]有統(tǒng)一的時鐘節(jié)拍,而各自按照自己的節(jié)拍工作就叫異步。
比如? 烽火臺? ? ? 和? ? ? ? ? ? 狼煙
(同步)
烽火臺按照規(guī)定的時間發(fā),比如7:00發(fā)一次,7:30發(fā)一次。
看狼煙的人也按規(guī)定的時間去接收,7:00看一次有沒有狼煙,7:30看一次有沒有狼煙。
7;05分敵人進攻了,烽火臺也不會發(fā)生狼煙??蠢菬煹娜艘膊粫邮盏?。
(異步)
烽火臺按照規(guī)定的時間發(fā),比如7:00發(fā)一次,7:05發(fā)一次。5分鐘一次發(fā)
比如7:04分敵人進攻了,烽火臺要到7:05發(fā)烽火,不會7:04發(fā)烽火
看狼煙的人2分鐘看一下有沒有狼煙。7:04看了沒有狼煙,7:06才會去看
所以看狼煙的人7:06分才接受到有敵人進攻的消息。
同步通信中,通信雙方按照同一節(jié)拍工作,配合很好:一般需要發(fā)送方給接收方發(fā)送信息同時發(fā)送時鐘信息。接收方根據(jù)發(fā)送方給自己的時鐘信號來安排自己的節(jié)奏。下圖所示,時鐘就是節(jié)拍。規(guī)定好的時間,計算機乙接收了節(jié)拍,就知道多少分鐘拿一次數(shù)據(jù)。
同步通信用在雙方信息交換頻率固定,或者經(jīng)常通信時。
優(yōu)點:配合十分好? ? ? ?劣勢:多了一個通訊線,專門發(fā)時鐘的。
異步通信: 又叫異步通知,在雙方通信頻率不固定時適合,(有時3ms收發(fā)一次,有時3天才發(fā)一次),這樣就不適合使用同步通信而適合異步通信。
因為另外一個CPU要眼盯著你發(fā)送,有時長時間一個都不發(fā),有時發(fā)一堆,沒有規(guī)律,這樣就浪費了接收方自己的很多時間。比如,看狼煙的人不可能一直盯著天空看,有沒有狼煙,這樣浪費了他很多時間。他自己也是有活干的。
再舉個例子,兩個人聊天,一個人說,你陪我說句話吧,那個人說,好,結果,你看到QQ有消息,回QQ消息回了3小時,那個人眼盯著你回消息回三個小時,一直等你說那句話,這樣他肯定會很生氣。自己3小時啥都沒干,所以這就是異步通信的好處。如果是異步通信,你就會說,兄弟,我現(xiàn)在有點忙,你先忙你的,等我忙忘了,再來找你。
異步通信時接收方不必一直在意接收方,發(fā)送方需要發(fā)送信息時會首先給接收方一個信息開始的起始信號,接收方接收到起始信號后。就認為后面緊跟著的是有效信息。才會開始注意接收信息,直到收到發(fā)送方發(fā)來的結束標志。
舉例子,還是你跟一個人說一句話,這是你來電話了,你跟那個人說,你先忙你的,等你打完電話,這是你拍了拍他(發(fā)生起始信號),那個人就會轉(zhuǎn)頭,讓你把那句話說完,你說,OK,沒事了(發(fā)送結束標志),那個人就繼續(xù)干自己的事。
?異步通信特點:??不要求收發(fā)雙方時鐘的嚴格一致,實現(xiàn)容易,設備開銷較小,但每個字符要附加2~3位用于起止位,各幀之間還有間隔,因此傳輸效率不高。
1.3單工,半雙工,全雙工??
單工:只能單個方向傳輸。(相當于廣播)單工是指數(shù)據(jù)傳輸僅能沿一個方向,不能實現(xiàn)反向傳輸。
?半雙工(分時)(相當于對講機)半雙工是指數(shù)據(jù)傳輸可以沿兩個方向,但是需要分時進行。
?全雙工?(可以同時)(相當于電話)?全雙工是指數(shù)據(jù)可以同時進行雙向傳輸。
所以每一個通信方式在這三種都要進行選擇,當然每一個芯片都有自己的設定方式。
1.4通信速率?
?也叫比特率:衡量通信速度的快慢。
? 比特率是每秒鐘傳輸二進制代碼的位數(shù),單位是:位 / 秒(bps)。比如每秒鐘傳送240個字符,而每個字符格式包括10位(1個起始位,1個停止位,8個數(shù)據(jù)位),這時的比特率為:
10位 x 240個/秒 = 2400 bps
波特率:可以看成比特率。是每秒鐘傳輸多少個碼元,
?碼元:在通信系統(tǒng)中,攜帶數(shù)據(jù)信息的信號單元稱為碼元,也稱為符號(symbol)
比如0V,同二進制0,5V同二進制1,所以一個碼元等于二進制的比特位,可以存儲0或1.
此時波特率等于比特率
0V,2V,4V,6V,分別用二進制00 01 10 11 表示的話,8個比特,4個碼元,所以波特率等于比特率一半。
?舉例說明:日常生活中乘坐公共交通工具出行,每個人就是一個比特,公共交通工具就是碼元,單位時間的發(fā)車數(shù)量就是波特率,單位時間運輸?shù)娜藬?shù)就是比特率?。
在串口通信中,每秒發(fā)送的比特(0或1)是波特率,每秒鐘發(fā)送的bit數(shù)為比特率。 所以,通常情況下,波特率等于比特率
二、波特率和比特率的關系
由此可以得出,假設碼元狀態(tài)為N,則此碼元所需要的比特位數(shù)如下:
頻譜帶寬:頻譜帶寬其實是通信信號的最高頻率和最低頻率的差值。信號的波特率越高,在通信信道中傳輸此信號時,占用的通信信道頻譜寬度就越大。比如在運輸系統(tǒng)中,車型越大,行車占用的道路寬度就越大。
受硬件芯片處理速度的限制,為提升比特率,可通過提升波特率以及單個碼元比特位數(shù),進而提升比特率。此外,通信系統(tǒng)還要求設備芯片波特率≥信號波特率 ,通常芯片波特率有45GB、 69GB、 96GB、 128GB。如果所設計的信號波特率大于設備芯片波特率,則說明此信號是無法實現(xiàn)的,因為沒芯片可以支持此信號的產(chǎn)生。
同時根據(jù)香農(nóng)定理和經(jīng)驗,信號所需的頻譜寬度數(shù)值應大于信號波特率的1.2倍,才能保證信號可以被高質(zhì)量傳輸。在不考慮其它影響傳輸?shù)囊蛩?,我們可以根?jù)香農(nóng)定理和經(jīng)驗,粗略算出波特率與所需頻譜帶寬的關系。
在主機和從機傳輸信號的過程中,主機和從機需要設置相同的波特率,否則會出現(xiàn)數(shù)據(jù)傳輸亂碼現(xiàn)象或者數(shù)據(jù)傳輸失敗現(xiàn)象。
串口通信簡介:
1.接口標準
什么是串口:串口,全稱為串行接口(Serial Port),是一種計算機通信接口,主要用于連接計算機和其他外部設備,如鍵盤、鼠標、打印機等。串口通過串行通信的方式工作,這意味著數(shù)據(jù)是以位(bit)為單位依次發(fā)送的。這種通信方式的一個顯著特點是可以使用簡單的雙絞線實現(xiàn)雙向通信,這在成本降低方面非常有用,尤其適合于長距離通信。盡管串口的速度相對較慢,但它提供了可靠的數(shù)據(jù)傳輸和低成本的解決方案,因此在許多應用中仍然被廣泛使用。
串口是一種接線標準,他的接口一定要一致,如下圖:
串口通信遵循特定的通信協(xié)議,這些協(xié)議定義了數(shù)據(jù)位的位數(shù)、波特率、校驗位和停止位等參數(shù)。不同的串口技術,如通用異步收發(fā)器(UART)、TTL電平轉(zhuǎn)換和RS-232/RS-485,雖然它們的電氣特性可能有所不同,但它們都遵循相似的通信時序協(xié)議,因此都可以統(tǒng)稱為串口。
總結來說,串口是一種使用串行通信技術的物理接口,提供了一種低成本且易于使用的數(shù)據(jù)傳輸方法,廣泛應用于各種外設產(chǎn)品和數(shù)據(jù)采集系統(tǒng)中。
我們舉個例子:
RS-232
RS-232接口符合美國電子工業(yè)聯(lián)盟(EIA)制定的串行數(shù)據(jù)通信的接口標準,全雙工,其中 RS 為英文 “Recomend Standard” 的縮寫,中文翻譯為“推薦標準”,232為標識號。原始編號全稱是EIA-RS-232(簡稱232,RS232)。它被廣泛用于計算機串行接口外設連接,連接電纜和機械、電氣特性、信號功能及傳送過程,其輸出的電平稱為 RS232 電平。
1、RS-232電平邏輯
RS-232不同于TTL的電平邏輯,為負邏輯,最簡單的RS232通信由三條數(shù)據(jù)線組成,即 TxD、RxD 和GND。負12V代表高電平,即-15V ~ -3V為邏輯1,正12V代表低電平,即+3V ~ +15V為邏輯0,電壓也有標準范圍。這里的電平,是TXD線(或者RXD線)相對于 GND 的電壓。
2、D型9針接口定義
記住一點,這種接口的協(xié)議只有兩種:RS-232和RS-485。不會是TTL電平的(除非特殊應用)。
一般用的最多的是RXD、TXD、GND,三個信號。9針如上圖右所示。
引腳功能圖如下:
通常我們在串口通信只會用2 3 7腳D25模式下?
3.通信協(xié)議:
串行通信是一種概念,是指一個bit一個bit的收發(fā)數(shù)據(jù),相對于并行通信可一次性可以同時收發(fā)n個bit而言。包括普通的串口通信,包括IIC,包括SPI等等。串口通信是一種通信手段/方式,是相對于以太網(wǎng)方式、紅外方式、藍牙方式、usb方式(usb廣義也算串行通信)等而言,是一種比較低級的通信手段。
了解各種通信還需要多去實驗,后面我會主要介紹幾種常用的通信協(xié)議。
2.串口內(nèi)部結構?
51單片機串口相關寄存器?
?1.80c51串行口的控制寄存器
? ? △ SM2,多機通信控制位,主要用于方式2和方式3。當接收機的SM2=1時可以利用收到的RB8來控制是否激活RI(RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的數(shù)據(jù)進入SBUF,并激活RI,進而在中斷服務中將數(shù)據(jù)從SBUF讀走)。當SM2=0時,不論收到的RB8為0和1,均可以使收到的數(shù)據(jù)進入SBUF,并激活RI(即此時RB8不具有控制RI激活的功能)。通過控制SM2,可以實現(xiàn)多機通信。 在方式0時,SM2必須是0。在方式1時,如果SM2=1,則只有接收到有效停止位時,RI才置1。
?△?REN,允許串行接收位。由軟件置REN=1,則啟動串行口接收數(shù)據(jù);若軟件置REN=0,則禁止接收
? ? △?TB8,在方式2或方式3中,是發(fā)送數(shù)據(jù)的第九位,可以用軟件規(guī)定其作用。可以用作數(shù)據(jù)的奇偶校驗位,或在多機通信中,作為地址幀/數(shù)據(jù)幀的標志位。在方式0和方式1中,該位未用。
?△?RB8, 在方式2或者方式3中,是接收到數(shù)據(jù)的第九位,作為奇偶校驗位或地址幀/數(shù)據(jù)幀的標志位。在方式1時,若SM2=0,則RB8是接收到的停止位。
? △?TI,發(fā)送中斷標志位。在方式0時,當串行發(fā)送第8位數(shù)據(jù)結束時,或在其它方式,串行發(fā)送停止位的開始時,由內(nèi)部硬件使TI置1,向CPU發(fā)中斷申請。在中斷服務程序中,必須用軟件將其清0,取消此中斷申請。
? △?RI,接收中斷標志位。在方式0時,當串行接收第8位數(shù)據(jù)結束時,或在其它方式,串行接收停止位的中間時,由內(nèi)部硬件使RI置1,向CPU發(fā)中斷申請。也必須在中斷服務程序中,用軟件將其清0,取消此中斷申請。
2.串口的使用方法?
?
根據(jù)自己需要按步驟來設置。?
串口實驗?
發(fā)送和接收都“可以”觸發(fā)中斷,只是在發(fā)送的時候中斷允許沒有打開,所以“不會”發(fā)生中斷。至于為什么發(fā)送的時候為什么不打開中斷允許,看個人需要。(個人理解,錯了指正)
為什么串口發(fā)電腦不要中斷,串口接收電腦要中斷
因為發(fā)送之后不需要單片機做什么,接受的時候需要單片機來記錄下數(shù)據(jù)
4.只要RI>=1或者TI>=1就會觸發(fā)串口中斷。前提是程序打開了總中斷和串口中斷。
此時發(fā)送和接受都觸發(fā)了中斷,而且我們打開了中斷,所以我們要區(qū)分(串口發(fā)電腦我們沒有打開總的中斷)
1.首先和內(nèi)部結構有關,要結合串口通信內(nèi)部結構來理解。
2.有數(shù)據(jù)發(fā)送過來,RI和TI會由硬件自動置1.
1.單片機向電腦發(fā)送數(shù)據(jù)。
寫在while循環(huán)外面就要按復位鍵,不然一直停止while循環(huán)里面
下面是代碼:完成單片機每次向電腦發(fā)送遞增的數(shù)據(jù)(16進制)
這里沒有用中斷,定時器一只是可以計數(shù),這樣有溢出來產(chǎn)生波特率
#include <REGX52.H>
#include "Delay.h"
unsigned char Sec;
void UART_Init(void) //4800bps@11.0592MHz
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x40; //8位數(shù)據(jù),可變波特率 REN接收使能沒打開
TMOD &= 0x0F; //設置定時器模式
TMOD |= 0x20; //設置定時器模式
TL1 = 0xF4; //設置定時初始值
TH1 = 0xF4; //設置定時重載值
ET1 = 0; //禁止定時器%d中斷
TR1 = 1; //定時器1開始計時
}
void UART_sendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
void main()
{
UART_Init();
//UART_sendByte(0x11);
while (1)
{
UART_sendByte(Sec);
Sec++;
Delay(1000);
}
}
?2.電腦通過串口控制LED(且把數(shù)據(jù)傳回電腦串口顯示)
用的是串口中斷。無法知道電腦什么時候發(fā)送,如果電腦發(fā)送數(shù)據(jù)了,觸發(fā)串口中斷,在中斷中處理數(shù)據(jù)
main.c
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
void main()
{
UART_Init();
while (1)
{
}
}
void UART_Routine() interrupt 4
{
if(RI==1)
{
P2=~SBUF;
UART_sendByte(SBUF);
RI=0;
}
}
UART.c
#include <REGX52.H>
/**
* @brief 串口初始化 4800bps@11.0592MHz
* @param 無
* @retval 無
*/
void UART_Init(void)
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位數(shù)據(jù),可變波特率
TMOD &= 0x0F; //設置定時器模式
TMOD |= 0x20; //設置定時器模式
TL1 = 0xF4; //設置定時初始值
TH1 = 0xF4; //設置定時重載值
ET1 = 0; //禁止定時器%d中斷
TR1 = 1; //定時器1開始計時
EA=1; //使用打開中斷
ES=1; //表示使用串口中斷
}
/**
* @brief 串口發(fā)送一個字節(jié)數(shù)據(jù)
* @param Byte 要發(fā)送一個字節(jié)數(shù)據(jù)
* @retval
*/
void UART_sendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
?UART.h
#ifndef __UART_H__
#define __UART_H__
void UART_Init(void);
void UART_sendByte(unsigned char Byte);
#endif
波特率計算方式,hex模式和文本模式區(qū)別聽P20 47分鐘后面?。文章來源:http://www.zghlxwxcb.cn/news/detail-825160.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-825160.html
到了這里,關于51單片機編程應用(C語言):串口通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!