華東理工AT89C52第7章課件_第1頁
華東理工AT89C52第7章課件_第2頁
華東理工AT89C52第7章課件_第3頁
華東理工AT89C52第7章課件_第4頁
華東理工AT89C52第7章課件_第5頁
已閱讀5頁,還剩87頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

單片機(jī)原理與應(yīng)用第7章

單片機(jī)的串行接口

信息科學(xué)與工程學(xué)院自動化系11/26/20221單片機(jī)原理與應(yīng)用第7章單片機(jī)的串行接口信息科學(xué)與工程7.1

串行通信概述一.串行通訊的基本方式(一).異步通訊以字符為傳送單位用起始位和停止位標(biāo)識每個字符的開始和結(jié)束字符間隔不固定,只需字符傳送時同步。異步通訊常用格式:一個字符幀異步通訊的雙方需要兩項約定:1.字符格式一幀字符位數(shù)的規(guī)定:數(shù)據(jù)位,校驗位,起始位和停止位。2.波特率(位/秒)對傳送速率的規(guī)定例:要求每秒傳送120個字符,每幀為10位。解:B=120×10=1200波特 每位0.83ms數(shù)據(jù)位傳輸率=120×8=960位/秒(二).同步通訊以一串字符為一個傳送單位,字符間不加標(biāo)識位,在一串字符開始用同步字符標(biāo)識,硬件要求高,通訊雙方須嚴(yán)格同步。D0D1D2D3D4D5D6D7停止位起始位11/26/202227.1 串行通信概述一.串行通訊的基本方式異步通訊的雙方需二.串行接口功能1.發(fā)送器:并串?dāng)?shù)據(jù)格式轉(zhuǎn)換,添加標(biāo)識位和校驗位,一幀發(fā)送結(jié)束,設(shè)置結(jié)束標(biāo)志,申請中斷。2.接收器:串并數(shù)據(jù)格式轉(zhuǎn)換,檢查錯誤,去掉標(biāo)識位,保存有效數(shù)據(jù),設(shè)置接收結(jié)束標(biāo)志,申請中斷。3.控制器:接收編程命令和控制參數(shù),設(shè)置工作方式:同步/異步、字符格式、波特率、校驗方式、數(shù)據(jù)位與同步時鐘比例等。三.串行數(shù)據(jù)傳送方向單工通訊:數(shù)據(jù)單向傳送。半雙工通訊:數(shù)據(jù)可分時雙向傳送。全雙工通訊:可同時進(jìn)行發(fā)送和接收。發(fā)送器接收器發(fā)送器接收器11/26/20223二.串行接口功能1.發(fā)送器:并串?dāng)?shù)據(jù)格式轉(zhuǎn)換,添加標(biāo)識位和 7.2AT89C52串行接口

1個全雙工串行接口,可同時進(jìn)行發(fā)送和接收。串行接口輸入/輸出引腳:TXD(P3.1)、RXD(P3.0)數(shù)據(jù)格式:按不同方式,一幀位數(shù)8/10/11發(fā)送/接收時,數(shù)據(jù)皆低位在前。一幀字符發(fā)送/接收結(jié)束,置位標(biāo)志位(TI/RI)并申請SIO中斷。中斷控制:中斷允許位ES中斷入口:0023HD0D1D2D3D4D5D6D7停止位起始位D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D8停止位起始位D711/26/20224 7.2AT89C52串行接口

1個全雙工串行接口,可AT89C52單片機(jī)的串行接口SBUF(發(fā))SBUF(收)發(fā)送控制器TI接收控制器RI移位寄存器波特率發(fā)生器T11A累加器(門)移位寄存器RxDTxD去申請中斷引腳引腳11/26/20225AT89C52單片機(jī)的串行接口SBUF(發(fā))SBUF(收)發(fā)11/26/2022611/26/20226波特率設(shè)置方式0:波特率B=fosc/12方式2:B=(2SMOD/64)×fosc方式1、3:B=(2SMOD/32)×T1溢出率T1溢出率=1/t=fosc/[12×(2n-X)]TH1、TL1=X=28-fosc/12×2SMOD/(32×B)(注意:T1工作于方式2)11/26/20227波特率設(shè)置方式0:波特率B=fosc/1211/26/2PCON(87H)

電源控制寄存器PCON中只有SMOD位與串行口工作有關(guān)。11/26/20228PCON(87H)11/26/20228串行口初始化編程格式: SIO:MOVSCON,#控制狀態(tài)字;寫方式字且TI=RI=0 (MOVPCON,#80H) ;波特率加倍 (MOVTMOD,#20H) ;T1作波特率發(fā)生器 (MOVTH1,#X) ;選定波特率 (MOVTL1,#X) (SETBTR1) (SETBEA) ;開串行口中斷 (SETBES)7.3~7.6初始化與應(yīng)用11/26/20229串行口初始化編程格式:7.3~7.6初始化與應(yīng)用11/21.串行口方式0的應(yīng)用MCS-51單片機(jī)串行口基本上是異步通信接口,但在方式0時是同步操作。外接串入——并出或并入——串出器件,可實現(xiàn)I/O的擴(kuò)展。串行口方式0的數(shù)據(jù)傳送可以采用中斷方式,也可以采用查詢方式。無論哪種方式,都要借助于TI或RI標(biāo)志。在串行口發(fā)送時,或者靠TI置位后引起中斷申請,在中斷服務(wù)程序中發(fā)送下一組數(shù)據(jù);或者通過查詢TI的值,只要TI為0就繼續(xù)查詢,直到TI為1后結(jié)束查詢,進(jìn)入下一個字符的發(fā)送。在串行口接收時,由RI引起中斷或?qū)I查詢來決定何時接收下一個字符。無論采用什么方式,在開始串行通信前,都要先對SCON寄存器初始化,進(jìn)行工作方式的設(shè)置。在方式0中,SCON寄存器的初始化只是簡單地把00H送入SCON就可以了。11/26/2022101.串行口方式0的應(yīng)用MCS-51單片機(jī)串行口基本上是異步1.串行口方式0的應(yīng)用例:用MCS-51串行口外接164串入——并出移位寄存器擴(kuò)展8位并行口;8位并行口的每位都接一個發(fā)光二極管,要求發(fā)光二極管從左到右以一定延遲輪流顯示,并不斷循環(huán)。設(shè)發(fā)光二極管為共陰極接法,如圖所示。解:設(shè)數(shù)據(jù)串行發(fā)送采用中斷方式,顯示的延遲通過調(diào)用延遲程序DELAY來實現(xiàn)。CLR=0,關(guān)閉并行輸出;CLR=1,打開并行輸出。11/26/2022111.串行口方式0的應(yīng)用例:用MCS-51串行口外接164串1.串行口方式0的應(yīng)用程序清單: ORG0023H ;串行口中斷入口 AJMPSBR ;轉(zhuǎn)入串行口中斷服務(wù)程序 ORG2000H ;主程序起始地址 MOVSCON,#00H ;串行口方式0初始化 MOVA,#80H ;最左一位發(fā)光二極管先亮 CLRP1.0 ;關(guān)閉并行輸出 MOVSBUF,A ;開始串行輸出LOOP: SJMP$ ;等待中斷SBR: SETBP1.0 ;啟動并行輸出 ACALLDELAY ;顯示延遲一段時間 CLRTI ;清發(fā)送中斷標(biāo)志 RRA ;準(zhǔn)備右邊一位顯示 CLRP1.0 ;關(guān)閉并行輸出 MOVSBUF,A ;再一次串行輸出 RETI ;中斷返回11/26/2022121.串行口方式0的應(yīng)用程序清單:11/26/2022121.串行口方式0的應(yīng)用

