




已閱讀5頁,還剩90頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
.,第8章串行通信,8.1通信的有關(guān)概念,8.2STC12C5A60S2單片機的串行接口,8.3STC12C5A60S2單片機的SPI接口,.,8.1通信的有關(guān)概念,實際應(yīng)用中,計算機的CPU與外部設(shè)備之間常常要進行信息的交換,計算機之間也需要交換信息,所有這些信息的交換均稱為“通信”。,.,并行通信與串行通信,通信的基本方式可分為并行通信和串行通信兩種。并行通信,是指數(shù)據(jù)的各位同時進行傳送的方式。其特點是傳輸速度快,但當(dāng)距離較遠(yuǎn),位數(shù)又多時導(dǎo)致了通信線路復(fù)雜且成本高。串行通信,是指數(shù)據(jù)一位一位的順序傳送的通信方式。其特點是通信線路簡單,只要一對傳輸線就可以實現(xiàn)通信,從而大大的降低了成本,特別適用于遠(yuǎn)距離通信,但傳送速度慢。,.,1.按照串行數(shù)據(jù)的同步方式分類,按照串行數(shù)據(jù)的同步方式,串行通信本身又分為異步傳送和同步傳送兩種基本方式。(1)異步傳送在異步傳送中,每一個字符要用起始位和停止位作為字符開始和結(jié)束的標(biāo)志,它是以字符為單位一個個的發(fā)送和接收的。異步傳送時,每個字符的組成格式如下:首先是一個起始位表示字符的開始;后面緊跟著的是字符的數(shù)據(jù)字,數(shù)據(jù)字可以是5,6,7或8位數(shù)據(jù),在數(shù)據(jù)字中可根據(jù)需要加入奇偶校驗位;最后是停止位,其長度可以是一位,一位半或兩位。所以,串行傳送的數(shù)據(jù)字節(jié)加上成幀信號起始位和停止位就形成一個字符串行傳送的幀。起始位用邏輯“0”低電平表示,停止位用邏輯“1”高電平表示。圖(a)所示為數(shù)據(jù)字為7位的ASCII碼,第8位是奇偶校驗位。加上起始位、停止位,一個字符由10位組成。這樣形成幀信號后,字符便可以一個接一個的傳送了。在異步傳送中,字符間隔不固定,在停止位后可以加空閑位,空閑位用高電平表示,用于等待發(fā)送。這樣,接收和發(fā)送可以隨時的或間斷的進行,而不受時間的限制。圖(b)為有空閑位的情況。,8.1.1串行通信的分類,.,.,(2)同步傳送所謂同步傳送就是去掉異步傳送時每個字符的起始位和停止位的成幀標(biāo)志信號,僅在數(shù)據(jù)塊開始處用同步字符來指示。如下圖所示。同步傳送的有效數(shù)據(jù)位傳送速率高于異步傳送,可達(dá)50千波特。其缺點是硬件設(shè)備較為復(fù)雜,因為它要求要有時鐘來實現(xiàn)發(fā)送端和接收端之間的嚴(yán)格同步,而且對時鐘脈沖信號的相位一致性還要求非常嚴(yán)格,為此通常還要采用“鎖相器”等措施來保證。,在異步數(shù)據(jù)傳送中,CPU與外設(shè)之間事先必須約好兩項事宜:第一、字符格式。雙方要約好字符的編碼形式、奇偶校驗形式、以及起始位和停止位的規(guī)定。第二、波特率(Baudrate)。波特率是衡量數(shù)據(jù)傳送速率的指標(biāo),它要求發(fā)送站和接收站都要以相同的數(shù)據(jù)傳送速率工作。,.,2按照數(shù)據(jù)的傳送方向分類1)點對點傳輸一般情況下,串行數(shù)據(jù)傳送是在兩個通信端之間進行的。其數(shù)據(jù)傳送的方式有如圖所示的幾種情況。圖(a)為單工通信方式。A端為發(fā)送站,B端為接收站,數(shù)據(jù)僅能從A站發(fā)至B站。圖(b)為半雙工通信方式。數(shù)據(jù)可以從A發(fā)送到B,也可以由B發(fā)送到A。不過同一時間只能作一個方向的傳送,其傳送方式由收發(fā)控制開關(guān)K來控制。圖(c)為全雙工通信方式。每個站(A、B)既可同時發(fā)送,又可同時接收。,.,2)主從多終端通信方式A站可以向多個終端(B、C、D)發(fā)出信息。在A站允許的條件下,可以控制管理B、C、D等站在不同的時間向A站發(fā)出信息。根據(jù)數(shù)據(jù)傳送的方向又可分為多終端半雙工通信和多終端全雙工通信。這種多終端通信方式常用于主從計算機系統(tǒng)通信中。,.,8.1.2通用的異步接收器/發(fā)送器UART在串行傳送中,數(shù)據(jù)是一位一位按順序進行的,而計算機內(nèi)部的數(shù)據(jù)是并行的。因此當(dāng)計算機向外發(fā)送數(shù)據(jù)時,必須將并行的數(shù)據(jù)轉(zhuǎn)換為串行的數(shù)據(jù)再行傳送。反之,又必須將串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)輸入計算機中。上述并串或串并的轉(zhuǎn)換既可以用通用的異步接收器/發(fā)送器實現(xiàn)。通用的異步接收器/發(fā)送器,簡稱UART(UniversalAsynchronousReceiver/Transmitter),是串行接口的核心部件,其結(jié)構(gòu)如圖所示,它既能發(fā)送,由并行串行輸出;又能接收,由串行并行輸入。對每一方來說都是一個雙緩沖器結(jié)構(gòu)。當(dāng)UART接收數(shù)據(jù)時,串行數(shù)據(jù)先經(jīng)RXD端(ReceiverData)進入移位寄存器,再經(jīng)移位寄存器輸出并行數(shù)據(jù)到緩沖器,最后通過數(shù)據(jù)總線送到CPU;當(dāng)UART發(fā)送信息時,先由CPU經(jīng)數(shù)據(jù)總線將并行數(shù)據(jù)送給緩沖器,再由并行緩沖器送給一位寄存器,最后逐位由TXD(TransmitterData)端輸出。所有這些工作都是在時鐘信號和其他控制信號作用下完成的。,.,.,8.2STC12C5A60S2單片機的串行口,STC12C5A60S2單片機具有2個采用UART工作方式的全雙工串行通信接口(串口1和串口2)。每個串口由2個數(shù)據(jù)緩沖器、1個移位寄存器、1個串行控制寄存器和一個波特率發(fā)生器等組成。每個串口的數(shù)據(jù)緩沖器由串行接收緩沖器和發(fā)送緩沖器構(gòu)成,它們在物理上是獨立的,既可以接收數(shù)據(jù)也可以發(fā)送數(shù)據(jù),還可以同時發(fā)送和接收數(shù)據(jù)。接收緩沖器只能讀出,不能寫入,而發(fā)送緩沖器則只能寫入,不能讀出。它們共用一個地址號。STC12C5A60S2的串行口既可以用于串行異步通信,也可以構(gòu)成同步移位寄存器。如果在串行口的輸入/輸出引腳上加上電平轉(zhuǎn)換器,可以方便地構(gòu)成標(biāo)準(zhǔn)的RS-232接口。串口1與傳統(tǒng)8051單片機的串口完全兼容。串口2的結(jié)構(gòu)、工作原理與串口1類似。,.,8.2.1串行接口的寄存器,與串行接口1相關(guān)的寄存器有SCON、PCON、AUXR、SBUF、TMOD、TL1、TH1、TCON、IE、IP、IPH、SADEN和SADDR。與串行接口2相關(guān)的寄存器有:S2CON、S2BUF、BRT、AUXR、IE2、IP2、IPH2和AUXR1。,SM0/FE:PCON寄存器中的SMOD0位為1時,該位用于幀錯誤檢測,當(dāng)檢測到一個無效停止位時,通過UART接收器設(shè)置該位。它必須由軟件清零。PCON寄存器中的SMOD0為0時,該位和SM1一起指定串行通信的工作方式,1.串口1控制寄存器SCONSCON(地址為98H,復(fù)位值為00H)用于確定串行通道的操作方式和控制串行通道的某些功能。也可用于發(fā)送和接收第九個數(shù)據(jù)位(TB8、RB8),并設(shè)有接收和發(fā)送中斷標(biāo)志(RI及TI)位。SCON各位的意義如下:,.,SM2:在方式2和方式3時,如SM2=1,只有在接收數(shù)據(jù)第9位為1時才能激發(fā)中斷標(biāo)志(RI=1)。在方式1時,如SM2=1,則只有在接收到有效停止位時才能激發(fā)中斷標(biāo)志(RI=1)。在方式0時,SM2應(yīng)為0。REN:允許串行I/O口接收控制位。用軟件置REN=1時為允許接收狀態(tài),可啟動串行口的接收器RXD,開始接收數(shù)據(jù)。用軟件復(fù)位(REN=0)時,為禁止接收狀態(tài)。TB8:在方式2和方式3時,它是要發(fā)生的第九個數(shù)據(jù)位,按需要由軟件進行置位或清零。例如可用作數(shù)據(jù)的奇偶校驗位,或在多機通信中表示是地址幀/數(shù)據(jù)幀標(biāo)志位(TB8=1/0)。RB8:在方式2和方式3時,它是接收到的第九位數(shù)據(jù),作為奇偶位或地址幀/數(shù)據(jù)幀標(biāo)志位。在方式1時,若SM2=0,則RB8是接收到的停止位,在方式0時,不使用RB8。,.,TI:發(fā)生中斷標(biāo)志位。在方式0時,當(dāng)串行發(fā)送數(shù)據(jù)字第八位結(jié)束時,由內(nèi)部硬件置位(TI=1),向CPU申請發(fā)生中斷。CPU響應(yīng)中斷后,必須用軟件清零,取消此中斷標(biāo)志。在其他方式時,它在停止位開始發(fā)送時由硬件置位。同樣,必須用軟件使其復(fù)位。RI:接收中斷標(biāo)志位。在方式0時,串行接收到第八位結(jié)束時由內(nèi)部硬件置位。在其他方式中,它在接收到停止位的中間時刻由硬件置位,也必須用軟件來復(fù)位。當(dāng)一幀數(shù)據(jù)發(fā)送完成時,發(fā)送中斷標(biāo)志TI被置位,接著發(fā)生串口中斷,進入串口中斷服務(wù)程序。但CPU事先并不能分辨是TI還是RI的中斷請求,因此,必須在中斷服務(wù)程序中用位測試指令加以判別。兩個中斷標(biāo)志位TI及RI均不能自動復(fù)位,必須在中斷服務(wù)程序中使用清中斷標(biāo)志位指令,撤銷中斷請求狀態(tài),否則原先的中斷標(biāo)志位狀態(tài)又將表示有中斷請求。,.,2.串口2控制寄存器S2CON,寄存器S2CON(地址為9AH,復(fù)位值為00H)用于確定串口2的操作方式和控制串口2的某些功能,也可用于發(fā)送和接收第9個數(shù)據(jù)位(S2TB8、S2RB8),并設(shè)有接收和發(fā)送中斷標(biāo)志(S2RI及S2TI)位。S2CON各位的意義如下:,寄存器S2CON的各個位與寄存器SCON的各個位含義和功能都類似,讀者可以進行對比學(xué)習(xí),在此,不再贅述。,.,3.掉電控制寄存器PCONPCON(地址為87H,復(fù)位值為30H)中的SMOD用于設(shè)置方式1、方式2和方式3的波特率是否加倍。各位的定義如下:,其中,與串行通信相關(guān)的位是SMOD和SMOD0。SMOD:串行口波特率系數(shù)控制位。復(fù)位時,SMOD=0。1:使方式1、方式2和方式3的波特率加倍。0:各工作方式的波特率不加倍。SMOD0:幀錯誤檢測有效控制。復(fù)位時,SMOD0=0。1:SCON寄存器中的SM0/FE位用于FE(幀錯誤檢測)功能。0:SCON寄存器中的SM0/FE位用于SM0功能,和SM1一起指定串行通信的工作方式。,.,4輔助寄存器AUXR輔助寄存器AUXR(地址為8EH,復(fù)位值為00H)各位的定義如下:,T0 x12和T1x12用于設(shè)置定時器0和定時器1的速度。詳見“第8章定時/計數(shù)器與可編程計數(shù)器陣列”一章。EXTRAM用于設(shè)置是否允許使用內(nèi)部擴展的1024字節(jié)擴展RAM。1)UART_M0 x6:串行口模式0的通信速度設(shè)置位。0:UART串口模式0的速度是傳統(tǒng)12T的8051速度,12分頻。1:UART串口模式0的速度是傳統(tǒng)12T的8051的6倍,2分頻。2)BRTR:獨立波特率發(fā)生器運行控制位。0:不允許獨立波特率發(fā)生器運行。1:允許獨立波特率發(fā)生器運行。3)S2SMOD:UART2的波特率加倍控制位。0:UART2的波特率不加倍。1:UART2的波特率加倍。,.,4)BRTx12:獨立波特率發(fā)生器計數(shù)控制位。0:獨立波特率發(fā)生器每12個時鐘計數(shù)一次。1:獨立波特率發(fā)生器每1個時鐘計數(shù)一次。5)S1BRS:串口1波特率發(fā)生器選擇位。0:選擇定時器1作為串口1波特率發(fā)生器。1:選擇獨立波特率發(fā)生器作為串口1的波特率發(fā)生器,此時定時器1得到釋放,可以作為獨立定時器使用。,注意:對于具有串口2的STC12C5A60S2單片機,串口2只能使用獨立波特率發(fā)生器作為波特率發(fā)生器,不能夠選擇定時器1作為波特率發(fā)生器;串口1可以選擇定時器1作為波特率發(fā)生器,也可以選擇獨立波特率發(fā)生器作為波特率發(fā)生器。,.,5獨立波特率發(fā)生器寄存器BRT獨立波特率發(fā)生器寄存器BRT(地址為9CH,復(fù)位值為00H)用于保存重裝時間常數(shù)。,6從機地址控制寄存器為了方便多機通信,STC12C5A60S2單片機設(shè)置了從機地址控制寄存器SADEN和SADDR。其中,SADEN是從機地址掩模寄存器(地址為B9H,復(fù)位值為00H),SADDR是從機地址寄存器(地址為A9H,復(fù)位值為00H)。7數(shù)據(jù)緩沖器數(shù)據(jù)緩沖器用于保存要發(fā)送的數(shù)據(jù)或者從串口接收到的數(shù)據(jù)。串口1的數(shù)據(jù)緩沖器是SBUF,串口2的數(shù)據(jù)緩沖器是S2BUF。對于串口1,當(dāng)一個字符接收完畢,移位寄存器中的數(shù)據(jù)字節(jié)裝入串行接收數(shù)據(jù)緩沖器SBUF中,其第9位則裝入SCON寄存器的RB8位。如果SM2使得已接收的數(shù)據(jù)無效,則RB8位和SBUF緩沖器中的內(nèi)容不變。對于串口2,當(dāng)一個字符接收完畢,移位寄存器中的數(shù)據(jù)字節(jié)裝入串行接收數(shù)據(jù)緩沖器S2BUF中,其第9位則裝入S2CON寄存器的S2RB8位。如果S2SM2使得已接收的數(shù)據(jù)無效,則S2RB8位和S2BUF緩沖器中的內(nèi)容不變。無論對于串口1還是串口2,發(fā)送緩沖器只能寫入,不能讀出;接收緩沖器只能讀出,不能寫入。因此,串口1的兩個緩沖器共用一個地址號(99H),串口2的兩個緩沖器共用一個地址號(9BH)。,.,(4)串行收發(fā)寄存器SBUF(字節(jié)地址99H,沒有位尋址)在所有的串行方式中,在寫SBUF信號的控制下,將其數(shù)據(jù)裝入移位寄存器,前面8位為數(shù)據(jù)字節(jié),其最低位就是移位寄存器的移位輸出位。根據(jù)不同的工作方式會將“1”或TB8的值裝入移位寄存器的第九位,并進行發(fā)送。當(dāng)一個字符接收完畢,移位寄存器中的數(shù)據(jù)字節(jié)裝入串行接收數(shù)據(jù)緩沖器SBUF中,其第九位則裝入SCON寄存器的RB8位。如果SM2使得已接收的數(shù)據(jù)無效,則RB8位和SBUF緩沖器中的內(nèi)容不變。發(fā)送緩沖器只能寫入不能讀出,而接收緩沖器只能讀出,不能寫入。因而兩個緩沖器可共有一個地址號(99H)。,.,8.2.2串行接口的四種工作方式,1方式0移位寄存器方式。(1)串口1的工作方式0串行口輸出端可直接與移位寄存器相連,也可用作擴展I/O口或外接同步輸入輸出設(shè)備。發(fā)送過程:當(dāng)CPU將數(shù)據(jù)寫入到發(fā)送緩沖區(qū)SBUF時,串行口即把8位數(shù)據(jù)以Fosc/12的波特率由RXD引腳輸出,同時由TXD引腳輸出同步脈沖。字符發(fā)送完畢,置中斷標(biāo)志TI為1。接收過程:控制字除方式0外,還應(yīng)置允許接收控制位REN=1。清除RI中斷標(biāo)志。接收器啟動后RXD為數(shù)據(jù)輸入端,TXD為同步信號輸出端。接收器以Fosc/12波特率采樣RXD引腳輸入的數(shù)據(jù)信息。當(dāng)接收完8位數(shù)據(jù)時又重新置RI=1。方式0工作時,必須使SCON控制字的SM2位(多機通信控制位)為0。由于波特率固定,無須用定時器提供。但以中斷方式傳送數(shù)據(jù)時,CPU響應(yīng)中斷并不會自動清除TI、RI標(biāo)志,所以在中斷服務(wù)程序中必須由指令清0。例如CLRTI及CLRRI指令。(2)串口2的工作方式0串行數(shù)據(jù)通過RXD2/P1.2(RXD2/P4.2)接收和發(fā)送,TXD2/P1.3(TXD2/P4.3)輸出同步移位時鐘,發(fā)送接收的是8位數(shù)據(jù),低位在先,波特率固定在Fosc/12。,.,方式0工作方式波形圖,.,2其他方式UART方式(1)串口1的UART方式發(fā)送過程:CPU執(zhí)行數(shù)據(jù)寫入發(fā)送緩沖區(qū)SBUF的指令即可啟動發(fā)送(如MOVSBUF,A)。串行口內(nèi)自動將發(fā)送緩沖區(qū)中內(nèi)容送入發(fā)送移位寄存器。發(fā)送移位寄存器先發(fā)一個起始位,接著按程序設(shè)定每個字符的代碼,先低位后高位。數(shù)據(jù)字加上奇偶校驗位或可控位(方式2,3中即為程序設(shè)定的TB8位的值),再發(fā)停止位,從而完成一幀的發(fā)送。串行數(shù)據(jù)均由TXD端輸出,發(fā)送完畢將中斷標(biāo)志位置1,以供查詢及向CPU申請中斷之用。接收過程:接收數(shù)據(jù)均由RXD輸入,串行口以所選定的波特率的16倍速率采樣RXD端狀態(tài)。當(dāng)采樣的RXD端電平由1到0的跳變時,就啟動接收器。串行口按程序?qū)彾ǖ母袷浇邮找粠a,并把此碼的數(shù)據(jù)位拼成并行碼送入接收緩沖寄存器中(在方式1時,把停止位:方式2、3時把程控的第九位數(shù)據(jù)都送入RB8),等待CPU取走。為保證可靠無誤,對每一數(shù)據(jù)位要進行連續(xù)3次采樣,接收的值取3次采樣中至少相同的二次的值。接收完畢,置接收中斷標(biāo)志RI=1。CPU的響應(yīng)中斷后必須在中斷服務(wù)程序中使RI清零。,.,方式1工作方式波形圖,.,方式2、3工作方式波形圖,.,方式1與方式2、3的區(qū)別之一是:方式1其數(shù)據(jù)字是8位異步通信接口,串行口發(fā)送/接收收共10位信息,第0位為起始位“0”,18位是數(shù)據(jù)位,最后是停止位“1”;方式2、3其數(shù)據(jù)字為9位的異步通信接口。1位起始位“0”,8位數(shù)據(jù)位,第9位是可程控位“1”或“0”,最后是停止位“1”,共有11位信息。方式1與方式2、3的區(qū)別之二是:方式1、3的波特率是可變的,其波特率取決于定時器1的溢出率和特殊功能寄存器PCON中的SMOD位的值,即工作方式1、3的波特率=2SMOD(定時器1的溢出率)/32而工作方式2的波特率=2SMOD(振蕩器頻率)/64顯然,方式2的波特率變化范圍比方式1、3小,這也是方式2和方式3的唯一區(qū)別。TB8可用于多機通信或作為奇偶校驗位使用。若以TB8位作為奇偶校驗位,處理方法為數(shù)據(jù)寫入SBUF之前,先將數(shù)據(jù)的奇偶位寫入TB8(設(shè)工作寄存器區(qū)2的R0作為發(fā)送數(shù)據(jù)區(qū)地址指針)。,.,RIPTI:PUSHPSW;保護現(xiàn)場PUSHACCSETBPSW.4CLRPSW.3CLRTI;發(fā)送中斷標(biāo)志TI清零MOVA,R0;取數(shù)據(jù)MOVC,PMOVTB8,CMOVSBUF,A;數(shù)據(jù)寫入到發(fā)送緩沖器,啟動發(fā)送器INCR0;數(shù)據(jù)指針加1POPACCPOPPSW;恢復(fù)現(xiàn)場RETI,.,對輸入方式而言,除選不同的方式控制外,均應(yīng)使REN=1,允許串行接收。只有在最后的移位脈沖產(chǎn)生并同時滿足下列二個條件時,才會產(chǎn)生接收數(shù)據(jù)裝入SBUF和RB8及置位RI的信號:對方式1對方式2、31)RI01)RI=02)SM2=0或接收到的停止位12)SM2=0或接收到的第九個數(shù)據(jù)1如果不滿足上述條件,接收到的信號將不可避免的丟失。由此可見,中斷標(biāo)志必須由用戶在中斷服務(wù)程序中設(shè)置清“0”指令。否則,將有可能產(chǎn)生另一次中斷而造成混亂并影響后序數(shù)據(jù)的接收。,.,(2)串口2的UART方式1)模式1:10位數(shù)據(jù)通過TXD2/P1.3(TXD2/P4.3)發(fā)送,通過RXD2/P1.2(RXD2/P4.2)接收。一幀數(shù)據(jù)包含一個起始位(0),8個數(shù)據(jù)位和一個停止位(1)。接收時,停止位進入特殊功能寄存器S2CON的S2RB8位。波特率由獨立波特率發(fā)生器BRT的溢出率決定。2)模式2:11位數(shù)據(jù)通過TXD2/P1.3(TXD2/P4.3)發(fā)送,通過RXD2/P1.2(RXD2/P4.2)接收。一幀數(shù)據(jù)包含一個起始位(0),8個數(shù)據(jù)位,一個可編程的第9位和一個停止位(1)。發(fā)送時,第9位數(shù)據(jù)由特殊功能寄存器S2CON的S2TB8位確定;接收時,第9位數(shù)據(jù)進入特殊功能寄存器S2CON的S2RB8位。波特率為:Fosc/32或者Fosc/64。3)模式3:波特率的確定方法與模式1相同,數(shù)據(jù)的傳輸模式和模式2相同。,.,8.2.3多處理機通信,下面以使用串口1為例說明多機通信的過程。串行口控制寄存器SCON中的SM2位為方式2和方式3工作時進行多機通信的控制位。這種多機通信方式一般為一臺主機:多臺從機系統(tǒng);主機發(fā)送信息可被各從機接收,而從機只能對主機發(fā)送信息。而從機間互相不能直接通信。,.,多機系統(tǒng)中使用兩類信息,一類是地址信息,用于選擇從機;另一類是要傳送的數(shù)據(jù)信息。在通信中使用第9位區(qū)分兩類信息。地址幀:第9位為1數(shù)據(jù)幀:第9位為0從機系統(tǒng)由初始化程序(或相關(guān)處理程序)將串行口置成工作方式2或3,SM2=1,REN=1,處于接收狀態(tài)。當(dāng)主機和某一從機通信時,主機應(yīng)先發(fā)出地址幀確定某從機的地址,接著才能送數(shù)據(jù)或命令。當(dāng)各從機接收到主機發(fā)出的地址幀信息后,由于第9數(shù)據(jù)位為“1”,可激發(fā)中斷標(biāo)志RI=1,分別中斷CPU。各CPU響應(yīng)中斷后均進入中斷服務(wù)程序,在服務(wù)程序中把主機送來的地址號與本從機的地址號相比較,若地址相等,則使本機之SM2置“0”,為接收主機接著送來的數(shù)據(jù)幀作準(zhǔn)備。而地址號不符的其他從機仍然維持SM2=1狀態(tài),對主機以后發(fā)出的數(shù)據(jù)幀信息不予理睬,不激發(fā)中斷標(biāo)志RI=0,直到與主機發(fā)出的地址信息相符后,才可接收以后的數(shù)據(jù)信息。從而實現(xiàn)了主從一對一通信(點點通信)。在多機通信時,SM2控制位起著極為重要的作用。,.,方式0:串口1:波特率為振蕩頻率的1/12或1/2(由UART_M0 x6決定)。串口2:波特率為振蕩頻率的1/12,忽略波特率發(fā)生器。方式2:波特率是可編程設(shè)定的,有兩種波特率可選擇,它取決于電源控制寄存器PCON中SMOD位的值,當(dāng)SMOD=0時,為振蕩頻率的1/64;當(dāng)SMOD=1時,為振蕩頻率的1/32。工作于方式1和3時:波特率是可變的。對于串口1,可以通過編程改變定時器1的溢出率或者獨立波特率發(fā)生器的溢出率來確定波特率。對于串口2,只能通過編程改變獨立波特率發(fā)生器的溢出率來確定波特率。波特率(定時器1的溢出率或獨立波特率發(fā)生器的溢出率)定時器1作為波特率發(fā)生器應(yīng)用時,最典型的用法是定時器1工作在自動再裝入時間常數(shù)的定時方式2(即定時器的方式控制寄存器TMOD的高四位為0010B狀態(tài)。定時器的控制寄存器TCON的TCON.6(TR1)=1啟動定時器1,禁止定時器中斷)。這時溢出率取決于TH1中的自動重新再裝入值。定時器1的溢出率可由下式算出:溢出率其中,12T模式時,n=1;1T模式時,n=0。將此值代入求波特率的算式,可求得串行口的波特率,8.2.4波特率的設(shè)定,.,當(dāng)使用獨立波特率發(fā)生器BRT時,獨立波特率發(fā)生器的溢出率為:獨立波特率發(fā)生器的溢出率Fosc/12n(256BRT)其中,BRT為BRT寄存器的值。對于獨立波特率發(fā)生器BRT,1T模式是指BRTx12=1,12T模式是指BRTx12=0。12T模式時,n=1;1T模式時,n=0。此時,串行口的波特率計算公式為:串行口的波特率由于串口2只能使用獨立波特率發(fā)生器,因此,在使用串口2時,應(yīng)特別注意波特率的設(shè)置方法。,.,SMOD=0時,自動重裝時間常數(shù)RELOAD的計算方法:(1)計算RELOAD1)12T模式的計算公式:RELOAD=256-INT(fosc/Baud0/32/12+0.5)2)1T模式的計算公式:RELOAD=256-INT(fosc/Baud0/32+0.5)式中,INT()表示取整運算即舍去小數(shù),在式中加0.5可以達(dá)到四舍五入的目的。fosc為晶振頻率;Baud0為標(biāo)準(zhǔn)波特率。(2)計算用RELOAD產(chǎn)生的波特率1)12T模式:Baud=fosc/(256-RELOAD)/32/122)1T模式:Baud=fosc/(256-RELOAD)/32(3)計算誤差率error=(Baud-Baud0)/Baud0*100%(4)如果誤差率4.5%,則需要更換波特率或者更換晶體頻率,重復(fù)步驟1)-4)。例如:設(shè)fosc=22.1184MHz,Baud0=57600,則12T模式時,RELOAD=256-INT(22118400/57600/32/12+0.5)=255=0FFHBaud=22118400/(256-255)/32/12=57600誤差等于零。又如,設(shè)fosc=18.432MHz,Baud0=57600,則12T模式時,RELOAD=256-INT(18432000/57600/32/12+0.5)=0FFHBaud=18432000/(256-255)/32/12=48000誤差:error=(48000-57600)/57600*100%=-16.66%誤差很大,需要更換波特率或者更換晶體頻率。在實際設(shè)計時,為了保證通信的可靠性,應(yīng)盡量保證設(shè)計后的誤差為0。常用波特率與系統(tǒng)時鐘及定時器1的重裝時間常數(shù)等設(shè)置關(guān)系請參考表8-4。,.,8.2.5串行接口通信應(yīng)用舉例,1、串口1的編程要點(1)設(shè)置串口的工作模式設(shè)置SCON寄存器的內(nèi)容。若要串口接收,需將其中的REN位置1。(2)設(shè)置正確的波特率1)使用定時器1作為波特率發(fā)生器時,需要設(shè)置定時器1的工作方式和時間常數(shù)(設(shè)定TMOD和TH1、TL1寄存器的內(nèi)容);啟動定時器1(置位TR1)。2)使用獨立波特率發(fā)生器時,需要設(shè)置獨立波特率發(fā)生器寄存器和相應(yīng)的位,包括:獨立波特率發(fā)生器寄存器BRT,BRTx12位,SMOD位。啟動BRT(置位BRTR),BRT開始計數(shù)。(3)設(shè)置串口的中斷優(yōu)先級(設(shè)置PS和PSH,也可以不設(shè)置,取默認(rèn)值),設(shè)置相應(yīng)的中斷控制位(ES和EA)。(4)如要串口1發(fā)送,將數(shù)據(jù)送入SBUF。(5)編制串行中斷服務(wù)程序,在中斷服務(wù)程序中要有清除中斷標(biāo)志指令(將TI和RI清零)。,.,2、串口2的編程要點(1)設(shè)置串口2的工作模式設(shè)置S2CON寄存器中的S2SM0和S2SM1兩位。如要串口2接收,將S2REN置1。(2)設(shè)置串口2的波特率相應(yīng)的寄存器和位,包括:獨立波特率發(fā)生器寄存器BRT、BRTx12和S2SMOD位。啟動BRT(置位BRTR),BRT開始計數(shù)。(3)設(shè)置串口2的中斷優(yōu)先級(設(shè)置PS2和PS2H,也可以不設(shè)置,取默認(rèn)值),設(shè)置打開相應(yīng)的中斷控制位(ES2和EA)。(4)如要串口2發(fā)送,將數(shù)據(jù)送入S2BUF。(5)編制串行中斷服務(wù)程序,在中斷服務(wù)程序中要設(shè)置清除中斷標(biāo)志指令(分別是接收完成標(biāo)志S2RI和發(fā)送完成標(biāo)志S2TI)。,.,例8-1設(shè)有甲、乙兩臺單片機,編出兩臺單片機間實現(xiàn)如下串行通信功能的程序。甲機發(fā)送:將首址為ADDRT的128個字節(jié)的數(shù)據(jù)塊順序向乙機發(fā)送;乙機接收:將接收的128個字節(jié)的數(shù)據(jù),順序存放在以首址為ADDRR的數(shù)據(jù)緩沖區(qū)中。編制該類程序的要點是,選定正確的控制字,以保證接口功能的初始化;選擇合適的波特率,這主要是選擇定時器1的方式和時間常數(shù)的確定;最后還應(yīng)注意是在串行中斷服務(wù)程序中要設(shè)置清除中斷標(biāo)志指令,否則將產(chǎn)生另一個中斷。,.,甲機發(fā)送程序流程圖,.,匯編語言發(fā)送程序如下:$include(STC12C5A.INC);包含STC12C5A60S2單片機寄存器定義文件ORG0000HLJMPMAINT;跳至主程序入口ORG0023HLJMPINTSE1;轉(zhuǎn)至串行中斷服務(wù)程序ORG0100HMAINT:MOVSP,#60H;設(shè)置堆棧指針MOVSCON,#01000000B;置串行口工作方式1MOVTMOD,#20H;定時器1為工作方式2MOVTH1,#0FDH;產(chǎn)生9600bps的時間常數(shù)MOVTL1,#0FDHSETBTR1;啟動定時器1SETBES;串行口開中斷SETBEA;開中斷MOVDPTR,#ADDRT;ADDRT是首址,可以使用EQU定義MOVR0,#00H;傳送字節(jié)數(shù)初值MOVXA,DPTR;取第一個發(fā)送字節(jié)MOVSBUF,A;啟動串行口發(fā)送SJMP$;等待中斷;中斷服務(wù)程序INTSE1:CLRTI;將中斷標(biāo)志清零CJNER0,#7FH,LOOPT;判斷128B是否發(fā)送完,若沒完,則轉(zhuǎn)LOOPTCLRES;全部發(fā)送完畢,禁止串行口中斷LJMPENDT;轉(zhuǎn)中斷返回LOOPT:INCR0;修改字節(jié)數(shù)指針I(yè)NCDPTR;修改地址指針MOVXA,DPTR;取發(fā)送數(shù)據(jù)MOVSBUF,A;啟動串行口ENDT:RETI;中斷返回END,.,對應(yīng)的C語言程序如下:#include“stc12c5a.h”/包含STC12C5A60S2單片機寄存器定義文件unsignedcharxdataADDRT128;/在外部RAM區(qū)定義128個單元unsignedcharnum=0;/聲明計數(shù)變量unsignedchar*psend;/指向發(fā)送數(shù)據(jù)區(qū)的指針voidmain(void)/主程序SCON=0 x40;/置串行口工作方式1TMOD=0 x20;/定時器1為工作方式2TH1=0 xFD;/產(chǎn)生9600bps的時間常數(shù)TL1=0 xFD;TR1=1;/啟動定時器1ES=1;/串行口開中斷EA=1;/開中斷psend=ADDRT;/設(shè)置發(fā)送數(shù)據(jù)緩沖區(qū)指針SBUF=*psend;/發(fā)送第一個數(shù)據(jù)while(1);/等待中斷voidUART_ISR(void)interrupt4/中斷號4是串行中斷TI=0;/清發(fā)送中斷標(biāo)志num+;/修改計數(shù)變量值if(num=0 x7F)ES=0;/判斷是否發(fā)送完,若已完,則關(guān)中斷else/否則,修改指針,發(fā)送下一個數(shù)據(jù)psend+;SBUF=*psend;,.,乙機接收數(shù)據(jù)流程圖,.,接收程序如下(匯編語言):對應(yīng)的C語言程序請思考$include(STC12C5A.INC);包含STC12C5A60S2單片機寄存器定義文件ORG0000HLJMPMAINR;轉(zhuǎn)主程序ORG0023HLJMPINTSE2;轉(zhuǎn)串行口中斷服務(wù)程序ORG0100HMAINR:MOVSP,#60H;設(shè)置堆棧指針MOVSCON,#01010000B;置串行口工作方式1,允許接收MOVTMOD,#20H;定時器1為工作方式2MOVTH1,#0FDH;產(chǎn)生9600bps的時間常數(shù)MOVTL1,#0FDHSETBTR1;啟動定時器1SETBES;串行口開中斷SETBEA;開中斷MOVDPTR,#ADDRR;數(shù)據(jù)緩沖區(qū)首址送DPTRMOVR0,#00H;置傳送字節(jié)數(shù)初值SJMP$;等待中斷;中斷服務(wù)程序INTSE2:CLRRI;清接收中斷標(biāo)志MOVA,SBUF;取接收的數(shù)據(jù)MOVXDPTR,A;接收的數(shù)據(jù)送緩沖區(qū)CJNER0,#7FH,LOOPR;判別接收完沒有。若沒有,轉(zhuǎn)LOOPR繼續(xù)接收CLRES;若接收完,則關(guān)串行口中斷LJMPENDRLOOPR:INCR0;修改計數(shù)指針I(yè)NCDPTR;修改地址指針ENDR:RETI;中斷返回END,.,例8-2設(shè)有甲、乙兩臺單片機,編寫程序,使用調(diào)用子程序的方法進行串行通信。甲機(發(fā)送機);從內(nèi)部RAM單元20H25H中取出6個ASCII碼數(shù)據(jù),在最高位加上奇偶校驗位后由串行口發(fā)送。采用8位異步通信,波特率為1200bps,(假設(shè)系統(tǒng)時鐘為11.0592MHz)。乙機(接收機):把接收到的ASCII碼數(shù)據(jù),先進行奇偶校驗,若校驗正確,將數(shù)據(jù)依次存放在內(nèi)部RAM區(qū)20H25H單元中。若校驗出錯,則將出錯信息“0FFH”存入相應(yīng)的單元。,.,調(diào)用子程序的查詢方式串行通信流程圖,.,甲機的匯編語言程序如下:$include(STC12C5A.INC);包含STC12C5A60S2單片機寄存器定義文件ORG0000H;主程序入口LJMPMAINTORG0030HMAINT:MOVSP,#60HMOVTMOD,#20H;置定時器1為工作方式2MOVTH1,#0E8H;置波特率時間常數(shù)MOVTL1,#0E8HMOVSCON,#40H;置串行口為工作方式1SETBTR1;啟動定時器1工作MOVR0,#20H;數(shù)據(jù)首地址送R0MOVR7,#06H;傳送字節(jié)數(shù)送R7LOOPT:MOVA,R0;取一個待傳送的數(shù)據(jù)字節(jié)LCALLDATAOUT;調(diào)用串行可發(fā)送子程序INCR0;修改地址指針DJNZR7,LOOPT;若沒有全部發(fā)送完畢,則轉(zhuǎn)LOOPT繼續(xù)發(fā)送SJMP$DATAOUT:;串行口發(fā)送子程序MOVC,P;設(shè)置奇偶校驗位(補奇)CPLCMOVACC.7,CMOVSBUF,A;啟動串行口發(fā)送數(shù)據(jù)JNBTI,$;等待數(shù)據(jù)字節(jié)發(fā)送完畢CLRTI;清發(fā)送標(biāo)志TI,為下一數(shù)據(jù)字節(jié)串行發(fā)送作準(zhǔn)備RETEND,.,對應(yīng)的C語言程序如下:#include“stc12c5a.h”/包含STC12C5A60S2單片機寄存器定義文件unsignedchardataADDRT6_at_0 x20;/在內(nèi)部RAM區(qū)定義6個單元voidmain(void)/主程序unsignedchari;TMOD=0 x20;/置定時器1為工作方式2TH1=0 xe8;/置波特率時間常數(shù)TL1=0 xe8;SCON=0 x40;/置串行口為工作方式1TR1=1;/啟動定時器1工作for(i=0;i6;i+)UART_SEND(ADDRTi);/發(fā)送一個數(shù)據(jù)while(1);/發(fā)送完畢,循環(huán)等待voidUART_SEND(unsignedcharsenddata)/串行口發(fā)送子程序bittmpbit;ACC=senddata;tmpbit=P;/設(shè)置奇偶校驗位(補奇)tmpbit=!tmpbit;if(tmpbit)senddata=senddata|0 x80;elsesenddata=senddata/清發(fā)送標(biāo)志TI,為下一數(shù)據(jù)字節(jié)串行發(fā)送作準(zhǔn)備,.,$include(STC12C5A.INC);包含STC12C5A60S2單片機寄存器定義文件ORG0000H;主程序入口地址LJMPMAINRORG0030HMAINR:MOVSP,#60HMOVTMOD,#20H;置定時器1為工作方式2MOVTH1,#0E8H;置波特率時間常數(shù)MOVTL1,#0E8HMOVSCON,#52H;置串行口為工作方式1,并使REN=1SETBTR1;啟動定時器1MOVR0,#20H;存放數(shù)據(jù)首地址送R0MOVR7,#06H;存放數(shù)據(jù)字節(jié)數(shù)送R7LOOP:LCALLDATAIN;調(diào)用接收子程序JCERROR;若C1,則出錯,轉(zhuǎn)出錯處理程序MOVR0,A;將接收的數(shù)據(jù)送指定RAM單元中LJMPLOOPCERROR:MOVR0,#0FFH;將出錯字符”0FFH”送指定RAM單元LOOPC:INCR0;修改地址指針DJNZR7,LOOP;若沒全部接收完畢,則繼續(xù)接收數(shù)據(jù);否則順序進行SJMP$;串行口接收子程序DATAIN:JNBRI,$;等待一個數(shù)據(jù)字節(jié)接收完畢CLRRI;接收完畢,清標(biāo)志RI,為接收下一個數(shù)據(jù)字節(jié)作準(zhǔn)備MOVA,SBUF;接收到的數(shù)據(jù)字節(jié)送AMOVC,P;檢查奇偶校驗位CPLCANLA,#7FH;消去奇校驗位RET;子程序返回END,乙機匯編語言程序,.,【例8-3】多機通信編程舉例,現(xiàn)用簡單實例說明多機串行通信中從機的基本工作過程。而實際應(yīng)用中還需要考慮通信的規(guī)范協(xié)議。有些協(xié)議很復(fù)雜,在此不加以考慮。假設(shè)系統(tǒng)晶振頻率為11.0592MHz。編程實現(xiàn)如下功能:主機:先向從機發(fā)送一幀地址信息,然后再向從機發(fā)送10個數(shù)據(jù)信息。從機:接收主機發(fā)來的地址幀信息,并與本機的地址號相比較,若不符合,仍保持SM2=1不變;若相等,則使SM2清零,準(zhǔn)備接收后續(xù)的數(shù)據(jù)信息,直至接收完10個數(shù)據(jù)信息。,.,a)主機程序流程圖b)從機程序流程圖,.,主機程序:$include(STC12C5A.INC);包含STC12C5A60S2單片機寄存器定義文件ADDRTEQU0000HSLAVEEQU5;從機地址號ORG0000HLJMPMAINT;主程序入口地址ORG0023HLJMPINTST;串行口中斷入口地址ORG0100HMAINT:MOVSP,#60HMOVSCON,#0C0H;串行口方式3MOVTMOD,#20H;置T1工作方式2MOVTH1,#0FAH;置4800波特率MOVTL1,#0FAH;相應(yīng)的時間常數(shù)MOVDPTR,#ADDRT;置數(shù)據(jù)地址指針MOVR0,#00H;發(fā)送數(shù)據(jù)字節(jié)計數(shù)清零MOVR2,#SLAVE;從機地址號R2SETBTR1;啟動T1SETBES;串行口開中斷SETBEA;CPU開中斷SETBTB8;置位TB8,作為地址幀信息特征MOVA,R2;發(fā)送地址幀信息MOVSBUF,ASJMP$;等待中斷,.,;串行口中斷服務(wù)程序:INTST:CLRTI;清發(fā)送中斷標(biāo)志CLRTB8;清TB8位,為發(fā)送數(shù)據(jù)幀信息作準(zhǔn)備MOVXA,DPTR;發(fā)送一個數(shù)據(jù)字節(jié)MOVSBUF,AINCDPTR;修改指針I(yè)NCR0CJNER0,#0AH,LOOPT;判數(shù)據(jù)字節(jié)是否發(fā)送完CLRESLOOPT:RETIEND,.,對應(yīng)的C語言版程序如下:#include“stc12c5a.h”/包含STC12C5A60S2單片機寄存器定義文件unsignedcharxdataADDRT10;/保存數(shù)據(jù)的外部RAM單元unsignedcharSLAVE;/保存從機地址號的變量unsignedcharnum=0,*mypdata;voidmain(void)SCON=0 xC0;TMOD=0 x20;TH1=0 xFA;TL1=0 xFA;mypdata=ADDRT;SLAVE=5;/定義從機地址,在此假設(shè)從機地址為5TR1=1;ES=1;EA=1;TB8=1;SBUF=SLAVE;/發(fā)送從機地址while(1);/等待中斷,.,voidSerial_ISR(void)interrupt4TI=0;TB8=0;SBUF=*mypdata;/發(fā)送數(shù)據(jù)mypdata+;/修改指針num+;if(num=0 x0a)ES=0;,.,從機程序如下:$include(STC12C5A.INC);包含STC12C5A60S2單片機寄存器定義文件ADDRREQU0000HSLAVEEQU5;從機地址號ORG0000HLJMPMAINR;從機主程序入口地址ORG0023HLJMPINTSR;串行口中斷入口地址ORG0100HMAINR:MOVSP,#60HMOVSCON,#0F0H;串行口方式3,SM2=1,REN=1,接收狀態(tài)MOVTMOD,#20H;置T1為工作方式2MOVTH1,#0FAH;置4800波特率MOVTL1,#0FAH;相應(yīng)的時間常數(shù)MOVDPTR,#ADDRR;置數(shù)據(jù)地址指針MOVR0,#0AH;置接收數(shù)據(jù)字節(jié)數(shù)指針SETBTR1;啟動T1SETBES;串行口開中斷SETBEA;CPU開中斷SJMP$;等待中斷,.,INTSR:CLRRI;清接收中斷標(biāo)志MOVA,SBUF;取接收信息MOVC,RB8;取RB8(信息特征位)CJNCLOOPR1;RB8=0為數(shù)據(jù)幀信息,轉(zhuǎn)LOOPR1XRLA,#SLAVE;RB8=1為地址幀信息,與本機地址號SLAVE相比較JZLOOPR2;地址相等,則轉(zhuǎn)LOOPR2LJMPENDR;地址不相等,則轉(zhuǎn)中斷返回ENDRLOOPR2:CLRSM2;清SM2,為后面接收數(shù)據(jù)幀信息作準(zhǔn)備LJMPENDR;中斷返回LOOPR1:MOVXDPTR,A;接收的數(shù)據(jù)數(shù)據(jù)緩沖區(qū)INCDPTR;修改地址指針DJNZR0,ENDR;數(shù)據(jù)字節(jié)沒全部接收完,則轉(zhuǎn)LOOPR2SETBSM2;全部接收完,置SM2=1ENDR:RETI;中斷返回END,.,對應(yīng)的C語言版程序如下:#include“stc12c5a.h”/包含STC12C5A60S2單片機寄存器定義文件unsignedcharxdataADDRR10;unsignedcharSLAVE,num=0 x0a,rdata,*mypdata;voidmain(void)SCON=0 xF0;TMOD=0 x20;TH1=0 xFA;TL1=0 xFA;mypdata=ADDRR;SLAVE=5;/設(shè)定從機地址TR1=1;ES=1;EA=1;while(1);/等待中斷,.,voidSerial_ISR(void)interrupt4RI=0;rdata=SBUF;/將接收緩沖區(qū)的數(shù)據(jù)保存到rdata變量中if(RB8)/RB8=1說明收到的信息是地址if(rdata=SLAVE)/如果地址相等,則SM2=0SM2=0;else/接收到的信息是數(shù)據(jù)*mypdata=rdata;mypdata+;num-;if(num=0 x00)/所有數(shù)據(jù)接收完畢,令SM2=1/為下一次接收地址信息作準(zhǔn)備SM2=1;,.,【例8-4】串口1使用獨立波特率發(fā)生器作串行通信的實例。#include“stc12c5a.h”/包含STC12C5A60S2寄存器定義文件#include“intrins.h”#defineRELOAD_COUNT0 xfb/Fosc=18.432MHz,12T,SMOD=0,9600bpssbitMCU_Start_Led=P14;unsignedchararray9=0,2,4,6,8,10,12,14,16;voidUART_send(unsignedchari);voiddelay(void);voiddisplay_MCU_Start_Led(void);voidmain(void)unsignedchari;/串口初始化SCON=0 x50;/0101,00008位可變波特率,無奇偶校驗位BRT=RELOAD_COUNT;AUXR=0 x11;/BRTR=1,啟動獨立波特率發(fā)生器/S1BRS=1,串口1選擇獨立波特率發(fā)生器作為波特率發(fā)生器,.,ES=1;/允許串口中斷EA=1;/開總中斷display_MCU_Start_Led();/點亮發(fā)光二極管表示單片機開始工作UART_send(0 x34);/串口發(fā)送數(shù)據(jù)表示單片機串口正常工作UART_send(0 xa7);/串口發(fā)送數(shù)據(jù)表示單片機串口正常工作for(i=0;i9;i+)UART_send(arrayi);while(1);voidUART_send(unsignedchari)ES=0;/關(guān)串口中斷TI=0;/清零串口發(fā)送完成中斷請求標(biāo)志SBUF=i;while(TI=0);/等待發(fā)送完成TI=0;/清零串口發(fā)送完成中斷請求標(biāo)志ES=1;/允許串口中斷,.,voiddelay(void)unsignedintg,j;for(j=0;j5;j+)for(g=0;g50000;g+)_nop_();_nop_();_nop_();,.,voiddisplay_MCU_Start_Led(void)unsignedchari;for(i=0;i5;i+)MCU_Start_Led=0;/點亮MCU開始工作指示燈delay();MCU_Start_Led=1;/熄滅MCU開始工作指示燈delay();,.,voidUART_Receive(void)interrupt4unsignedchark;if(RI=1)RI=0;k=SBUF;UART_send(k+1);elseTI=0;,.,8.2.6計算機與單片機之間的串行通信,在以計算機為控制中心的數(shù)據(jù)采集與自動控制系統(tǒng)中,通常需要用單片機采集數(shù)據(jù),然后用異步串行通信方式傳給計算機;要完成的控制命令由計算機通過串行通信方式傳給單片機,由單片機進行控制。計算機和單片機之間的串行通信一般采用RS-232、RS-422或RS-485總線標(biāo)準(zhǔn)接口,也有采用非標(biāo)準(zhǔn)的20mA電流環(huán)的。這里介紹最常用的RS-232接口串行通信的設(shè)計方法。RS-232是早期為公用電話網(wǎng)絡(luò)數(shù)據(jù)通信而制定的標(biāo)準(zhǔn),其邏輯電平與TTL/CMOS電平完全不同。邏輯“0”規(guī)定為+5+15V之間,邏輯“1”規(guī)定為-5-15V之間。由于RS-232發(fā)送和接收之間有公共地,傳輸采用非平衡模式,因此共模噪聲會耦合到信號系統(tǒng)中,標(biāo)準(zhǔn)中建議的最大通信距離為15m。下面通過一個簡單實例,介紹計算機與單片機進行RS232通信的硬件接口設(shè)計和軟件設(shè)計。,.,【例8-5】計算機向單片機發(fā)送一個數(shù)據(jù),單片機接收到數(shù)據(jù)后,將接收到的數(shù)據(jù)回發(fā)給計算機。假設(shè)單片機的系統(tǒng)時鐘為11.0592MHz,通信參數(shù)為“9600,n,8,1”(這是常見的通信參數(shù)表示方法,即波特率為9600bps,8個數(shù)據(jù)位,1個停止位,沒有奇偶校驗)。在計算機上顯示從單片機發(fā)送過來的數(shù)據(jù)??梢允褂迷摲椒y試硬件電路的連接情況。,.,1硬件接口設(shè)計從硬件上講,計算機的串行口是RS-232電平的,而單片機的串口是TTL電平的。因此,要實現(xiàn)單片機與計算機之間的串行通信,必須通過電路實現(xiàn)TTL電平和RS-232電平的轉(zhuǎn)換。常用的電平轉(zhuǎn)換集成電路是MAX232或者與它兼容轉(zhuǎn)換芯片,它包含兩路驅(qū)動器和接收器。單片機與計算機進行串行通信的硬件連接,最簡單的方法是采用三線制連接方式,也就是說,計算機的9針串口只連接其中的3根線:第5腳的GND、第2腳的RXD、第3腳的TXD。電路如教材圖1-7。,.,2軟件設(shè)計軟件設(shè)計往往因應(yīng)用系統(tǒng)要求的不同而不同。根據(jù)題目的要求,進行如下的計算機程序設(shè)計和單片機程序設(shè)計。(1)上位計算機程序
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 代為辦理房產(chǎn)繼承的委托書3篇
- 大學(xué)食堂招標(biāo)項目優(yōu)勢3篇
- 家長走讀保證書關(guān)愛孩子從承諾開始3篇
- 借款合同保證條款的修改建議3篇
- 學(xué)業(yè)逆襲保證書3篇
- 產(chǎn)地租賃合同的違約金2篇
- 2024生產(chǎn)主管工作總結(jié)5篇
- 守護家園抗疫斗爭3篇
- 小學(xué)生熱愛運動保證書3篇
- 幼兒園與供貨商合同3篇
- 《始得西山宴游記》名師課件1
- MOOC 知識創(chuàng)新與學(xué)術(shù)規(guī)范-南京大學(xué) 中國大學(xué)慕課答案
- 《詩意中國》朗誦稿
- 畸形舌側(cè)溝臨床對策培訓(xùn)課件
- 標(biāo)準(zhǔn)變壓器用電負(fù)荷計算表
- DB12∕T 822-2018 路用高粘結(jié)力環(huán)氧乳化瀝青技術(shù)要求
- “兩票三制”專項整治工作方案(含檢查表)
- JIS G3507-1-2021 冷鐓用碳素鋼.第1部分:線材
- 授居家二眾三皈、五戒儀規(guī)
- 部編版九年級歷史下冊第17課《二戰(zhàn)后資本主義的新變化》教案+導(dǎo)學(xué)案(含答案)
- 米字格A版蘭亭序毛筆行書字帖
評論
0/150
提交評論