久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

第11課 串口通信

作者:huqin   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年12月30日   【字體:

1、串行通信概述

(1)計(jì)算機(jī)通信是指計(jì)算機(jī)與外部設(shè)備或計(jì)算機(jī)與計(jì)算機(jī)之間的信息交換。
     通信的基本方式可分為并行通信和串行通信兩種。
     并行通信通常是將數(shù)據(jù)字節(jié)的各位用多條數(shù)據(jù)線同時(shí)進(jìn)行傳送,如圖1所示。并行通信控制簡單、傳輸速度快;由于傳輸線較多,長距離傳送時(shí)成本高且接收方的各位同時(shí)接收存在困難。 
      
串行通信是將數(shù)據(jù)字節(jié)分成一位一位的形式在一條傳輸線上逐個(gè)地傳輸,如圖2所示。 串行通信的特點(diǎn):傳輸線少,長距離傳送時(shí)成本低,且可以利用電話網(wǎng)等現(xiàn)成的設(shè)備,但數(shù)據(jù)的傳送控制比并行通信復(fù)雜。 
目前串行通信在單片機(jī)雙機(jī)、多機(jī)以及單片機(jī)與PC機(jī)之間的通信等方面得到了廣泛應(yīng)用。
(2)同步通信和異步通信
1、異步通信
     異步通信是指通信的發(fā)送與接收設(shè)備使用各自的時(shí)鐘控制數(shù)據(jù)的發(fā)送和接收過程。為使雙方的收發(fā)協(xié)調(diào),要求發(fā)送和接收設(shè)備的時(shí)鐘盡可能一致。
 
    異步通信是以字符(構(gòu)成的幀)為單位進(jìn)行傳輸,字符與字符之間的間隙(時(shí)間間隔)是任意的,但每個(gè)字符中的各位是以固定的時(shí)間傳送的,即字符之間不一定有“位間隔”的整數(shù)倍的關(guān)系,但同一字符內(nèi)的各位之間的距離均為“位間隔”的整數(shù)倍。
 
異步通信的特點(diǎn):不要求收發(fā)雙方時(shí)鐘的嚴(yán)格一致,實(shí)現(xiàn)容易,設(shè)備開銷較小,但每個(gè)字符要附加2~3位用于起止位,各幀之間還有間隔,因此傳輸效率不高。
同步通信時(shí)要建立發(fā)送方時(shí)鐘對接收方時(shí)鐘的直接控制,使雙方達(dá)到完全同步。此時(shí),傳輸數(shù)據(jù)的位之間的距離均為“位間隔”的整數(shù)倍,同時(shí)傳送的字符間不留間隙,即保持位同步關(guān)系,也保持字符同步關(guān)系。發(fā)送方對接收方的同步可以通過兩種方法實(shí)現(xiàn)。 
同步通信的特點(diǎn)是以特定的位組合“01111110”作為幀的開始和結(jié)束標(biāo)志,所傳輸?shù)囊粠瑪?shù)據(jù)可以是任意位。所以傳輸?shù)男瘦^高,但實(shí)現(xiàn)的硬件設(shè)備比異步通信復(fù)雜。
(3)串行通信的傳輸方向
1、單工
單工是指數(shù)據(jù)傳輸僅能沿一個(gè)方向,不能實(shí)現(xiàn)反向傳輸。
2、半雙工
半雙工是指數(shù)據(jù)傳輸可以沿兩個(gè)方向,但需要分時(shí)進(jìn)行。
3、全雙工
全雙工是指數(shù)據(jù)可以同時(shí)進(jìn)行雙向傳輸。
 
(4)串行通信的錯(cuò)誤校驗(yàn) 
 
(5)傳輸速率與傳輸距離  
1、傳輸速率
比特率是每秒鐘傳輸二進(jìn)制代碼的位數(shù),單位是:位/秒(bps)。如每秒鐘傳送240個(gè)字符,而每個(gè)字符格式包含10位(1個(gè)起始位、1個(gè)停止位、8個(gè)數(shù)據(jù)位),這時(shí)的比特率為:
        10位×240個(gè)/秒 = 2400 bps