用方式0外加移位寄存器來擴(kuò)展8位輸出口時,要求移位寄存器帶有輸出控制,否則串行移位過程也會反映到并行輸出口;另外,輸出口最好再接一個寄存器或鎖存器,以免在輸出門關(guān)閉使(STB=0)輸出又發(fā)生變化。

用方式0加上并入——串出移位寄存器可擴(kuò)展一個8位并行輸入口。移位寄存器必須帶有預(yù)置/移位的控制端,由單片機(jī)的一個輸出端子加以控制,以實現(xiàn)先由8位輸入口置數(shù)到移位寄存器,然后再串行移位從單片機(jī)的串行口輸入到接收緩沖器,最后再讀入到CPU中。11/26/2022131.串行口方式0的應(yīng)用用方式0外加移位寄存器來擴(kuò)展8位輸1.串行口方式0的應(yīng)用例:用MCS-51串行口外加移位寄存器165或166擴(kuò)展8位輸入口,輸入數(shù)據(jù)由8個開關(guān)提供,另有一個開關(guān)K提供聯(lián)絡(luò)信號。當(dāng)K=0時,表示要求輸入數(shù)據(jù),輸入的8位為開關(guān)量,提供邏輯模擬子程序的輸入信號。如所示。SHIFT=1,并行輸入數(shù)據(jù);SHIFT=0,開始串行移位輸入。11/26/2022141.串行口方式0的應(yīng)用例:用MCS-51串行口外加移位寄存1.串行口方式0的應(yīng)用解:串行口方式0的接收要用SCON寄存器中的REN位作為開關(guān)來控制。因此,初值化時,除了設(shè)置工作方式之外,還要使REN位為1,其余各位仍然為0。對RI采用查詢方式來編寫程序,當(dāng)然,先要查詢開關(guān)K是否閉合。程序清單:START:MOVSCON,#10H;串行口方式0初始化 JBP1.1,$ ;開關(guān)K未閉合,等待 SETBP1.0 ;P/S=1,并行置入數(shù)據(jù) CLRP1.0 ;P/S=0,開始串行移位 JNBRI,$ ;查詢RI CLRRI ;查詢結(jié)束,清RI MOVA,SBUF ;讀數(shù)據(jù)到累加器 ACALLLOGSIM ;進(jìn)行邏輯模擬 SJMPSTART ;準(zhǔn)備下一次模擬11/26/2022151.串行口方式0的應(yīng)用解:串行口方式0的接收要用SCON寄2.串行口方式1的發(fā)送和接收例:MCS-51串行口按雙工方式收發(fā)ASCII字符,最高位用來作奇校驗位,要求傳送的波特率為1200b/s。編寫有關(guān)的通信程序。解:7位ASCII碼加1位奇校驗共8位數(shù)據(jù),故可采用串行口方式1。MCS-51單片機(jī)的奇偶校驗位P是當(dāng)累加器A中1的數(shù)目為奇數(shù)時,P=1。如果直接把P的值放入ASCII碼的最高位,恰好成了偶校驗,與要求不符。因此,要把P的值取反以后放入ASCII碼最高位,才是要求的奇校驗。11/26/2022162.串行口方式1的發(fā)送和接收例:MCS-51串行口按雙工方2.串行口方式1的發(fā)送和接收

雙工通信要求收、發(fā)能同時進(jìn)行。實際上,收、發(fā)操作主要是在串行接口進(jìn)行,CPU只是把數(shù)據(jù)從接收緩沖器讀出和把數(shù)據(jù)寫入發(fā)送緩沖器。數(shù)據(jù)傳送用中斷方式進(jìn)行,響應(yīng)中斷以后,通過檢測是RI置位還是TI置位來決定CPU是進(jìn)行發(fā)送操作還是接收操作。發(fā)送和接收都通過調(diào)用子程序來完成,設(shè)發(fā)送數(shù)據(jù)區(qū)的首地址為20H,接收數(shù)據(jù)區(qū)的首地址為40H,fosc為6MHz,通過計算可知:定時器的初裝值應(yīng)為F3H。定時器T1采用工作模式2,可以避免計數(shù)溢出后用軟件重裝定時初值的工作。11/26/2022172.串行口方式1的發(fā)送和接收雙工通信要求收、發(fā)能同時進(jìn)行2.串行口方式1的發(fā)送和接收程序清單:主程序MOVTMOD,#20H;定時器1設(shè)為模式2MOVTL1,#0F3H;定時器初值MOVTH1,#0F3H;8位重裝值SETBTR1;啟動定時器1MOVSCON,#50H;設(shè)置為方式1, ;REN=1MOVR0,#20H;發(fā)送數(shù)據(jù)區(qū)首址MOVR1,#40H;接收數(shù)據(jù)取首址

ACALLSOUT;先輸出一個字符SETBESSETBEASJMP$;等待中斷

中斷服ORG0023H;串行口中斷入口AJMPSBR1;轉(zhuǎn)至中斷服務(wù)程序ORG0100HSBR1:JNBRI,SEND;TI=1,為發(fā)送中斷ACALLSIN;RI=1,為接收中斷SJMPNEXT;轉(zhuǎn)至統(tǒng)一的出口SEND:ACALLSOUT;調(diào)用發(fā)送子程序NEXT:RETI;中斷返回11/26/2022182.串行口方式1的發(fā)送和接收程序清單:中斷服11/26/22.串行口方式1的發(fā)送和接收發(fā)送子程序SOUT:CLRTIMOVA,@R0;取發(fā)送數(shù)據(jù)到AMOVC,P;奇偶標(biāo)識賦予C

CPLC;奇校驗MOVACC.7,C;A中的最高位為奇校驗INCR0;修改發(fā)送數(shù)據(jù)指針MOVSBUF,A;發(fā)送ASCII碼RET;返回接收子程序SIN:CLRRI MOVA,SBUF;讀出接收緩沖區(qū)內(nèi)容 MOVC,P;取出校驗位

