版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第七章AT八九S五一單片機地
串行口1內(nèi)容概要介紹AT八九S五一串行口地基本工作原理,四種工作方式以及串行口多機通信地工作原理,還介紹各種常用地串行通信地接口標準,以及串行通信地C五一編程。2AT八九S五一地串行口為全雙工地通用異步收發(fā)(UART)地串行口。全雙工就是兩個單片機之間串行數(shù)據(jù)可同時雙向傳輸。異步通信是指收,發(fā)雙方使用各自地時鐘控制發(fā)送與接收過程,這樣可省去收,發(fā)雙方地一條同步時鐘信號線,使得異步串行通信連接更加簡單且容易實現(xiàn)。七.一串行口地結(jié)構(gòu)內(nèi)部結(jié)構(gòu)如圖七-一。兩個物理上獨立地接收,發(fā)送緩沖器SBUF(屬于特殊功能寄存器),可同時發(fā)送,接收數(shù)據(jù)。發(fā)送緩沖器只寫不能讀。接收緩沖器只讀不能寫。兩個緩沖器用一個特殊功能寄存器字節(jié)地址(九九H)??刂萍拇嫫鲀蓚€:特殊功能寄存器SCON與PCON。45圖七-一串行口內(nèi)部結(jié)構(gòu)七.一.一串行口控制寄存器SCON字節(jié)地址九八H,可位尋址,位地址為九八H~九FH。格式如圖七-二。 圖七-二串行口控制寄存器SCON地格式SCON各位功能。(一)SM零,SM一—串行口四種工作方式選擇位SM零,SM一兩位編碼所對應(yīng)地四種工作方式如表七-一。6(二)SM二—多機通信控制位多機通信僅在方式二與方式三下行。當串口以方式二或方式三接收時,如果SM二
=
一,則只有當接收到地第九位數(shù)據(jù)(RB八)為"一"時,才使RI置"一",產(chǎn)生斷請求,并將接收到地前八位數(shù)據(jù)送入SBUF。當接收到地第九位數(shù)據(jù)(RB八)為"零"時,則將接收到地前八位數(shù)據(jù)丟棄。7當SM二
=
零時,則不論第九位數(shù)據(jù)是"一"還是"零",都將前八位數(shù)據(jù)送入SBUF,并使RI置"一",產(chǎn)生斷請求。方式一時,如果SM二
=
一,則只有收到有效地停止位時才會激活RI。方式零時,SM二需要為零。(三)REN—允許串行接收位。由軟件置"一"或清"零"。REN=一,允許串行口接收數(shù)據(jù)。REN=零,禁止串行口接收數(shù)據(jù)。8(四)TB八—發(fā)送地第九位數(shù)據(jù)方式二與方式三,TB八是要發(fā)送地第九位數(shù)據(jù),由軟件置"一"或清"零"。雙機串行通信時,一般作為奇偶校驗位;在多機通信用來表示主機發(fā)送地是地址幀還是數(shù)據(jù)幀,TB八=一為地址幀,TB八=零為數(shù)據(jù)幀。(五)RB八—接收地第九位數(shù)據(jù)方式二與方式三,RB八存放接收到地第九位數(shù)據(jù)。在方式一,如SM二
=
零,RB八是接收到地停止位。在方式零,不使用RB八。(六)TI—發(fā)送斷標志位方式零,串行發(fā)送地第八位數(shù)據(jù)結(jié)束時TI由硬件置"一",在其它方式,串行口發(fā)送停止位地開始時置TI為"一"。9TI
=一,表示一幀數(shù)據(jù)發(fā)送結(jié)束。TI狀態(tài)可供軟件查詢,也可申請斷。CPU響應(yīng)斷后,在斷服務(wù)程序向SBUF寫入要發(fā)送地下一幀數(shù)據(jù)。TI需要由軟件清"零"。(七)RI—接收斷標志位方式零時,接收完第八位數(shù)據(jù)時,RI由硬件置"一"。在其它工作方式,串行接收到停止位時,該位置"一"。RI=一,表示一幀數(shù)據(jù)接收完畢,并申請斷,要求CPU從接收SBUF取走數(shù)據(jù)。該位地狀態(tài)也可供軟件查詢。RI需要由軟件清"零"。SCON地所有位都可行位操作清"零"或置"一"。七.一.二特殊功能寄存器PCON字節(jié)地址為八七H,不能位尋址。格式圖七-三。 圖七-三特殊功能寄存器PCON地格式11介紹PCON各位功能。僅最高位SMOD與串口有關(guān),其它各位地功能已在第二章地節(jié)電工作方式一節(jié)作過介紹。SMOD:波特率選擇位。例如,方式一地波特率計算公式: 方式一波特率
=
定時器T一地溢出率當SMOD=一時,要比SMOD=零時波特率加倍,所以也稱SMOD位為波特率倍增位。12七.二串行口地四種工作方式四種工作方式由SCONSM零,SM一位定義,編碼見表七-一。七.二.一方式零同步移位寄存器輸入/輸出方式。該方式并不用于兩個AT八九S五一單片機之間地異步串行通信,而是用于串行口外接移位寄存器,擴展并行I/O口。八位數(shù)據(jù)為一幀,無起始位與停止位,先發(fā)送或接收最低位。波特率為fosc/一二。幀格式如圖七-四。 圖七-四方式零地幀格式13一.方式零輸出(一)方式零輸出地工作原理當執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器SBUF指令時,產(chǎn)生一個正脈沖,串行口開始把SBUF地八位數(shù)據(jù)以fosc/一二地固定波特率從RXD引腳串行輸出,低位在先,TXD引腳輸出同步移位脈沖,發(fā)送完八位數(shù)據(jù),斷標志位TI置"一"。發(fā)送時序如圖七-五。14圖七-五方式零發(fā)送時序15(二)方式零輸出地應(yīng)用典型應(yīng)用是外擴串行輸入/并行輸出地同步移位寄存器七四LS一六四,實現(xiàn)并行輸出端口地擴展。圖七-六為串行口工作在方式零,通過七四LS一六四地輸出來控制八個外接LED發(fā)光二極管亮滅地接口電路。當串行口被設(shè)置在方式零輸出時,串行數(shù)據(jù)由RXD端(P三.零)送出,移位脈沖由TXD端(P三.一)送出。在移位脈沖地作用下,串行口發(fā)送緩沖器地數(shù)據(jù)逐位地從RXD端串行地移入七四LS一六四。1617圖七-六串行口地方式零外接八個LED發(fā)光二極管地接口電路例七-一如圖七-六所示,編寫程序控制八個發(fā)光二極管輪流點亮。圖七四LS一六四地CLK端為同步脈沖輸入端,CLR為控制端,當CLR=零時,允許串行數(shù)據(jù)從A與B端輸入但是八位并行輸出端關(guān)閉;當CLR=一時,A與B輸入端關(guān)閉,但是允許七四LS一六四地八位數(shù)據(jù)并行輸出。當八位串行數(shù)據(jù)發(fā)送完畢后,引起斷,在斷服務(wù)程序,單片機通過串行口輸出下一個八位數(shù)據(jù)。采用斷方式地參考程序如下。 #include<reg五一.h> #include<stdio.h> sbitP一_零=零x九零; xdatacharnSendByte; delay(); main() {SCON=零x零零; /*設(shè)置串行口為方式零*/ EA=一; /*全局斷允許*/ ES=一; /*允許串行口斷*/ nIndex=一; SBUF=nSendByte; P一_零=零; for(;;) {} }voidSerial_Port()interrupt四using零 { if(TI==一) { P一_零=一; delay(); P一_零=零; nSendByte<<=一; if(nSendByte==零)nSendByte=一; SBUF=nSendByte; } TI=零; RI=零; } delay() { intnCounter; for(nCounter=零;nCounter<一二八;nCounter++); }程序說明:(一)定義了全局變量nSendByte,以便在斷服務(wù)程序能訪問該變量。nSendByte用于存放從串口發(fā)出地字符,在程序使用操作符對nSendByte變量行移位,使得從串口發(fā)出地數(shù)據(jù)為零x零一,零x零二,零x零四,零x零八,零x一零,零x二零,零x四零,零x八零,從而逐個點亮不同地發(fā)光二極管。(二)if語句地作用是當nSendByte左移一位由零x八零變?yōu)榱鉿零零后,需對變量nIndex重新賦值為一。(三)主程序地SBUF=nSendByte語句必不可少,如沒有該語句,主程序并不從串行口發(fā)送數(shù)據(jù),也就不會有發(fā)送完成斷。(四)循環(huán)語句for(;;)地循環(huán)條件為空,表示for循環(huán)為一個無限循環(huán),與while(一)實現(xiàn)同樣地功能。二.方式零輸入(一)方式零輸入工作原理方式零接收,REN為允許接收控制位,REN=零,禁止接收;REN
=
一,允許接收。當向SCON寄存器寫入控制字(設(shè)置為方式零,并使REN位置"一",同時RI
=
零)時,產(chǎn)生一個正脈沖,串行口開始接收數(shù)據(jù)。引腳RXD為數(shù)據(jù)輸入端,TXD為移位脈沖信號輸出端,接收器以fosc/一二地固定波特率采樣RXD引腳地數(shù)據(jù)信息,當接收完八位數(shù)據(jù)時,斷標志RI置"一",表示一幀數(shù)據(jù)接收完畢,可行下一幀數(shù)據(jù)地接收,時序如圖七-七。23圖七-七方式零接收時序(二)方式零輸入應(yīng)用舉例例七-二圖七-八為串口外接一片八位并行輸入,串行輸出地同步移位寄存器七四LS一六五,擴展一個八位并行輸入口地電路,可將接在七四LS一六五地八個開關(guān)地狀態(tài)通過串口方式零讀入到單片機內(nèi)。七四LS一六五地SH/LD*端為控制端。若SH/LD*=零,則七四LS一六五可并行輸入數(shù)據(jù),且串行輸出端關(guān)閉;SH/LD*=一,則并行輸入關(guān)斷,可以串行輸出。圖由P一.零檢測地開關(guān)S合上時開始數(shù)字量并行讀入,采用斷方式來完成數(shù)字量地讀取。參考程序如下。25
26圖七-八外接并行輸入串行輸出地同步移位寄存器#include<reg五一.h>#include<stdio.h>sbitP一_零=零x九零;sbitP一_一=零x九一;xdatacharnRxByte;delay();main(){xdatacharnRxByte=零;SCON=零x零零; /*串行口初始化為方式零*/ES=一; /*允許串行口斷*/EA=一; /*允許全局斷*/for(;;){if(P一_零==零) /*P一.零=零為真,表示要并行讀入數(shù)字量*/ {P一_一=零; /*P一.一清零,將數(shù)字量并行讀入*/P一_一=一; /*P一.一置一,將并行讀入數(shù)字量串行輸出給單片機*/ } } } voidSerial_Port()interrupt四using零 {if(RI==一) {nRxByte=SBUF; /*讀入SBUF地數(shù)據(jù)*/ } TI=零; /*清除TI與RI標志位*/ RI=零; }程序說明:當P一.零為零表示要并行讀入數(shù)字量,通過P一.一把SH/LD*復(fù)位,則并行讀入,再把SH/LD*置一,七四LS一六五就將并行讀入地數(shù)字量通過QH端串行發(fā)給單片機,在斷服務(wù)程序讀入SBUF地數(shù)據(jù)。七.二.二方式一方式一為雙機串行通信方式,如圖七-九所示。當SM零,SM一=零一時,串行口設(shè)為方式一地雙機串行通信。TXD腳與RXD腳分別用于發(fā)送與接收數(shù)據(jù)。 圖七-九方式一雙機串行通信地連接電路29方式一一幀數(shù)據(jù)為一零位,一個起始位(零),八個數(shù)據(jù)位,一個停止位(一),先發(fā)送或接收最低位。幀格式如圖七-一零。 圖七-一零方式一地幀格式方式一為波特率可變地八位異步通信接口。波特率由下式確定: 方式一波特率
=
定時器T一地溢出率SMOD為PCON寄存器地最高位地值(零或一)。30一.方式一發(fā)送方式一輸出時,數(shù)據(jù)位由TXD端輸出,發(fā)送一幀信息為一零位:一位起始位零,八位數(shù)據(jù)位(先低位)與一位停止位一。當CPU執(zhí)行一條數(shù)據(jù)寫SBUF地指令,就啟動發(fā)送。發(fā)送時序見圖七-一一。圖七-一一TX時鐘地頻率就是發(fā)送地波特率。發(fā)送開始時,內(nèi)部發(fā)送控制信號變?yōu)橛行?將起始位向TXD腳(P三.零)輸出,此后每經(jīng)過一個TX時鐘周期,便產(chǎn)生一個移位脈沖,并由TXD引腳輸出一個數(shù)據(jù)位。八位數(shù)據(jù)位全部發(fā)送完畢后,斷標志位TI置"一。31 圖七-一一方式一發(fā)送時序32二.方式一接收方式一接收時(REN
=
一),數(shù)據(jù)從RXD(P三.一)引腳輸入。當檢測到起始位地負跳變,則開始接收。接收時序見圖七-一二。接收時,定時控制信號有兩種,一種是接收移位時鐘(RX時鐘),它地頻率與傳送地波特率相同。另一種是位檢測器采樣脈沖,頻率是RX時鐘地一六倍。以波特率地一六倍速率采樣RXD腳狀態(tài)。當采樣到RXD端從一到零地負跳變時就啟動檢測器,接收地值是三次連續(xù)采樣(第七,八,九個脈沖時采樣)取兩次相同地值,以確認起始位(負跳變)地開始,較好地消除干擾引起地影響。33 圖七-一二方式一接收時序34當起始位有效時,開始接收一幀信息。每一位數(shù)據(jù)都行三次連續(xù)采樣(第七,八,九個脈沖采樣),接收地值是三次采樣至少兩次相同地值。當一幀數(shù)據(jù)接收完畢后,同時滿足以下兩個條件,接收才有效。(一)RI=零,即上一幀數(shù)據(jù)接收完成時,RI
=
一發(fā)出地斷請求已被響應(yīng),SBUF地數(shù)據(jù)已被取走,說明"接收SBUF"已空。(二)SM二=零或收到地停止位
=
一(方式一時,停止位已入RB八),則將接收到地數(shù)據(jù)裝入SBUF與RB八(裝入地是停止位),且斷標志RI置"一"。若不同時滿足兩個條件,收地數(shù)據(jù)不能裝入SBUF,該幀數(shù)據(jù)將丟棄。35七.二.三方式二方式二與方式三,九位異步通信接口。每幀數(shù)據(jù)為一一位,一位起始位零,八位數(shù)據(jù)位(先低位),一位可程控為一或零地第九位數(shù)據(jù)與一位停止位。方式二,方式三幀格式如圖七-一三。
圖七-一三方式二,方式三地幀格式 方式二波特率
=
fosc36一.方式二發(fā)送發(fā)送前,先根據(jù)協(xié)議由軟件設(shè)置TB八(如奇偶校驗位或多機通信地地址/數(shù)據(jù)標志位),然后將要發(fā)送地數(shù)據(jù)寫入SBUF,即啟動發(fā)送。TB八自動裝入第九位數(shù)據(jù)位,逐一發(fā)送。發(fā)送完畢,使TI位置"一"。發(fā)送時序如圖七-一四。 圖七-一四方式二與方式三發(fā)送時序37二.方式二接收SM零,SM一=一零,且REN=一時,方式二接收。數(shù)據(jù)由RXD端輸入,接收一一位信息。當位檢測邏輯采樣到RXD地負跳變,判斷起始位有效,便開始接收一幀信息。在接收完第九位數(shù)據(jù)后,需滿足以下兩個條件,才能將接收到地數(shù)據(jù)送入SBUF(接收緩沖器)。(一)RI=零,意味著接收緩沖器為空。(二)SM二=零或接收到地第九位數(shù)據(jù)位RB八=一。當滿足上述兩個條件時,收到地數(shù)據(jù)送SBUF(接收緩沖器),第九位數(shù)據(jù)送入RB八,且RI置"一"。若不滿足這兩個條件,接收地信息將被丟棄。38串行口方式二與方式三接收時序如圖七-一五。
圖七-一五方式二與方式三接收時序39七.二.四方式三SM零,SM一=一一時,方式三。為波特率可變地九位異步通信方式,除了波特率外,方式三與方式二相同。方式三發(fā)送與接收時序如圖七-一一與圖七-一二所示。 方式三波特率
=
定時器T一地溢出率40七.三多機通信多個單片機可利用串口行多機通信,常采用圖七-一六地主從式結(jié)構(gòu)。系統(tǒng)一個主機(單片機或其它有串行接口地微機)與多個單片機組成地從機系統(tǒng)。主機地RXD與所有從機地TXD端相連,TXD與所有從機地RXD端相連。從機地址分別為零一H,零二H與零三H。 圖七-一六多機通信系統(tǒng)示意圖41主從式只有一個主機,其余全是從機。主機發(fā)送地信息可以被所有從機接收,任何一個從機發(fā)送地信息,只能由主機接收。從機與從機之間不能行直接通信,只能經(jīng)主機才能實現(xiàn)。多機通信地工作原理:要保證主機與所選擇地從機通信,須保證串口有識別功能。SCON地SM二位就是為滿足這一條件設(shè)置地多機通信控制位。其工作原理是在串行口以方式二(或方式三)接收時,若SM二=一,則表示行多機通信,可能以下兩種情況:42(一)從機接收到地主機發(fā)來地第九位數(shù)據(jù)RB八=一時,前八位數(shù)據(jù)才裝入SBUF,并置斷標志RI
=
一,向CPU發(fā)出斷請求。在斷服務(wù)程序,從機把接收到地SBUF地數(shù)據(jù)存入數(shù)據(jù)緩沖區(qū)。(二)如果從機接收到地第九位數(shù)據(jù)RB八=零時,則不產(chǎn)生斷標志RI=一,不引起斷,從機不接收主機發(fā)來地數(shù)據(jù)。若SM二
=
零,則接收地第九位數(shù)據(jù)不論是零還是一,從機都將產(chǎn)生RI
=
一斷標志,接收到地數(shù)據(jù)裝入SBUF。應(yīng)用這一特,可實現(xiàn)多機通信。多機通信地工作過程:(一)各從機初始化程序允許從機串口斷,將串口編程為方式二或方式三接收,即九位異步通信方式,且SM二與REN位置"一",使從機處于多機通信且只接收地址幀地狀態(tài)。(二)在主機與某從機通信之前,先將從機地址(即準備接收數(shù)據(jù)地從機)發(fā)送給各個從機,接著才傳送數(shù)據(jù)(或命令),主機發(fā)出地地址幀信息地第九位為一,數(shù)據(jù)(或命令)幀地第九位為零。當主機向各從機發(fā)送地址幀時,各從機地串行口接收到地第九位信息RB八為一,且由于各從機地SM二=一,44則RI置"一",各從機響應(yīng)斷,在斷服務(wù)子程序,判斷主機送來地地址是否與本機地址相符合,若為本機地址,則該從機SM二位清"零",準備接收主機地數(shù)據(jù)或命令;若地址不相符,則保持SM二
=
一。(三)接著主機發(fā)送數(shù)據(jù)(或命令)幀,數(shù)據(jù)幀地第九位為零。此時各從機接收到地RB八=零。只有與前面地址相符合地從機(即SM二位已清"零"地從機)才能激活斷標志位RI,從而入斷服務(wù)程序,接收主機發(fā)來地數(shù)據(jù)(或命令);與主機發(fā)來地地址不相符地從機,由于SM二保持為一,又RB八
=
零,因此不能激活斷標志RI,就不能接受主機45發(fā)來地數(shù)據(jù)幀。從而保證主機與從機間通信地正確。此時主機與建立聯(lián)系地從機已經(jīng)設(shè)置為單機通信模式,即在整個通信,通信地雙方都要保持發(fā)送數(shù)據(jù)地第九位(即TB八位)為零,防止其它從機誤接收數(shù)據(jù)。(四)結(jié)束數(shù)據(jù)通信并為下一次地多機通信做好準備。在多機系統(tǒng),每個從機都被賦予唯一地地址。例如,圖七-一六三個從機地地址可設(shè)為:零一H,零二H,零三H。還要預(yù)留一~二個"廣播地址",它是所有從機有地地址,例如將"廣播地址"設(shè)為零零H。當主機與從機地數(shù)據(jù)通信結(jié)束后,一定要將從機再設(shè)置為多機通信模式,以便行下一次地多機通信。這時要求與主機正在行數(shù)據(jù)傳輸?shù)貜臋C須隨時注意,一旦接收地數(shù)據(jù)第九位(RB八)為"一",說明主機傳送地不再是數(shù)據(jù),而是地址,這個地址就有可能是"廣播地址"。當收到"廣播地址"后,便將從機地通信模式再設(shè)置成多機模式,為下一次多機通信做好準備。47七.四波特率地制定串行通信,收,發(fā)雙方發(fā)送或接收地波特率需要一致。四種工作方式:方式零與方式二地波特率是固定地;方式一與方式三地波特率是可變地,由T一溢出率確定。七.四.一波特率地定義波特率地定義:串行口每秒鐘發(fā)送(或接收)地位數(shù)。設(shè)發(fā)送一位所需要地時間為T,則波特率為一/T。定時器地不同工作方式,得到地波特率地范圍不一樣,這是由T一在不同工作方式下計數(shù)位數(shù)地不同所決定。48七.四.二定時器T一產(chǎn)生波特率地計算與串行口地工作方式有關(guān)。(一)方式零時,波特率固定為時鐘頻率fosc地一/一二,不受SMOD位值地影響。若fosc
=
一二MHz,波特率一Mbit/s。(二)方式二時,波特率僅與SMOD位地值有關(guān)。 方式二波特率
=
fosc若fosc
=
一二MHz:SMOD
=
零,波特率
=
一八七.五kbit/s;SMOD
=
一,波特率
=
三七五kbit/s。(三)方式一或方式三定時,常用T一作為波特率發(fā)生器,其關(guān)系式為49波特率
=
定時器T一地溢出率 (七-一)由式(七-一)見,T一溢出率與SMOD地值同決定波特率。在實際設(shè)定波特率時,T一常設(shè)置為方式二定時(自動裝初值),即TL一作為八位計數(shù)器,TH一存放備用初值。這種方式操作方便,也避免因軟件重裝初值帶來地定時誤差。設(shè)定時器T一方式二地初值為X,則有
定時器T一地溢出率
=
(七-二)50將式(七-二)代入式(七-一),則
波特率
=
(七-三)由式(七-三)可見,波特率隨fosc,SMOD與初值X而變化。實際使用時,經(jīng)常根據(jù)已知波特率與時鐘頻率fosc來計算T一地初值X。為避免繁雜地初值計算,常用地波特率與初值X間地關(guān)系常列成表七-二形式,供查用。51
表七-二 用定時器T一產(chǎn)生地常用波特率52波特率foscSMOD位方式初值X六二.五kbit/s一二MHz一二FFH一九.二kbit/s一一.零五九二MHz一二FDH九.六kbit/s一一.零五九二MHz零二FDH四.八kbit/s一一.零五九二MHz零二FAH二.四kbit/s一一.零五九二MHz零二F四H一.二kbit/s一一.零五九二MHz零二E八H表七-二有兩點需要注意:(一)在使用地時鐘振蕩頻率fosc為一二MHz或六MHz時,將初值X與fosc帶入式(七-三)計算出地波特率有一定誤差。消除誤差可采用時鐘頻率一一.零五九二MHz。(二)如果選用很低地波特率,如選為五五,可將定時器T一設(shè)為方式一定時。但這種情況,T一溢出時,需在斷服務(wù)程序重新裝入初值。斷響應(yīng)時間與執(zhí)行指令時間會使波特率產(chǎn)生一定地誤差,可用改變初值地方法加以調(diào)整。53例七-三若時鐘頻率為一一.零五九二MHz,選用T一地方式二定時作為波特率發(fā)生器,波特率為二
四零零bit/s,求初值。設(shè)T一為方式二定時,選SMOD
=
零。將已知條件帶入式(七-三) 波特率
=
=
二四零零從解得:X
=
二四四
=
F四H。只要把F四H裝入TH一與TL一,則T一產(chǎn)生地波特率為二四零零bit/s。也可直接從表七-二查到。這里時鐘振蕩頻率選為一一.零五九二MHz,就可使初值為整數(shù),從而產(chǎn)生精確地波特率。54七.五串行通信地應(yīng)用設(shè)計串行通信接口設(shè)計時,需考慮如下問題。(一)首先確定串行通信雙方地數(shù)傳速率與通信距離;(二)由串行通信地數(shù)傳速率與通信距離確定采用地串行通信接口標準;(三)注意串行通信地通信線選擇,一般選用雙絞線較好,并根據(jù)傳輸?shù)鼐嚯x選擇纖芯地直徑。如空間干擾較多,還要選擇帶有屏蔽層地雙絞線。下面首先介紹有關(guān)串行通信地接口設(shè)計問題。55七.五.一各種串行通信接口標準AT八九S五一單串口地輸入,輸出均為TTL電。以TTL電串行傳輸數(shù)據(jù)地方式,抗干擾差,傳輸距離短,速率低。為了提高串行通信可靠,增大串行通信地距離與提高傳輸速率,一般都采用標準串行接口,如RS-二三二,RS-四二二A,RS-四八五等。根據(jù)AT八九S五一單片機地雙機通信距離與抗干擾地實際要求,可選擇TTL電傳輸,或選擇RS-二三二C,RS-四二二A,RS-四八五串行接口行串行數(shù)據(jù)傳輸。56一.TTL電通信接口如兩個AT八九S五一單片機相距在一.五m內(nèi),它們地串口可直接相連,接口電路如圖七-九所示。甲機地RXD與乙機地TXD端相連,乙機地RXD與甲機地TXD端相連,從而直接用TTL電傳輸方法來實現(xiàn)雙機通信。二.RS-二三二C雙機通信接口如果雙機通信距離在一.五m~一五m之間時,可利用RS-二三二C標準接口實現(xiàn)點對點地雙機通信,接口電路如圖七-一七所示。 圖七-一七RS-二三二C雙機通信接口電路58三.RS-四二二A雙機通信接口RS-二三二C缺點:傳輸速率低,通訊距離短,接口處信號容易產(chǎn)生串擾等。際上又推出了RS-四二二A標準。與RS-二三二C地主要區(qū)別是,收發(fā)雙方地信號地不再地,RS-四二二A采用了衡驅(qū)動與差分接收地方法。用于數(shù)據(jù)傳輸是兩條衡導(dǎo)線,這相當于兩個單端驅(qū)動器。兩條線上傳輸?shù)匦盘栯?當一個表示邏輯"一"時,另一條一定為邏輯"零"。若傳輸,信號混入干擾與噪聲(模形式),由于差分接收器地作用,就能識別有用信號并正確接收傳輸?shù)匦畔?并使干擾與噪聲相互抵消。59RS-四二二A能在長距離,高速率下傳輸。最大傳輸率為一零Mbit/s,電纜允許長度為一二m,如采用較低傳輸速率時,最大傳輸距離可達一二一九m。為了增加通信距離,可采用光電隔離,利用RS-四二二A標準行雙機通信地接口電路如圖七-一八。圖,每個通道地接收端都接有三個電阻R一,R二與R三,其R一為傳輸線地匹配電阻,取值范圍在五零~一k,其它兩個電阻是為了解決第一個數(shù)據(jù)地誤碼而設(shè)置地匹配電阻。為了起到隔離,抗干擾地作用,圖七-一八須使用兩組獨立地電源。圖地SN七五一七四,SN七五一七五是TTL電到RS-四二二A電與RS-四二二A電到TTL電地電轉(zhuǎn)換芯片。60 圖七-一八RS-四二二A雙機通信接口電路61四.RS-四八五雙機通信接口RS-四二二A通信需四芯傳輸線,長距離通信很不經(jīng)濟,故在工業(yè)現(xiàn)場,通常采用雙絞線傳輸?shù)豏S-四八五串行通信接口,很容易實現(xiàn)多機通信。RS-四八五是RS-四二二A地變型,它與RS-四二二A地區(qū)別:RS-四二二A為全雙工,采用兩對衡差分信號線;RS-四八五為半雙工,采用一對衡差分信號線。RS-四八五對于多站互連是十分方便地,容易實現(xiàn)多機通信。RS-四八五允許最多并聯(lián)三二臺驅(qū)動器與三二臺接收器。圖七-一九為RS-四八五通信接口電路。與RS-四二二A一樣,最大傳輸距離約一二一九m,最大傳輸速率為一零Mbit/s。6263圖七-一九RS-四八五雙機通信接口電路通信線路要采用衡雙絞線。衡雙絞線地長度與傳輸速率成反比,在一零零kbit/s速率以下,才可能使用規(guī)定地最長電纜。只有在很短地距離下才能獲得最大傳輸速率。一般一零零m長雙絞線最大傳輸速率僅為一Mbit/s。圖七-一九,RS-四八五以雙向,半雙工方式來實現(xiàn)雙機通信。在AT八九S五一單片機系統(tǒng)發(fā)送或接收數(shù)據(jù)前,應(yīng)先將SN七五一七六地發(fā)送門或接收門打開,當P一.零=一時,發(fā)送門打開,接收門關(guān)閉;當P一.零=零時,接收門打開,發(fā)送門關(guān)閉。圖七-一九地SN七五一七六芯片內(nèi)集成了一個差分驅(qū)動器與一個差分接收器,且兼有TTL電到RS-四八五電,RS-四八五電到TTL電地轉(zhuǎn)換功能。此外常用地RS-四八五接口芯片還有MAX四八五。七.五.二方式一地應(yīng)用例七-四如圖七-二零所示,甲,乙雙機串行通信,雙機地RXD與TXD相互叉相連,甲機地P一口接八個開關(guān),乙機地P一口接八個發(fā)光二極管。甲機設(shè)置為只發(fā)不收地單工方式。要求甲機讀入P一口地八個開關(guān)地狀態(tài)后,通過串行口發(fā)送到乙機,乙機將接收到地甲機地八個開關(guān)地狀態(tài)數(shù)據(jù)送入P一口,6566圖七-二零單片機方式一雙機通信地連接由P一口地八個發(fā)光二極管來顯示八個開關(guān)地狀態(tài)。雙方晶振均采用一一.零五九二MHz。參考程序如下。/*甲機串行發(fā)送*/#include<reg五一.h>#defineucharunsignedchar #defineuintunsignedintvoidmain(){uchartemp=零;TMOD=零x二零; /*設(shè)置定時器T一為方式二*/TH一=零xfd; /*波特率九六零零*/TL一=零xfd;SCON=零x四零; /*方式一只發(fā)送,不接收*/PCON=零x零零; /*串行口初始化為方式零*/
67 TR一=一; /*啟動T一*/ P一=零xff; /*P一口為輸入*/while(一) {temp=P一; /*讀入P一口開關(guān)地狀態(tài)數(shù)據(jù)*/ SBUF=temp; /*數(shù)據(jù)送串行口發(fā)送*/ while(TI==零); /*如果TI=零,未發(fā)送完,循環(huán)等待*/ TI=零; /*已發(fā)送完,再把TI清零*/ } } /*乙機串行接收*/ #include<reg五一.h> #defineucharunsignedchar #defineuintunsignedint voidmain() { uchartemp=零; TMOD=零x二零; /*設(shè)置定時器T一為方式二*/ TH一=零xfd; /*波特率九六零零*/ TL一=零xfd; SCON=零x五零; /*設(shè)置串口為方式一接收,REN=一*/ PCON=零x零零; /*SMOD=零*/ TR一=一; /*啟動T一*/ while(一) {while(RI==零); /*若RI為零,未接收到數(shù)據(jù)*/ RI=零; /*接收到數(shù)據(jù),則把RI清零*/ temp=SBUF; /*讀取數(shù)據(jù)存入temp*/ P一=temp; /*接收地數(shù)據(jù)送P一口控制八個LED地亮與滅*/ } }例七-
五如圖七-九所示,甲乙兩機以方式一行串行通信,其甲機發(fā)送信息,乙機接收信息,雙方晶振頻率均為一一.零五九二MHz,波特率為二四零零bps。當串行通信開始時,雙方約定,甲機先發(fā)送信號AAH,乙機收到后應(yīng)答B(yǎng)BH,表示同意接收。甲機收到BBH后,即可發(fā)送數(shù)據(jù)。如果乙機發(fā)現(xiàn)數(shù)據(jù)出錯,就向甲機發(fā)送FFH,甲機收到FFH后,重新發(fā)送數(shù)據(jù)給乙機。設(shè)發(fā)送地字節(jié)塊地數(shù)據(jù)長度為一零字節(jié),數(shù)據(jù)緩沖區(qū)為buf,數(shù)據(jù)發(fā)送完畢要立即發(fā)送校驗與,行數(shù)據(jù)發(fā)送準確驗證。乙機接收到地數(shù)據(jù)存儲到數(shù)據(jù)緩沖區(qū)buf,收到一個數(shù)據(jù)塊后,再接收甲機發(fā)來地校驗與,并將其與乙機求得地校驗與比較:若相等,說明接收正確,乙機回答零零H;若不等,說明接收不正確,乙機回答FFH;請求甲機重新發(fā)送。 70選擇定時器T一為方式二定時,波特率不倍增,即SMOD=零。查表七-二,則寫入T一地初值應(yīng)為F四H。以下為雙機通信程序,該程序可以在甲乙兩機運行,不同地是在程序運行之前,要為地選擇TR。若選擇TR=零,表示該機為發(fā)送方;若選擇TR=一,表示該機是接收方。程序根據(jù)TR地設(shè)置,利用發(fā)送函數(shù)send()與接收函數(shù)receive()分別實現(xiàn)發(fā)送與接收功能。 71#include<reg五一.h>#defineucharunsignedchar #defineTR一 /*接收,發(fā)送地區(qū)別值,TR=零,為發(fā)送*/ucharidatabuf[一零] ucharsum; /*校驗與*//*串口初始化函數(shù)*/voidinit(void) { TMOD=零x二零; /*T一方式二定時*/ TH一=零xf四; /*波特率二四零零*/ TL一=零xf四; PCON=零x零零; /*SMOD=零*/TR一=一; /*啟動T一*/SCON=零x五零; /*串行口方式一,REN=一允許接收*/ } 72/*主程序*/voidmain(void) {init(); if(TR==零) /*TR=零,為發(fā)送*/ {send();} /*調(diào)用發(fā)送函數(shù)*/ else {receive();} /*調(diào)用接收函數(shù)*/ }/*發(fā)送函數(shù)*/voidsend(void) { uchari; do{ SBUF=零xAA; /*發(fā)送聯(lián)絡(luò)信號*/while(TI==零); /*等待數(shù)據(jù)發(fā)送完畢*/TI=零;while(RI==零); /*等待乙機應(yīng)答*/RI=零;73} while(SBUF^零xBB!=零); /*乙機未準備好,繼續(xù)聯(lián)絡(luò)*/do{ sum=零; /*校驗與變量清零*/ for(i=零;i<一六;i++){ sum+=buf[i]; /*求校驗與*/ while(TI==零); TI=零; }SBUF=sumwhile(TI==零);TI=零;while(RI==零);RI=零;}while(SBUF!=零); /*出錯,重新發(fā)送*/}74/*接收函數(shù)*/voidreceive() { uchari; do{}while(RI==零);RI=零;while(SBUF^零xAA!=零); /*判甲機是否發(fā)出請求*/SBUF=零xBB; /*發(fā)送應(yīng)答信號BBH*/while(TI==零); /*等待發(fā)送結(jié)束*/TI=零;while(一){ sum=零; /*清校驗與*/ for(i=零;i<一六;i++) while(RI==零); RI=零; /*接收校驗與*/ buf[i]=SBUF; /*接收一個數(shù)據(jù)*/sum+=buf[i]; /*求校驗與*/ }75while(RI==零); RI=零; /*接收甲機地校驗與*/if((SBUF^sum)==零); /*比較校驗與*/ {SBUF=零x零零;break;} /*校驗與相等,則發(fā)零零H*/ else {SBUF=零xFF; /*出錯發(fā)FFH,重新接收*/while(TI==零); TI=零; }} 七.五.三方式二與方式三地應(yīng)用方式二與方式一兩點不同。方式二收/發(fā)一一位信息,第零位為起始位,第一~八位為數(shù)據(jù)位,第九位是程控位,可由用戶置TB八決定,第一零位是停止位一,這是一個不同點。另一不同點是方式二波特率變化范圍比方式一小,方式二波特率=振蕩器頻率/n。 76當SMOD
=
零時,n
=
六四。當SMOD
=
一時,n
=
三二。除波特率地差別外,方式二地使用與方式三是一樣地,所以下面介紹地方式三應(yīng)用編程,也適用于方式二。例七-六甲乙兩個單片機行方式三(或方式二)串行通訊。甲機將八個流水燈控制數(shù)據(jù)發(fā)送給乙機,乙機再利用該數(shù)據(jù)點亮其P一口地八個LED。方式三比方式一多了一個可編程位TB八,該位一般作奇偶校驗位。乙機接收到地八位二制數(shù)據(jù)有可能出錯,需行奇偶校驗,其方法是將乙機地RB八與PSW地奇偶校驗位P行比較,如相同,接收數(shù)據(jù);否則拒絕接收。參考程序如下。 77甲機發(fā)送程序如下:#include<reg五一.h>sbitp=PSW^零;/*p位定義為PSW寄存器地第零位,即奇偶校驗位*/unsignedchar codeTab[]={零xfe,零xfd,零xfb,零xf七,零xef,零xdf,零xbf,零x七f};/*控制流水燈顯示數(shù)據(jù),數(shù)組被定義為全局變量*/voidSend(unsignedchardat) /*發(fā)送一個字節(jié)數(shù)據(jù)地函數(shù)*/ {dat=ACC; TB八=p;/*將奇偶校驗位寫入TB八*/ SBUF=dat; /*將待發(fā)送地數(shù)據(jù)寫入發(fā)送緩沖器*/ while(TI==零);/*檢測發(fā)送標志位TI,TI=零,未發(fā)送完*/ ; /*空操作*/ TI=零; /*一個字節(jié)發(fā)送完,TI清零*/ }78voidDelay(void) /*延時大約二零零ms函數(shù)*/ { unsignedcharm,n; for(m=零;m<二五零;m++); for(n=零;n<二五零;n++); } voidmain(void) /*主函數(shù)*/ { unsignedchari; TMOD=零x二零; /*設(shè)置定時器T一為方式二*/ SCON=零xc零; /*設(shè)置串口為方式三*/ PCON=零x零零; /*SMOD=零*/ TH一=零xfd;/*給定時器T一賦初值,波特率設(shè)置為九六零零*/ TL一=零xfd; TR一=一; /*啟動定時器T一*/ while(一) {for(i=零;i<八;i++); {Send(Tab[i]) ; Delay();/*大約二零零ms發(fā)送一次數(shù)據(jù)*/79}}}乙機接收程序如下: #include<reg五一.h> sbitp=零xd零; /*p位為PSW寄存器地第零位,即奇偶校驗位*/ unsignedcharReceive(void) /*接收一個字節(jié)數(shù)據(jù)地函數(shù)*/ {unsignedchardat; while(RI==零);/*檢測接收斷標志RI,RI=零,未接收完,則循環(huán)等待*/ ; RI=零; /*已接收一幀數(shù)據(jù),將RI清零*/ ACC=SBUF; /*將接收緩沖器地數(shù)據(jù)存于ACC*/ if(RB八==P) /*只有奇偶校驗成功才接收數(shù)據(jù)*/ {dat=ACC; /*將接收緩沖器地數(shù)據(jù),存于dat*/ returndat; /*將接收地數(shù)據(jù)返回*/
80 } }voidmain(void) /*主函數(shù)*/ { TMOD=零x二零; /*設(shè)置定時器T一為方式二*/ SCON=零xd零; /*設(shè)置串口為方式三,允許接收REN=一*/ PCON=零x零零; /*SMOD=零*/ TH一=零xfd; /*給定時器T一賦初值,波特率為九六零零/ TL一=零xfd; TR一=一; /*接通定時器T一*/ REN=一; /*允許接收*/ while(一) {P一=Receive();/*將接收到地數(shù)據(jù)送P一口顯示*/}}81七.五.四主從式多機通信地應(yīng)用介紹主從式多機通信地應(yīng)用編程。例七-七如圖七-一六所示,主機分別與三個從機行通信,這里僅以地址為零一H地一#從機為例,實現(xiàn)主從機地通信,其它從機地程序與一#從機相同,只是定義地地址不同。約定如下。(一)三臺從機地地址為零零H~零二H。(二)主機發(fā)出地地址FFH為一條控制指令,使所有從機都處于SM二=一地狀態(tài)。(三)其余地控制指令:零零H—接收指令,零一H—發(fā)送指令。這兩條指令是作為數(shù)據(jù)發(fā)送地。(四)從機地狀態(tài)字如圖七-二一所示。8283圖七-二一從機狀態(tài)字地格式約定其:ERR(位D七)=一,表示收到非法命令。TRDY(位D一)=一,表示發(fā)送準備完畢。RRDY(位D零)=一,表示接收準備完畢。通信時,主機采用查詢方式,從機采用斷方式。主機串行口設(shè)為方式三,允許接收,并置TB八為一,因為只有一個主機,所以主機地SCON控制寄存器地SM二不要置一,故控制字為一一零一一零零零,即D八H。/*主機程序*/#include<reg五一.h> #defineucharunsignedchar #defineBytenum一六 /*傳送一次地字節(jié)數(shù)*/
ucharmaster(ucharaddrs,ucharnd)ucharslave=零x零零; /*從機地址*/ucharidatardata[一六];ucharidatatdata[一六]={"abcdefghijklmnop"}; voidmain(void){ uchari;for(i=零;i<一零;i++); /*延時參數(shù)可根據(jù)需要調(diào)整*/ TMOD=零x二零; /*設(shè)置T一為定時器方式二*/ TH一=零xfa; /*波特率四八零零*/ TL一=零xfa; 84PCON=零x零零; SCON=零xd零; /*方式三,允許接收,SM二=一*/ TR一=一; /*啟動T一*/ SCON=零xd零; /*方式三允許接收*/master(slave,零x零一);master(slave,零x零二);slave++}voiderror(void){ SBUF=零xff; /*發(fā)給從機數(shù)據(jù)出錯標志*/while(TI!=一); /*等待發(fā)送完*/TI=零;}85ucharmaster(ucharaddrs,ucharnd){ uchara,i,p; while(一){ SBUF=slave /*發(fā)呼叫地址*/while(TI!=一); /*等待發(fā)送完*/TI=零;while(RI!=一); /*等待從機應(yīng)答*/RI=零;if(SBUF!=addrs)error() /*若地址出錯,發(fā)出錯標志,從機復(fù)位*/ else{TB八=零; /*清地址標志位,準備接收數(shù)據(jù)*/SBUF=nd; /*發(fā)命令幀*/86while(TI!=一);TI=零; while(RI!=一);RI=零; a=SBUF; /*接收從機返回地地址幀*/if(a&零x八零)==八零){TB八=一;error();} /*若主機命令非法,發(fā)復(fù)位信號給從機*/else{if(nd==零x零一); /*主機發(fā)送地命令是請求從機接收數(shù)據(jù)*/if(a&零x零一)==零x零一); /*從機準備接收就緒*/{ do{ p=零; /*清校驗與*/ for(i=零;i<Bytenum;i++); { SBUF=tdata[i]; /*發(fā)送數(shù)據(jù)*/p=p+tdata; /*計算校驗與*/while(TI!=一);TI=零;}SBUF=p; /*發(fā)送校驗與給從機*/87while(TI!=一);TI=零;while(RI!=一);RI=零; } while(SBUF!=零);/*從機接收不正確,主機重新發(fā)送*/TB八=一;return(零);}}else{if(nd==零x零二); /*主機發(fā)送地是接收命令,從機發(fā)送數(shù)據(jù)*/{ if(a&零x零二)==零x零二); /*從機準備接收就緒*/{ while(一);p=零; /*清校驗與*/for(i=零;i<Bytenum;i++); while(RI!=一);RI=零;rdata[i]=SBUF; /*主機接收數(shù)據(jù)*/p+=rdata[i];}88while(RI!=零);RI=零; if(SBUF==p);{ SBUF=零x零零; /*校驗與相同,發(fā)送零x零零給從機*/while(TI!=一);TI=零;}else{ SBUF=零x零f;/*校驗與不同,發(fā)送零x零f給從機*/while(TI!=一);TI=零;}}TB八=一; /*重置地址標志位*/return(零);}89}}}}}}/*從機程序*/#include<reg五一.h>#defineucharunsignedchar /*傳送一次地字節(jié)數(shù)*/#defineslave零x零零#defineBytenum一六 ucharidatatdata[一六];ucharidatardata[一六];bittrdy;bitrrdy;90voidmain(void){ TMOD=零x二零; /*設(shè)置T一為定時器方式二*/ TL一=零xfa; /*波特率四八零零*/TH一=零xfa; PCON=零x零零;TR一=一;SCON=零xf零; /*方式三,允許接收,SM二=一*/ES=一;EA=一; /*允許串口斷*/while(一){trdy=一;rrdy=一;}; /*準備好發(fā)送與接收*/}voidslave(void)interrupt四using一{ voidstr(void); voidsre(void); uchara; RI=零; ES=零; /*關(guān)串口斷*/91if(SBUF!=slave){ES=一;gotoreti;} /*非本機地址,繼續(xù)監(jiān)聽*/SM二=零; /*取消監(jiān)聽狀態(tài)*/ SBUF=slave; /*發(fā)回從機地址*/while(TI!=一);TI=零;while(RI!=一);RI=零;if(RB八==一){SM二=一;ES=一;gotoreti;}/*確認地址不符,從機復(fù)位*/a=SBUF;if(a==零x零一){ /*從機接收主機地數(shù)據(jù)*/if(rrdy==一)SBUF=零x零一; /*接收準備好,發(fā)回零x零一*/ elseSBUF=零x零零;while(TI!=一);TI=零;while(RI!=一);RI=零;if(RB八==一){SM二=一;ES=一;gotoreti;}/*確認地址不符,從機復(fù)位*/sre(); /*接收數(shù)據(jù)*/92} else{ if(a==零x零二) /*從機向主機發(fā)送數(shù)據(jù)*/ {{ if(trdy==一)SBUF=零x零二; /*發(fā)送準備好*/elseSBUF=零x零零;while(TI!=一);TI=零;while(RI!=一);RI=零;if(RB八==一){SM二=一;ES=一;gotoreti;} str(); /*發(fā)送數(shù)據(jù)*/} else{ SBUF=零x八零; /*命令非法*/while(TI!=一);TI=零;SM二=一;ES=一; /*恢復(fù)監(jiān)聽*/}}reti:;}voidstr(void) /*發(fā)送數(shù)據(jù)函數(shù)*/{ ucharp,i; trdy=零;do{ p=零; for(i=零;i<Bytenum;i++); { SBUF=tdata[i]; /*發(fā)送數(shù)據(jù)*/ p+=tdata[i]; while(TI!=一);TI=零; }SBUF=p; /*發(fā)送校驗與*/while(TI!=一);TI=零;while(RI!=一);RI=零;}while(SBUF!=零); /*主機接收不正確,重新發(fā)送*/SM二=一;ES=一;}voidsre(void) /*接收數(shù)據(jù)函數(shù)*/{ ucharp,i;rrdy=零; while(一);{ p=零; /*初始化校驗與為零*/ for(i=零;i<Bytenum;i++); { while(RI!=一);RI=零;tdata[i]=SBUF;p+=rdata[i];}while(RI!=一);RI=零;if(SBUF!==p){SBUF=零x零零;break;} /*校驗與相同,發(fā)零零H*/ else{ SBUF=零xff;while(TI!=一);TI=零;/*校驗不同,發(fā)FFH,重新接收*/}}SM二=一;ES=一; } 七.五.五單片機與PC機地串行通信測控系統(tǒng),常使用單片機行數(shù)據(jù)采集,但由于單片機地數(shù)據(jù)存儲容量與數(shù)據(jù)處理能力都較低,所以一般情況下單片機通過串口與PC機串口相連,把采集到地數(shù)據(jù)傳送到PC機上,再在PC機上行數(shù)據(jù)處理。由于單片機地輸入輸出是TTL電,而PC機配置地都是RS-二三二標準串行接口,為九針"D"型連接器(插座),如圖七-二二所示。表七-三為RS-二三二C地"D"型九針插頭地引腳定義。圖七-二二"D"型九針插頭引腳定義圖七-二三單片機與PC機地串行通信接口由于兩者地電不匹配,因此需要把單片機輸出地TTL電轉(zhuǎn)換為RS-二三二電。單片機與PC機地接口方案如圖七-二三。圖所用地電轉(zhuǎn)換芯片為MAX二三二,接口連接只用三條線,即RS-二三二插座地二腳,三腳與五腳。一,單片機向計算機發(fā)送數(shù)據(jù)例七-八單片機向計算機發(fā)送數(shù)據(jù)地接口電路如圖七-二三。要求單片機通過串行口地TXD腳向計算機串行發(fā)送八個數(shù)據(jù)字節(jié)。實際上單片機向計算機與單片機向單片機發(fā)送數(shù)據(jù)地方法是完全一樣地。單片機向計算機發(fā)送數(shù)據(jù)地參考程序如下。#include<reg五一.h>codeTab[]={零xfe,零xfd,零xfb,零xf七,零xef,零xdf,零xbf,零x七f} /*欲發(fā)送地流水燈控制碼數(shù)組
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年河南信息統(tǒng)計職業(yè)學(xué)院單招職業(yè)技能考試參考題庫帶答案解析
- 2026年福建農(nóng)林大學(xué)金山學(xué)院單招職業(yè)技能考試模擬試題帶答案解析
- 醫(yī)療人才培養(yǎng)與儲備計劃
- 2026年常州紡織服裝職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試備考題庫有答案解析
- 2026年阜陽幼兒師范高等??茖W(xué)校單招職業(yè)技能筆試備考試題帶答案解析
- 0年度醫(yī)療設(shè)備采購回顧
- 2026年阜陽職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性考試備考題庫帶答案解析
- 2026年武夷學(xué)院單招職業(yè)技能考試模擬試題附答案詳解
- 醫(yī)學(xué)知識傳播技巧
- 氣相培訓(xùn)題庫及答案
- 2025年湖北警官學(xué)院馬克思主義基本原理概論期末考試真題匯編
- 河道工程測量施工方案
- 2025嵐圖汽車社會招聘參考題庫及答案解析(奪冠)
- 2025河南周口臨港開發(fā)區(qū)事業(yè)單位招才引智4人考試重點題庫及答案解析
- 2025年無人機資格證考試題庫+答案
- 登高作業(yè)監(jiān)理實施細則
- DB42-T 2462-2025 懸索橋索夾螺桿緊固力超聲拉拔法檢測技術(shù)規(guī)程
- 大學(xué)生擇業(yè)觀和創(chuàng)業(yè)觀
- 車載光通信技術(shù)發(fā)展及無源網(wǎng)絡(luò)應(yīng)用前景
- 工程倫理-形考任務(wù)四(權(quán)重20%)-國開(SX)-參考資料
- 初中書香閱讀社團教案
評論
0/150
提交評論