![第五章-串行口課件_第1頁](http://file4.renrendoc.com/view/9c7218eb4bda83dd376ca53ab02989f1/9c7218eb4bda83dd376ca53ab02989f11.gif)
![第五章-串行口課件_第2頁](http://file4.renrendoc.com/view/9c7218eb4bda83dd376ca53ab02989f1/9c7218eb4bda83dd376ca53ab02989f12.gif)
![第五章-串行口課件_第3頁](http://file4.renrendoc.com/view/9c7218eb4bda83dd376ca53ab02989f1/9c7218eb4bda83dd376ca53ab02989f13.gif)
![第五章-串行口課件_第4頁](http://file4.renrendoc.com/view/9c7218eb4bda83dd376ca53ab02989f1/9c7218eb4bda83dd376ca53ab02989f14.gif)
![第五章-串行口課件_第5頁](http://file4.renrendoc.com/view/9c7218eb4bda83dd376ca53ab02989f1/9c7218eb4bda83dd376ca53ab02989f15.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、2022/7/181第五章8051單片機的串行口原理及應用 2022/7/182 通信:在實際應用中,不但計算機與外部設備之間常常要進行信息交換,而且計算機之間也需要交換信息,所有這些信息的交換均稱為“通信”。 隨著8051應用范圍的不斷拓寬,單臺儀器儀表或控制器往往會帶有不止一個的單片機,而多個智能儀器儀表或控制器在單片機應用系統(tǒng)中又常常會構成一個分布式采集、控制系統(tǒng),上層由PC進行集中管理等。 單片機的通信功能也隨之得到發(fā)展。 通信的基本方式分為并行通信和串行通信兩種。 數據通信概述 2022/7/183 并行傳送方式與串行傳送方式 并行傳送方式 在數據傳輸時,如果一個數據編碼字符的所有各
2、位都同時發(fā)送、并排傳輸,又同時被接收,則稱為并行傳送方式。并行傳送方式要求物理信道為并行內總線或者并行外總線。 特點:傳送速度快、效率高。但由于需要的傳送數據線多,因而傳輸成本高。并行數據傳輸的距離通常小于30米。而在計算機內部的數據傳送都是并行傳送的。 2022/7/184 串行傳送方式 在數據傳輸時,如果一個數據編碼字符的所有各位不是同時發(fā)送,而是按一定順序,一位接著一位在信道中被發(fā)送和接收,則稱為串行傳送方式。 串行傳送方式的物理信道為串行總線。 串行數據傳送方式的特點是成本低,但速度慢。 計算機與外界的數據傳送大多是串行的,其傳送距離可以從幾米直到幾千公里。 2022/7/185 圖5
3、1通信的兩種基本方式(a)并行通信; (b)串行通信2022/7/186打印機計算機網絡鼠標掃描儀硬盤I2C SPIRS232USB常見的串行通信接口:2022/7/187按照信號傳輸的方向和同時性,分為單工方式、半雙工方式和全雙工方式三種。 單工方式信號(不包括聯絡信號) 在信道中只能沿一個方向傳送,而不能沿相反方向傳送的工作方式稱為單工方式。 半雙工方式通信的雙方均具有發(fā)送和接收信息的能力,信道也具有雙向傳輸性能,但是,通信的任何一方都不能同時既發(fā)送信息又接收信息,即在指定的時刻,只能沿某一個方向傳送信息。這樣的傳送方式稱為半雙工方式。 全雙工方式若信號在通信雙方之間沿兩個方向同時傳送,任
4、何一方在同一時刻既能發(fā)送又能接收信息,稱為全雙工方式。雙工方式大多采用雙線制。 單工方式、半雙工方式、全雙工方式2022/7/188 圖52串行通信的三種方式(a)單工方式;(b)半雙工方式;(c)全雙工方式2022/7/189單工、雙工、半雙工方式單工:廣播雙工:電話半雙工:對講機2022/7/1810 在數據通信中,要保證發(fā)送的信號在接收端能被正確地接收,必須采用同步技術。常用的同步技術有兩種方式,一種稱為異步傳輸也稱起止同步方式,另一種稱為同步傳輸也稱同步字符同步方式。 異步傳輸異步傳輸以字符為單位進行數據傳輸,每個字符都用起始位、停止位包裝起來,在字符間允許有長短不一的間隙。在單片機中
5、使用的串行通信都是異步方式。 異步傳輸和同步傳輸2022/7/1811 圖53串行異步傳送的字符格式(a)字符格式; (b)有空閑位的字符格式 2022/7/1812圖54 傳送ASCII碼字符5的波形圖 2022/7/1813 在串行異步傳送中,CPU與外設之間事先必須約定: 字符格式。 雙方要事先約定字符的編碼形式、奇偶校驗形式及起始位和停止位的規(guī)定。例如用ASCII碼通信,有效數據為7位,加1個奇偶校驗位、1個起始位和1個停止位共10位。當然停止位也可大于1位。 波特率(Baudrate)。 波特率就是數據的傳送速率,即每秒鐘傳送的二進制位數,單位為位/秒。它與字符的傳送速率(字符/秒)
6、之間存在如下關系: 波特率=位/字符字符/秒=位/秒 要求發(fā)送端與接收端的波特率必須一致。2022/7/1814 同步傳輸 同步傳輸用來對數據塊進行傳輸,一個數據塊中包含著許多連續(xù)的字符,在字符之間沒有空閑。同步傳輸可以方便地實現某一通信協議要求的幀格式。計算機網絡通信基本上是這種。2022/7/1815 圖55 同步傳送 2022/7/1816 串行通信的傳送速率用于說明數據傳送的快慢,波特率表示串行通信時每秒鐘傳送”位” 的數目,比如1s傳送1bit,就是1波特。即1波特1bit/s (位/秒)串行通信常用的標準波特率在RS-232C標準中已有規(guī)定,如波特率為600、1200、2400、4
7、800、9600、19200等等。假若數據傳送速率為120字符/s,而每一個字符幀已規(guī)定為10個數據位,則傳輸速率為120101200bit/s,即波特率為1200,每一位數據傳送的時間為波特率的倒數: T112000.833ms 波特率(BAUD RATE)2022/7/1817 計算機通信是一種數字信號的通信。 它要求傳送線的頻帶很寬,而在長距離通訊時,通常是利用電話線來傳送的,該線不可能有這樣寬的頻帶。如果用數字信號經過傳送線直接通訊,信號就會畸變。信號的調制和解調2022/7/1818 因此要在發(fā)送端用調制器(Modulator)把數字信號轉換為模擬信號,在接收端用解調器(Demodu
8、lator)檢測此模擬信號,再把它轉換成數字信號。 FSK(FrequencyShiftKeying)是一種常用的調制方法,它把數字信號的“1”與“0”調制成不同頻率的模擬信號。圖56調制與解調示意圖 2022/7/1819圖57 FSK調制法原理圖 2022/7/1820數據終端與調制器的接口圖510 RS-232C的引腳圖 2022/7/1821圖511 計算機與遠方終端和當地終端連接示意圖 2022/7/1822調制解調器15V:邏輯1 15V:邏輯0RS232C標準美國電子工業(yè)協會EIA公布的串行總線標準DB-25DB-9最少3根線公用電話網ModemModem計算機計算機RS232C
9、RS232CRxD (3)TxD (2)地 (5)2022/7/1823一、 8051串行口結構 串行數據通信主要有兩個技術問題,一個是數據傳送,另一個是數據轉換。數據傳送主要解決傳送中的標準、數據幀格式及工作方式等。數據轉換要解決把數據進行串、并行的轉換,這種轉換通常由通用異步接收發(fā)送器(UART) 電路來完成。數據發(fā)送端,要把并行數據轉換為串行數據;數據接收端,要把串行數據轉換為并行數據。80C51中已集成有UART,有的型號在內部還集成了兩個UART。而在其它一些型號中又增加了新的串行口,如 8XC552中就增加了具有I2C總線功能的串行口。串行口及控制2022/7/1824串行通信接口
10、(1)UART (Universal Asynchronous Receiver/Transmitter 通用異步接收器/發(fā)送器(2)USRT (Universal Synchronous Receiver/Transmitter) 通用同步接收器/發(fā)送器8串并8并串發(fā)送接收1時鐘時鐘2022/7/18258051中的串行口是一個全雙工的異步串行通信接口,它可作UART(通用異步接收和發(fā)送器)用,也可作同步移位寄存器用。所謂全雙工的異步串行通信接口,是說該接口可以同時進行接收和發(fā)送數據,口內的接收緩沖器和發(fā)送緩沖器在物理上是隔離的,即是完全獨立的??梢酝ㄟ^訪問特殊功能寄存器SBUF,來訪問接收
11、緩沖器和發(fā)送緩沖器。接收緩沖器具有雙緩沖的功能,即它在接收第一個數據字節(jié)后,能接收笫二個數據字節(jié)。但是在接收完第二個字節(jié)后,若笫一個數據字節(jié)還未取走,那么該數據字節(jié)將丟失。2022/7/1826圖512 MCS-51串行口的原理結構圖 2022/7/1827 波特率發(fā)生器:主要由T1及內部的一些控制開關和分頻器所組成。它提供串行口的時鐘信號為 TXCLOCK(發(fā)送時鐘)和 RXCLOCK(接收時鐘)。相應的控制波特率發(fā)生器的特殊功能寄存器有 TMOD、TCON、TL1、TH1等。 2022/7/1828 串行口的內部 串行數據緩沖寄存器SBUF有接收緩沖器SBUF和發(fā)送緩沖器SBUF,以便80
12、C51能以全雙工方式進行通信。它們在物理上是隔離的,但是占用同一個地址(99H) 。 串行口控制寄存器SCON 串行數據輸入輸出引腳接收方式下,串行數據從RXD(P3.0)引腳輸入,串行口內部在接收緩沖器之前還有移位寄存器,從而構成了串行接收的雙緩沖結構,可以避免在數據接收過程中出現幀重疊錯誤,即在下一幀數據來時,前一幀數據還沒有讀走。發(fā)送方式下,串行數據通過TXD(P3.1)引腳輸出。 2022/7/1829 串行口控制邏輯接受來自波特率發(fā)生器的時鐘信號TXCLOCK(發(fā)送時鐘)和RXCLOCK(接收時鐘);控制內部的輸入移位寄存器將外部的串行數據轉換為并行數據;控制內部的輸出移位寄存器將內
13、部的并行數據轉換為串行數據輸出;控制串行中斷(RI和TI)。 2022/7/1830二、 80C51串行口控制 串行口狀態(tài)控制寄存器 SCON串行口狀態(tài)控制寄存器SCON用來控制串行通信的方式選擇、接收,指示串行口的中斷狀態(tài)。寄存器SCON既可字節(jié)尋址也可位尋址,字節(jié)地址為98H,位地址為98H9FH。其格式如下:位地址 9FH 9EH9DH9CH 9BH9AH 99H 98H位功能SM0SM1SM2REN TB8 RB8 TI RI2022/7/1831 SM0(SCON.7),SM1(SCON.6)串行口工作方式選擇位。 SM0 SM1 工作方式 特 點 波 特 率 0 0 方式0 8位移
14、位寄存器 fosc/12 0 1 方式1 10位UART 可變 1 0 方式2 11位UART fosc/64或fosc/32 1 1 方式3 11位UART 可變表51 串行口工作方式選擇位地址 9FH 9EH9DH9CH 9BH9AH 99H 98H位功能SM0SM1SM2REN TB8 RB8 TI RI2022/7/1832SM2(SCON.5)允許方式2、3中的多處理機通信位。方式0時,SM20。方式1時,若SM2l,只有接收到有效的停止位,接收中斷RI才置1。方式2和方式3時,若SM21,則只有當接收到的第9位數據(RB8)為1時,才將接收到的前8位數據送入緩沖器SBUF中,并把R
15、I置1、同時向CPU申請中斷;如果接收到的第9位數據(RB8)為0,RI置0,將接收到的前8位數據丟棄。而當SM20時,則不論接收到的笫九位數據是0 或1 ,都將前8位數據裝入SBUF中,并申請中斷。 位地址 9FH 9EH9DH9CH 9BH9AH 99H 98H位功能SM0SM1SM2REN TB8 RB8 TI RI2022/7/1833REN(SCON.4)允許串行接收位。REN1時,允許串行接收;REN0時,禁止串行接收。用軟件置位清除。TB8(SCON.3)方式2和方式3中要發(fā)送的第9位數據。在通信協議中,常規(guī)定TB8作為奇偶校驗位。在80C51多機通信中,TB8=0用來表示數據幀
16、;TB8=1表示是地址幀。用軟件置位清除。RB8(SCON.2)方式2和方式3中接收到的第9位數據。方式1中接收到的是停止位。方式0中不使用這一位。 位地址 9FH 9EH9DH9CH 9BH9AH 99H 98H位功能SM0SM1SM2REN TB8 RB8 TI RI2022/7/1834TI(SCON1)發(fā)送中斷標志位。方式 0中,在發(fā)送第 8位末尾置位;在其它方式時,在發(fā)送停止位開始時設置。由硬件置位,用軟件清除。RI(SCON0)接收中斷標志位。方式 0中,在接收第8位末尾置位;在其它方式時,在接收停止位中間設置。由硬件置位,用軟件清除。系統(tǒng)復位后,SCON中所有位都被清除。位地址
17、9FH 9EH9DH9CH 9BH9AH 99H 98H位功能SM0SM1SM2REN TB8 RB8 TI RI2022/7/1835其中最高位SMOD與串行口控制有關,其它位與掉電方式有關。其格式如下: D7 D6 D5 D4 D3 D2 D1 D0SMOD GF1 GF0 PD IDLSMOD(PCON.7)串行通信波特率系數控制位。當SMOD1時,使波特率加倍。復位后,SMOD0。 電源控制寄存器 PCON2022/7/1836包含在物理上是隔離的兩個8位寄存器:發(fā)送數據寄存器和接收數據寄存器,它們共用一個地址99H。其格式如下: D7 D6 D5 D4 D3 D2 D1 D0 SD7
18、 SD6 SD5 SD4 SD3 SD2 SD1 SD0讀SBUF(MOVA,SBUF),訪問接收數據寄存器;寫SBUF(MOV SBUF,A),訪問發(fā)送數據寄存器。 串行數據寄存器SBUF系統(tǒng)復位后, SBUF中內容不確定。2022/7/1837串行口的工作方式在串行口控制寄存器SCON中,SM0和SM1位決定串行口的工作方式。80C51串行口共有四種工作方式。 2022/7/18381 、串行口方式0 同步移位寄存器方式 當SM00、SM10時,串行口選擇方式0。這種工作方式實質上是一種同步移位寄存器方式。數據傳輸波特率固定為(112)fosc。由RXD(P30)引腳輸入或輸出數據。由TX
19、D(P31)引腳輸出同步移位時鐘。接收發(fā)送的是8位數據,傳輸時低位在前。幀格式如下: D0D1D2D3D4D5D6D72022/7/1839圖513 串行口工作方式0工作原理圖2022/7/1840發(fā)送當執(zhí)行任何一條寫SBUF的指令(MOV SBUF,A)時,就啟動串行數據的發(fā)送。在執(zhí)行寫入SBUF的指令時,選通內部D觸發(fā)器置1 ,構成發(fā)送移位寄存器的第9位,并使發(fā)送控制器開始發(fā)送。當發(fā)送脈沖有效之后,移位寄存器的內容由RXD(P3.0)引腳串行移位輸出;移位脈沖由TXD(P3l)引腳輸出。在發(fā)送有效的期間,每個機器周期,發(fā)送移位寄存器右移一位,在其左邊補0。當數據最高位移到移位寄存器的輸出位
20、時,原寫入第9位的 l正好移到最高位的左邊一位,由此向左的所有位均為 0,零檢測器通知發(fā)送控制器要進行最后一次移位,并撤銷發(fā)送有效,同時使發(fā)送中斷標志TI置位。至此,完成了一幀數據發(fā)送的全過程。若CPU響應中斷,則執(zhí)行從0023H開始的串行口發(fā)送中斷服務程序。 2022/7/1841接收當REN1(允許接收)且RI位清除時,就會啟動一次接收過程。在下一機器周期的S6P2時刻,接收控制器將1111 1110寫入接收移位寄存器,并在下一時鐘周期S1P1使接收控制器的接收有效,打開“與非門” ,同時由TXD引腳輸出移位脈沖。在移位脈沖控制下,接收移位寄存器的內容每一個機器周期左移一位,同時由RXD引
21、腳接收一位輸入信號。每當接收移位寄存器左移一位,原寫入的1111 1110也左移一位。當最右邊的0移到最左邊時,標志著接收控制器要進行最后一次移位。在最后一次移位即將結束時,接收移位寄存器的內容送入接收數據緩沖寄存器SBUF,然后在啟動接收的第10個機器周期的S1P1時,清除接收信號,置位SCON中的RI,發(fā)出中斷申請。完成一幀數據的接收過程。若CPU響應中斷,則執(zhí)行從0023H 開始的串行口接收中斷服務程序2022/7/1842在方式0工作時,必須使SCON寄存器中的SM2位為“0”,這并不影響TB8位和RB8位。方式0發(fā)送或接收完8位數據后由硬件置位TI或RI中斷請求標志,CPU在響應中斷
22、后要用軟件清除TI或RI標志。若串行口要作為并行口輸入輸出,這時必須設置“串入并出”或“并入串出”的移位寄存器來配合使用(如CD4094或CD4014等)。注意:2022/7/1843圖514 一種串行轉換為并行的方法 2022/7/18442 串行口方式110位UART 當 SM00、SM11時,串行口選擇方式1。數據傳輸波特率由T1的溢出決定,可用程序設定。由 TXD(P3.1)引腳發(fā)送數據。由 RXD(P3.0)引腳接收數據。發(fā)送或接收一幀信息為10位:1位起始位(0)、8位數據位(低位在前)和l位停止位(1)。幀格式如下:起始D0 D1D2D3D4D5D6D7停止2022/7/1845
23、發(fā)送:當執(zhí)行任何一條寫 SBUF的指令時,就啟動串行數據的發(fā)送。在執(zhí)行寫入SBUF的指令時,也將1寫入發(fā)送移位寄存器的第9位(由SBUF和1個獨立的D觸發(fā)器構成),并通知發(fā)送控制器有發(fā)送請求。實際上發(fā)送過程開始于16分頻計數器下次滿度翻轉(由全1變全0)后的那個機器周期的開始。每位的發(fā)送過程與16分頻計數器同步,而不是與“寫SBUF”同步。2022/7/1846圖515 串行口方式1發(fā)送工作原理圖2022/7/1847開始發(fā)送后的一個位周期,發(fā)送信號有效,開始將起始位送TXD引腳。一位時間后,數據信號有效。發(fā)送移位寄存器將數據由低位到高位順序輸出至TXD引腳。一位時間后,第一個移位脈沖出現將最
24、低數據位從右邊移出,同時0從左邊擠入。當最高數據位移至發(fā)送移位寄存器的出端時,先前裝入的第9位的l,正好在最高數據位的左邊,而它的右邊全部為0。這種狀態(tài)被零檢測器檢測到,在第10個位周期(16分頻計數器回0時),發(fā)送控制器進行最后一次移位,清除發(fā)送信號,同時使SCON寄存器中TI置位,完成了一幀數據發(fā)送的全過程。若CPU響應中斷,則執(zhí)行從0023H開始的串行口發(fā)送中斷服務程序。2022/7/1848接收當REN1且清除RI后,若在RXD引腳上檢測到一個1到0的跳變,立即啟動一次接收。同時,復位16分頻計數器,使輸入位的邊沿與時鐘對齊,并將1FFH(即9個l)寫入接收移位寄存器。接收控制器以波特
25、率的16倍的速率繼續(xù)對RXD(P30)引腳進行檢測,計數器的16個狀態(tài)把每一位的時間分為16份,對每一位時間的第7、8、9個計數狀態(tài),位檢測器對RXD端的值采樣,這三個狀態(tài)理論上對應于每一位的中央值。若發(fā)送端與接收端的波特率有差異,就會發(fā)生偏移,只要這種差異在允許范圍內,就不至于發(fā)生錯位或漏碼。在上述三個狀態(tài)下,取得三個采樣值,其中至少有兩個值是一致的,即采用3取2的多數表決法,可抑制噪聲。 2022/7/1849圖516 串行口方式1接收工作原理圖2022/7/1850如果在第1個時鐘周期中接收到的不是0,說明它不是一幀數據的起始位,則復位接收電路,繼續(xù)檢測RXD引腳上l到0的跳變。如果接收
26、到的是起始位,就將其移入接收移位寄存器,然后接收該幀的其它位。接收到的位從右邊移入,原來寫入的1,從左邊移出,當起始位移到最左邊時,接收控制器將控制進行最后一次移位,把接收到的9位數據送入接收數據緩沖器SBUF和RB8,而且置位RI。在進行最后一次移位時,能將數據送入接收數據緩沖器SBUF和RB8,而且置位RI的條件是:RI0 即上一幀數據接收完成時發(fā)出的中斷請求已被響應,SBUF中數據已被取走。SM20或接收到的停止位1。若以上兩個條件中有一個不滿足,將不可恢復地丟失接收到的這一幀信息。 2022/7/18513 串行口方式2和3 11位UART 當SM01、SM10時,串行口選擇方式2;當
27、SM11、SM01時,串行口選擇方式3。由TXD(P3l)引腳發(fā)送數據。由RXD(P30)引腳接收數據。發(fā)送或接收一幀信息為11位:1位起始位(0)、8位數據位(低位在前) 、1位可編程位和1位停止位(l)。發(fā)送時可編程位TB8可設置為1或0,接收時可編程位進入SCON寄存器的RB8位。方式2的波特率是固定的,為振蕩器頻率的1/32或1/64。方式3的波特率則由T1的溢出決定,可用程序設定。 2022/7/1852幀格式如下: 起 始D0D1D2D3D4D5D6D7D8 停 止發(fā)送當執(zhí)行任何一條寫SBUF的指令時,就啟動串行數據的發(fā)送。在執(zhí)行寫入SBUF的指令時,也將 1寫入發(fā)送移位寄存器的第
28、 9位,并通知發(fā)送控制器有發(fā)送請求。實際上發(fā)送過程開始于16分頻計數器下次滿度翻轉(由全1變全0)后的那個機器周期的開始。所以每位的發(fā)送過程與16分頻計數器同步,而不是與“寫SBUF”同步。 2022/7/1853圖517 串行口工作方式2工作原理圖2022/7/1854開始發(fā)送后的一個位周期,發(fā)送信號有效,開始將起始位送TXD引腳。一位時間后,數據信號有效。發(fā)送移位寄存器將數據由低位到高位順序輸出至 TXD引腳。一位時間后,第一個移位脈沖出現將最低數據位從右邊移出,同時0從左邊擠入。當最高數據位移至發(fā)送移位寄存器的輸出端時,先前裝入的第 9位的 1,正好在最高數據位的左邊,而它的右邊全部為0
29、。在第10個位周期間 (16分頻計數器回0時),發(fā)送控制器進行最后一次移位,清除發(fā)送信號,同時使TI置位。 2022/7/1855接收當RENl且清除RI后,若在RXD引腳上檢測到一個l到0的跳變,立即啟動一次接收。同時,復位16分頻計數器,使輸入位的邊沿與時鐘對齊,并將1FFH(即9個1)寫入接收移位寄存器。接收控制器以波特率的16倍的速率繼續(xù)對 RXD引腳進行檢測,對每一位時間的第7、8、9個計數狀態(tài)的采樣值用多數表決法,當兩次或兩次以上的采樣值相同時,采樣值予以接受。如果在第1個時鐘周期中接收到的不是0,就復位接收電路,繼續(xù)檢測RXD引腳上 1到 0的跳變。如果接收到的是起始位,就將其移
30、入接收移位寄存器,然后接該幀的其它位。接收到的位從右邊移入,原來寫入的1,從左邊移出,當起始位移到最左邊時,接收控制器將控制進行最后一次移位,把接收到的9位數據送入接收數據緩沖器SBUF和RB8,而且置位RI。 2022/7/1856在進行最后一次移位時,能將數據送入接收數據緩沖器SBUF和RB8,而且置位RI的條件是: RI0; SM20或接收到的停止位1。 若以上兩個條件中有一個不滿足,將不可恢復地丟失接收到的這一幀信息。 2022/7/1857多處理機通信方式 某些應用系統(tǒng)中,往往需要對多個對象進行控制,采用一個單片機來控制系統(tǒng)中一個對象,然后采用多處理機通信方式實現應用系統(tǒng)的整個功能。
31、在串行口控制寄存器SCON中,設有多處理機通信位SM2(SCON5)。當串行口以方式2或方式3接收時,若SM21,只有當接收到的第9位數據(RB8)為1時,才將數據送入接收緩沖器SBUF,并使RI置1,申請中斷,否則數據將丟失;若SM20,則無論第9位數據(RB8)是1還是0,都能將數據裝入SBUF,并且發(fā)中斷。利用這一特性,便可實現主機與多個從機之間的串行通信。2022/7/1858圖518 80C51多機分布式系統(tǒng)示意圖2022/7/1859 系統(tǒng)初始化時,將所有從機中的SM2位均設置為1,并處于允許串行口中斷接收狀態(tài)。 主機欲與某從機通信,先向所有從機發(fā)出所選從機的地址,從機地址符合后,
32、接著才發(fā)送命令或數據。 在主機發(fā)地址時,置第9位數據(TB8)為1,表示主機發(fā)送的是地址幀; 當主機呼叫某從機聯絡正確后,主機發(fā)送命令或數據幀時,將第9位數據(TB8)清0。 2022/7/1860 各從機由于SM2置1,將響應主機發(fā)來的第9位數據(RB8)為1的地址信息。從機響應中斷后,有兩種不同的操作: 若從機的地址與主機點名的地址不相同,則該從機將繼續(xù)維持SM2為l,從而拒絕接收主機后面發(fā)來的命令或數據信息,等待主機的下一次點名。 若從機的地址與主機點名的地址相同,該從機將本機的SM2清0,繼續(xù)接收主機發(fā)來的命令或數據,響應中斷。2022/7/18611、串行口的波特率發(fā)生器及波特率計算
33、 方式0時的波特率由振蕩器的頻率(fosc)所確定:波特率為fosc/12。 方式2時的波特率由振蕩器的頻率(fosc)和SMOD位(PCON7)所確定: 當SMOD位1時,波特率fosc/32;當SMOD0時,波特率fosc/64。 方式1和3時的波特率由定時器T1的溢出率和SMOD(PCON7)所確定。 串行口的應用2022/7/1862(1)用定時器T1產生波特率 定時器T1的溢出率與它的工作方式有關:定時器T1工作于方式0:此時定時器T1相當于一個13位的計數器。 式中:TC13位計數器初值; X中斷服務程序的機器周期數,在中斷服務程序中重新對定時器置數。2022/7/1863式中:T
34、C16位計數器初值; X中斷服務程序的機器周期數,在中斷服務程序中重新對定時器置數。定時器Tl工作于方式2:此時定時器T1工作于一個8位可重裝的方式,用TL1計數,用TH1裝初值。 定時器T1工作于方式1:此時定時器T1相當于一個16位的計數器。定時器T1的溢出率=fosc/(12(2nTC) )2022/7/1864常用波特率fosc(MHz)SMODTH1初值1920011.059210FDH960011.059200FDH480011.059200FAH240011.059200F4H120011.059200E8H表52 串行口常用波特率及初值2022/7/1865串行通信應用 方式0
35、 【應用一】流水燈 采用80C51的串行口外接CD4094擴展8位并行口,如圖所示,CD4094的各個輸出端均接一發(fā)光二極管,要求發(fā)光二極管從左到右流水顯示。 2022/7/1866 ORG 0000H LJMP MAIN ORG 2000HMAIN:MOV SCON,#00H ;置串行口工作方式0 MOV A,#01H :最高位燈先亮 CLR P1.1 ;關閉并行輸出(避象傳輸過程中, ;各LED的“暗紅”現象)OUT0:MOV SBUF,A ;開始串行輸出OUT1:JNB TI,OUT1 ;輸出完否? CLR TI ;完了,清TI標志,以備下次發(fā)送 SETB P1.1 ;打開并行口輸出 A
36、CALL DELAY ;延時一段時間 RL A ;循環(huán)右移 CLR P1.1 ;關閉并行輸出 SJMP OUT0 ;循環(huán)DELAY: ;延時子程序,不再重復 END2022/7/1867【應用二】點對點通信 單片機1中有5個存放在30H34H單元中數據發(fā)送給單片機2,單片機2收到該5個數據要存放在50H54H單元中,要求采用4.8k波特率進行傳送,兩臺單片機振蕩頻率均為6MHz。 兩臺單片機發(fā)送和接收數據之前需要一“握手”信號“55H”,互相詢問對方是否準備好。任一單片機接收到對方的“握手”信號“55H”,均置本機的F0(PSW.5)標志位為“1”,表明本機已經知道對方準備就緒,可以進行發(fā)送和
37、接收操作。方式1的編程和應用 2022/7/1868 兩臺單片機的定時器T1采用工作方式2,可以避免計數溢出后用軟件重裝定時初值。先計算定時器T1的初值,取SMOD=0 : 定時器T1的溢出率=波特率32/2SMOD =480032/20 =153600然后求出其對應的計數初值為: X=2nfosc/(T1的溢出率12) =286106/(15360012)253=0FDH 為了簡便起見,采用10位的串口方式1進行異步通信。2022/7/1869單片機1的程序: ORG 0000H LJMP START ORG 1000HSTART:MOV TMOD,#20H ;T1工作模式2 MOV SCO
38、N,#50H ;置串行口工作方式 MOV PCON,#00H ;SMOD=0,該語句也可不要 MOV TL1,#0FDH MOV TH1,#0FDH ;初始化波特率 SETB TR1 ;T1開始工作2022/7/1870LAB0 :MOV SBUF,#55H;發(fā)送出“握手”信號 JNB TI,$ CLR TI JNB RI,$ CLR RI MOV A,SBUF CJNE A,#55H,LAB0 SETB F0LAB1: MOV R0,#30HLAB2: MOV SBUF, R0 INC R0 JNB TI,$ CLR TI CJNE R0,#34H,LAB2 END2022/7/1871單片
39、機2的程序: ORG 0000H LJMP START ORG 0023H LJMP INPUT ORG 1000HSTART:MOV TMOD,#20H ;T1工作模式2 MOV SCON,#50H ;置串行口工作方式 MOV PCON,#00H ;SMOD=0,該語句也可不要 MOV TL1,#0FDH MOV TH1,#0FDH ;初始化波特率 MOV R0,#50H SETB EA ;開中斷 SETB ES ;允許串行口中斷 SETB TR1 ;T1開始工作 LJMP $2022/7/1872INPUT:JNB RI,LAB3 JB F0, LAB1 MOV A,SBUF; CJNE
40、A,#55H,LAB0 SETB F0; MOV SBUF,#55H;發(fā)送出“握手”信號LAB0:CLR RI RETILAB1:MOV R0,SBUF INC R0 CJNE R0,#55H,LAB2 CLR ESLAB2:CLR RI; RETILAB3:CLR TI; RETI END2022/7/1873例:試編寫雙機通信程序。甲、乙雙機均為串行口方式1,并以定時器T1的方式2為波特率發(fā)生器,波特率為2400。波特率的計算:這里使用6MHz晶振,以T1的方式2制定波特率。此時T1相當于一個8位的計數器。計算定時器T1的計數初值: 2smod fosc 1 波特率= 32 12 28TH
41、1TH1=28(2SMODfosc)(波特率3212) =256(206106)(24003212) =2566.5=249.5=FAH 2022/7/1874 甲機發(fā)送:將以片內RAM的78H及77H的內容為首地址、以76H及75H的內容減1為末地址的數據塊內容,通過串行口傳至乙機。例:(78H) 20H;首地址高位(77H)00H(76H)20H;末地址高位 (75H)20H 即要求程序將片外RAM的2000H20lFH中的內容輸出到串行口。對數據塊首、末地址的傳送以查詢方式進行,而數據的傳送以中斷方式進行。 2022/7/1875ORG0000HSJMPTRANSORG 0023H ;串
42、行口中斷入口 AJMP SINTORG0030HTRANS:MOV TMOD,20H;置T1為定時器方式2 MOVTL1,0FAH ;置T1定時常數 MOV TH1,0FAH SETB EA ;允許中斷 CLR ES ;關串行口中斷MOVPCON,#00H;波特率不倍增 CLR TI ;清發(fā)送中斷MOV SCON,40H ;置串行口方式1MOV SBUF,78H ;輸出首地址2022/7/1876WAIT1:JNB TI,WAITI ;查詢等待發(fā)送結束 CLR TIMOVSBUF,77HWAIT2:JNB TI,WAIT2 ;查詢等待發(fā)送結束 CLR TI MOV SBUF,76H ;輸出末地
43、址WAIT3:JNB TI,WAIT3 CLR TIMOV SBUF,75HWAIT4:JNB TI,WAIT4 CLR TISETB ES ;允許串行口中斷 2022/7/1877MOV DPH,78H;輸出數據塊中第1個數據 MOV DPL,77H MOVX A,DPTR CLR TI MOV SBUF,A SJMP$;中斷等待ORG0200H;串行口中斷服務程序SINT:PUSH DPL ;保護現場 PUSH DPH PUSH A INC77H;地址加1MOVA,77HJNZJP1INC78H2022/7/1878JP1:MOV A,78H CJNE A,76H,END1 ;判數據傳送是
44、否結束,未;結束則轉END1MOV A,77HCJNE A,75H,END1 CLR ES ;結束,關串行口中斷ESCOM:POP A;恢復現場 POP DPH POP DPL RETIEND1:MOV DPH,78H;數據輸出未結束,則繼續(xù)發(fā)送 MOV DPL,77H MOVX A,DPTR CLR TI MOV SBUF,A RETI 2022/7/1879 乙機接收乙機通過RXD引腳接收甲機發(fā)來的數據,接收波特率與甲機一樣。接收的第1、2字節(jié)是數據塊的首地址,第3、4字節(jié)是數據塊的末地址減1,第5字節(jié)開始是數據,接收到的數據依次存入數據塊首地址開始的存儲器中。 ORG0000HSJMPR
45、ECEIVE;乙機接收ORG0023HAJMPRSINT;串行口中斷入口2022/7/1880ORG0030HRECEIVE:MOV TMOD,#20H;設T1為定時器方式2MOVTL1,0FAH ;置T1定時常數 MOV TH1,0FAH SETB EA ;允許中斷 CLR ES ;關串行口中斷CLR TI ;清發(fā)送中斷 MOV SCON,50H ;置串行口方式1、接收CLR 20H ;置地址標志(20H0,為;地址;20H1,為數據) MOV 70H,78H SJMP$;中斷等待 ORG0200H 2022/7/1881RSINT:PUSH DPL ;保護現場 PUSH DPH PUSH
46、ACC MOV A,R0 PUSH ACC JB 20H,DATA ;判別接收的是地址還是數據,是數;據,轉移 MOV R0,70H ;是地址,分別送入78H75H中去 MOV A,SBUF MOV R0,ADEC 70HCLR RI MOV A, 74H CJNE A,70H,RETURN ;是地址,轉結束 SETB 20H;地址已接收完,置接收數據標志 2022/7/1882RETURN:POP ACC ;恢復現場 MOV R0,A POP ACC POP DPH POP DPLRETIDATA:MOV DPH,78H;接收數據 MOV DPL,77H MOV A,SBUF MOVX DP
47、TR,A ;將數據送入片外RAM CLR RI2022/7/1883INC 77H ;地址加 1 MOV A,77H JNZ DATA1 INC 78H DATA1MOV A,76H CJNZ A,78H,RETURN MOVA,75H CJNE A,77H,RETURN CLR ES ;結束,關串行口中斷 AJMP RETURN 2022/7/1884方式3【應用三】主、從機通信設有一多機通信系統(tǒng),該系統(tǒng)由一個主機和3個從機組成。主機和從機之間可雙向通信,從機和從機之間通信必須經過主機,此時主機僅僅相當于一數據收發(fā)器。2022/7/1885主機只發(fā)送自己內存單元40H43H四個數據給從機2,
48、從機2將接收到的數據存到內存單元50H53H中,則參考程序如下: 主機的程序: ORG 0000H LJMP START ORG 0023H;串口中斷入口地址 LJMP SEND ORG 1000HSTART:MOV TMOD,#20H;T1工作模式2 MOV SCON,#0F8H;置串行口工作方式 MOV TL1,#0FDH MOV TH1,#0FDH;初始化波特率 SETB EA;開中斷 SETB ES;允許串行口中斷 SETB TR1;T1開始工作2022/7/1886INT: MOV SBUF,#02H;發(fā)送從機號 MOV R0,#40H; LJMP $SEND: CLR TB8;準備
49、發(fā)送數據 MOV SBUF,R0 INC R0 CJNE R0,#44H,LAB; CLR ES;串口中斷完成LAB: CLR TI;為下次發(fā)送數據作準備 RETI END2022/7/1887從機2的程序: ORG 0000H LJMP START ORG 0023H LJMP INPUT NAME EQU #2 ORG 1000HSTART:MOV TMOD,#20H ;T1工作模式2 MOV SCON,#0F8H ;置串行口工作方式 MOV TL1,#0FDH MOV TH1,#0FDH ;初始化波特率 MOV R0,#50H SETB EA ;開中斷 SETB ES ;允許串行口中斷
50、SETB TR1 ;T1開始工作 LJMP $2022/7/1888INPUT:JNB RB8,LAB1;判接收的是地址還是數據 MOV A,SBUF; CJNE A,NAME,LAB0;不是本機號,則返回 CLR SM2;準備接收主機數據LAB0:CLR RI;為下次接收作準備 RETILAB1:MOV R0,SBUF INC R0 CJNE R0,#54H,LAB2 SETB SM2; CLR ES;LAB2:CLR RI; RETI END2022/7/1889【應用四】PC機與單片機通信 單片機異步通信的一個重要應用實例是與PC機進行通信。上位機PC機的串口通信軟件多采用高級語言來編寫
51、(如VC+6.0等),可以在許多資料或網絡上方便地查閱。由于PC機的串行口為RS232接口,所以通信時可以選用RS232接口芯片。下面主要介紹單片機每隔一段時間向PC機輪流送數55H和AAH,并接收PC機送來的數據,且轉送到P1口。2022/7/1890 ORG 0000H LJMP START ORG 1000HSTART:MOV TMOD,#20H;T1工作模式2 MOV PCON,#80H;SMOD=1 MOV TL1,#0FDH MOV TH1,#0FDH;初始化波特率 MOV SCON,#50H;置串行口工作方式 MOV R0,#0AAH;準備送出的數 SETB TR1;T1開始工作
52、2022/7/1891WAIT:MOV A,R0 CPL A MOV R0,A MOV SBUF,A LCALL DELAY JBC TI,WAIT1 ;如果TI等于1,則清TI并轉WAIT1 AJMP WAITWAIT1:JBC RI,READ ;如果RI等于1,則清RI并轉READ AJMP WAIT1READ:MOV A,SBUF ;將取得的數送P1口 MOV P1,A LJMP WAITDELAY:MOV R7,#0FFH ;延時子程序 DJNZ R7,$ RET END2022/7/1892例: 通過串行口發(fā)送帶奇偶校驗位的數據塊ASCII碼由7位組成,其最高位可作為奇偶校驗位用。數
53、據塊通過串行口發(fā)送和接收,采用8位異步通信,波特率為1200,已知fosc11.0592MHz。從內部RAM單元20H3FH中取出ASCII碼加上奇偶校驗位之后發(fā)出。設串行口為方式1,定時器/計數器T1為方式2作為串行口的波特率發(fā)生器。SMOD0TH1232E8H 2022/7/1893ORG0100HMOVTMOD,#20H;設T1為方式2MOVTL1,#0E8H;T1定時常數 MOVTH1,#0E8H CLR ESSETBTR1;啟動T1MOVSCON,#01000000B;設串行口為方式1MOVR0,#20H;設發(fā)送數據區(qū)首址MOVR7,#32;發(fā)送32個ASCII碼數據LOOP:MOV
54、 A,R0;取ASCII碼數據ACALL SP-OUT;調用串行口發(fā)送子程序INCR0;未發(fā)送完,則繼續(xù)DJNZR7,LOOP2022/7/1894串行口發(fā)送子程序SP-OUT:MOV C,P;設奇校驗位CPLCMOVACC.7,CMOVSBUF,A;帶校驗位發(fā)送JNBTI,$;發(fā)送等待CLRTIRET2022/7/1895例 通過串行口接收帶奇偶校驗位的數據塊。把接收到的32個字節(jié)數據存放到20H3FH中,波特率仍為1200,若奇校驗出錯,將進位標志C置1 。ORG0100HMOVTMOD,#20H;設T1為定時器方式2 MOVTL1,#0E8H;設T1時間常數MOVTH1,#0E8HSET
55、BTR1;啟動T1 MOV SCON,#01010000B;設串行口為方式1 CLR ESMOVR0,#20H;接收緩沖區(qū)首址MOVR7,#32;接收字節(jié)計數器2022/7/1896LOOP:ACALLSP-IN;調用帶奇校驗的串行口接; 收子程序 JCERROR;校驗錯,轉出錯處理MOVR0,A;存入INCR0DJNZR7,LOOP;未接收完,則繼續(xù) ERROR:;校驗錯,處理SP-IN:JNBRI,$CLRRIMOVA,SBUF;接收一個字節(jié)MOVC,P;檢查奇校驗位,若出錯,C=1CPLCANLA,#7FH;去掉校驗位后的ASCII碼數據RET2022/7/1897例:串行口方式2時,
56、附加的第9位數據為SCON中的TB8,它由軟件置位或清0, 作為數據的奇偶校驗位,試對其發(fā)送和接收進行編程。PIPL:PUSH PSW ;保護現場 PUSH A CLR TI ;清0發(fā)送中斷標志 MOV A,R0 ;取數據 MOV C,P ;奇偶位送C MOV TB8,C ;奇偶位送TB8 MOV SBUF,A ;數據寫入發(fā)送緩沖器,啟動發(fā)送 INC R0 ;數據指針加1 POP A ;恢復現場 POP PSW RETI ;中斷返回2022/7/1898PIPL: PUSH PSW ;保護現場 PUSH A CLR RI ;清0接收中斷標志 MOV A,SUBF ;接收數據 MOV C,P ;
57、取奇偶校驗位 JNC L1 ;偶校驗時轉L1 JNB RB8,ERR ;奇校驗時RB8為0轉出錯處理 SJMP L2L1: JB RB8,ERR ;偶校驗時RB8為1轉出錯處理L2: MOV R0,A ;奇偶校驗對時存入數據 INC R0 ;修改指針 POP A ;恢復現場 POP PSW RETI ;中斷返回ERR: ;出錯處理 RETI ;中斷返回2022/7/1899 例:設有甲、乙兩臺單片機,以工作方式2、全雙工串行通信、每幀為11位、可程控的第9位數據位用于奇偶校驗的補偶位。編出能實現如下功能的程序: 甲機:每發(fā)送1幀信息,乙機對接收的數據進行奇偶校驗,若補偶正確,則乙機向甲機發(fā)出“
58、數據發(fā)送正確”的信息(例中以00H作為回答信號),甲機接收到該回答信號后再發(fā)送下1字節(jié);若奇偶校驗錯,則乙機發(fā)出“數據發(fā)送不正確”的信息(例中以AAH作為回答信號)給甲機,要求甲機再次發(fā)送原數據,直至發(fā)送正確。甲機發(fā)送128個字節(jié)后就停止發(fā)送。 乙機:接收甲機發(fā)送來的數據并進行奇偶校驗,與此同時發(fā)出相應的回答信息(即00H或AAH),直到接收完128個字節(jié)為止。2022/7/18100雙工串行口應答式通信流程圖 (a)甲機發(fā)送流程圖; (b)乙機發(fā)送流程圖 解:能實現上述通信要求的甲、乙機的流程圖。2022/7/18101 圖516雙工串行口應答式通信流程圖(a)甲機發(fā)送流程圖; (b)乙機發(fā)
59、送流程圖 2022/7/18102甲機主程序: ORG 0000H LJMP MAINT ;轉至主程序入口處 ORG 0023H ;串行中斷入口 LJMP INTSE1 ;轉至中斷服務程序 ORG 2100HMAINT: MOV PCON,80H ;波特率加倍 MOV SCON,90H ;置工作方式2并允許接收 MOV DPTR,ADDR1 ;置數據塊指針 MOV R0,80H ;設置發(fā)送字節(jié)數初值 SETB EA ;CPU開中斷 SETB ES ;允許串行口中斷 MOVX A,DPTR ;取第1個發(fā)送數據 MOV C,P ;奇偶標志位送C MOV TB8,C ;奇偶標志位送TB8 MOV S
60、UBF,A ;發(fā)送數據 SJMP $ ;等待中斷2022/7/18103INTSE1: JB RI,LOOP1 ;檢測是否接收口中斷,是則轉 CLR TI ;是發(fā)送中斷,則先清除該標志 SJMP ENDT1 ;轉至ENDT1處LOOP1:CLR RI ;是接收中斷,則先清除該標志 MOV A,SBUF ;取乙機的應答信息 CJNE A,00H,LOOP2 ;發(fā)送不正確轉 INC DPTR ;修改地址指針 MOVX A,DPTR ;取下1個發(fā)送數據 MOV C,P MOV TB8,C ;將奇偶校驗位送TB8 MOV SUBF,A ;啟動串行口,發(fā)送新的數據 DJNZ R0,ENDT1 ; 128
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《專利權基礎》課件
- 《看動作猜詞語》課件
- 《合理使用購物袋》課件
- 《CT檢查與診斷入門》課件
- 《IIR濾波器設計》課件
- 七夕營銷攻略模板
- 重陽節(jié)的傳承與影響模板
- 醫(yī)保行業(yè)新員工培訓模板
- 銀行信用卡 申請書
- 籌建藥店申請書
- 教科版三年級下冊科學全冊完整課件
- 幼兒園中班藝術課《臺布的設計》課件
- 傳統(tǒng)節(jié)日春節(jié)英文介紹課件
- 宮頸疾病診療流程
- HYT 0314-2021 海水入侵監(jiān)測與評價技術規(guī)程
- 質量獎現場評審問題集錦精編版
- 裝配式結構技術課程教學大綱
- 水資源論證報告
- 中藥提取車間生產設備風險評估報告講解
- 實現結構化:初中語文大單元教學設計的核心
- FZ∕T 54088-2016 錦綸6全牽伸單絲
評論
0/150
提交評論