JNCERR;奇校驗錯 ANLA,#7FH;刪去校驗位 MOV@R1,A;讀入接收緩沖區(qū) INCRI;修改接收數(shù)據(jù)指針 RET;返回11/26/2022192.串行口方式1的發(fā)送和接收發(fā)送子程序接收子程序11/262.串行口方式1的發(fā)送和接收在主程序中已初始化REN=1,則允許接收。以上程序基本上具備了全雙工通信的能力,但不能說很完善。例如,再接收子程序中,雖然檢驗了奇偶校驗位,但沒有進(jìn)行出錯處理;另外,發(fā)送和接收數(shù)據(jù)區(qū)的范圍都很有限,也不能滿足實際需要。但有了一個基本的框架之后,逐漸完善還是可以做到的。11/26/2022202.串行口方式1的發(fā)送和接收在主程序中已初始化REN=12.串行口方式1的發(fā)送和接收例:采用查詢方式由串行口發(fā)送帶奇偶校驗位的數(shù)據(jù)塊。解:本例由內(nèi)部RAM單元20H-3FH取出ASCII碼數(shù)據(jù),在最高位上加奇偶校驗位后由串行口發(fā)出。采用8位異步通信方式,波特率為1200b/s,fosc=11.059MHz。由要求可知,應(yīng)把串行口設(shè)置為方式1,采用定時器1模式2作為波特率發(fā)生器,預(yù)置值(TH1)=0E8H。11/26/2022212.串行口方式1的發(fā)送和接收例:采用查詢方式由串行口發(fā)送帶2.串行口方式1的發(fā)送和接收程序清單:主程序; MOVTMOD,#20H ;設(shè)置定時器1為模式2 MOVTL1,#0E8H ;初值,波特率為1200b/s MOVTH1,#0E8H SETBTR1 ;啟動T1運(yùn)行 MOVSCON,#01000000B ;設(shè)置串行口為方式1 MOVR0,#20H MOVR7,#32 ;數(shù)據(jù)塊長度LOOP: MOVA,@R0ACALLSP-OUTJNBP,ERROR;傳輸出錯處理,由SP-OUT中“CPLC”結(jié)果決定INCR0DJNZR7,LOOP ……11/26/2022222.串行口方式1的發(fā)送和接收程序清單:11/26/20222.串行口方式1的發(fā)送和接收串行口發(fā)送子程序(奇校驗);SP-OUT:MOVC,PSW.0;設(shè)置奇校驗位,校驗位P=1為奇校驗 CPLC;奇校驗(無此指令位偶校驗)MOVACC.7,C;ACC.7補(bǔ)0或1MOVSBUF,A;啟動串行口發(fā)送過程CLRTI;清TI標(biāo)志,允許在發(fā)送RETERROR:(略)11/26/2022232.串行口方式1的發(fā)送和接收串行口發(fā)送子程序(奇校驗);12.串行口方式1的發(fā)送和接收例:由串行口接收帶奇偶校驗位的數(shù)據(jù)塊。解:采用查詢方式,本例與上例相呼應(yīng),接收器把接收到的32B數(shù)據(jù)存放在20H-3FH單元內(nèi),波特率同上,若奇偶校驗出錯則置進(jìn)位位為1。程序清單:11/26/2022242.串行口方式1的發(fā)送和接收例:由串行口接收帶奇偶校驗位的2.串行口方式1的發(fā)送和接收主程序; MOVSCON,#01010000B;設(shè)串口方式1,允許接收 MOVTMOD,#20H ;設(shè)置定時器T1為模式2 MOVTL1,#0E8H ;初值,波特率為1200b/s MOVTH1,#0E8H SETBTR1 ;啟動T1運(yùn)行 MOVR0,#20H MOVR7,#32 ;數(shù)據(jù)塊長度LOOP: ACALLSP-IN ;調(diào)接收一幀子程序JCERROR ;由SP-IN中“CPLC”結(jié)果決定MOV@R0,A ;存放接收的數(shù)據(jù)INCR0DJNZR7,LOOP……11/26/2022252.串行口方式1的發(fā)送和接收主程序;11/26/202222.串行口方式1的發(fā)送和接收接收一幀子程序;