(6)RS-232C電平與TTL電平 
2、串行通信編程時(shí)主要應(yīng)注意的事項(xiàng)
3、51單片機(jī)串行口結(jié)構(gòu)
串行口電路也稱為通用異步收發(fā)器(UART).從原理上講,一個(gè)UART應(yīng)包括發(fā)送器電路、接收器電路和控制電路。51單片機(jī)的UART已集成在其中,構(gòu)成一個(gè)全雙工串行口,這個(gè)口即可以用于網(wǎng)絡(luò)通信,也可以實(shí)現(xiàn)串行異步通信,還可以作為同步移位寄存器使用。
80C51的串行口通過引腳RXD(P30,串行口數(shù)據(jù)接收端)和引腳TXD(P31,串行數(shù)據(jù)發(fā)送端)與外療設(shè)備進(jìn)行串行通信。如圖3為單片機(jī)串行口的結(jié)構(gòu)。
圖中共有兩個(gè)串行口緩沖寄存器(SBUF),一個(gè)是發(fā)送寄存器,一個(gè)是接收寄存器,以便單片機(jī)能以全雙工方式進(jìn)行通信。串行發(fā)送時(shí),從片內(nèi)總線向發(fā)送SBUF寫入數(shù)據(jù);接收時(shí),從接收SBUF向片內(nèi)總線讀出數(shù)據(jù)。它們都是可尋址的寄存器,但因?yàn)榘l(fā)送和接收不能同時(shí)進(jìn)行,所以給這兩個(gè)寄存器賦以同一地址99H.
在接收方式下,串行數(shù)據(jù)通過引腳RXD(P30)進(jìn)入,由于在接收寄存器之前還有移位寄存器,從而構(gòu)成了串行接收的雙緩沖結(jié)構(gòu),以避免在數(shù)據(jù)接收過程上中出現(xiàn)幀重疊錯(cuò)誤,即在下一幀數(shù)據(jù)來時(shí),前一幀數(shù)據(jù)還沒有讀走。
在發(fā)送方式下,串行數(shù)據(jù)通過引腳TXD(P31)發(fā)出。與接收情況不同的,發(fā)送數(shù)據(jù)時(shí),由于CPU是主動(dòng)的,不會(huì)發(fā)生幀重疊錯(cuò)誤,因此發(fā)送電路就不需又重緩沖結(jié)構(gòu),這樣可以提高數(shù)據(jù)發(fā)送的速度。
4、相關(guān)的寄存器
與串口通信相關(guān)的相關(guān)的寄存器主要有四個(gè),串行口控制寄存器SCON、電源控制寄存器PCON、定時(shí)器工作方式寄存器TMOD、定時(shí)器控制寄存器TCON、中斷允許寄存器IE,后面主要跟波特率設(shè)置及中波相關(guān),前面在講中斷和定時(shí)器已作過介紹,所以這里只對SCON和PCON寄存器進(jìn)行介紹。
(1)串行控制寄存器SCON
串行控制寄存器SCON用于設(shè)置串行口的工作方式、監(jiān)視串行口的工作狀態(tài)、控制發(fā)送與接收的狀態(tài)等。它是一個(gè)既可以字節(jié)尋址又可以位尋址的8位特殊功能寄存器。其格式如下。
(1)SM0 SM1:串行口工作方式選擇位。其狀態(tài)組合所對應(yīng)的工作方式如表9-1所示。
(2) SM2:多機(jī)通信控制器位。在方式0中,SM2必須設(shè)成0。在方式1中,當(dāng)處于接收狀態(tài)時(shí),若SM2=1,則只有接收到有效的停止位“1”時(shí),RI才能被激活成“1”(產(chǎn)生中斷請求)。在方式2和方式3中,若SM2=0,串行口以單機(jī)發(fā)送或接收方式工作,TI和RI以正常方式被激活并產(chǎn)生中斷請求;若SM2=1,RB8=1時(shí),RI被激活并產(chǎn)生中斷請求。
(3) REN:串行接受允許控制位。該位由軟件置位或復(fù)位。當(dāng)REN=1,允許接收;當(dāng)REN=0,禁止接收
(4) TB8:方式2和方式3中要發(fā)送的第9位數(shù)據(jù)。該位由軟件置位或復(fù)位。在方式2和方式3時(shí),TB8是發(fā)送的第9位數(shù)據(jù)。在多機(jī)通信中,以TB8位的狀態(tài)表示主機(jī)發(fā)送的是地址還是數(shù)據(jù):TB8=1表示地址,TB8=0表示數(shù)據(jù)。TB8還可用作奇偶校驗(yàn)位。
(5) RB8:接收數(shù)據(jù)第9位。在方式2和方式3時(shí),RB8存放接收到的第9位數(shù)據(jù)。RB8也可用作奇偶校驗(yàn)位。在方式1中,若SM2=0,則RB8是接收到的停止位。在方式0中,該位未用。
(6)TI:發(fā)送中斷標(biāo)志位。TI=1,表示已結(jié)束一幀數(shù)據(jù)發(fā)送,可由軟件查詢TI位標(biāo)志,也可以向CPU申請中斷。
注意:TI在任何工作方式下都必須由軟件清0。
    (7)RI:接收中斷標(biāo)志位。RI=1,表示一幀數(shù)據(jù)接收結(jié)束。可由軟件查詢RI位標(biāo)志,也可以向CPU申請中斷。
 注意:RI在任何工作方式下也都必須由軟件清0。
 在AT89C51中,串行發(fā)送中斷TI和接收中斷RI的中斷入口地址是同是0023H,因此在中斷程序中必須由軟件查詢TI和RI的狀態(tài)才能確定究竟是接收還是發(fā)送中斷,進(jìn)而作出相應(yīng)的處理。單片機(jī)復(fù)位時(shí),SCON所有位均清0。
 3、電源控制寄存器PCON
