【正文】
LR RI MOV A, SBUF MOV R0, A INC R0 ADD A, R6 MOV R6, A DJNZ R7, LOOP3 ;接收數(shù)據(jù)塊完畢? JNB RI, $ ;接收校驗(yàn)和 CLR RI MOV A, SBUF XRL A, R6 ;判斷校驗(yàn)和是否正確 JZ RECE_OK MOV SBUF, 0FFH ;校驗(yàn)和錯(cuò)誤,發(fā) FFH JNB TI, $ CLR TI LJMP RE_DATA ;重新接收 3/2/2023 67 RECE_OK: MOV A, 00H ;校驗(yàn)和正確,發(fā) 00H MOV SBUF, A JNB TI, $ CLR TI SETB SM2 ;繼續(xù)監(jiān)聽 SETB ES RET 3/2/2023 68 本章小結(jié) 單片機(jī)的串行接口是一個(gè)全雙工串行通信接口,從本章的實(shí)例中可以看出,它既可以作 UART(通用異步機(jī)接收和發(fā)送器)用,也可以作同步移位寄存器用。其它都按 02H對(duì)待。 從機(jī)發(fā)送數(shù)據(jù)結(jié)束后,要發(fā)送一幀校驗(yàn)和,并置第 9位( TB8)為 1,作為從機(jī)數(shù)據(jù)傳送結(jié)束的標(biāo)志。當(dāng) SM2=1時(shí),實(shí)現(xiàn)多機(jī)通信功能。當(dāng) 1號(hào)機(jī)發(fā)送時(shí),先發(fā)送一個(gè)“ E1”聯(lián)絡(luò)信號(hào), 2號(hào)機(jī)收到后回答一個(gè)“ E2”應(yīng)答信號(hào),表示同意接收。 取出校驗(yàn)位 CPL C 。 取發(fā)送數(shù)據(jù)到 A MOV C,P 。 等待中斷 3/2/2023 40 中斷服務(wù)程序如下: ORG 0023H 。 定時(shí)器 1設(shè)為工作方式 2 MOV TL1,0F3H 。如果直接把 P值放入 ASCII碼的最高位,恰好成了偶校驗(yàn),與要求不符。 等待一幀發(fā)送結(jié)束 CLR TI 。 對(duì)讀入數(shù)據(jù)進(jìn)行處理 3/2/2023 36 例 2 用兩片 8位串入并出移位寄存器 74HC164擴(kuò)展 16位輸出接口。 允許串行移位 RCV1: MOV SCON,10H 。( T1溢出率) T1 溢出率 = fosc /{12 [256 -( TH1) ]} T1方式 2, TR1=1(以啟動(dòng)定時(shí)器) 3/2/2023 31 3/2/2023 32 串行口初始化具體步驟: 確定 T1的工作方式(編程 TMOD寄存器); 計(jì)算 T1的初值,裝載 TH TL1; 啟動(dòng) T1(編程 TCON中的 TR1位); 確定串行口控制(編程 SCON寄存器); 串行口在中斷方式工作時(shí),還要進(jìn)行中斷設(shè)置(編程 IE、 IP寄存器)。 停止位數(shù) 據(jù) 位 9 位起始位L S B M S B空閑空閑D 0D 71 幀 共 1 1 位R B 8 / T B 8起始位 1位,數(shù)據(jù) 9位,停止位 1位 方式 2的波特率固定為晶振頻率的 1/64或 1/32 方式 3的波特率由定時(shí)器 T1的溢出率 決定 3/2/2023 28 方式 2和方式 3發(fā)送 先把起始位 0輸出到 TXD,然后發(fā)送移位寄存器的輸出位( D0)。數(shù)據(jù)由 RXD引腳輸入或輸出,移位脈沖由 TXD引腳輸出。 方式 0時(shí),串行接收第 8位數(shù)據(jù)結(jié)束時(shí) 其它方式,串行接收停止位的中間時(shí) 硬件使 RI置 1,發(fā)中斷申請(qǐng)。 方式 1時(shí), SM2=1時(shí),只有接收到有效停止位時(shí), RI才激活。 3/2/2023 13 波特率和比特率不總是相同的,但對(duì)于基帶傳輸,比特率和波特率是相同的。既保持位同步,也保持字符同步。 3/2/2023 6 以字符(構(gòu)成的幀)為單位 字符間是異步的 字符內(nèi)各位是同步的 數(shù)據(jù)格式 : 停止位數(shù) 據(jù) 位校驗(yàn)位起始位L S B M S B空閑下 一 字 符起 始 位空閑一 個(gè) 字 符 幀3/2/2023 7 同步通信 發(fā)送方時(shí)鐘與接收方時(shí)鐘同步。 D C ED T E電 話 網(wǎng)D C ED T ER S 2 3 2 C R S 2 3 2 C3/2/2023 12 串行通信的錯(cuò)誤校驗(yàn) 奇偶校驗(yàn) 代碼和校驗(yàn) 循環(huán)冗余校驗(yàn) 傳輸速率與傳輸距離 傳輸速率 比特率 :每秒鐘傳輸二進(jìn)制代碼的位數(shù) 波特率 :每秒鐘調(diào)制信號(hào)變化的次數(shù),單位是:波特( Baud)。 方式 0時(shí), SM2必須是 0。 RI,接收中斷標(biāo)志位。 用于擴(kuò)展并行輸入或輸出口 。 1 2 3 4 5 6ABCD654321DCBAT i t l eN um be r R e vi s i onS i z eBD a t e : 16 M a r 2023 S he e t of F i l e : E : \教材參編 \第七章圖 \ c h7gz s D r a w n B y :R X DS H I F TD0 D1 D2 D3RID4 D5 D6 D7R X C L O C K方式 1 接收時(shí)序起始位停止位位檢測(cè)器采樣時(shí)間3/2/2023 27 工作方式 3 方式 2和方式 3 11位數(shù)據(jù)的異步通信。( T1溢出率) 方式 3波特率 =( 2SMOD/32) 允許并行置入數(shù)據(jù) SETB 。 判斷是否已讀入預(yù)定的字節(jié)數(shù) … … … … 。 啟動(dòng)串行口發(fā)送 JNB TI,$ 。 單片機(jī)的奇偶校驗(yàn)位 P是當(dāng)累加器 A中 1的數(shù)目為奇數(shù)時(shí), P=1。 3/2/2023 39 主程序: MOV TMOD,20H 。 先輸出一個(gè)字符 SETB ES SETB EA LOOP:SJMP $ 。 中斷返回 發(fā)送子程序: SOUT: CLR TI MOV A,R0 。 讀出接收緩沖區(qū)內(nèi)容 MOV C,P 。 3/2/2023 42 例 4 單片機(jī)與單片機(jī)的通信 R 2 I NT 2 O U TT X DR X DM A X 2 3 2 AT 1 I NG N DR 2 O U TT 1 O U T8 9 S 5 1T X DR X D8 9 S 5 1G N DR 1 I NT 2 O U TM A X 2 3 2 AG N DR 2 I NR 1 O U T系 統(tǒng) 1 系 統(tǒng) 2T 2 I N3/2/2023 43 程序流程圖 3/2/2023 44 設(shè) 1號(hào)機(jī)是發(fā)送方, 2號(hào)機(jī)是接收方。 3/2/2023 45 發(fā)送程序清單如下: ASTART: CLR EA MOV TMOD, 20H ;定時(shí)器 1置為方式 2 MOV TH1, 0F4H ;裝載定時(shí)器初值,波特率 2400 MOV TL1, 0F4H MOV PCON, 00H SETB TR1 ;啟動(dòng)定時(shí)器 MOV SCON, 50H ;設(shè)定串口方式 1,且準(zhǔn)備接收應(yīng)答信號(hào) ALOOP1: MOV SBUF, 0E1H ;發(fā)聯(lián)絡(luò)信號(hào) JNB TI, $ ;等待一幀發(fā)送完畢 CLR TI ;允許再發(fā)送 JNB RI, $ ;等待 2號(hào)機(jī)的應(yīng)答信號(hào) CLR RI ;允許再接收 MOV A, SBUF ; 2號(hào)機(jī)應(yīng)答后,讀至 A XRL A, 0E2H ;判斷 2號(hào)機(jī)是否準(zhǔn)備完畢 JNZ ALOOP1 ; 2號(hào)機(jī)未準(zhǔn)備好,繼續(xù)聯(lián)絡(luò) ALOOP2: MOV R0, 40H ; 2號(hào)機(jī)準(zhǔn)備好,設(shè)定數(shù)據(jù)塊地址指針初值 MOV R7, 10H ;設(shè)定數(shù)據(jù)塊長(zhǎng)度初值 MOV R6, 00H ;清校驗(yàn)和單元 3/2/2023 46 ALOOP3: MOV SBUF, R0 ;發(fā)送一個(gè)數(shù)據(jù)字節(jié) MOV A, R6 ADD A, R0 ;求校驗(yàn)和 MOV R6, A ;保存校驗(yàn)和 INC R0 JNB TI, $