SP-IN: JNBRI,$ ;RI由硬件置位 CLRRI ;軟件清除RI MOVA,SBUF MOVC,P ;檢查奇校驗位 CPLC ;置C為主程序“JCERROR”用 ANLA,#7FH ;去掉奇校驗位 RETERROR: (略)11/26/2022262.串行口方式1的發(fā)送和接收接收一幀子程序;11/26/3.串行口方式2、方式3的發(fā)送和接收串行口方式2與方式3基本一樣(只是波特率設(shè)置不同),接收/發(fā)送11位信息:開始為l位起始位(0),中間8位數(shù)據(jù)位,數(shù)據(jù)位之后為1位程控位(由用戶置SCON的TB8決定),最后是1位停止位(1)。只比方式l多了一位程控位。11/26/2022273.串行口方式2、方式3的發(fā)送和接收串行口方式2與方式3.串行口方式2、方式3的發(fā)送和接收例:用第9個數(shù)據(jù)位作奇偶校驗位,編制串行口方式2的發(fā)送程序。解:設(shè)計一個發(fā)送程序,將片內(nèi)RAM50H~5FH中的數(shù)據(jù)串行發(fā)送;串行口設(shè)定為方式2狀態(tài),TB8作奇偶校驗位。在數(shù)據(jù)寫入發(fā)送緩沖器之前,先將數(shù)據(jù)的奇偶位P寫入TB8,這時,第9位數(shù)據(jù)作奇偶校驗用。方式2發(fā)送程序流程圖如圖所示。11/26/2022283.串行口方式2、方式3的發(fā)送和接收例:用第9個數(shù)據(jù)位作奇3.串行口方式2、方式3的發(fā)送和接收程序清單如下:TRT: MOVSCON,#80H;方式2設(shè)定 MOVPCON,#80H;取波特率為fosc/32 MOVR7,#10H ;數(shù)據(jù)長度10H→R7LOOP: MOVA,@R0;取數(shù)據(jù)→A MOVC,PSW.0;P→TB8 MOVTB8,C MOVSBUF,A;數(shù)據(jù)→SBUF,啟動發(fā)送WAIT: JBCTI,CONT;判斷發(fā)送中斷標(biāo)志 SJMPWAITCONT: INCR0 DJNZR7,LOOP RET11/26/2022293.串行口方式2、方式3的發(fā)送和接收程序清單如下:11/23.串行口方式2、方式3的發(fā)送和接收例:編制一個串行口方式2接收程序,并核對奇偶校驗位。解:根據(jù)上面介紹的特點,在方式2、方式3的發(fā)送過程中,將數(shù)據(jù)和附加在TB8中的奇偶位一塊發(fā)向?qū)Ψ?。因此,作為接收的一方?yīng)設(shè)法取出該奇偶位進(jìn)行核對,相應(yīng)的接收程序段為:11/26/2022303.串行口方式2、方式3的發(fā)送和接收例:編制一個串行口3.串行口方式2、方式3的發(fā)送和接收RRR: MOVSCON,#90H;選方式2,并允許接收(REN=1)LOOP: JBCRI,RECEIV ;等待接收數(shù)據(jù)并清RI SJMPLOOPRECEIV:MOVA,SBUF ;將接收到的字符取出后,送到ACC。注意, ;傳送指令影響PSW,產(chǎn)生接收端的奇偶值 JBPSW.0,ONE ;判斷接收端的奇偶值 JBRB8,ERR ;判斷發(fā)送端的奇偶值 SJMPRIGHTONE: JBRB8,RIGHTSJMPERRRIGHT: …… ;接收正確 ……ERR: …… ;接收有錯當(dāng)接收到一個字符時,從SBUF轉(zhuǎn)移到ACC中時會產(chǎn)生接收端的奇偶值,而保存在RB8中的值為發(fā)送端的奇偶值,兩個奇偶值應(yīng)相等,否則接收字符有錯。發(fā)現(xiàn)錯誤要及時通知對方重發(fā)。11/26/2022313.串行口方式2、方式3的發(fā)送和接收RRR: MOV3.串行口方式2、方式3的發(fā)送和接收例:編制一個發(fā)送程序,將片內(nèi)RAM中50H—5FH的數(shù)據(jù)串行發(fā)送。串行口設(shè)定為工作方式2,TB8作奇偶校驗位。解:在數(shù)據(jù)寫入發(fā)送SBUF之前,先將數(shù)據(jù)的奇偶標(biāo)志P寫入TB8,此時,第9位數(shù)據(jù)便可作奇偶校驗用。可采用查詢和中斷兩種方式發(fā)送。11/26/2022323.串行口方式2、方式3的發(fā)送和接收例:編制一個發(fā)送程序,3.串行口方式2、方式3的發(fā)送和接收(1)采用查詢方式的程序段 ORG0000H AJMPMAIN ;上電,轉(zhuǎn)向主程序 ORG0100H ;主程序MAIN: MOVSCON,#80H ;設(shè)工作方式2 MOVPCON,#80H ;取波特率為fosc/32 MOVR0,#50H ;首址50H送R0 MOVR7,#10H ;數(shù)值長度送R7LOOP: MOVA,@R0 ;取數(shù)據(jù) MOVC,PSW.0 ;P→C MOVTB8,C ;奇偶標(biāo)志送TB8 MOVSBUF,A ;發(fā)送數(shù)據(jù)WAIT: JBCTI,CONT AJMPWAIT ;等待中斷標(biāo)志TI=1CONT: INCR0 DJNZR7,LOOP ;數(shù)值尚未發(fā)送完,繼續(xù)發(fā)送下一個數(shù)據(jù) SJMP$ END11/26/2022333.串行口方式2、方式3的發(fā)送和接收(1)采用查詢方式的程3.串行口方式2、方式3的發(fā)送和接收(2)采用中斷方式的程序段ORG0000HAJMPMAIN;上電,轉(zhuǎn)向主程序ORG0023H;串行口的中斷入口地址AJMPSERVE;轉(zhuǎn)向中斷服務(wù)程序ORG0100H;主程序MAIN:

MOVSCON,#80HMOVPCON,#80HMOVR0,#50HMOVR7,#0FHSETBES;允許串行口中斷SETBEA;CPU允許中斷MOVA,@R0MOVC,PSW.0;P→CMOVTB8,CMOVSBUF,A;發(fā)送第一個數(shù)據(jù)SJMP$SERVE:

CLRTI;清除發(fā)送中斷標(biāo)志INCR0;修改數(shù)據(jù)地址MOVA,@R0MOVC,PSW.0;P→CMOVTB8,CMOVSBUF,A;發(fā)送數(shù)據(jù)DJNZR7,ENDT;判斷數(shù)據(jù)塊發(fā)送完否;若未發(fā)送完,則轉(zhuǎn)ENDTCLRES;若發(fā)送完,則禁止串行口中斷ENDT:RETI;中斷返回END11/26/2022343.串行口方式2、方式3的發(fā)送和接收(2)采用中斷方式的程4.多機(jī)通信接口掌握多機(jī)通信的原理及實現(xiàn)過程,能設(shè)計簡單的多機(jī)通信系統(tǒng)及程序。本節(jié)難點:SM2、TB8、RB8在通信過程中的作用11/26/2022354.多機(jī)通信接口11/26/202235多機(jī)通信的應(yīng)用領(lǐng)域典型應(yīng)用:校園卡系統(tǒng)、智能樓宇、自動溫控蔬菜大棚、大型糧庫、工廠自動化;1#打卡機(jī)2#打卡機(jī)3#打卡機(jī)……n#打卡機(jī)11/26/202236多機(jī)通信的應(yīng)用領(lǐng)域典型應(yīng)用:校園卡系統(tǒng)、智能樓宇、自動溫控蔬(1)MCS-51多機(jī)通信原理

問題1:多機(jī)通信時主機(jī)如何尋找從機(jī)?

問題2:如何區(qū)分地址和數(shù)據(jù)信息?

串行口控制寄存器SCON中的SM2為多機(jī)通信接口控制位。串行口工作于方式2或3。

SM2------多機(jī)通信位;

TB8/RB8----地址/數(shù)據(jù)區(qū)分位;若SM2為1,則僅當(dāng)接收到的第9位數(shù)據(jù)RB8為1時,數(shù)據(jù)才裝入SBUF,置位RI,請求CPU對數(shù)據(jù)進(jìn)行處理;如果接收到的第9位數(shù)據(jù)RB8為0,則不產(chǎn)生中斷標(biāo)志RI,信息丟失,CPU不做任何處理。當(dāng)SM2為0時,則接收到一個數(shù)據(jù)后,不管第9位數(shù)據(jù)RB8是0還是1,都將數(shù)據(jù)裝入接收緩沖器SBUF并置位中斷標(biāo)志RI,請求CPU處理。關(guān)鍵是SM2與TB8/RB8的關(guān)系!11/26/202237(1)MCS-51多機(jī)通信原理問題1:多機(jī)通信時SM2、RB8與從機(jī)動作關(guān)系SM2RB8從機(jī)動作10此時不能接收數(shù)據(jù)11能收到主機(jī)發(fā)的數(shù)據(jù)(地址信息)00進(jìn)入串口中斷,對接收的數(shù)據(jù)進(jìn)行處理01進(jìn)入串口中斷,對接收的數(shù)據(jù)進(jìn)行處理11/26/202238SM2、RB8與從機(jī)動作關(guān)系SM2RB8從機(jī)動作通信過程所有從機(jī)的SM2=1,處于只接收地址幀狀態(tài)所有同學(xué)坐著聽講主機(jī)發(fā)地址信息,以第9位TB8=1表示發(fā)送的是地址老師喊同學(xué)名字從機(jī)接收到地址幀后與本機(jī)地址比較所有同學(xué)聽到名字與自己的名字比較被尋址從機(jī)SM2=0,其作從機(jī)SM2=1不變名字相符的同學(xué)站起來主機(jī)發(fā)數(shù)據(jù)信息,對已被尋址的從機(jī)因SM2=0,可以接收主機(jī)發(fā)來的信息。其余從機(jī)因SM2=1不理睬主機(jī)。老師與站起的同學(xué)進(jìn)行提問回答課堂交流被尋址的從機(jī)SM2置1.主機(jī)可另發(fā)地址幀與其它從機(jī)通信時?;卮饐栴}的同學(xué)坐下11/26/202239通信過程所有從機(jī)的SM2=1,處于只接收地址幀狀態(tài)主機(jī)發(fā)地址(2)多機(jī)通信系統(tǒng)設(shè)計