在串口通信時(shí),我們只用PCON寄存器的SMOD位,這一位主要跟波特率的設(shè)置有關(guān)。下面僅對這一位進(jìn)行介紹。
SMOD:串行口波特率倍增位。在工作方式1~工作方式3時(shí),若SMOD=1,則串行口波特率增加一倍。若SMOD=0,波特率不加倍。系統(tǒng)復(fù)位時(shí),SMOD=0。
5、串行口的工作方式
51單片機(jī)的串行口共有四種工種方式,分別為工作方式0、工作方式1、工作方式2及工作方式3,如圖1所示。采用何種工作方式主要靠串行口控制寄存器SCON中的SM0和SM1來決定。不同的工作方式,其一次傳送的數(shù)據(jù)位多少不同,同時(shí),波特率的大小的設(shè)置也不同。
圖1 串行口的四種工作方式
(1)發(fā)送和接收
為了便于大家撐握,這里只介紹工作方式1,其它工作方式大家用到時(shí)再自行學(xué)習(xí)。工作方式1每次傳送一幀數(shù)據(jù)為10位,1 個(gè)起始位、1 個(gè)停止位和8個(gè)數(shù)據(jù)位,低位在前,高位在后,如圖2所示。
圖2 方式1的數(shù)據(jù)幀格式
在寫程序時(shí),需看懂?dāng)?shù)據(jù)發(fā)送和接收的時(shí)序圖,分別如圖3、圖4所示。數(shù)據(jù)發(fā)送時(shí)使用的是單片機(jī)的TXD(P31)引腳,接收時(shí)使用的單片機(jī)的RXD(P30)引腳,這里我們結(jié)合這兩個(gè)引腳對時(shí)序進(jìn)行分析。
圖3 方式1發(fā)送時(shí)的時(shí)序圖
圖4 方式1數(shù)據(jù)接收時(shí)的時(shí)序圖
 
