




已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
.,第7章89C51串行口及串行通信技術,教學目標串行通信基本知識串行口及應用89C51與89C51點對點異步通信89C51與PC機間通信軟件的設計,.,7.1串行通信基本知識,在實際工作中,計算機的CPU與外部設備之間常常要進行信息交換,一臺計算機與其他計算機之間也往往要交換信息,所有這些信息交換均可稱為通信。通信方式有兩種,即并行通信和串行通信。通常根據(jù)信息傳送的距離決定采用哪種通信方式。例如,PC機與外部設備(如打印機等)通信時,如果距離小于30m,可采用并行通信方式;當距離大于30m時,則要采用串行通信方式。89C51單片機具有并行和串行二種基本通信方式。,.,并行通信,并行通信是指數(shù)據(jù)的各位同時進行傳送(發(fā)送或接收)的通信方式。優(yōu)點:傳送速度快;缺點:數(shù)據(jù)有多少位,就需要多少根傳送線。例如,右圖89C51單片機與外部設備之間的數(shù)據(jù)傳送就屬于并行通信。,.,串行通信,串行通信指數(shù)據(jù)是一位(bit)一位按順序傳送的通信方式。優(yōu)點:只需一對傳輸線(利用電話線就可作為傳輸線),大大降低了傳送成本,特別適用于遠距離通信;缺點:傳送速度較低。假設并行傳送N位數(shù)據(jù)所需時間為T,那么串行傳送的時間至少為NT,實際上總是大于NT。,.,串行通信的傳輸方式,串行通信的傳輸方式通常有三種:單向(或單工)方式,只允許數(shù)據(jù)向一個方向傳送;半雙向(或半雙工)方式,允許數(shù)據(jù)向兩個方向中的任一方向傳送,但每次只能有一個站點發(fā)送;全雙向(或全雙工)方式,允許同時雙向傳送數(shù)據(jù),因此,全雙工配置是一對單向配置,它要求兩端的通信設備都具有完整和獨立的發(fā)送和接受能力。,.,串行通信中的數(shù)據(jù)傳送方式,.,異步通信和同步通信,串行通信有兩種基本通信方式,即異步通信和同步通信。異步通信在異步通信中,數(shù)據(jù)是一幀一幀(包括一個字符代碼或一字節(jié)數(shù)據(jù))傳送的。在幀格式中,一個字符由四個部分組成:起始位、數(shù)據(jù)位、奇偶校驗位和停止位。首先是一個起始位(0),然后是58位數(shù)據(jù)(規(guī)定:低位在前,高位在后),接下來是奇偶校驗位(可省略),最后是停止位(1)。,.,異步通信數(shù)據(jù)格式,(b)有空閑位,.,異步串行通信協(xié)議起始位(0)信號只占一位,用來通知接收設備一個待接收的字符開始到達。線路上在不傳送字符時應保持為1。接收端不斷檢測線路的狀態(tài),若連續(xù)為1以后又測到一個0,就知道發(fā)來一個新字符,應馬上準備接收。字符的起始位還被用作同步接收端的時鐘,以保證以后的接收能正確進行。起始位后面緊接著是數(shù)據(jù)位,它可以是5位(D0-D4)、6位、7位或8位(D0-D7)。若所傳字符為ASCII碼,則常取7位。奇偶校驗(D8)只占一位,但在字符中也可以規(guī)定不用奇偶校驗位,則這一位可省去。也可用這一位(1/0)來確定這一幀中的字符所代表信息的性質(zhì)(地址/數(shù)據(jù)等)。停止位用來表征字符的結束,它一定是高電位(邏輯1)。停止位可以是1位、1.5位或2位。接收端收到停止位后,知道上一字符已傳送完畢,同時,也為接收下一個字符做好準備。只要再接收到0,就是新的字符的起始位。若停止位以后不是緊接著傳送下一個字符,則使線路電平保持為高電平(邏輯1)。,.,同步通信,同步通信中,在數(shù)據(jù)開始傳送前用同步字符來指示(常約定1個-2個),并由時鐘來實現(xiàn)發(fā)送端和接收端同步,即檢測到規(guī)定的同步字符后,下面就連續(xù)按順序傳送數(shù)據(jù),直到通信告一段落。同步傳送時,字符與字符之間沒有間隙,也不用起始位和停止位,僅在數(shù)據(jù)塊開始時用同步字符SYNC來指示。,.,同步通信,同步字符的插入可以是單同步字符方式或雙同步字符方式,然后是連續(xù)的數(shù)據(jù)塊。同步字符可以由用戶約定,也可采用ASCII碼中規(guī)定的SYNC代碼,即16H。按同步方式通信時,先發(fā)送同步字符,接收方檢測到同步字符后,即準備接收數(shù)據(jù)。在同步傳送時,要求用時鐘來實現(xiàn)發(fā)送端與接收端之間的同步。為了保證接收正確無誤,發(fā)送方除了傳送數(shù)據(jù)外,還要同時傳送時鐘信號。同步傳送可以提高傳輸速率(達56kb/s或更高),但硬件比較復雜。,.,波特率(Baudrate),波特率,即數(shù)據(jù)傳送速率,表示每秒鐘傳送二進制代碼的位數(shù),它的單位是b/s(bitspersecond)。假設數(shù)據(jù)傳送速率是120字符/s,而每個字符包含的代碼位有:1個起始位、8個數(shù)據(jù)位、1個停止位。這時,傳送的波特率為:10b/字符120字符/s1200b/s每一位代碼的傳送時間Td為波特率的倒數(shù)。Td1/12000.833ms異步通信的傳送速率在50b/s19200b/s之間,常用于計算機到終端機和打印機之間的通信、直通電報以及無線電通信的數(shù)據(jù)發(fā)送等。,.,串行通信的過程,1、串并轉(zhuǎn)換與設備同步兩個通信設備在串行線路上成功地實現(xiàn)通信必須解決兩個問題:1)串并轉(zhuǎn)換,即如何把要發(fā)送的并行數(shù)據(jù)串行化,把接收的串行數(shù)據(jù)并行化;2)設備同步,即發(fā)送設備與接收設備的工作節(jié)拍同步,以確保發(fā)送數(shù)據(jù)在接收端被正確讀出。,.,1、串并轉(zhuǎn)換與設備同步,1)串并轉(zhuǎn)換串行通信是將計算機內(nèi)部的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù),將其通過一根通信線傳送;并將接收的串行數(shù)據(jù)再轉(zhuǎn)換成并行數(shù)據(jù)送到計算機中。在計算機串行發(fā)送數(shù)據(jù)之前,計算機內(nèi)部的并行數(shù)據(jù)被送入移位寄存器并一位一位地輸出,將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)。如圖7-5所示。在接收數(shù)據(jù)時,來自通信線路的串行數(shù)據(jù)被壓入移位寄存器,滿8位后并行送到計算機內(nèi)部。如圖7-6所示。在串行通信控制電路中,串-并、并-串轉(zhuǎn)換邏輯被集成在串行異步通信控制器芯片中。89C51單片機的串行口和IBM-PC相同。,.,圖7-5,.,圖7-6,.,2)設備同步進行串行通信的兩臺設備必須同步工作才能有效地檢測通信線路上的信號變化,從而采樣傳送數(shù)據(jù)的脈沖。設備同步對通信雙方有兩個共同要求:通信雙方必須采用統(tǒng)一的編碼方法;通信雙方必須能產(chǎn)生相同的傳送速率。采用統(tǒng)一的編碼方法確定了一個字符二進制表示值的位發(fā)送順序和位串長度,當然還包括統(tǒng)一的邏輯電平規(guī)定,即電平信號高低與邏輯1和邏輯0的固定對應關系。通信雙方只有產(chǎn)生相同的傳送速率,才能確保設備同步,這就要求發(fā)送設備和接收設備采用相同頻率的時鐘。發(fā)送設備在統(tǒng)一的時鐘脈沖上發(fā)出數(shù)據(jù),接收設備才能正確檢測出與時鐘脈沖同步的數(shù)據(jù)信息。,.,7.289C51串行口及應用,89C51單片機除具有4個8位并行口外,還具有串行接口。此串行接口是一個全雙工串行通信接口,即能同時進行串行發(fā)送和接收數(shù)據(jù)。它可以作UART(通用異步接收和發(fā)送器)用,也可以作同步移位寄存器用。使用串行接口可以實現(xiàn)89C51單片機系統(tǒng)之間點對點的單機通信和89C51與系統(tǒng)機(如IBM-PC機等)的單機或多機通信。,.,串行口結構,89C51通過引腳RXD(P3.0,串行數(shù)據(jù)接收端)和引腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)與外界進行通信。有兩個物理獨立的接收、發(fā)送緩沖器SBUF,它們占用同一地址99H,可同時發(fā)送、接收數(shù)據(jù)。發(fā)送緩沖器只能寫入,不能讀出;接收緩沖器只能讀出,不能寫入。串行發(fā)送與接收的速率與移位時鐘同步。89C51用定時器T1作為串行通信的波特率發(fā)生器,T1溢出率經(jīng)2分頻(或不分頻)后又經(jīng)16分頻作為串行發(fā)送或接收的移位脈沖。移位脈沖的速率即是波特率。,.,串行口結構,串行口內(nèi)部結構示意簡圖,.,從圖中可看出,接收器是雙緩沖結構,在前一個字節(jié)被從接收緩沖器SBUF讀出之前,第二個字節(jié)即開始被接收(串行輸入至移位寄存器),但是,在第二個字節(jié)接收完畢而前一個字節(jié)CPU未讀取時,會丟失前一個字節(jié)。(出現(xiàn)溢出錯誤)串行口的發(fā)送和接收都是以特殊功能寄存器SBUF的名義進行讀或?qū)懙?。當向SBUF發(fā)“寫”命令時(執(zhí)行“MOVSBUF,A”指令),即是向發(fā)送緩沖器SBUF裝載并開始由TXD引腳向外發(fā)送一幀數(shù)據(jù),發(fā)送完便使發(fā)送中斷標志位TI=1。在滿足串行口接收中斷標志位RI(SCON.0)=0的條件下,置允許接收位REN(SCON.4)=1就會接收一幀數(shù)據(jù)進入移位寄存器,并裝載到接收SBUF中,同時使RI=1。當發(fā)讀SBUF命令時(執(zhí)行“MOVA,SBUF”命令),便由接收緩沖器(SBUF)取出信息通過89C51內(nèi)部總線送CPU。對于發(fā)送緩沖器,因為發(fā)送時CPU是主動的,不會產(chǎn)生重疊錯誤,一般不需要用雙緩沖器結構來保持最大傳送速率。,.,串行口控制字及控制寄存器,89C51串行口是可編程接口,對它初始化編程只用兩個控制字分別寫入特殊功能寄存器SCON(98H)和電源控制寄存器PCON(87H)中即可。(1)SCON(98H)89C51串行通信的方式選擇、接收和發(fā)送控制以及串行口的狀態(tài)標志等均由特殊功能寄存器SCON控制和指示。,.,串行口控制寄存器SCON,.,SCON(98H),SM0和SM1(SCON.7,SCON.6)串行口工作方式選擇位。兩個選擇位對應4種通信方式,如下表所示。其中,fosc是振蕩頻率。,.,SM2(SCON.5)多機通信控制位,主要用于方式2和方式3。若置SM2=1,則允許多機通信。當一片89C51(主機)與多片89C51(從機)通信時,所有從機的SM2位都置1。主機首先發(fā)送的一幀數(shù)據(jù)為地址,即從機機號,其中第9位為1,所有的從機接收到數(shù)據(jù)后,將其中第9位裝入RB8中。各個從機根據(jù)收到的第9位數(shù)據(jù)(RB8中)的值來決定從機可否再接收主機的信息。若(RB8)0,說明是數(shù)據(jù)幀,則使接收中斷標志位RI0,信息丟失;若(RB8)1,說明是地址幀,數(shù)據(jù)裝入SBUF并置RI1,中斷所有從機,被尋址的目標從機清除SM2以接收主機發(fā)來的一幀數(shù)據(jù)。其他從機仍然保持SM21。若SM2=0,即不屬于多機通信情況,則接收一幀數(shù)據(jù)后,不管第9位數(shù)據(jù)是0還是1,都置RI=1,接收到的數(shù)據(jù)裝入SBUF。根據(jù)SM2這個功能,可實現(xiàn)多個89C51應用系統(tǒng)的串行通信。在方式1時,若SM2=1,則只有接收到有效停止位時,RI才置1,以便接收下一幀數(shù)據(jù)。在方式0時,SM2必須是0。,.,REN(SCON.4)允許接收控制位。由軟件置1或清0,只有當REN1時才允許接收,相當于串行接收的開關;若REN0,則禁止接收。在串行通信接收控制過程中,如果滿足RI0和REN1(允許接收)的條件,就允許接收,一幀數(shù)據(jù)就裝載入接收SBUF中。TB8(SCON.3)發(fā)送數(shù)據(jù)的第9位(D8)裝入TB8中。在方式2或方式3中,根據(jù)發(fā)送數(shù)據(jù)的需要由軟件置位或復位。在許多通信協(xié)議中可用作奇偶校驗位,也可在多機通信中作為發(fā)送地址幀或數(shù)據(jù)幀的標志位。對于后者,TB81,說明該幀數(shù)據(jù)為地址;TB80,說明該幀數(shù)據(jù)為數(shù)據(jù)字節(jié)。在方式0或方式1中,該位未用。,.,RB8(SCON.2)接收數(shù)據(jù)的第9位。在方式2或方式3中,接收到的第9位數(shù)據(jù)放在RB8位。它或是約定的奇/偶校驗位,或是約定的地址/數(shù)據(jù)標識位。在方式2和方式3多機通信中,若SM21,如果RB81,說明收到的數(shù)據(jù)為地址幀。在方式1中,若SM20(即不是多機通信情況),RB8中存放的是已接收到的停止位。在方式0中,該位未用。TI(SCON.1)發(fā)送中斷標志。在一幀數(shù)據(jù)發(fā)送完時被置位。在方式0串行發(fā)送第8位結束或其他方式串行發(fā)送到停止位的開始時由硬件置位,可用軟件查詢。它同時也申請中斷,TI置位意味著向CPU提供“發(fā)送緩沖器SBUF已空”的信息,CPU可以準備發(fā)送下一幀數(shù)據(jù)。串行口發(fā)送中斷被響應后,TI不會自動清0,必須由軟件清0。,.,RI(SCON.0)接收中斷標志。在接收到一幀有效數(shù)據(jù)后由硬件置位。在方式0中,當接受到數(shù)據(jù)的第8位時,由硬件置位;在其他三種方式中,當接收到停止位中間時由硬件置位。RI1,申請中斷,表示一幀數(shù)據(jù)接收結束,并已裝入接收SBUF中,要求CPU取走數(shù)據(jù)。CPU響應中斷,取走數(shù)據(jù)。RI也必須由軟件(指令)清0,清除中斷申請,并準備接收下一幀數(shù)據(jù)。串行發(fā)送中斷標志TI和接收中斷標志RI是同一個中斷源,CPU事先不知道是發(fā)送中斷TI還是接收中斷RI產(chǎn)生的中斷請求,所以,在全雙工通信時,必須由軟件來判別。復位時,SCON所有位均清0。,.,(2)PCON(87H),電源控制寄存器PCON中只有SMOD位與串行口工作有關。復位時,SMOD0。,.,串行通信工作方式,根據(jù)實際需要,89C51串行口可設置4種工作方式,可有8位、10位或11位幀格式。方式0:以8位數(shù)據(jù)為一幀,不設起始位和停止位,先發(fā)送或接收最低位。方式0為同步移位寄存器輸入/輸出方式,常用于擴展I/O口。串行數(shù)據(jù)通過RXD輸入或輸出,而TXD用于輸出移位時鐘,作為外接部件的同步信號。其幀格式如下:,.,方式0的應用,例如,74LS164可用于擴展并行輸出口,74LS165可用于擴展輸入口。在這種方式下,收/發(fā)的數(shù)據(jù)為8位,低位在前,無起始位、奇偶校驗位及停止位,波特率是固定的。,.,74LS164功能概述74LS164是8位串行輸入平行輸出的移位寄存器;其中:Q0Q7為并行輸出端;DSA、DSB是串行輸入端。MR是清除端,為0時,輸出清零。CP為時鐘輸入端。當DSA、DSB任一輸入端為低電平時,則禁止新數(shù)據(jù)輸入,在時鐘端CP脈沖上升沿作用下Q0為低電平。DSA、DSB有一個為高電平時,則允許另一個輸入數(shù)據(jù),并在CP脈沖上升沿作用下決定Q0的狀態(tài)。兩個輸入端或者連接在一起,或者把不用的輸入端接高電平,一定不要懸空。時鐘(CP)每次由低變高時,數(shù)據(jù)右移一位,輸入數(shù)據(jù)到Q0,Q0是兩個數(shù)據(jù)輸入端(DSA和DSB)的邏輯與。主復位(MR)輸入端上的一個低電平將使其它所有輸入端都無效,同時非同步地清除寄存器,強制所有的輸出為低電平。,.,方式1:以10位為一幀傳輸,設有1個起始位(0),8個數(shù)據(jù)位和1個停止位(1)。真正用于串行發(fā)送或接收,TXD與RXD分別用于發(fā)送與接收數(shù)據(jù)。在接收時,停止位進入SCON的RB8,此方式的傳送波特率可調(diào)。其幀格式為:,.,方式1的發(fā)送過程在TI=0的情況下(表示串行口發(fā)送控制電路處于空閑狀態(tài)),任何寫緩沖器SBUF指令,如“MOVSBUF,A”,會觸發(fā)串行發(fā)送過程:51機的串行口自動在8個數(shù)據(jù)位的前、后分別添加1位起始位和停止位,構成10位信息幀,按設定的波特率依次送出。當8位數(shù)據(jù)發(fā)送結束后(即開始發(fā)送停止位)時,串行口自動將中斷標志TI置1。TI標志可用來查詢發(fā)送過程是否完成。在中斷處于開放狀態(tài)下,TI有效時,將產(chǎn)生串行中斷。方式1的接收過程在接收中斷標志RI=0(串行口接收緩沖器SBUF處于空閑)情況下,當REN位置1時,串行口處于接收狀態(tài)。按設定的波特率依次讀出數(shù)據(jù)位和停止位。在接收到第9數(shù)據(jù)位(即停止位時),接收電路必須同時滿足兩個條件:RI=0和SM2=0或接收到的停止位為“1”,才能把接收到的內(nèi)容存入接收緩沖器SBUF中,把停止位送入RB8中,并將RI置1和發(fā)出串行口中斷請求(若中斷開放)。否則,這次收到的數(shù)據(jù)將被舍去,而這是不被允許的。RI標志可用來查詢接收過程是否完成。在方式1下,SM2應設為0。,.,方式2和方式3(兩種方式唯一的區(qū)別是方式2的波特率固定,方式2和方式3的發(fā)送、接收時序與方式1類似,只是增加了一位第9位):以11位為1幀傳輸,設有1位起始位(0),8位數(shù)據(jù)位,1位可編程的第9位和1位停止位(1)。發(fā)送前,第9位數(shù)據(jù)位(D8)存放在TB8中,由軟件置1或清0。也可將奇偶位裝入TB8,從而進行奇偶校驗。發(fā)送時串行口能自動把TB8取出,并裝入到第9位數(shù)據(jù)位的位置,再逐一發(fā)送出去。如指令“SETBTB8”將D8置1。當滿足RI=0且SM2=0,或接收到的第9位數(shù)據(jù)為1時,前8位數(shù)據(jù)送入SBUF,第9位數(shù)據(jù)位送入SCON中的RB8,置RI為1;否則,這次接收無效,也不置位RI。其幀格式為:,.,波特率設計,方式0:波特率=fosc/12,方式2:SMOD=0時,波特率=fosc/64;SMOD=1時,波特率=fosc/32。方式1,方式3:波特率=T1溢出率/n當SMOD=0時,n=32;SMOD=1時,n=16。所以,可用下式確定方式1和方式3的波特率:方式1、方式3波特率=2SMOD/32(T1溢出速率)其中,T1溢出速率取決于T1的計數(shù)速率(計數(shù)速率=fosc/12)和T1預置的初值。若定時器T1采用模式2時,波特率公式如下:方式1、方式3波特率=2SMOD/32(fosc/12)/(256-初值),.,定時器T1用作波特率發(fā)生器時,通常選用定時器模式2(自動重裝初值定時器)比較實用。要設置定時器T1為定時方式(使C/T=0),讓T1計數(shù)內(nèi)部振蕩脈沖,即計數(shù)速率為fosc/12(注意應禁止T1中斷,以免溢出而產(chǎn)生不必要的中斷)。先設定TH1和TL1的計數(shù)初值為X,那么每過“256-X”個機器周期,定時器T1就會產(chǎn)生一次溢出。因此,T1溢出速率為T1溢出速率=(fosc/12)/(256-X),.,波特率計算舉例,89C51單片機時鐘振蕩頻率為11.0592MHz,選用定時器T1工作模式2作為波特率發(fā)生器,波特率為2400b/s,求初值。解:設置波特率控制為(SMOD)=02400=2SMOD/32(fosc/12)/(256-初值)所以,(TH1)=(TL1)=F4H。,.,常用波特率與其它參數(shù)選取關系,.,串行口方式1的發(fā)送和接收,例2:89C51串行口按全雙工方式收、發(fā)ASCII字符,最高位用來作奇偶校驗位,采用奇校驗方式,要求傳送的波特率為1200b/s。編寫有關的通信程序。解:7位ASCII碼加1位奇校驗位共8位數(shù)據(jù),故可采用串行口方式1。89C51單片機的奇偶校驗位P:當累加器A中1的個數(shù)為奇數(shù)時,P=1,否則,P=0。如果直接把P的值放入ASCII碼的最高位,恰好成了偶校驗,與要求不符。因此,要把P的值取反后放入ASCII碼最高位,才是要求的奇校驗。,.,雙工通信要求收、發(fā)能同時進行。實際上,收、發(fā)操作主要是在串行接口進行,CPU只是把數(shù)據(jù)從接收緩沖器讀出和把數(shù)據(jù)寫入發(fā)送緩沖器。數(shù)據(jù)傳送用中斷方式進行,響應中斷以后,通過檢測是RI置位還是TI置位來決定CPU是進行發(fā)送操作還是接收操作。發(fā)送和接收都通過調(diào)用子程序來完成,設發(fā)送數(shù)據(jù)區(qū)的首地址為20H,接收數(shù)據(jù)區(qū)的首地址為40H,fosc為6MHz,通過查波特率初值(表7-2)可知定時器的初裝值為F3H。定時器T1采用工作模式2,可避免計數(shù)溢出后用軟件重裝定時初值的工作。,.,串行口初始化編程步驟,在串行口工作之前,應對其進行初始化,主要是設置產(chǎn)生波特率的定時器1,串行口控制寄存器SCON和中斷控制器IE,步驟如下:確定T1的工作方式(編程TMOD寄存器)計算T1的初值,裝載TH1、TL1;啟動T1(編程TCON中的TR1位)確定串行口控制(編程SCON寄存器)串行口工作在中斷方式時,要進行中斷設置(編程IE、IP寄存器),.,主程序清單:ORG0000HAJMPSTARTORG0023H;串行口中斷入口AJMPSBR1;轉(zhuǎn)至中斷服務程序ORG0030HSTART:MOVTMOD,#20H;定時器1設為模式2MOVTL1,#0F3H;定時器初值MOVTH1,#0F3H;8位重裝值SETBTR1;啟動定時器1MOVSCON,#50H;設置為方式1,;REN=1MOVR0,#20H;發(fā)送數(shù)據(jù)區(qū)首址MOVR1,#40H;接收數(shù)據(jù)區(qū)首址ACALLSOUT;先輸出一個字符SETBESSETBEASJMP$;等待中斷,中斷服務子程序ORG0100HSBR1:JNBRI,SEND;RI=0,為發(fā)送中斷ACALLSIN;否則,RI=1,為接;收中斷SJMPNEXT;轉(zhuǎn)至統(tǒng)一的出口SEND:ACALLSOUT;調(diào)用發(fā)送子程序NEXT:RETI;中斷返回,.,發(fā)送子程序SOUT:CLRTIMOVA,R0;取發(fā)送數(shù)據(jù)到AMOVC,P;奇偶標識賦予CCPLC;奇校驗MOVACC.7,C;ACC.7補0或1MOVSBUF,A;發(fā)送ASCII碼INCR0;修改發(fā)送數(shù)據(jù)指針RET;返回,接收子程序SIN:CLRRIMOVA,SBUF;讀出接收緩沖區(qū)內(nèi)容MOVC,P;取出校驗位,P=1CPLC;奇校驗JCERRORANLA,#7FH;刪去校驗位MOVR1,A;讀入接收緩沖區(qū)INCRI;修改接收數(shù)據(jù)指針SJMPSIN_1ERROR:;出錯處理,略SIN_1:RET;返回END,.,采用查詢方式由串行口發(fā)送帶奇偶校驗位的數(shù)據(jù)塊。例3:設從內(nèi)部RAM單元30H-4FH取出ASCII碼數(shù)據(jù),在最高位上加偶校驗位后由串行口發(fā)出。采用10位異步通信方式,波特率為1200b/s,fosc=11.059MHz。由要求可知,應把串行口設置為方式1,采用定時器1模式2作為波特率發(fā)生器,預置值(TH1)=0E8H。,.,主程序;MOVTMOD,#20H;設置定時器1為模式2MOVTL1,#0E8H;初值,波特率為1200b/sMOVTH1,#0E8HSETBTR1;啟動T1運行MOVSCON,#01000000B;設置串行口為方式1MOVR0,#30H;設置數(shù)據(jù)塊起始地址MOVR7,#32;設置數(shù)據(jù)塊長度LOOP:MOVA,R0ACALLS-OUT;調(diào)用發(fā)送子程序INCR0DJNZR7,LOOP,.,串行口發(fā)送子程序(偶校驗);S-OUT:MOVC,PSW.0;設置偶校驗位MOVACC.7,C;ACC.7補0或1MOVSBUF,A;啟動串行口發(fā)送過程JNBTI,$;等待發(fā)送完CLRTI;清TI標志,允許再發(fā)送RETEND,.,串行口方式2和方式3的發(fā)送和接收,串行口方式2與方式3基本一樣(只是波特率設置不同),接收/發(fā)送11位信息:開始為1位起始位(0),中間8位數(shù)據(jù)位,數(shù)據(jù)位之后為1位程控位(由用戶置SCON的TB8決定),最后是1位停止位(1)。只比方式1多了一位程控位。,.,例4:設計一個發(fā)送程序,將片內(nèi)RAM50H5FH中的數(shù)據(jù)串行發(fā)送;串行口設定為方式2,TB8作奇偶校驗位。在數(shù)據(jù)寫入發(fā)送緩沖器之前,先將數(shù)據(jù)的奇偶位P寫入TB8,這時,第9位數(shù)據(jù)作奇偶校驗用。,.,程序清單如下:TRT:MOVSCON,#80H;方式2設定MOVPCON,#80H;取波特率為fosc/32MOVR7,#10H;數(shù)據(jù)長度10HR7LOOP:MOVA,R0;取數(shù)據(jù)AMOVC,PSW.0;PTB8MOVTB8,CMOVSBUF,A;數(shù)據(jù)SBUF,啟動發(fā)送WAIT:JBCTI,CONT;判斷是否發(fā)送完SJMPWAITCONT:INCR0DJNZR7,LOOPRET,.,例5:編制一個串行口方式2接收程序,并核對奇偶標志位。解:根據(jù)上面介紹的特點,在方式2、方式3的發(fā)送過程中,將數(shù)據(jù)和附加在TB8中的奇偶標志位一塊發(fā)向?qū)Ψ?。因此,作為接收的一方應設法取出該奇偶標志位進行核對,相應的接收程序段為:,.,RRR:MOVSCON,#90H;選方式2,并允許接收(REN=1)LOOP:JBCRI,RECEIV;等待接收數(shù)據(jù)并清RISJMPLOOPRECEIV:MOVA,SBUF;將接收到的字符取出后,送到A。注意,;傳送指令影響PSW,產(chǎn)生接收端的奇偶值JBPSW.0,ONE;判斷接收端的奇偶值JBRB8,ERR;判斷發(fā)送端的奇偶值SJMPRIGHTONE:JNBRB8,ERRRIGHT:;接收正確ERR:;接收有誤當接收到一個字符時,從SBUF轉(zhuǎn)移到A中時會產(chǎn)生接收端的奇偶值,而保存在RB8中的值為發(fā)送端的奇偶值,兩個奇偶值應相等,否則接收字符有錯。發(fā)現(xiàn)錯誤要及時通知對方重發(fā)。,.,89C51與89C51點對點異步通信,1通信協(xié)議要想保證通信成功,通信雙方必須有一系列的約定,比如:作為發(fā)送方,必須知道什么時候發(fā)送信息,發(fā)什么,對方是否收到,收到的內(nèi)容有沒有錯,要不要重發(fā),怎樣通知對方結束等等。作為接收方,必須知道對方是否發(fā)送了信息,發(fā)的是什么,收到的信息是否有錯,如果有錯怎樣通知對方重發(fā),怎樣判斷結束等。這種約定就叫做通信規(guī)程或協(xié)議,它必須在編程之前確定下來。要想使通信雙方能夠正確交換信息和數(shù)據(jù),在協(xié)議中對什么時候開始通信,什么時候結束通信,何時交換信息等等都必須作出明確的規(guī)定。只有雙方遵守這些規(guī)定才能順利地進行通信。,.,2波特率設置在串行通信中,一個重要的指標是波恃率,它反映了串行通信的速率,也反映了對于傳輸通道的要求。波特率越高,要求傳輸通道的頻帶越寬。一般異步通信的波特率在50b/s19200b/s之間。由于異步通信雙方各用自己的時鐘源,要保證捕捉到的信號正確,最好采用較高頻率的時鐘。一般選擇時鐘頻率比波特率高16倍或64倍。若是時鐘頻率等于波特率,則頻率稍有偏差便會產(chǎn)生接收錯誤。,.,在異步通信中,收、發(fā)雙方必須事先規(guī)定兩件事:1、字符格式,即規(guī)定字符各部分所占的位數(shù)是否采用奇偶校驗以及校驗的方式(偶校驗還是奇校驗)等通信協(xié)議;2、采用的波特率以及時鐘頻率和波特率的比例關系。89C51的串行通信的波特率(由圖7-16可知)由定時器T1的溢出率獲得(僅指串行口方式1、方式3時),當串行口工作于方式1或方式3時,波特率為:其中,k為定時器1的位數(shù),定時器模式0,k=13;定時器模式1,k=16;定時器模式2和摸式3,k=8。,.,例6:設甲機發(fā)送,乙機接收。串行接口工作于方式3(每幀數(shù)據(jù)為11位,第9位用于奇偶校驗),兩機均選用6.0000MHz的振蕩頻率,波特率為2400b/s。通信的功能為:甲機:將片外數(shù)據(jù)存儲器4000H-407FH單元的內(nèi)容向乙機發(fā)送,每發(fā)送一幀信息,乙機對接收的信息進行偶校驗,將P位值放在TB8中。若校驗正確,則乙機向甲機回發(fā)“數(shù)據(jù)發(fā)送正確”的信號(例中以00H作為應答信號)。甲機收到乙機“正確”的應答信號后再發(fā)送下一個字節(jié)。若奇偶校驗有錯,則乙機發(fā)出“數(shù)據(jù)發(fā)送不正確”的信號(例中以FFH作為應答信號)。甲機接收到“不正確”應答信號后,重新發(fā)送原數(shù)據(jù),直至發(fā)送正確。甲機將該數(shù)據(jù)塊發(fā)送完畢后停止發(fā)送。乙機:接收甲機發(fā)送的數(shù)據(jù),并寫入以4000H為首址的片外數(shù)據(jù)存儲器中。每接收一幀數(shù)據(jù),乙機對所接收的數(shù)據(jù)進行偶校驗,并發(fā)出相應的應答信號,直至接收完所有數(shù)據(jù)。,.,解:(1)計算定時器計數(shù)初值X將已知數(shù)據(jù)fosc=6MHz,波特率=2400b/s代入下式:若取SMOD=0時,X=249.49。因取整數(shù)誤差過大,故設SMOD=1,則X=242.98243=F3H因此,實際波特率=2403.85bS。,.,甲機發(fā)送流程圖,乙機發(fā)送流程圖,.,(3)源程序甲機主程序ORG0000HLJMPMAIN;上電,轉(zhuǎn)向主程序ORG0023H;串行口的中斷入口地址LJMPSERVE1;轉(zhuǎn)向甲機中斷服務程序ORG2000H;主程序MAIN:MOVTMOD,#20H;設T1工作與模式2MOVTH1,#0F3H;賦計數(shù)初值MOVTL1,#0F3H;賦計數(shù)值SETBTR1;啟動定時器T1MOVPCON,#80H;設SMOD=1MOVSCON,#0D0H;置串行口方式3,允許接收MOVDPTR,#4000H;置數(shù)據(jù)塊首址MOVR0,#80H;置發(fā)送字節(jié)數(shù)初值SETBES;允許串行口中斷SETBEA;CPU開中斷MOVXA,DPTR;取第一個數(shù)據(jù)發(fā)送MOVC,PMOVTB8,C;奇偶標志送TB8MOVSBUF,A;發(fā)送數(shù)據(jù)SJMP$;等待中斷,.,甲機中斷服務程序SERVE1:JBCRI,LOOP;是接收中斷,清除RI,轉(zhuǎn)入接收乙機的應答信息CLRTI;是發(fā)送中斷,清除此中斷標志SJMPENDTLOOP:MOVA,SBUF;取乙機的應答信息CLRCSUBBA,#01H;判應答信號是#00嗎?JCLOOP1;是#00H,發(fā)送正確,(#00H-#01H),C=1,轉(zhuǎn)LOOP1LOOP2:MOVXA,DPTR;否則甲機重發(fā)MOVC,PMOVTB8,CMOVSBUF,A;甲機重發(fā)原數(shù)據(jù)SJMPENDTLOOP1:INCDPTR;修改地址指針,準備發(fā)送下一個數(shù)據(jù);MOVXA,DPTR;MOVC,P;MOVTB8,C;MOVSBUF,A;發(fā)送;DJNZR0,ENDT;數(shù)據(jù)塊未發(fā)送完,返回繼續(xù)發(fā)送DJNZR0,LOOP2;數(shù)據(jù)塊未發(fā)送完,啟動發(fā)送下一個數(shù)據(jù)CLRES;全部發(fā)送完,禁止串行口中斷ENDT:RETI;中斷返回END,.,乙機主程序;ORG0000HLJMPMAIN;上電,轉(zhuǎn)向主程序ORG0023H;串行口的中斷入口地址LJMPSERVE2;轉(zhuǎn)向乙機中斷服務程序ORG2000H;主程序MAIN:MOVTMOD,#20H;設T1工作于模式2MOVTH1,#0F3H;賦計數(shù)初值MOVTL1,#0F3H;賦計數(shù)初值SETBTR1;啟動定時器T1MOVPCON,#80H;設SMOD=1MOVSCON,#0D0H;置串行口方式3,允許接收MOVDPTR,#4000H;置數(shù)據(jù)區(qū)首址MOVR0,#80H;置接收字節(jié)數(shù)初值SETBES;允許串行口中斷SETBEA;CPU開中斷SJMP$;等待中斷,.,乙機中斷服務程序:SERVE2:JBCRI,LOOP;是接收中斷,清除此中斷標志,轉(zhuǎn)LOOP(接收)CLRTI;是發(fā)送中斷,清除此中斷標志,中斷返回SJMPENDTLOOP:MOVA,SBUF;接收(讀入)數(shù)據(jù)MOVC,P;奇偶標志送CJCLOOP1;為奇數(shù),轉(zhuǎn)LOOP1ORLC,RB8;為偶數(shù),檢測RB8JCLOOP2;奇偶校驗錯,轉(zhuǎn)LOOP2SJMPLOOP3LOOP1:ANLC,RB8;檢測RB8JCLOOP3;奇偶校驗正確,轉(zhuǎn)LOOP3LOOP2:MOVA,#0FFHMOVSBUF,A;發(fā)送“不正確”應答信號SJMPENDTLOOP3:MOVXDPTR,A;存放接收數(shù)據(jù)MOVA,#00HMOVSBUF,A;發(fā)送“正確”應答信號INCDPTR;修改數(shù)據(jù)區(qū)指針DJNZR0,ENDT;數(shù)據(jù)塊未接收完,返回CLRES;所有數(shù)據(jù)接收完畢,禁止串行口中斷ENDT:RETI;中斷返回END,.,89C51與PC機間通信軟件的設計,一、PC機通信軟件設計1.通信協(xié)議波特率:1200b/s;信息格式:8位數(shù)據(jù)位,1位停止位,無奇偶檢驗;傳送方式:PC機采用查詢方式收發(fā)數(shù)據(jù);89C51采用中斷方式接收,查詢方式發(fā)送;校驗方式:累加和校驗;握手信號:采用軟件握手。發(fā)送方在發(fā)送之前先發(fā)一聯(lián)絡信號(用“?”號的ASCII碼,接收方接到“?”號后回送一個“”號作為應答信號),隨后依次發(fā)送數(shù)據(jù)塊長度(字節(jié)數(shù)),發(fā)送數(shù)據(jù),最后發(fā)送校驗和。收方在收到發(fā)送方發(fā)過來的校驗和后與自己所累加的校驗和相比較,相同則回送一個“0”,表示正確傳送并結束本次的通信過程;若不相同則回送一個“F”,并使發(fā)送方重新發(fā)送數(shù)據(jù),直到接收正確為止。,.,2.PC機發(fā)送文件子程序首先介紹通過串口發(fā)送一個文件的函數(shù)sendf()。規(guī)定欲發(fā)送的這個文件存在當前盤上,并且為了便于說明問題,只傳送總字節(jié)小于256個字符的文件。3、PC機接收文件子程序接收函數(shù)receivef()采用查詢方式從串口接收一個總字節(jié)數(shù)小于256個字符的文件,接收的文件也存于當前盤上。,.,PC機發(fā)送文件子函數(shù)sendf()流程圖,PC機接收文件子函數(shù)receivef()流程圖,.,PC機發(fā)送文件子函數(shù)sendf()程序清單,.,.,.,4、PC機主程序(函數(shù))在有了上述發(fā)送和接收文件兩個子函數(shù)之后,主函數(shù)的編寫就非常簡單了。主函數(shù)的工作只是在完成串口初始化后,根據(jù)鍵入的命令來決定是發(fā)送文件還是接收文件。PC機主函數(shù)如下:,.,PC機主函數(shù)流程圖,.,這里采用的是帶參主函數(shù)main(intargc,char*argv)。其中,argc是一個整型變量,argv是一個字符型指針數(shù)組。利用main函數(shù)的參數(shù)可以使主程序從系統(tǒng)得到所需數(shù)據(jù)(也就是說帶參函數(shù)可直接從DOS命令行中得到參數(shù)值,當然,這些值是字符串)。當程序運行時(在DOS下執(zhí)行.EXE文件),可以根據(jù)輸入的命令行參數(shù)進行相應的處理。例如,執(zhí)行程序mypro時,若要從當前盤上將名為f1.c的文件從串口發(fā)送出去,需鍵入下述命令:myprosf1.c其中,mypro是源文件mypro.c經(jīng)編譯連接后生成的可執(zhí)行文件mypro.exe。鍵入命令:myprorf2.c可以從串口接收若干字符,并寫入當前盤上名為f2.c的文件中去。,.,二、89C51通信軟件設計1、單片機查詢發(fā)送子程序本程序?qū)⑵釸AM從1000H開始的小于256B的數(shù)據(jù)從串行口發(fā)送出去,發(fā)送的數(shù)據(jù)字節(jié)數(shù)在R7中,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 西方古代的管理思想
- 城市交通規(guī)劃合同管理成本控制咨詢重點基礎知識點
- 地下體育場館規(guī)劃重點基礎知識點
- 國防安全意識
- 轉(zhuǎn)讓贈予買賣合同協(xié)議
- 《我國軍隊軍銜制度概述》課件
- 民房工傷協(xié)議書
- 水電驗收協(xié)議書
- 遼寧商標轉(zhuǎn)讓協(xié)議合同
- 軋機轉(zhuǎn)讓出售合同協(xié)議
- 家用青飼料切割機說明書-畢業(yè)設計
- 物品出入庫登記表
- GB/T 11253-2019碳素結構鋼冷軋鋼板及鋼帶
- GB/T 10125-2012人造氣氛腐蝕試驗鹽霧試驗
- 大學生手機市場的調(diào)查報告
- 商務標評審表
- 2021版《安全生產(chǎn)法》培訓課件
- 大學語文說課課件
- 大連理工大學畫法幾何自學片段課件
- 慢性心功能不全護理查房
- 雙新轉(zhuǎn)常規(guī)申請表
評論
0/150
提交評論