設(shè)多機(jī)通信系統(tǒng)主、從機(jī)晶振為6MHz,波特率為2400bps,以方式3進(jìn)行多機(jī)串行通信。每次通信時主機(jī)先發(fā)送對應(yīng)的從機(jī)地址,然后發(fā)一個字節(jié)數(shù)據(jù)。RS-485從機(jī)0#主機(jī)RS-485……RS-485從機(jī)1#RS-485從機(jī)n#圖1多機(jī)通信系統(tǒng)硬件結(jié)構(gòu)11/26/202240(2)多機(jī)通信系統(tǒng)設(shè)計

設(shè)多機(jī)通信系統(tǒng)主、從機(jī)晶振主機(jī)軟件設(shè)計----初始化子程序INIT:MOV TMOD,#20HMOVTH1,#0F9H;波特率為2400bpsMOVTL1,#0F9HMOVSCON,#0D0H;方式3,SM2=0,允許接收SETBTR1

11/26/202241主機(jī)軟件設(shè)計----初始化子程序INIT:MOV TMOD,主機(jī)軟件設(shè)計-----通信子程序流程返回置地址信息標(biāo)志發(fā)地址置數(shù)據(jù)信息標(biāo)志發(fā)數(shù)據(jù)開始圖2主機(jī)通信子程序流程圖11/26/202242主機(jī)軟件設(shè)計-----通信子程序流程返回置地址信息標(biāo)志發(fā)地址從機(jī)軟件設(shè)計-------初始化程序INIT:MOV TMOD,#20HMOV TH1, #0F9H;設(shè)置波特率為2400MOV TL1, #0F9HMOV SCON,#0F0H;方式3,SM2=1,允許接收SETB TR1SETB ES ;允許串行口中斷SETB EAWAIT:SJMPWAIT;聽號

11/26/202243從機(jī)軟件設(shè)計-------初始化程序INIT:MOV 從機(jī)通信子程序

11/26/202244

從機(jī)串行中斷通信程序SIO: CLR RI PUSH PSW;現(xiàn)場保護(hù) PUSH ACC MOV A,SBUF ;接收串行數(shù)據(jù) XRL A,#ADDR ;判斷是否與本機(jī)地址相符 JNZ BACK ;不相符則返回

CLR SM2 ;相符則SM2為0CLRES;關(guān)串口中斷,避免中斷嵌套 MOV A,SBUF;接收數(shù)據(jù)WAIT:JNB RI,WAIT CLR RIMOV@R0,A;保存數(shù)據(jù)

SETBSM2;恢復(fù)多機(jī)通信,SETBES;開串口中斷BACK:POP ACC;恢復(fù)現(xiàn)場 POP PSW RETI11/26/202245從機(jī)串行中斷通信程序SIO: CLR RI11/26/202本章結(jié)束,11/26/202246本章結(jié)束,11/26/202246單片機(jī)原理與應(yīng)用第7章

單片機(jī)的串行接口

信息科學(xué)與工程學(xué)院自動化系11/26/202247單片機(jī)原理與應(yīng)用第7章單片機(jī)的串行接口信息科學(xué)與工程7.1

串行通信概述一.串行通訊的基本方式(一).異步通訊以字符為傳送單位用起始位和停止位標(biāo)識每個字符的開始和結(jié)束字符間隔不固定,只需字符傳送時同步。異步通訊常用格式:一個字符幀異步通訊的雙方需要兩項約定:1.字符格式一幀字符位數(shù)的規(guī)定:數(shù)據(jù)位,校驗位,起始位和停止位。2.波特率(位/秒)對傳送速率的規(guī)定例:要求每秒傳送120個字符,每幀為10位。解:B=120×10=1200波特 每位0.83ms數(shù)據(jù)位傳輸率=120×8=960位/秒(二).同步通訊以一串字符為一個傳送單位,字符間不加標(biāo)識位,在一串字符開始用同步字符標(biāo)識,硬件要求高,通訊雙方須嚴(yán)格同步。D0D1D2D3D4D5D6D7停止位起始位11/26/2022487.1 串行通信概述一.串行通訊的基本方式異步通訊的雙方需二.串行接口功能1.發(fā)送器:并串?dāng)?shù)據(jù)格式轉(zhuǎn)換,添加標(biāo)識位和校驗位,一幀發(fā)送結(jié)束,設(shè)置結(jié)束標(biāo)志,申請中斷。2.接收器:串并數(shù)據(jù)格式轉(zhuǎn)換,檢查錯誤,去掉標(biāo)識位,保存有效數(shù)據(jù),設(shè)置接收結(jié)束標(biāo)志,申請中斷。3.控制器:接收編程命令和控制參數(shù),設(shè)置工作方式:同步/異步、字符格式、波特率、校驗方式、數(shù)據(jù)位與同步時鐘比例等。三.串行數(shù)據(jù)傳送方向單工通訊:數(shù)據(jù)單向傳送。半雙工通訊:數(shù)據(jù)可分時雙向傳送。全雙工通訊:可同時進(jìn)行發(fā)送和接收。發(fā)送器接收器發(fā)送器接收器11/26/202249二.串行接口功能1.發(fā)送器:并串?dāng)?shù)據(jù)格式轉(zhuǎn)換,添加標(biāo)識位和 7.2AT89C52串行接口

1個全雙工串行接口,可同時進(jìn)行發(fā)送和接收。串行接口輸入/輸出引腳:TXD(P3.1)、RXD(P3.0)數(shù)據(jù)格式:按不同方式,一幀位數(shù)8/10/11發(fā)送/接收時,數(shù)據(jù)皆低位在前。一幀字符發(fā)送/接收結(jié)束,置位標(biāo)志位(TI/RI)并申請SIO中斷。中斷控制:中斷允許位ES中斷入口:0023HD0D1D2D3D4D5D6D7停止位起始位D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D8停止位起始位D711/26/202250 7.2AT89C52串行接口