首先我們單片機(jī)如何發(fā)送和接收一個(gè)數(shù)據(jù)。
發(fā)送時(shí),數(shù)據(jù)從TXD(P31)端輸出,當(dāng)TI=0時(shí),執(zhí)行數(shù)據(jù)寫入發(fā)送緩沖器SBUFF指令時(shí),就啟動(dòng)了串行口數(shù)據(jù)的發(fā)送指令。啟動(dòng)發(fā)送后,串行口自動(dòng)在起始位清0,而后是8位數(shù)據(jù)位和1位停止位,一幀數(shù)據(jù)是10位。數(shù)據(jù)依次從TXD端發(fā)出,一幀數(shù)據(jù)發(fā)送完畢,使TXD端的輸出線維持在1狀態(tài)下,并將SCON寄存器中的TI置1,以便查詢數(shù)據(jù)是否發(fā)送完畢或作為發(fā)送中斷請求信號(hào)。TI必須由軟件清0。
接收時(shí),數(shù)據(jù)從RXD(P30)端輸入,SCON的REN位應(yīng)處于允許接收狀(REN=1)。在此前提下,串行口采樣RXD端,當(dāng)采樣從1向0的狀態(tài)跳變時(shí),就認(rèn)定是接收一起始位。隨后在移位脈沖的控制下,把接收到的數(shù)據(jù)位移入寄存器中,直接停止位到來之后把停止位送入RB8中,并置位中斷標(biāo)志位RI,通知CPU從SBUF取走接收到的一個(gè)字符。
(2)波特率的設(shè)定
工作方式1的波特率是可變,波特率的產(chǎn)生與定時(shí)器1有關(guān),其產(chǎn)生的電路如圖4所示。
圖4 方式1的波特率產(chǎn)生電路
以定時(shí)器T1作為波特率發(fā)生器使用,其值由定時(shí)器1的計(jì)數(shù)溢出率來決定,其公式為:
其中,T1溢出率為一次定時(shí)時(shí)間的倒數(shù),即:
上式中,X為計(jì)數(shù)器的初值,M由定時(shí)器T1的工作方式所決定,即M=8、13或16,當(dāng)定時(shí)器1作波特率發(fā)生器使用時(shí),一般選用工作方式。之所以選擇工作方式2,是因?yàn)樗哂凶詣?dòng)加載功能,可以避免通過程序的反復(fù)裝入初值所引起的定時(shí)誤差,使波特率更加穩(wěn)定。因此,對于定時(shí)器T1的工作方式2,其溢出率又可簡化為:
此時(shí),波特率為:
因此計(jì)數(shù)初值X的值為;
例如,設(shè)兩機(jī)通信的波特率為2400波特,若晶振頻率為12MHZ,串行口工作在方式1,用定時(shí)器T1作為波特率發(fā)生器,先定時(shí)器工作在方式2(要禁止T1中斷,以免產(chǎn)生不必要的中斷帶來的頻率誤差)。
若SMOD=1,則計(jì)數(shù)值X的值為:
若SMOD=1,則計(jì)數(shù)值X的值為:
5程序舉例
在具體操作前,需對與串行口相關(guān)的寄存器作一些設(shè)置,主要用來設(shè)置跟波特率產(chǎn)生相關(guān)的定時(shí)器1、串行口工作方式以及中斷的一些設(shè)置,具體如下
(1)確定定時(shí)器的工作方式
(2)計(jì)算定時(shí)器的初值
(3)啟動(dòng)定時(shí)器
(4)設(shè)置SCON寄存器
(5)中斷設(shè)置
例1 串口發(fā)送程序
例2 串口接收程序
源代碼詳見: http://www.zg4o1577.cn/mcu/2670.html
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 久久精品成人 | 国产三级一区二区三区 | 中国大陆高清aⅴ毛片 | 久久久综合色 | 日韩午夜电影 | 欧美一区二区三区在线看 | 婷婷国产一区 | 中国大陆高清aⅴ毛片 | 国产视频中文字幕 | 国产成人免费视频网站视频社区 | 7777在线视频免费播放 | av免费看在线 | 亚洲欧美精| 欧美性一区二区三区 | 亚洲一区二区视频在线播放 | 日韩看片 | 日韩人体视频 | 国产精品美女久久久久久免费 | 亚洲91精品 | 黄色一级电影在线观看 | 欧美一区二区在线播放 | 久久夜视频 | 在线观看中文字幕视频 | 99re在线播放 | 成人亚洲精品 | 日本精品在线一区 | 国产成人a亚洲精品 | 日本在线播放 | 色秀网站 | 欧美成ee人免费视频 | 欧美精品日韩精品国产精品 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 亚洲中国字幕 | 免费一级黄 | 午夜免费成人 | www.中文字幕 | 免费看黄色小视频 | 亚洲九九| 日韩一区二区三区在线 | 天天插天天搞 | caoporn国产精品免费公开 |