導航:首頁 > 操作系統 > 串列通訊單片機

串列通訊單片機

發布時間:2022-05-16 12:39:47

單片機串列通訊與並行通訊區別

串列通訊是將一組數據按照位元組,一位一位的進行傳輸,並行通訊是按照通訊口的寬度(8b/16b)一次性傳輸8/16位進行傳輸。
通過上面描述應該能發現,串列通訊與並行通訊相比速度慢一些,但是節省埠。

㈡ 51單片機串列通訊埠默認是

MCS-51單片機內部有一個全雙工的串列通信,即串列接收和發送緩沖器<SBUF,這兩個在物理上獨立的接收發送器,既可以接收數據也可以發送數據。但接收沖器只能讀出不能寫入,而發送沖器則只能寫入不能讀出,它們的地址為99H。這個通信口既可以用於網路通信,亦可實現串列非同步通信,還可以構成同步移位寄存器使用。如果在傳行口的輸入輸出引腳上加上電平轉換器,就可方便地構成標準的RS-232介面。

㈢ MCS-51單片機什麼是全雙工,半雙工,單工串列通信

單工只有一根數據線,信息只能單向傳送。半雙工也只有一根數據線,但信息可以分時雙向傳送。全雙工有兩根數據線,可以同時雙向傳送。

決定程序執行順序的寄存器是(PC),它的最大定址范圍是(64K)。PC的值是(程序運行當前)的地址。P0口當不作系統擴展時,可作(IO)使用。當作系統擴展時,P0口擔任分時復用的匯流排口。在這種情況下,應在外部加(鎖存器)將地址數據鎖存,地址鎖存信號用(ALE)。

根據串列通信數據傳輸的方向,可將串列通信系統傳輸方式分為(單工)方式,(半雙工)方式和(全雙工)方式。

MCS-51單片機

採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計時器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的計算機系統。

(1)51子系列:晶元型號的最末位數字以1作為標志,是基本型產品。

(2)52子系列:晶元型號的最末位數字以2作為標志,是增強型產品。

以上內容參考:網路-MCS-51單片機

㈣ 單片機串口通訊

串列介面是一種可以將接受來自CPU的並行數據字元轉換為連續的串列數據流發送出去,同時可將接受的串列數據流轉換為並行的數據字元供給CPU的器件。一般完成這種功能的電路,稱為串列介面電路主要介紹單片機上串口的工作原理和如何通過程序來對串口進行設置,並根據所給出的實例實現與PC 機通信。

㈤ 計算機和單片機的串列通訊

這方面資料很多,
網路一下
,很多
常式
,代碼的。VC++尤其多
人民郵電出版社
出版的《
Visual
C++
串口通信工程開發實例導航
》講的還滿詳細的。
或者你去
網路文庫
去檢索一下「
串口編程
」,有很多相關資料可以下載的。
http://wenku..com/search?word=%B4%AE%BF%DA%B1%
E0
%B3%CC&lm=0&od=0
常式1
打開
VC++6.0
,新建基於對話框的工程
RS485
Comm,在主對話框窗口IDD_RS485COMM_DIALOG上添加兩個按鈕,ID分別為IDC_SEND和IDC_RECEIVE,標題分別為「發送」和「接收」;添加一個靜態
文本框
IDC_DISP,用於顯示串口接收到的內容。
在RS485CommDlg.cpp文件中添加
全局變數