1個全雙工串行接口,可AT89C52單片機(jī)的串行接口SBUF(發(fā))SBUF(收)發(fā)送控制器TI接收控制器RI移位寄存器波特率發(fā)生器T11A累加器(門)移位寄存器RxDTxD去申請中斷引腳引腳11/26/202251AT89C52單片機(jī)的串行接口SBUF(發(fā))SBUF(收)發(fā)11/26/20225211/26/20226波特率設(shè)置方式0:波特率B=fosc/12方式2:B=(2SMOD/64)×fosc方式1、3:B=(2SMOD/32)×T1溢出率T1溢出率=1/t=fosc/[12×(2n-X)]TH1、TL1=X=28-fosc/12×2SMOD/(32×B)(注意:T1工作于方式2)11/26/202253波特率設(shè)置方式0:波特率B=fosc/1211/26/2PCON(87H)

電源控制寄存器PCON中只有SMOD位與串行口工作有關(guān)。11/26/202254PCON(87H)11/26/20228串行口初始化編程格式: SIO:MOVSCON,#控制狀態(tài)字;寫方式字且TI=RI=0 (MOVPCON,#80H) ;波特率加倍 (MOVTMOD,#20H) ;T1作波特率發(fā)生器 (MOVTH1,#X) ;選定波特率 (MOVTL1,#X) (SETBTR1) (SETBEA) ;開串行口中斷 (SETBES)7.3~7.6初始化與應(yīng)用11/26/202255串行口初始化編程格式:7.3~7.6初始化與應(yīng)用11/21.串行口方式0的應(yīng)用MCS-51單片機(jī)串行口基本上是異步通信接口,但在方式0時是同步操作。外接串入——并出或并入——串出器件,可實現(xiàn)I/O的擴(kuò)展。串行口方式0的數(shù)據(jù)傳送可以采用中斷方式,也可以采用查詢方式。無論哪種方式,都要借助于TI或RI標(biāo)志。在串行口發(fā)送時,或者靠TI置位后引起中斷申請,在中斷服務(wù)程序中發(fā)送下一組數(shù)據(jù);或者通過查詢TI的值,只要TI為0就繼續(xù)查詢,直到TI為1后結(jié)束查詢,進(jìn)入下一個字符的發(fā)送。在串行口接收時,由RI引起中斷或?qū)I查詢來決定何時接收下一個字符。無論采用什么方式,在開始串行通信前,都要先對SCON寄存器初始化,進(jìn)行工作方式的設(shè)置。在方式0中,SCON寄存器的初始化只是簡單地把00H送入SCON就可以了。11/26/2022561.串行口方式0的應(yīng)用MCS-51單片機(jī)串行口基本上是異步1.串行口方式0的應(yīng)用例:用MCS-51串行口外接164串入——并出移位寄存器擴(kuò)展8位并行口;8位并行口的每位都接一個發(fā)光二極管,要求發(fā)光二極管從左到右以一定延遲輪流顯示,并不斷循環(huán)。設(shè)發(fā)光二極管為共陰極接法,如圖所示。解:設(shè)數(shù)據(jù)串行發(fā)送采用中斷方式,顯示的延遲通過調(diào)用延遲程序DELAY來實現(xiàn)。CLR=0,關(guān)閉并行輸出;CLR=1,打開并行輸出。11/26/2022571.串行口方式0的應(yīng)用例:用MCS-51串行口外接164串1.串行口方式0的應(yīng)用程序清單: ORG0023H ;串行口中斷入口 AJMPSBR ;轉(zhuǎn)入串行口中斷服務(wù)程序 ORG2000H ;主程序起始地址 MOVSCON,#00H ;串行口方式0初始化 MOVA,#80H ;最左一位發(fā)光二極管先亮 CLRP1.0 ;關(guān)閉并行輸出 MOVSBUF,A ;開始串行輸出LOOP: SJMP$ ;等待中斷SBR: SETBP1.0 ;啟動并行輸出 ACALLDELAY ;顯示延遲一段時間 CLRTI ;清發(fā)送中斷標(biāo)志 RRA ;準(zhǔn)備右邊一位顯示 CLRP1.0 ;關(guān)閉并行輸出 MOVSBUF,A ;再一次串行輸出 RETI ;中斷返回11/26/2022581.串行口方式0的應(yīng)用程序清單:11/26/2022121.串行口方式0的應(yīng)用

用方式0外加移位寄存器來擴(kuò)展8位輸出口時,要求移位寄存器帶有輸出控制,否則串行移位過程也會反映到并行輸出口;另外,輸出口最好再接一個寄存器或鎖存器,以免在輸出門關(guān)閉使(STB=0)輸出又發(fā)生變化。

用方式0加上并入——串出移位寄存器可擴(kuò)展一個8位并行輸入口。移位寄存器必須帶有預(yù)置/移位的控制端,由單片機(jī)的一個輸出端子加以控制,以實現(xiàn)先由8位輸入口置數(shù)到移位寄存器,然后再串行移位從單片機(jī)的串行口輸入到接收緩沖器,最后再讀入到CPU中。11/26/2022591.串行口方式0的應(yīng)用用方式0外加移位寄存器來擴(kuò)展8位輸1.串行口方式0的應(yīng)用例:用MCS-51串行口外加移位寄存器165或166擴(kuò)展8位輸入口,輸入數(shù)據(jù)由8個開關(guān)提供,另有一個開關(guān)K提供聯(lián)絡(luò)信號。當(dāng)K=0時,表示要求輸入數(shù)據(jù),輸入的8位為開關(guān)量,提供邏輯模擬子程序的輸入信號。如所示。SHIFT=1,并行輸入數(shù)據(jù);SHIFT=0,開始串行移位輸入。11/26/2022601.串行口方式0的應(yīng)用例:用MCS-51串行口外加移位寄存1.串行口方式0的應(yīng)用解:串行口方式0的接收要用SCON寄存器中的REN位作為開關(guān)來控制。因此,初值化時,除了設(shè)置工作方式之外,還要使REN位為1,其余各位仍然為0。對RI采用查詢方式來編寫程序,當(dāng)然,先要查詢開關(guān)K是否閉合。程序清單:START:MOVSCON,#10H;串行口方式0初始化 JBP1.1,$ ;開關(guān)K未閉合,等待 SETBP1.0 ;P/S=1,并行置入數(shù)據(jù) CLRP1.0 ;P/S=0,開始串行移位 JNBRI,$ ;查詢RI CLRRI ;查詢結(jié)束,清RI MOVA,SBUF ;讀數(shù)據(jù)到累加器 ACALLLOGSIM ;進(jìn)行邏輯模擬 SJMPSTART ;準(zhǔn)備下一次模擬11/26/2022611.串行口方式0的應(yīng)用解:串行口方式0的接收要用SCON寄2.串行口方式1的發(fā)送和接收例:MCS-51串行口按雙工方式收發(fā)ASCII字符,最高位用來作奇校驗位,要求傳送的波特率為1200b/s。編寫有關(guān)的通信程序。解:7位ASCII碼加1位奇校驗共8位數(shù)據(jù),故可采用串行口方式1。MCS-51單片機(jī)的奇偶校驗位P是當(dāng)累加器A中1的數(shù)目為奇數(shù)時,P=1。如果直接把P的值放入ASCII碼的最高位,恰好成了偶校驗,與要求不符。因此,要把P的值取反以后放入ASCII碼最高位,才是要求的奇校驗。11/26/2022622.串行口方式1的發(fā)送和接收例:MCS-51串行口按雙工方2.串行口方式1的發(fā)送和接收

