版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
任務(wù)一認(rèn)識(shí)串行通信
一、數(shù)據(jù)通信的概念
計(jì)算機(jī)的CPU與外部設(shè)備之間、計(jì)算機(jī)與計(jì)算機(jī)之間的信息交換稱之為數(shù)據(jù)通信?;镜耐ㄐ欧绞接袃煞N:并行通信和串行通信。1、并行通信:所傳送數(shù)據(jù)的各位同時(shí)進(jìn)行發(fā)送或接收。如所示,并行方式傳輸一個(gè)字節(jié)時(shí),需要8條數(shù)據(jù)線,D0-D7是同時(shí)進(jìn)行傳送的。這種方式的特點(diǎn)是通信速度快,但傳輸線多,價(jià)格較貴,適合近距離傳輸。2、串行通信:所傳送數(shù)據(jù)的各位按順序一位一位地發(fā)送或接收。下圖表示同樣的數(shù)據(jù)進(jìn)行串行通信,只需要一條數(shù)據(jù)線,在最初傳遞的是D0位,然后是D1位,……最后傳遞D7位。這種方式的特點(diǎn)是傳輸速度慢,但因數(shù)據(jù)傳輸線少,線路結(jié)構(gòu)簡(jiǎn)單、抗干擾能力強(qiáng),特別適用于遠(yuǎn)距離通信。二、同步串行通信和異步串行通信
串行通信又分為異步串行通信、同步串行通信兩類。1、同步通信在同步通信中,發(fā)送器和接收器由同一個(gè)時(shí)鐘控制,發(fā)送方在這個(gè)時(shí)鐘的控制下逐位發(fā)送數(shù)據(jù),接收方在這個(gè)時(shí)鐘的控制下逐位接收數(shù)據(jù),由此實(shí)現(xiàn)收發(fā)雙方的嚴(yán)格同步;發(fā)送端在發(fā)送數(shù)據(jù)之前,首先發(fā)送1-2個(gè)字節(jié)的同步字符,接收方一旦檢測(cè)到規(guī)定的同步字符就開始接收,發(fā)送方接著連續(xù)按順序傳送n個(gè)字節(jié)的數(shù)據(jù)。當(dāng)n個(gè)字節(jié)的數(shù)據(jù)發(fā)送完畢,發(fā)送校驗(yàn)碼。2、異步串行通信:異步串行通信的數(shù)據(jù)或字符是一幀一幀地傳送的,一幀數(shù)據(jù)由1位低電平的起始位、5-8位數(shù)據(jù)位、1位奇偶校驗(yàn)位,1-2位高電平的終止位組成。在通信線上沒有數(shù)據(jù)傳送時(shí)處于邏輯“1”狀態(tài),當(dāng)發(fā)送器要發(fā)送一幀數(shù)據(jù)時(shí),首先發(fā)出一個(gè)邏輯“0”信號(hào),這個(gè)邏輯低電平就是起始位。起始位通過通信線傳給接收器,當(dāng)接收器檢測(cè)到這個(gè)邏輯低電平后,就開始準(zhǔn)備接收數(shù)據(jù)位信號(hào)。因此起始位表示一幀數(shù)據(jù)傳送的開始。緊跟在起始位后的是數(shù)據(jù)位。數(shù)據(jù)位的位數(shù)可以是5、6、7、8位,傳輸時(shí)低位在先,高位在后。
奇偶校驗(yàn)位:串行通信用于遠(yuǎn)距離數(shù)據(jù)傳送時(shí),受到的干擾較大,為了保證數(shù)據(jù)傳送的可靠性,可在每幀數(shù)據(jù)的數(shù)據(jù)位后,加上奇偶校驗(yàn)位。奇校驗(yàn):發(fā)送字符中(包括校驗(yàn)位內(nèi))含“1”的個(gè)數(shù)為奇數(shù)。偶校驗(yàn):發(fā)送字符中(包括校驗(yàn)位內(nèi))含“1”的個(gè)數(shù)為偶數(shù)。
停止位是一幀數(shù)據(jù)的結(jié)束標(biāo)志,跟在奇偶校驗(yàn)位或數(shù)據(jù)位(無奇偶校驗(yàn)位時(shí))之后,可以是1位、1.5位、2位。
異步串行通信的線路比較簡(jiǎn)單,但是每一幀中的位數(shù)比較少,而且還要有啟始位、終止位等用于同步的位,所以傳送的效率不高、速度比較慢。
同步方式在數(shù)據(jù)傳送時(shí)省去了起始位和停止位,一幀可以連續(xù)傳送若干個(gè)字節(jié),所以其速度高于異步傳送,但對(duì)硬件結(jié)構(gòu)要求較高。三、通信方向
串行通信有單工通信、半雙工通信和全雙工通信三種方式。單工通信:數(shù)據(jù)只能單方向地從一端向另一端傳送。半雙工通信:數(shù)據(jù)可以雙向傳送,但任一時(shí)刻只能向一個(gè)方向傳送,即分時(shí)雙向傳送數(shù)據(jù)。全雙工通信:數(shù)據(jù)可同時(shí)向兩個(gè)方向傳送,全雙工通信效率最高,適用于計(jì)算機(jī)之間的通信。四、波特率波特率是通信中對(duì)數(shù)據(jù)傳送速率的規(guī)定,指每秒傳送二進(jìn)制數(shù)據(jù)的位數(shù),單位為位/秒(bit/s)。
例如:在某異步串行通信中,每傳送一個(gè)字符需要10位(1位起始位、8個(gè)數(shù)據(jù)位、1位停止位),如果采用波特率為4800波特進(jìn)行串行通信,則每秒可以傳送480個(gè)字符。在串行通信中,收、發(fā)雙方必須按照同樣的速率進(jìn)行串行通信,即收發(fā)雙方采用相同的波特率。
在串行傳輸中,二進(jìn)制數(shù)據(jù)序列是以數(shù)字信號(hào)波形的形式出現(xiàn)的。發(fā)送時(shí),在發(fā)送時(shí)鐘作用下將發(fā)送移位寄存器的數(shù)據(jù)串行移位輸出;接收時(shí),在接收時(shí)鐘的作用下將通信線上傳來的數(shù)據(jù)串行移入移位寄存器。發(fā)送時(shí)鐘和接收時(shí)鐘也可稱為移位時(shí)鐘,產(chǎn)生移位時(shí)鐘的電路稱為波特率發(fā)生器。五、通信線的連接根據(jù)傳輸線路的電氣特性,串行通信的傳輸速率隨傳輸距離的增加而降低,通信距離不同,電路的連接方式也不相同。1、如果近距離,又不使用握手信號(hào),通信雙方的連接只需3根信號(hào)線:TXD(串行數(shù)據(jù)發(fā)送線)、RXD(串行數(shù)據(jù)接收線)和GND(地線),直接以TTL電平連接。
2、如果距離在15m左右,需將TTL電平轉(zhuǎn)換為RS232電平,以提高信號(hào)的幅度,增加傳輸距離。
3、如果用電話線實(shí)現(xiàn)遠(yuǎn)距離通信,由于電話線路是按照頻率較低的音頻信號(hào)來設(shè)計(jì)的,而數(shù)字信號(hào)的頻帶非常寬,到了接收方就會(huì)有很大失真,以至于出現(xiàn)差錯(cuò)。
因此,傳送時(shí)發(fā)送方首先將數(shù)字信號(hào)“0”、“1”轉(zhuǎn)換成不同頻率的模擬信號(hào),然后通過電話線傳輸,在接受方,再把上述不同頻率的正弦波信號(hào)還原成數(shù)字信號(hào)“0”、“1”。這種把數(shù)字信號(hào)轉(zhuǎn)換成正弦波信號(hào)的過程叫做調(diào)制,能夠完成調(diào)制任務(wù)的裝置叫做調(diào)制器;把正弦波信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)的過程叫做解調(diào),能夠完成解調(diào)任務(wù)的裝置叫做解調(diào)器。六、RS-232簡(jiǎn)介1、RS-232的信號(hào)RS-232是一種串行通信標(biāo)準(zhǔn),是由美國電機(jī)工業(yè)協(xié)會(huì)(EIA)為了利用電話線及調(diào)制解調(diào)器進(jìn)行數(shù)據(jù)通信而制定的,它對(duì)信號(hào)的功能、電氣特性、連接器等都作了明確的規(guī)定。PC機(jī)采用的是9針D型連接器。RS-232除了基本的數(shù)據(jù)收發(fā)線TXD、RXD外,還有用于收發(fā)雙方聯(lián)絡(luò)、協(xié)調(diào)的握手信號(hào)。(1)基本的數(shù)據(jù)傳送引腳
TXD:數(shù)據(jù)輸出端,串行數(shù)據(jù)由此送出。
RXD:數(shù)據(jù)輸入端,串行數(shù)據(jù)由此輸入。
GND:信號(hào)地線。
在串行通信中,最簡(jiǎn)單的通信只需連接這3根線。在PC機(jī)與PC機(jī)之間,PC機(jī)與單片機(jī)之間、單片機(jī)與單片機(jī)之間的數(shù)據(jù)通信大多采用這種連接方式。握手信號(hào)RTS:請(qǐng)求發(fā)送信號(hào),輸出。CTS:清除傳送,是對(duì)RTS的響應(yīng)信號(hào),輸入。DSR:數(shù)據(jù)通信準(zhǔn)備就緒,輸入。DTR:數(shù)據(jù)終端就緒,表明計(jì)算機(jī)已做好接收準(zhǔn)備,輸出。DCD:數(shù)據(jù)載波檢測(cè),輸入。
當(dāng)一臺(tái)PC機(jī)與調(diào)制解調(diào)器相連,要向遠(yuǎn)方發(fā)送數(shù)據(jù)時(shí),如果PC機(jī)作好了發(fā)送準(zhǔn)備,就用RTS信號(hào)通知調(diào)制解調(diào)器;當(dāng)調(diào)制解調(diào)器也作好發(fā)送數(shù)據(jù)的準(zhǔn)備,就向PC機(jī)發(fā)出CTS信號(hào),RTS和CTS這對(duì)握手信號(hào)溝通后,就可以進(jìn)行串行數(shù)據(jù)發(fā)送了。
當(dāng)PC機(jī)要從遠(yuǎn)方接收數(shù)據(jù)時(shí),如果PC機(jī)作好了接受準(zhǔn)備,就發(fā)出DTR信號(hào)通知調(diào)制解調(diào)器;當(dāng)調(diào)制解調(diào)器也作好接收數(shù)據(jù)的準(zhǔn)備就向PC機(jī)發(fā)出DSR信號(hào),DTR和DSR這對(duì)握手信號(hào)溝通后,就可以進(jìn)行串行數(shù)據(jù)接收了。
2、接口的電氣特性RS-232采用的是EIA電平,信號(hào)線上的電壓為負(fù)邏輯關(guān)系:
邏輯1對(duì)應(yīng)的電壓為-3V~
-15V
邏輯0對(duì)應(yīng)的電壓為+3V~+15V介于-3V~+3V之間的電壓,低于-15V或高于+15V電壓是沒有意義的。3、電平轉(zhuǎn)換電路RS-232的EIA電平是以正/負(fù)電壓來表示邏輯0/1的,與TTL電路以低/高電平表示邏輯0/1不同。因此為了實(shí)現(xiàn)與TTL器件的連接,必須在EIA電平與TTL電平之間進(jìn)行電平轉(zhuǎn)換。
接RS-232信號(hào)接TTL/COMS信號(hào)
為此半導(dǎo)體公司特別為RS-232制造了用于信號(hào)電平轉(zhuǎn)換的專用集成電路,常見的型號(hào)有:MAX232、TSC232、ICL232等,它們的引腳及特性是兼容的,可以相互之間代換使用。
MAX232芯片內(nèi)部具有電壓倍增電路,只需+5V電源供電,外接4個(gè)電容器,使用非常方便。如下圖所示,該芯片可連接兩對(duì)收發(fā)線,既能將兩路TTL電平(T1IN、T2IN)轉(zhuǎn)換成RS232電平(T1OUT、T2OUT)送到傳輸線上,又能將傳輸線上的兩路RS232電平(R1IN、R2IN)轉(zhuǎn)換成TTL電平(R1OUT、R2OUT)。4、單片機(jī)與PC機(jī)之間的連接
在許多應(yīng)用場(chǎng)合,由單片機(jī)構(gòu)成的自動(dòng)控制系統(tǒng)、智能儀器往往需要與PC機(jī)進(jìn)行數(shù)據(jù)通信。PC機(jī)提供的兩個(gè)RS-232串行口COM1、COM2是EIA電平,而單片機(jī)的串行數(shù)據(jù)收發(fā)線RXD、TXD都是TTL電平,因此單片機(jī)需使用MAX232芯片進(jìn)行電平轉(zhuǎn)換,通過串行電纜線與PC機(jī)相連接,如圖所示。任務(wù)二認(rèn)識(shí)MCS-51單片機(jī)的串行口MCS-51系列單片機(jī)的串行口是一個(gè)可編程的全雙工異步通信接口,通過軟件編程可作為通用異步接收/發(fā)送器UART,也可以通過外接移位寄存器后擴(kuò)展并行I/O口,它的幀格式有8位、10位、11位,可以設(shè)置固定波特率和可變波特率,使用靈活方便。一、MCS-51單片機(jī)串行口結(jié)構(gòu)MCS-51單片機(jī)的串行口內(nèi)部有兩個(gè)物理上相互獨(dú)立的數(shù)據(jù)緩沖器SBUF,發(fā)送SBUF和接收SBUF,它們公用一個(gè)地址99H,前者只能寫不能讀,后者只能讀不能寫;一個(gè)串行口控制寄存器SCON,用來選擇串行口的工作方式,控制數(shù)據(jù)的收發(fā),記錄串行口的工作狀態(tài)。當(dāng)串行口接收數(shù)據(jù)時(shí),外界的串行數(shù)據(jù)通過RXD引腳進(jìn)入串行口的接收SBUF,供CPU讀取;發(fā)送數(shù)據(jù)時(shí),CPU將數(shù)據(jù)寫入發(fā)送SBUF,然后通過TXD引腳發(fā)送到線路上。設(shè)有A、B兩臺(tái)單片機(jī)串行通信,A機(jī)發(fā)送、B機(jī)接收。
A機(jī)的CPU將數(shù)據(jù)寫入發(fā)送SBUF,就啟動(dòng)了發(fā)送過程,按設(shè)定的波特率,每來一個(gè)移位脈沖,SBUF中的數(shù)據(jù)便移出一位,按先低位后高位的順序一位一位地將數(shù)據(jù)移到TXD引腳上,當(dāng)A機(jī)的一幀數(shù)據(jù)發(fā)送完畢,硬件電路自動(dòng)將發(fā)送中斷標(biāo)志TI置1,向CPU發(fā)出中斷請(qǐng)求,請(qǐng)求CPU將下一個(gè)數(shù)據(jù)寫入發(fā)送SBUF。
與此同時(shí)B機(jī)按設(shè)定的波特率,每來一個(gè)移位脈沖,就會(huì)將RXD引腳上的數(shù)據(jù)移入SBUF,這樣先低位后高位,直到一幀數(shù)據(jù)接收完成,硬件電路自動(dòng)將RI標(biāo)志置1,向CPU發(fā)中斷請(qǐng)求,請(qǐng)求CPU及時(shí)取走剛剛收到的數(shù)據(jù)。
二、串行口的控制寄存器1、串行通信控制寄存器SCONMCS-51單片機(jī)串行口的工作方式、接收和發(fā)送控制及串行口的狀態(tài)標(biāo)志都是由寄存器SCON來控制和指示。
SM2:是多機(jī)通信控制位。通常應(yīng)把該位置為“0”;在串口方式2和方式3,進(jìn)行多機(jī)通信時(shí),該位需要置成“1”。REN:允許接收位REN=1時(shí),允許接收數(shù)據(jù);REN=0時(shí),禁止接收數(shù)據(jù)。TB8:發(fā)送數(shù)據(jù)的第9位在方式2、方式3,TB8的內(nèi)容是要發(fā)送數(shù)據(jù)的第9位,其值由用戶通過軟件設(shè)置。在雙機(jī)通信時(shí),TB8一般作為奇偶校驗(yàn)位使用;在多機(jī)通信時(shí),常以TB8的狀態(tài)表示主機(jī)發(fā)送的是地址幀還是數(shù)據(jù)幀,一般約定:TB8=0為數(shù)據(jù)幀,TB8=1為地址幀。RB8:接收數(shù)據(jù)第9位在方式2、方式3時(shí),RB8存放接收到的第9位數(shù)據(jù),對(duì)應(yīng)于發(fā)送方的TB8。TI:發(fā)送中斷標(biāo)志在方式0時(shí),發(fā)送完第8位數(shù)據(jù)后,該位由硬件置1。在其它方式,在發(fā)送停止位前由硬件置1。因此TI=1,表示一幀數(shù)據(jù)已發(fā)送結(jié)束,其狀態(tài)可供程序查詢,也可請(qǐng)求中斷。TI必須用程序清0。RI:接收中斷標(biāo)志在方式0時(shí),接收到第8位數(shù)據(jù)后,該位由硬件置1。在其它方式,當(dāng)接收到停止位時(shí),該位由硬件置1。因此RI=1,表示串行口已接收到一幀數(shù)據(jù),其狀態(tài)可供程序查詢,也可請(qǐng)求中斷。RI必須用程序清0。2、PCON寄存器PCON寄存器中只有其最高位(SMOD位)與串行通信有關(guān),其它位則用于電源管理。SMOD:波特率加倍位當(dāng)該位設(shè)為“1”時(shí),所設(shè)定的波特率被加倍。注意:PCON寄存器是不能位尋址的,所以使用“SMOD=1;”或“SMOD=0;”語句都是非法的,將SMOD置“1”可用“PCON|=0x80;”語句,將SMOD清“0”可用“PCON&=0x7F;”語句。任務(wù)三串行口的應(yīng)用一、方式0串行口工作方式0又稱為“移位寄存器方式”,是將串行口作為同步移位寄存器使用,這時(shí)以RXD端作為數(shù)據(jù)的輸入/出端,在TXD端輸出移位脈沖。實(shí)際上是把串行口變作并行口使用,在單片機(jī)應(yīng)用系統(tǒng)中,如果并行口不夠用,可通過外接串入并出移位寄存器擴(kuò)展輸出口,通過外接并入串出移位寄存器擴(kuò)展輸入接口。
串行口工作于方式0時(shí),數(shù)據(jù)長度為8位,數(shù)據(jù)傳送的波特率是fosc/12。
方式0發(fā)送數(shù)據(jù)方法(1)設(shè)置控制寄存器SCON的SM0、SM1為方式0(2)清除TI標(biāo)志。(3)將發(fā)送的數(shù)據(jù)送入SBUF,這樣SBUF中的數(shù)據(jù)在TXD腳移位脈沖的作用下,一位一位地在RXD腳送出。(4)當(dāng)?shù)?位發(fā)送完畢,TI標(biāo)志自動(dòng)置1,如果還有數(shù)據(jù)要發(fā)送,重復(fù)(2)~(4)。[案例1]如圖所示,在CD4094的并行輸出端接8只發(fā)光二極管,利用它的串入并出功能,把發(fā)光二極管從上往下依次點(diǎn)亮,并反復(fù)循環(huán)。CD4094為串行輸入、8位并行輸出的移位寄存器,當(dāng)輸入選通信號(hào)STB為1時(shí),在移位脈沖CLK上升沿作用下,串行數(shù)據(jù)從D端進(jìn)入移位寄存器;OE為輸出允許,高電平時(shí)移位寄存器中的數(shù)據(jù)從Q0~Q7并行輸出,OE為低電平時(shí),Q0~Q7呈高阻。QS為串行輸出端,用于多片CD4094的級(jí)連。sbitSTB=P3^4; //CD4094選通控制voidmain(void){unsignedcharled=0Xfe;unsignedinti;SCON=0x00; //初始化串口方式為ES=0; //用查詢方式,禁止串口中斷while(1) {STB=1;//選通允許SBUF=led; //數(shù)據(jù)送入發(fā)送緩沖區(qū)while(TI==0);//等待8位數(shù)據(jù)發(fā)送完STB=0; //關(guān)閉選通TI=0; //清除TI標(biāo)志,for(i=0;i<20000;i++); //延時(shí)led=_crol_(led,1); //左移一位}}程序分析二、方式1方式1是異步串行通信方式,以TXD為串行數(shù)據(jù)發(fā)送端,RXD為數(shù)據(jù)接收端,每幀數(shù)據(jù)共10位:一個(gè)起始位“0”,8個(gè)數(shù)據(jù)位,一個(gè)停止位“1”。其中起始位和停止位是由硬件電路自動(dòng)插入的。方式1下,波特率由定時(shí)器T1的溢出率(每秒鐘溢出的次數(shù))和SMOD共同決定,其公式為:具體應(yīng)用時(shí),總是根據(jù)預(yù)先確定的波特率,去計(jì)算定時(shí)器T1的計(jì)數(shù)初值,當(dāng)時(shí)鐘頻率fosc=11.0592MHz時(shí),SMOD=0,通過推導(dǎo),我們可以得到T1計(jì)數(shù)初值的公式為:例如:當(dāng)波特率為9600Hz,SMOD=0時(shí),X=-3;對(duì)應(yīng)的T1初始化程序如下:TMOD=0X20; //定時(shí)器T1工作于方式2TH1=-3;//裝入計(jì)數(shù)初值TL1=-3;TR1=1;PCON=PCON&0x7f;//SMOD清0
在計(jì)數(shù)初值不變的情況下,如果將SMOD變?yōu)?,波特率將增加1倍,變?yōu)?9200Hz。方式1發(fā)送程序的編寫方法:(1)根據(jù)波特率,對(duì)定時(shí)器T1進(jìn)行初始化。(2)設(shè)置控制寄存器SCON,選擇串口方式1。(3)清除TI標(biāo)志。(4)將數(shù)據(jù)送入發(fā)送緩沖器SBUF。當(dāng)SBUF中的數(shù)據(jù)發(fā)送完畢,硬件電路自動(dòng)將TI標(biāo)志置1。(5)如果還有數(shù)據(jù)要發(fā)送,重復(fù)(3)~(5)。方式1接收程序的編寫方法:(1)根據(jù)波特率,對(duì)定時(shí)器T1進(jìn)行初始化。(2)設(shè)置控制寄存器SCON,選擇串口方式1,并令REN=1。
(3)清除RI標(biāo)志。(4)當(dāng)串行口收到一幀數(shù)據(jù)后,RI置1,會(huì)產(chǎn)生中斷請(qǐng)求,通知CPU從接收SBUF中讀取數(shù)據(jù)。(5)如果還有數(shù)據(jù)要發(fā)送,重復(fù)(3)~(5)。
[案例2]通過串行口,將26個(gè)字母‘A’-‘Z’發(fā)送出去,已知單片機(jī)的時(shí)鐘頻率為11.0592MHz。要求采用串口方式1,波特率為9600Hz。為了便于觀察、調(diào)試,我們?cè)赑roteus環(huán)境下,可加入虛擬終端(VIRTUALTERMINAL),將單片機(jī)的數(shù)據(jù)發(fā)送端TXD與虛擬終端的數(shù)據(jù)接收端RXD相連,以監(jiān)視串行口發(fā)出數(shù)據(jù)的情況。voidinit_serial(void){ES=0; //禁止串行口中斷SCON=0x40; //0100,00008位數(shù)據(jù)位,無奇偶校驗(yàn)TMOD=0x20; //定時(shí)器T1工作于方式2PCON=PCON&0x7f; //SMOD=0TH1=-3; //裝入時(shí)間常數(shù),波特率為9600TL1=-3;TR1=1; //啟動(dòng)定時(shí)器T1}串行口初始化函數(shù)voidsend_char(uchardat){TI=0;//清除發(fā)送中斷標(biāo)志SBUF=dat;//數(shù)據(jù)送發(fā)送緩沖區(qū)while(TI==0);//等待發(fā)送完成}串行口數(shù)據(jù)發(fā)送函數(shù)voidmain(void){ucharc;init_serial();//初始化串行口for(c=0x41;c<0x5B;c++)//循環(huán)發(fā)送出字符'A'~'Z'send_char(c);while(1);}主函數(shù)三、方式2
方式2是異步串行通信方式,以TXD為串行數(shù)據(jù)發(fā)送端,RXD為數(shù)據(jù)接收端,每幀數(shù)據(jù)共11位:一個(gè)起始位“0”,9個(gè)數(shù)據(jù)位,一個(gè)停止位“1”。
四、方式3方式3也是異步串行通信方式,數(shù)據(jù)格式與方式2完全相同,所不同的是其波特率可變,計(jì)算公式與方式1相同。
發(fā)送時(shí),第9個(gè)數(shù)據(jù)位由SCON寄存器中的TB8提供,接收時(shí),收到的第9位數(shù)據(jù)存放在SCON寄存器中的RB8。第9位數(shù)據(jù)可作為奇偶校驗(yàn)位,也可在多機(jī)通信時(shí),作為數(shù)據(jù)信息或地址信息的標(biāo)志位。方式2的波特率是固定的:
設(shè)計(jì)思想為了提高數(shù)據(jù)通訊的可靠性,可令串行口工作于方式3,將其第9位數(shù)據(jù)TBB/RB8用作奇偶校驗(yàn)位,B機(jī)對(duì)收到的每一幀數(shù)據(jù)進(jìn)行偶校驗(yàn),如果校驗(yàn)正確,則B機(jī)向A機(jī)回送“數(shù)據(jù)發(fā)送正確”的應(yīng)答信號(hào),A機(jī)收到表示正確的應(yīng)答信號(hào)后再發(fā)送下一個(gè)字節(jié)。如果B機(jī)校驗(yàn)錯(cuò)誤,則向A機(jī)回送“數(shù)據(jù)發(fā)送錯(cuò)誤”的應(yīng)答信號(hào)。A機(jī)收到該應(yīng)答信號(hào)后,重新發(fā)送原數(shù)據(jù),直到正確為止。
[案例4]設(shè)某系統(tǒng)中有A、B兩單片機(jī),其中A機(jī)將數(shù)組sendbuf中的10個(gè)字節(jié)數(shù)據(jù)通過串口發(fā)送出去,B機(jī)接收后將數(shù)據(jù)存入rbuf數(shù)組中,如果收發(fā)成功,將分別點(diǎn)亮發(fā)送端和接收端的指示燈。設(shè)兩機(jī)均用11.0592MHz的振蕩頻率,波特率為9600b/s。
電路連接發(fā)送端程序
串行口初始化函數(shù)
sbitLED=P0^0;//指示燈控制位ucharsendbuf[10]="ABCDEFGHIJ";//發(fā)送緩沖區(qū)voidinit_serial(void){SCON=0xd0; //11010000方式3,允許接收TMOD=0x20; //定時(shí)器T1工作于方式2PCON=PCON&0x7f; //SMOD=0TH1=-3; //裝入時(shí)間常數(shù),波特率為9600TL1=-3;TR1=1; //啟動(dòng)定時(shí)器T1}
主函數(shù)
voidmain(void){uchari;bitERR; //錯(cuò)誤標(biāo)志init_serial(); //初始化串行口LED=1;//熄滅指示燈for(i=0;i<10;i++){do{ERR=0; //每次發(fā)送前先清除ERR標(biāo)志ACC=sendbuf[i];//產(chǎn)生校驗(yàn)位PTB8=P; SBUF=ACC; //校驗(yàn)位P送TB8,數(shù)據(jù)送SBUFwhile(TI==0); TI=0; //等待發(fā)送完成 while(RI==0); RI=0; //等待B機(jī)的應(yīng)答信號(hào)if(SBUF!=0)ERR=1;//應(yīng)答信號(hào)不為0X00,發(fā)送錯(cuò)誤}while(ERR==1);//如果ERR標(biāo)志為1,則重復(fù)發(fā)。} //否則接著發(fā)送下一個(gè)字節(jié)LED=0;//發(fā)送成功,點(diǎn)亮指示燈。
while(1);}接收端程序
串行口初始化函數(shù)
sbitLED=P0^0;//指示燈控制位ucharrbuf[10];//接收緩沖區(qū)voidinit_serial(void){SCON=0xd0; //11010000方式3,允許接收TMOD=0x20; //定時(shí)器T1工作于方式2PCON=PCON&0x7f; //SMOD=0TH1=-3; //裝入時(shí)間常數(shù),波特率為9600TL1=-3;TR1=1; //啟動(dòng)定時(shí)器T1}
主函數(shù)
voidmain(void){bitERR; //錯(cuò)誤標(biāo)志init_serial(); //初始化串行口LED=1;//指示燈熄滅for(i=0;i<10;i++){do{ERR=0;while(RI==0);RI=0;//等待接收一個(gè)字節(jié)ACC=SBUF; //根據(jù)接收的字節(jié)形成校驗(yàn)位Pif(P!=RB8)//如果校驗(yàn)錯(cuò){SBUF=0xff; //發(fā)送應(yīng)答信號(hào)0xffERR=1;} //ERR置1,準(zhǔn)備重新接收else //校驗(yàn)正確{rbuf[i]=SBUF;//將數(shù)據(jù)存入接收緩沖區(qū)SBUF=0x00;} //發(fā)送應(yīng)答信號(hào)0x00while(TI==0);TI=0; //等待應(yīng)答信號(hào)發(fā)送完成}while(ERR==1);//如果ERR為1,重新接收}LED=0; //接收成功,點(diǎn)亮指示燈while(1);}任務(wù)四、設(shè)計(jì)行列式鍵盤
一、行列式鍵盤的基本原理鍵盤是計(jì)算機(jī)系統(tǒng)中不可缺少的輸入設(shè)備,矩陣式鍵盤也稱為行列式鍵盤,其結(jié)構(gòu)如下圖所示。圖中有4根行線和4根列線,按鍵跨接在行線和列線上。4×4的行列結(jié)構(gòu)可以構(gòu)成16個(gè)按鍵的鍵盤,與獨(dú)立式鍵盤相比,按鍵數(shù)量相同時(shí)占用口線少,因此適用于按鍵數(shù)量較多的場(chǎng)合。掃描法的步驟1、判斷有無鍵閉合使行線P2.0-P2.3都輸出0,檢測(cè)列線P2.4-P2.7是否全為1。如果有鍵被按下,就會(huì)有某一根列線變?yōu)?,從而使P2.4-P2.7不為全1;如果P2.4-P2.7為全1,說明無鍵閉合。使行線P2.0--P2.3都輸出0
檢測(cè)列線P2.4-P2.7是否為全12、消除鍵抖動(dòng)在檢測(cè)到有鍵閉合后,需延時(shí)10-20ms,避開抖動(dòng)階段,然后再檢測(cè)P2.4-P2.7是否為全1。如果為全1,作無鍵閉合處理,否則,則進(jìn)一步檢測(cè)閉合鍵鍵號(hào)。3、確定閉合鍵鍵號(hào)
如果有鍵按下,再逐行逐列地掃描,以檢測(cè)出所按鍵的鍵號(hào)。先使行線P2.0-P2.3=0111,分別檢測(cè)P2.4-2.7。如果P2.4為0,則為0號(hào)鍵按下了;如果P2.5為0,則為1號(hào)鍵按下了。如果P2.4-P2.7都為1,說明P2.0這一行上沒有鍵被按下,再使P2.0-P2.3=1011,并逐列檢查。這樣依次地逐行逐列地掃描,直至找到閉合鍵為止。
01111111101111011101鍵盤掃描程序流程圖
uchargetkey(){uchari;ucharkey=0;ucharscode,recode;P2=0xf0;if((P2&0xf0)!=0xf0){for(i=1;i<20;i++)disp();P2=0xf0;if((P2&0xf0)!=0xf0){scode=0xfe;while((scode&0x10)!=0){P2=scode;if((P2&0xf0)!=0xf0){recode=P2&0xf0;scode=0x10;設(shè)初始鍵值為0低四位行線輸出全為0如果有鍵被壓下去抖動(dòng)延時(shí)低四位行線輸出全為0如果仍有鍵被壓下準(zhǔn)備將四位行線逐位輸出低如果掃描沒有結(jié)束將當(dāng)前行線設(shè)為低如果該行上有鍵被壓下讀取列線的值準(zhǔn)備掃描是那一列為低while(scode!=0)if(recode&scode==0){while((P2&0xf0)!=0xf0){disp();P2=0xf0;}return(key);}else{scode=scode<<1;key++;}}else{scode=_crol_(scode,1);key=key+4;}準(zhǔn)備掃描是那一列為低如果當(dāng)前列為低等待按鍵釋放返回鍵值否則,準(zhǔn)備掃描下一列鍵值加1否則,如果該行無鍵被按下準(zhǔn)備對(duì)下一行掃描鍵值加4當(dāng)前列有鍵按下無鍵按下當(dāng)前行有鍵按下無鍵按下任務(wù)五密碼鍵
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年代招某行政機(jī)關(guān)派遣制工作人員招聘?jìng)淇碱}庫帶答案詳解
- 2025年杭州高新區(qū)(濱江)綜合行政執(zhí)法局招聘協(xié)管員備考題庫完整答案詳解
- 外科手術(shù)患者的隨訪管理
- 2025主題教育建章立制工作方案
- 對(duì)保安違紀(jì)人員處罰規(guī)定
- 2025年衛(wèi)生監(jiān)督協(xié)管試題及答案
- 2025年衛(wèi)生監(jiān)督協(xié)管服務(wù)試題及答案
- 2025年泰和縣新睿人力資源服務(wù)有限公司公開招聘項(xiàng)目制員工考試重點(diǎn)題庫及答案解析
- 2025年安徽省科技成果轉(zhuǎn)化促進(jìn)中心(安徽省科學(xué)技術(shù)研究院)第二批高層次人才招聘3名筆試重點(diǎn)試題及答案解析
- 2025年在富順縣“大學(xué)生志愿服務(wù)西部計(jì)劃”“三支一扶”人員中定向考核招聘鄉(xiāng)鎮(zhèn)事業(yè)單位工作人員調(diào)減部分崗位筆試重點(diǎn)題庫及答案解析
- 2026富滇銀行公司招聘面試題及答案
- 2025年南京鐵道職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫附答案
- 2025年網(wǎng)絡(luò)維護(hù)管理人員工作總結(jié)例文(2篇)
- 城銀清算服務(wù)有限責(zé)任公司2026年校園招聘16人備考題庫附答案
- 2025年河南豫能控股股份有限公司及所管企業(yè)第二批社會(huì)招聘18人筆試歷年參考題庫附帶答案詳解
- 2025年《項(xiàng)目管理認(rèn)證考試》知識(shí)考試題庫及答案解析
- 安徽消防筆試題及答案
- 書籍借閱營銷方案
- 生態(tài)冷鮮牛肉銷售創(chuàng)業(yè)策劃書范文
- 2025年高級(jí)煤礦綜采安裝拆除作業(yè)人員《理論知識(shí)》考試真題(含解析)
評(píng)論
0/150
提交評(píng)論