HANDLE
hCom;
//全局變數,串口
句柄
在RS485CommDlg.cpp文件中的
OnInitDialog
()函數添加如下代碼:
//
TODO:
Add
extra
initialization
here
hCom=
CreateFile
("
COM1
",//COM1口
GENERIC_READ|GENERIC_WRITE,
//允許讀和寫
0,
//獨占方式
NULL,
OPEN_EXISTING,
//打開而不是創建
0,
//同步方式
NULL);
if(hCom==(HANDLE)-1)
{
AfxMessageBox
("打開COM失敗!");
return
FALSE;
}
SetupComm
(hCom,100,100);
//輸入緩沖區和輸出緩沖區的大小都是1024
COMMTIMEOUTS
TimeOuts;
//設定讀超時
TimeOuts.ReadIntervalTimeout=MAXDWORD;
TimeOuts.ReadTotalTimeoutMultiplier=0;
TimeOuts.ReadTotalTimeoutConstant=0;
//在讀一次輸入緩沖區的內容後
讀操作
就立即返回,
//而不管是否讀入了要求的字元。
//設定寫超時
TimeOuts.WriteTotalTimeoutMultiplier=100;
TimeOuts.WriteTotalTimeoutConstant=500;
SetCommTimeouts
(hCom,&TimeOuts);
//設置超時
DCB
dcb;
GetCommState
(hCom,&dcb);
dcb.BaudRate=9600;
//
波特率
為9600
dcb.ByteSize=8;
//每個位元組有8位
dcb.Parity=NOPARITY;
//無
奇偶校驗位
dcb.StopBits=TWOSTOPBITS;
//兩個停止位
SetCommState
(hCom,&dcb);
PurgeComm
(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
分別雙擊IDC_SEND按鈕和IDC_RECEIVE按鈕,添加兩個按鈕的響應函數:
void
CRS485CommDlg::OnSend()
{
//
TODO:
Add
your
control
notification
handler
code
here
//
在此需要簡單介紹
百特
公司XMA5000的
通訊協議

//該儀表RS485通訊採用主機廣播方式通訊。
//串列
半雙工
,幀11位,1個起始位(0),8個
數據位
,2個停止位(1)
//如:讀儀表顯示的
瞬時值
,主機發送:DC1
AAA
BB
ETX
//其中:DC1是標准ASCII碼的一個控制符號,碼值為11H(十進制的17)
//在XMA5000的通訊協議中,DC1表示讀瞬時值
//AAA是從機地址碼,也就是XMA5000顯示儀表的通訊地址
//BB為通道號,讀瞬時值時該值為01
//ETX也是標准ASCII碼的一個控制符號,碼值為03H
//在XMA5000的通訊協議中,ETX表示主機結束符
char
lpOutBuffer[7];
memset(lpOutBuffer,''\0'',7);
//前7個位元組先清零
lpOutBuffer[0]=''\x11'';
//發送緩沖區的第1個位元組為DC1
lpOutBuffer[1]=''0'';
//第2個位元組為字元0(30H)
lpOutBuffer[2]=''0'';
//第3個位元組為字元0(30H)
lpOutBuffer[3]=''1'';
//
第4個位元組為字元1(31H)
lpOutBuffer[4]=''0'';
//第5個位元組為字元0(30H)
lpOutBuffer[5]=''1'';
//第6個位元組為字元1(31H)
lpOutBuffer[6]=''\x03'';
//第7個位元組為字元ETX
//從該段代碼可以看出,儀表的通訊地址為001
DWORD
dwBytesWrite=7;
COMSTAT
ComStat;
DWORD
dwErrorFlags;
BOOL
bWriteStat;
ClearCommError(hCom,&dwErrorFlags,&ComStat);
bWriteStat=WriteFile(hCom,lpOutBuffer,dwBytesWrite,&
dwBytesWrite,NULL);
if(!bWriteStat)
{
AfxMessageBox("寫串口失敗!");
}
}
void
CRS485CommDlg::OnReceive()
{
//
TODO:
Add
your
control
notification
handler
code
here
char
str[100];
memset(str,''\0'',100);
DWORD
wCount=100;//讀取的位元組數
BOOL
bReadStat;
bReadStat=ReadFile(hCom,str,wCount,&wCount,NULL);
if(!bReadStat)
AfxMessageBox("讀串口失敗!");
PurgeComm(hCom,
PURGE_TXABORT|
PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
m_disp=str;
UpdateData(FALSE);
}
您可以觀察返回的字元串,其中有和儀表顯示值相同的部分,您可以進行相應的字元串操作取出儀表的顯示值。
打開ClassWizard,為靜態文本框IDC_DISP添加CString類型變數m_disp,同時添加WM_CLOSE的相應函數:
void
CRS485CommDlg::OnClose()
{
//
TODO:
Add
your
message
handler
code
here
and/or
call
default
CloseHandle(hCom);
//程序退出時關閉串口
CDialog::OnClose();
}
程序的相應部分已經在代碼內部作了詳細介紹。連接好硬體部分,編譯運行程序,細心體會串口同步操作部分。
參考資料:http://www.vckbase.com/document/viewdoc/?id=1734

㈥ 簡述單片機串列口的工作方式

89系列單片機的串列通信有4種工作方式:

1、方式0是同步移位寄存器方式,幀格式8位,波特率固定為fosc/12。

2、方式1是8位非同步通信方式,幀格式10位,波特率可變:T溢出率/n(n= :32或16)。

3、方式2是9位非同步通信方式,幀格式11位,波特率固定: fosc/n(n=32 或16)。

4、方式3是9位非同步通信方式,幀格式11位,波特率可變:T溢出率(m=32或16)。

方式1、2、3的區別主要表現在幀格式及波特率兩個方面。

單片機應用范圍:

單片機滲透到我們生活的各個領域。導彈的導航裝置,飛機上各種儀表的控制,計算機的網路通訊與數據傳輸,工業自動化過程的實時控制和數據處理,廣泛使用的各種智能IC卡,民用豪華轎車的安全保障系統,錄像機、攝像機、全自動洗衣機的控制等等。

還有自動控制領域的機器人、智能儀表、醫療器械以及各種智能機械。因此,單片機的學習、開發與應用將造就一批計算機應用與智能化控制的科學家、工程師。

㈦ 51單片機串口通訊

51單片機串口通信
來源:維庫 作者:
關鍵字:51單片機 串口通信
這節我們主要講單片機上串口的工作原理和如何通過程序來對串口進行設置,以及根據所給出的實例實現與PC 機通信。
一、原理簡介
51 單片機內部有一個全雙工串列介面。什麼叫全雙工串口呢?一般來說,只能接受或只能發送的稱為單工串列;既可接收又可發送,但不能同時進行的稱為半雙工;能同時接收和發送的串列口稱為全雙工串列口。串列通信是指數據一位一位地按順序傳送的通信方式,其突出優點是只需一根傳輸線,可大大降低硬體成本,適合遠距離通信。其缺點是傳輸速度較低。
與之前一樣,首先我們來了解單片機串口相關的寄存器。
SBUF 寄存器:它是兩個在物理上獨立的接收、發送緩沖器,可同時發送、接收數據,可通過指令對SBUF 的讀寫來區別是對接收緩沖器的操作還是對發送緩沖器的操作。從而控制外部兩條獨立的收發信號線RXD(P3.0)、TXD(P3.1),同時發送、接收數據,實現全雙工。
串列口控制寄存器SCON(見表1) 。

表1 SCON寄存器
表中各位(從左至右為從高位到低位)含義如下。
SM0 和SM1 :串列口工作方式控制位,其定義如表2 所示。

表2 串列口工作方式控制位
其中,fOSC 為單片機的時鍾頻率;波特率指串列口每秒鍾發送(或接收)的位數。
SM2 :多機通信控制位。 該僅用於方式2 和方式3 的多機通信。其中發送機SM2 = 1(需要程序控制設置)。接收機的串列口工作於方式2 或3,SM2=1 時,只有當接收到第9 位數據(RB8)為1 時,才把接收到的前8 位數據送入SBUF,且置位RI 發出中斷申請引發串列接收中斷,否則會將接受到的數據放棄。當SM2=0 時,就不管第位數據是0 還是1,都將數據送入SBUF,並置位RI 發出中斷申請。工作於方式0 時,SM2 必須為0。
REN :串列接收允許位:REN =0 時,禁止接收;REN =1 時,允許接收。
TB8 :在方式2、3 中,TB8 是發送機要發送的第9 位數據。在多機通信中它代表傳輸的地址或數據,TB8=0 為數據,TB8=1 時為地址。
RB8 :在方式2、3 中,RB8 是接收機接收到的第9 位數據,該數據正好來自發送機的TB8,從而識別接收到的數據特徵。
TI :串列口發送中斷請求標志。當CPU 發送完一串列數據後,此時SBUF 寄存器為空,硬體使TI 置1,請求中斷。CPU 響應中斷後,由軟體對TI 清零。
RI :串列口接收中斷請求標志。當串列口接收完一幀串列數據時,此時SBUF 寄存器為滿,硬體使RI 置1,請求中斷。CPU 響應中斷後,用軟體對RI 清零。
電源控制寄存器PCON(見表3) 。

表3 PCON寄存器

表中各位(從左至右為從高位到低位)含義如下。
SMOD :波特率加倍位。SMOD=1,當串列口工作於方式1、2、3 時,波特率加倍。SMOD=0,波特率不變。
GF1、GF0 :通用標志位。
PD(PCON.1) :掉電方式位。當PD=1 時,進入掉電方式。
IDL(PCON.0) :待機方式位。當IDL=1 時,進入待機方式。
另外與串列口相關的寄存器有前面文章敘述的定時器相關寄存器和中斷寄存器。定時器寄存器用來設定波特率。中斷允許寄存器IE 中的ES 位也用來作為串列I/O 中斷允許位。當ES = 1,允許 串列I/O 中斷;當ES = 0,禁止串列I/O 中斷。中斷優先順序寄存器IP的PS 位則用作串列I/O 中斷優先順序控制位。當PS=1,設定為高優先順序;當PS =0,設定為低優先順序。
波特率計算:在了解了串列口相關的寄存器之後,我們可得出其通信波特率的一些結論:
① 方式0 和方式2 的波特率是固定的。
在方式0 中, 波特率為時鍾頻率的1/12, 即fOSC/12,固定不變。
在方式2 中,波特率取決於PCON 中的SMOD 值,即波特率為:

當SMOD=0 時,波特率為fosc/64 ;當SMOD=1 時,波特率為fosc/32。
② 方式1 和方式3 的波特率可變,由定時器1 的溢出率決定。

當定時器T1 用作波特率發生器時,通常選用定時初值自動重裝的工作方式2( 注意:不要把定時器的工作方式與串列口的工作方式搞混淆了)。其計數結構為8 位,假定計數初值為Count,單片機的機器周期為T,則定時時間為(256 ?Count)×T 。從而在1s內發生溢出的次數(即溢出率)可由公式(1)所示:

從而波特率的計算公式由公式(2)所示:

在實際應用時,通常是先確定波特率,後根據波特率求T1 定時初值,因此式(2)又可寫為:

51單片機串口通訊

二、電路詳解

下面就對圖1 所示電路進行詳細說明。
圖1 串列通信實驗電路圖
最小系統部分(時鍾電路、復位電路等)第一講已經講過,在此不再敘述。我們重點來了解下與計算機通信的RS-232 介面電路。可以看到,在電路圖中,有TXD 和RXD 兩個接收和發送指示狀態燈,此外用了一個叫MAX3232 的晶元,那它是用來實現什麼的呢?首先我們要知道計算機上的串口是具有RS-232 標準的串列介面,而RS-232 的標准中定義了其電氣特性:高電平「1」信號電壓的范圍為-15V~-3V,低電平「0」
信號電壓的范圍為+3V~+15V。可能有些讀者會問,它為什麼要以這樣的電氣特性呢?這是因為高低電平用相反的電壓表示,至少有6V 的壓差,非常好的提高了數據傳輸的可靠性。由於單片機的管腳電平為TTL,單片機與RS-232 標準的串列口進行通信時,首先要解決的便是電平轉換的問題。一般來說,可以選擇一些專業的集成電路晶元,如圖中的MAX3232。MAX3232 晶元內部集成了電壓倍增電路,單電源供電即可完成電平轉換,而且工作電壓寬,3V~5.5V 間均能正常工作。其典型應用如圖中所示,其外圍所接的電容對傳輸速率有影響,在試驗套件中採用的是0.1μF。
值得一提的是MAX3232 晶元擁有兩對電平轉換線路,圖中只用了一路,因此浪費了另一路,在一些場合可以將兩路並聯以獲得較強的驅動抗干擾能力。此外,我們有必要了解圖中與計算機相連的DB-9 型RS-232的引腳結構(見圖2)。

圖2 DB-9連接器介面圖
其各管腳定義如下(見表4)。

表4 DB-9型介面管腳定義
三、程序設計
本講設計實常式序如下:
#include "AT89X52.h" (1)
void Init_Com(void) ( 2)
{
TMOD = 0x20; ( 3)
PCON = 0x00; ( 4)
SCON = 0x50; ( 5)
TH1 = 0xE8; ( 6)
TL1 = 0xE8; ( 7)
TR1 = 1; ( 8)
}
void main(void) ( 9)
{
unsigned char dat; ( 10)
Init_Com(); ( 11)
while(1) ( 12)
程序詳細說明:
(1)頭文件包含。
(2)聲明串口初始化程序。
(3)設置定時器1 工作在模式2,自動裝載初值(詳見第二講)。
(4)SMOD 位清0,波特率不加倍。
(5)串列口工作在方式1,並允許接收。
(6)定時器1 高8 位賦初值。波特率為1200b/s(7)定時器1 低8 位賦初值。
(8)啟動定時器。
(9)主函數。
(10)定義一個字元型變數。
(11)初始化串口。
(12)死循環。
(13)如果接收到數據。
(14)將接收到的數據賦給之前定義的變數。
(15)將接收到的值輸出到P0 口。
(16)對接收標志位清0,准備再次接收。
(17)將接收到的數據又發送出去。
(18)查詢是否發送完畢。
(19)對發送標志位清0。
四、調試要點與實驗現象
接好硬體,通過冷啟動方式將程序所生成的。hex文件下載到單片機運行後,打開串口調試助手軟體,設置好波特率1200,復位單片機,然後在通過串口調試助手往單片機發送數據(見圖3),可以觀察到在接收窗口有發送的數據顯示,此外電路板上的串列通信指示燈也會閃爍,P0 口所接到LED 燈會閃爍所接收到的數據。

圖3 串口軟體調試界面
另外串口調試助手軟體使用時應注意的是,如果單片機開發板採用串口下載而且和串口調試助手是使用同一串口,則在打開串口軟體的同時不能給單片機下載程序,如需要下載,請首先點擊「關閉串口」,做發送實驗的時候,注意如果選中16 進制發送的就是數字或者字母的16 進制數值,比如發送「0」,實際接收的就應該是0x00,如果不選中,默認發送的是ASCII 碼值,此時發送「0」,實際接收的就應該是0x30,這點可以通過觀察板子P0 口上的對應的LED 指示出來。
五、總結
本講介紹了單片機串口通信的原理並給出了實例,通過該講,讀者可以了解和掌握51 單片機串口通信的原理與應用流程,利用串口通信,單片機可以與計算機相連,也可以單片機互聯或者多個單片機相互通信組網等,在實際的工程應用中非常廣泛。從學習的角度來說,熟練的利用串口將單片機系統中的相關信息顯示在計算機上可以很直觀方便的進行調試和開發。

㈧ 單片機串列通信

串列通信是指 使用一條數據線,將數據一位一位地依次傳輸,每一位數據占據一個固定的時間長度。其只需要少數幾條線就可以在系統間交換信息,特別使用於計算機與計算機、計算機與外設之間的遠距離通信。
而在單片機中,有一個專門的串列口,用於非同步通信方式(UART),與接收串列傳輸信息的外部設備相連,控制這個串列口的是兩個寄存器,分別是狀態寄存器和特殊功能寄存器。

狀態寄存器(scon)
有八位(每位有相應的地址),用於定義串列口的工作方式和接收,發送的控制
工作方式
方式0:八位同步移位寄存器:有允許信號時,寄存器中的存交換數據的八位同時以固定的波特率移動;(較常用)
方式1:10位UART(波特率可變)
方式2:11位UART (波特率固定)
方式3:11位UART(珀特率由定時器T1控制可變)
波特率:串列通信中收發雙方的數據傳輸率(即每秒傳輸多少數據)

特殊功能寄存器(pcon)
為了在51單片機上實現電源控制而附加的,功能有可以定義單片機得復位方式等。

㈨ 單片機與單片機之間如何進行串列通信

1、將兩個單片機的RXD與TXD相連
2、根據需要傳輸的數據編寫傳輸協議
3、編寫串列通信程序,將自己需要發送的數據按照協議進行發送
4、編寫接收程序,按照協議進行接收
5、將兩個程序分別寫入兩個單片機,運行。

㈩ 單片機串列通信有何應用

單片機串列通信的實際作用:一般用於和外部設備交換數據的
舉例來說:一、比如和PC的串口機通信,單片機可以採集一些模擬量(溫度,濕度,氣體濃度等),將這些模擬量轉換成數字量後通過串列通信介面傳輸個PC機,PC機上還得編寫一個簡單的應用軟體,可以顯示這些模擬量(溫度,濕度,氣體濃度等)的值,這個簡單的應用軟體應具有串口設置,數據顯示,繪制曲線等功能。還可以通過PC機串口發送數據給單片機,用來控制單片機的工作狀態等等。和PC機通信應該是應用最廣泛的。
二、和其他串口設備通信:單片機一般充當控制器的角色,通過串口發送一定格式的數據來控制與之相連設備的動作,同時設備也會反饋回來一些自己的狀態信息給單片機,供單片機進行判斷,做出相應的控制。
串口通訊,是工業自動化、智能終端、通信管理等領域傳統且重要的通訊手段。最常用到的串口通信模式往往是兩種:RS232和RS485。其中RS232通訊方式有三線制和九線制兩種。
工業控制中,用戶常常使用單片機的串口通訊功能實現與上位機通訊,實現多機通訊。例如,工業現場有很多具備串口通訊功能的端表,在幾十米外的中控室,你可以通過串口通訊隨時讀取表的運行狀態和相關數據,端表異常的時候馬上在中控室就能知道,這樣免去了很多麻煩,為實現工業上的自動控制打下了很好的基礎。

閱讀全文

與串列通訊單片機相關的資料

熱點內容
程序員直播機器人舞團 瀏覽:767
devc指針編譯問題 瀏覽:998
支持dsd硬解壓音效卡 瀏覽:769
怎麼查看u盤加密區 瀏覽:181
台電加密是什麼格式 瀏覽:155
php論壇版塊在哪個文件夾 瀏覽:442
暗黑的伺服器為什麼維護 瀏覽:624
android內存溢出的原因 瀏覽:18
標志307的壓縮比是多少 瀏覽:636
伺服器啟動為什麼叫三聲 瀏覽:997
追風箏的人英文pdf 瀏覽:940
解壓小熊手機殼 瀏覽:347
成都市區建成面積演算法 瀏覽:662
智能家居單片機 瀏覽:98
買男裝用什麼app好 瀏覽:856
文件夾合並了怎麼拆開 瀏覽:261
波段副圖源碼無未來函數 瀏覽:90
livecn伺服器地址 瀏覽:259
程序員這個工作真的很吃香嗎 瀏覽:848
程序員和數學分析師待遇 瀏覽:681