雙工通信要求收、發(fā)能同時進(jìn)行。實際上,收、發(fā)操作主要是在串行接口進(jìn)行,CPU只是把數(shù)據(jù)從接收緩沖器讀出和把數(shù)據(jù)寫入發(fā)送緩沖器。數(shù)據(jù)傳送用中斷方式進(jìn)行,響應(yīng)中斷以后,通過檢測是RI置位還是TI置位來決定CPU是進(jìn)行發(fā)送操作還是接收操作。發(fā)送和接收都通過調(diào)用子程序來完成,設(shè)發(fā)送數(shù)據(jù)區(qū)的首地址為20H,接收數(shù)據(jù)區(qū)的首地址為40H,fosc為6MHz,通過計算可知:定時器的初裝值應(yīng)為F3H。定時器T1采用工作模式2,可以避免計數(shù)溢出后用軟件重裝定時初值的工作。11/26/2022632.串行口方式1的發(fā)送和接收雙工通信要求收、發(fā)能同時進(jìn)行2.串行口方式1的發(fā)送和接收程序清單:主程序MOVTMOD,#20H;定時器1設(shè)為模式2MOVTL1,#0F3H;定時器初值MOVTH1,#0F3H;8位重裝值SETBTR1;啟動定時器1MOVSCON,#50H;設(shè)置為方式1, ;REN=1MOVR0,#20H;發(fā)送數(shù)據(jù)區(qū)首址MOVR1,#40H;接收數(shù)據(jù)取首址

ACALLSOUT;先輸出一個字符SETBESSETBEASJMP$;等待中斷

中斷服ORG0023H;串行口中斷入口AJMPSBR1;轉(zhuǎn)至中斷服務(wù)程序ORG0100HSBR1:JNBRI,SEND;TI=1,為發(fā)送中斷ACALLSIN;RI=1,為接收中斷SJMPNEXT;轉(zhuǎn)至統(tǒng)一的出口SEND:ACALLSOUT;調(diào)用發(fā)送子程序NEXT:RETI;中斷返回11/26/2022642.串行口方式1的發(fā)送和接收程序清單:中斷服11/26/22.串行口方式1的發(fā)送和接收發(fā)送子程序SOUT:CLRTIMOVA,@R0;取發(fā)送數(shù)據(jù)到AMOVC,P;奇偶標(biāo)識賦予C

CPLC;奇校驗MOVACC.7,C;A中的最高位為奇校驗INCR0;修改發(fā)送數(shù)據(jù)指針MOVSBUF,A;發(fā)送ASCII碼RET;返回接收子程序SIN:CLRRI MOVA,SBUF;讀出接收緩沖區(qū)內(nèi)容 MOVC,P;取出校驗位

JNCERR;奇校驗錯 ANLA,#7FH;刪去校驗位 MOV@R1,A;讀入接收緩沖區(qū) INCRI;修改接收數(shù)據(jù)指針 RET;返回11/26/2022652.串行口方式1的發(fā)送和接收發(fā)送子程序接收子程序11/262.串行口方式1的發(fā)送和接收在主程序中已初始化REN=1,則允許接收。以上程序基本上具備了全雙工通信的能力,但不能說很完善。例如,再接收子程序中,雖然檢驗了奇偶校驗位,但沒有進(jìn)行出錯處理;另外,發(fā)送和接收數(shù)據(jù)區(qū)的范圍都很有限,也不能滿足實際需要。但有了一個基本的框架之后,逐漸完善還是可以做到的。11/26/2022662.串行口方式1的發(fā)送和接收在主程序中已初始化REN=12.串行口方式1的發(fā)送和接收例:采用查詢方式由串行口發(fā)送帶奇偶校驗位的數(shù)據(jù)塊。解:本例由內(nèi)部RAM單元20H-3FH取出ASCII碼數(shù)據(jù),在最高位上加奇偶校驗位后由串行口發(fā)出。采用8位異步通信方式,波特率為1200b/s,fosc=11.059MHz。由要求可知,應(yīng)把串行口設(shè)置為方式1,采用定時器1模式2作為波特率發(fā)生器,預(yù)置值(TH1)=0E8H。11/26/2022672.串行口方式1的發(fā)送和接收例:采用查詢方式由串行口發(fā)送帶2.串行口方式1的發(fā)送和接收程序清單:主程序; MOVTMOD,#20H ;設(shè)置定時器1為模式2 MOVTL1,#0E8H ;初值,波特率為1200b/s MOVTH1,#0E8H SETBTR1 ;啟動T1運(yùn)行 MOVSCON,#01000000B ;設(shè)置串行口為方式1 MOVR0,#20H MOVR7,#32 ;數(shù)據(jù)塊長度LOOP: MOVA,@R0ACALLSP-OUTJNBP,ERROR;傳輸出錯處理,由SP-OUT中“CPLC”結(jié)果決定INCR0DJNZR7,LOOP ……11/26/2022682.串行口方式1的發(fā)送和接收程序清單:11/26/20222.串行口方式1的發(fā)送和接收串行口發(fā)送子程序(奇校驗);SP-OUT:MOVC,PSW.0;設(shè)置奇校驗位,校驗位P=1為奇校驗 CPLC;奇校驗(無此指令位偶校驗)MOVACC.7,C;ACC.7補(bǔ)0或1MOVSBUF,A;啟動串行口發(fā)送過程CLRTI;清TI標(biāo)志,允許在發(fā)送RETERROR:(略)11/26/2022692.串行口方式1的發(fā)送和接收串行口發(fā)送子程序(奇校驗);12.串行口方式1的發(fā)送和接收例:由串行口接收帶奇偶校驗位的數(shù)據(jù)塊。解:采用查詢方式,本例與上例相呼應(yīng),接收器把接收到的32B數(shù)據(jù)存放在20H-3FH單元內(nèi),波特率同上,若奇偶校驗出錯則置進(jìn)位位為1。程序清單:11/26/2022702.串行口方式1的發(fā)送和接收例:由串行口接收帶奇偶校驗位的2.串行口方式1的發(fā)送和接收主程序; MOVSCON,#01010000B;設(shè)串口方式1,允許接收 MOVTMOD,#20H ;設(shè)置定時器T1為模式2 MOVTL1,#0E8H ;初值,波特率為1200b/s MOVTH1,#0E8H SETBTR1 ;啟動T1運(yùn)行 MOVR0,#20H MOVR7,#32 ;數(shù)據(jù)塊長度LOOP: ACALLSP-IN ;調(diào)接收一幀子程序JCERROR ;由SP-IN中“CPLC”結(jié)果決定MOV@R0,A ;存放接收的數(shù)據(jù)INCR0DJNZR7,LOOP……11/26/2022712.串行口方式1的發(fā)送和接收主程序;11/26/202222.串行口方式1的發(fā)送和接收接收一幀子程序;

SP-IN: JNBRI,$ ;RI由硬件置位 CLRRI ;軟件清除RI MOVA,SBUF MOVC,P ;檢查奇校驗位 CPLC ;置C為主程序“JCERROR”用 ANLA,#7FH ;去掉奇校驗位 RETERROR: (略)11/26/2022722.串行口方式1的發(fā)送和接收接收一幀子程序;11/26/3.串行口方式2、方式3的發(fā)送和接收串行口方式2與方式3基本一樣(只是波特率設(shè)置不同),接收/發(fā)送11位信息:開始為l位起始位(0),中間8位數(shù)據(jù)位,數(shù)據(jù)位之后為1位程控位(由用戶置SCON的TB8決定),最后是1位停止位(1)。只比方式l多了一位程控位。11/26/2022733.串行口方式2、方式3的發(fā)送和接收串行口方式2與方式3.串行口方式2、方式3的發(fā)送和接收例:用第9個數(shù)據(jù)位作奇偶校驗位,編制串行口方式2的發(fā)送程序。解:設(shè)計一個發(fā)送程序,將片內(nèi)RAM50H~5FH中的數(shù)據(jù)串行發(fā)送;串行口設(shè)定為方式2狀態(tài),TB8作奇偶校驗位。在數(shù)據(jù)寫入發(fā)送緩沖器之前,先將數(shù)據(jù)的奇偶位P寫入TB8,這時,第9位數(shù)據(jù)作奇偶校驗用。方式2發(fā)送程序流程圖如圖所示。11/26/2022743.串行口方式2、方式3的發(fā)送和接收例:用第9個數(shù)據(jù)位作奇3.串行口方式2、方式3的發(fā)送和接收程序清單如下:TRT: MOVSCON,#80H;方式2設(shè)定 MOVPCON,#80H;取波特率為fosc/32 MOVR7,#10H ;數(shù)據(jù)長度10H→R7LOOP: MOVA,@R0;取數(shù)據(jù)→A MOVC,PSW.0;P→TB8 MOVTB8,C MOVSBUF,A;數(shù)據(jù)→SBUF,啟動發(fā)送WAIT: JBCTI,CONT;判斷發(fā)送中斷標(biāo)志 SJMPWAITCONT: INCR0 DJNZR7,LOOP RET11/26/2022753.串行口方式2、方式3的發(fā)送和接收程序清單如下:11/23.串行口方式2、方式3的發(fā)送和接收例:編制一個串行口方式2接收程序,并核對奇偶校驗位。解:根據(jù)上面介紹的特點,在方式2、方式3的發(fā)送過程中,將數(shù)據(jù)和附加在TB8中的奇偶位一塊發(fā)向?qū)Ψ健R虼?,作為接收的一方?yīng)設(shè)法取出該奇偶位進(jìn)行核對,相應(yīng)的接收程序段為:11/26/2022763.串行口方式2、方式3的發(fā)送和接收例:編制一個串行口3.串行口方式2、方式3的發(fā)送和接收RRR: MOVSCON,#90H;選方式2,并允許接收(REN=1)LOOP: JBCRI,RECEIV ;等待接收數(shù)據(jù)并清RI SJMPLOOPRECEIV:MOVA,SBUF ;將接收到的字符取出后,送到ACC。注意, ;傳送指令影響PSW,產(chǎn)生接收端的奇偶值 JBPSW.0,ONE ;判斷接收端的奇偶值 JBRB8,ERR ;判斷發(fā)送端的奇偶值 SJMPRIGHTONE: JBRB8,RIGHTSJMPERRRIGHT: …… ;接收正確 ……ERR: …… ;接收有錯當(dāng)接收到一個字符時,從SBUF轉(zhuǎn)移到ACC中時會產(chǎn)生接收端的奇偶值,而保存在RB8中的值為發(fā)送端的奇偶值,兩個奇偶值應(yīng)相等,否則接收字符有錯。發(fā)現(xiàn)錯誤要及時通知對方重發(fā)。11/26/2022773.串行口方式2、方式3的發(fā)送和接收RRR: MOV3.串行口方式2、方式3的發(fā)送和接收例:編制一個發(fā)送程序,將片內(nèi)RAM中50H—5FH的數(shù)據(jù)串行發(fā)送。串行口設(shè)定為工作方式2,TB8作奇偶校驗位。解:在數(shù)據(jù)寫入發(fā)送SBUF之前,先將數(shù)據(jù)的奇偶標(biāo)志P寫入TB8,此時,第9位數(shù)據(jù)便可作奇偶校驗用??刹捎貌樵兒椭袛鄡煞N方式發(fā)送。11/26/2022783.串行口方式2、方式3的發(fā)送和接收例:編制一個發(fā)送程序,3.串行口方式2、方式3的發(fā)送和接收(1)采用查詢方式的程序段 ORG0000H AJMPMAIN ;上電,轉(zhuǎn)向主程序 ORG0100H ;主程序MAIN: MOVSCON,#80H ;設(shè)工作方式2 MOVPCON,#80H ;取波特率為fosc/32 MOVR0,#50H ;首址50H送R0 MOVR7,#10H ;數(shù)值長度送R7LOOP: MOVA,@R0 ;取數(shù)據(jù) MOVC,PSW.0 ;P→C MOVTB8,C ;奇偶標(biāo)志送TB8 MOVSBUF,A ;發(fā)送數(shù)據(jù)WAIT: JBCTI,CONT AJMPWAIT ;等待中斷標(biāo)志TI=1CONT: INCR0 DJNZR7,LOOP ;數(shù)值尚未發(fā)送完,繼續(xù)發(fā)送下一個數(shù)據(jù) SJMP$ END11/26/2022793.串行口方式2、方式3的發(fā)送和接收(1)采用查詢方式的程3.串行口方式2、方式3的發(fā)送和接收(2)采用中斷方式的程序段ORG0000HAJMPMAIN;上電,轉(zhuǎn)向主程序ORG0023H;串行口的中斷入口地址AJMPSERVE;轉(zhuǎn)向中斷服務(wù)程序ORG0100H;主程序MAIN:

MOVSCON,#80HMOVPCON,#80HMOVR0,#50HMOVR7,#0FHSETBES;允許串行口中斷SETBEA;CPU允許中斷MOVA,@R0MOVC,PSW.0;P→CMOVTB8,CMOVSBUF,A;發(fā)送第一個數(shù)據(jù)SJMP$SERVE:

CLRTI;清除發(fā)送中斷標(biāo)志INCR0;修改數(shù)據(jù)地址MOVA,@R

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論