單片機之串行通訊_第1頁
單片機之串行通訊_第2頁
單片機之串行通訊_第3頁
單片機之串行通訊_第4頁
單片機之串行通訊_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第九章單片機串行通訊設(shè)計9.1功能要求9.2任務(wù)分析

9.3

串行通訊技術(shù)9.3.1鍵盤工作特性9.3.2串行通訊基本概念9.4MCS_51單片機串行口9.4.1串行口結(jié)構(gòu)9.4.2串行口控制寄存器9.4.3串行口的工作方式9.5單片機串行通訊設(shè)計9.5.1單片機與單片機之間串行通訊9.1功能要求

一.基本要求實現(xiàn)單片機與單片機之間的串行通訊。二.發(fā)揮部分實現(xiàn)單片機與PC機之間的串行通訊?;啬夸?/p>

9.2任務(wù)分析

要完成此任務(wù),主要需解決如下四方面的問題:串行通訊的工作原理;單片機與單片機串行通訊接口電路和程序設(shè)計方法;PC機與單片機串行通訊接口電路的設(shè)計方法;PC機與單片機串行通訊的程序設(shè)計方法?;啬夸?.3.1串行通訊基礎(chǔ)

在實際工作中,單片機與外部設(shè)備之間、單片機與單片機之間經(jīng)常需要交換信息,所有這些信息的交換均稱為通訊。通訊按數(shù)據(jù)傳送的方式分為二種,即并行通訊和串行通訊。并行通訊是指數(shù)據(jù)的各位同時進行傳送(發(fā)送和接收)的通訊方式,接口電路如下頁左圖所示,數(shù)據(jù)傳送如下頁右圖所示。由于各位同時傳送,其突出優(yōu)點為傳送速度快,但其缺點為所需的數(shù)據(jù)線較多,數(shù)據(jù)有多少位,就需要多少根數(shù)據(jù)線,因此它一般適用于通訊距離較近的場合,如單片機和打印機之間的通訊等,但當(dāng)通訊距離較遠,將導(dǎo)致成本成倍增加,并且接收數(shù)據(jù)的誤碼率較高。9.3串行通訊技術(shù)回目錄并行通訊的特點通訊軟件控制簡單(無需并—串之間的轉(zhuǎn)換),傳輸?shù)乃俣瓤欤〝?shù)據(jù)各位同時傳送),但傳輸線較多,長距離傳送時成本高,且不利于接收方各位的同時接收,一般應(yīng)用于短距離數(shù)據(jù)通訊?;啬夸洸⑿型ㄓ嵔涌陔娐泛唸D并行通訊數(shù)據(jù)傳送示意圖串行通訊

串行通訊是指數(shù)據(jù)的各位依次進行傳送(發(fā)送和接收)的通訊方式,接口電路如圖9-4所示,TXD表示發(fā)送管腳,RXD表示接收管腳,數(shù)據(jù)傳送如圖所示,由于各位依次傳送,通訊時占用同一根數(shù)據(jù)線,其突出優(yōu)點為通訊所需的數(shù)據(jù)線少,但由于傳送時需要進行并—串之間的數(shù)據(jù)轉(zhuǎn)換,因此帶來了通訊速度慢、通訊控制程序復(fù)雜的缺點。但由于在遠距離通訊時,能有效的減少通訊電纜成本,所以在遠距離通訊系統(tǒng)中得到廣泛的運用,串行通訊接口電路簡圖串行通訊數(shù)據(jù)傳送示意圖9.3.2串行通訊基本概念

一、串行通訊的傳輸方式串行通訊的傳輸方式一般有三種:1)單工方式只允許數(shù)據(jù)由一個方向傳送。2)半雙工方式即在同一條數(shù)據(jù)線上,在不同的時間段上實現(xiàn)雙向通訊,由于只有一條數(shù)據(jù)線,對于某一具體時刻而言,數(shù)據(jù)只能單方向傳送。3)全雙工方式即在二條不同的數(shù)據(jù)線上,在相同的時間段上也能實現(xiàn)雙向通訊,由于有二條數(shù)據(jù)線,發(fā)送和接收互不干擾,可以同時進行。

(a)單工方式(b)半雙工方式(c)全雙工方式回目錄二、異步通訊的通訊協(xié)議和格式

起始位:為了實現(xiàn)異步傳輸字符的同步,采用的辦法是使數(shù)據(jù)線在空閑時保持高電平,在傳送每個字符前先發(fā)送一位低電平0,稱為起始位,以通知接收方準(zhǔn)備接收數(shù)據(jù)。因此,傳送的每一個字符都用起始位來進行收發(fā)雙方的同步。數(shù)據(jù)位:指傳送的5~8位的數(shù)據(jù),常見的為一個字節(jié)(8位)的數(shù)據(jù),數(shù)據(jù)傳送時低位在前,高位在后。奇偶校驗位:接收方為了檢驗數(shù)據(jù)的正確性,在數(shù)據(jù)發(fā)送完后,可以發(fā)送一位奇偶校驗位,如在發(fā)送方將程序狀態(tài)字PSW中的P標(biāo)志作為校驗位發(fā)送,在接收方接收到數(shù)據(jù)和校驗位后,再用接收到的數(shù)據(jù)產(chǎn)生的P標(biāo)志和接收到的校驗位比較,如果相同,認(rèn)為數(shù)據(jù)正確,如果不相同,表明接收的數(shù)據(jù)出錯。。停止位:為了表示數(shù)據(jù)結(jié)束,并為下一次數(shù)據(jù)傳送的起始位作好準(zhǔn)備,一般發(fā)送1或2位的高電平1作為停止位。異步通訊的整體格式三、異步通訊的數(shù)據(jù)傳送過程

在數(shù)據(jù)傳送開始前,數(shù)據(jù)線始終保持高電平不變(空閑位),接收方不斷的檢測數(shù)據(jù)線的高低電平狀態(tài)。當(dāng)發(fā)送方開始發(fā)送數(shù)據(jù)前,先發(fā)送起始位,將數(shù)據(jù)線拉低為低電平0。當(dāng)接收方檢測到低電平后,表示數(shù)據(jù)傳送即將開始,作好數(shù)據(jù)接收準(zhǔn)備,準(zhǔn)備統(tǒng)計接收數(shù)據(jù)位數(shù)。發(fā)送方發(fā)送完起始位后,便發(fā)送數(shù)據(jù)的最低位D0,接收方按照事先約定的速率和節(jié)拍,同步地將數(shù)據(jù)D0移入移位寄存器。并將數(shù)據(jù)位數(shù)計數(shù)器加1。依據(jù)相同的原理繼續(xù)發(fā)送和接收其它的數(shù)據(jù)位,當(dāng)數(shù)據(jù)位發(fā)送到最高位D7時,由于數(shù)據(jù)位數(shù)計數(shù)器達到預(yù)先約定值,便將接收到的數(shù)據(jù)組合為一個字節(jié)。接下來發(fā)送和接收校驗位和停止位,為下一次數(shù)據(jù)傳送作好準(zhǔn)備。回目錄四、波特率波特率指數(shù)據(jù)的傳送速率,表示每秒鐘傳送二進制數(shù)據(jù)的位數(shù),它的單位為b/s,波特率表示了數(shù)據(jù)通訊的快慢。假設(shè)數(shù)據(jù)傳送速率為120字符每秒,而每個字符包含10位(1位起始位、8位數(shù)據(jù)、1位停止位),這時傳送的波特率為:

10b/字符×120字符=1200b/s異步串行通訊的波特率一般設(shè)置在50~19200b/s之間。9.4MCS_51單片機串行口

MCS_51系列單片機有一個可編程的全雙工串行通訊口,它既可作為UART(通用異步收發(fā)器)使用,又可用作同步移位寄存器。使用該串行口可以實現(xiàn)單片機之間以及單片機與PC機之間的單機或多機通訊。它通過引腳TXD(P3.1,串行數(shù)據(jù)發(fā)送引腳)發(fā)送數(shù)據(jù),通過RXD(P3.0,串行數(shù)據(jù)接收引腳)接收數(shù)據(jù),其幀格式可以是8位、10位、11位,并能設(shè)置不同的波特率,給串行數(shù)據(jù)的傳送帶來很大的靈活性?;啬夸?.4.1串行口結(jié)構(gòu)

回目錄串行口內(nèi)部結(jié)構(gòu)簡圖

由上圖可知,單片機串行通訊實際上是依據(jù)數(shù)字電路中移位寄存器的工作原理構(gòu)成,它利用輸出移位寄存器實現(xiàn)并-串轉(zhuǎn)換發(fā)送數(shù)據(jù),利用輸入移位寄存器實現(xiàn)串-并轉(zhuǎn)換接收數(shù)據(jù),具體工作過程如下:一.數(shù)據(jù)發(fā)送

要發(fā)送的數(shù)據(jù)首先送到發(fā)送緩沖器SBUF中,該步驟可以通過寫發(fā)送SBUF指令:MOVSBUF,A實現(xiàn)。同時發(fā)送SBUF得到要發(fā)送的數(shù)據(jù)后,依據(jù)約定的通訊協(xié)議自動加入附加的控制信息,如起始位、停止位等,并將組合后的控制信息和數(shù)據(jù)自動裝載到輸出移位寄存器中,在移位時鐘的作用下,將組合后的控制信息和數(shù)據(jù)依次逐位發(fā)送出去,發(fā)送完后,置發(fā)送完成標(biāo)志TI為1。

二.數(shù)據(jù)接收先置允許接收標(biāo)志REN(SCON.4)為1,允許接收器接收,同時檢測到RXD引腳由高電平1跳變到低電平0時,輸入移位寄存器依據(jù)約定的通訊協(xié)議在移位時鐘的控制下依次移入接收到的數(shù)據(jù)(含控制信息和數(shù)據(jù)),一幀接收完后,自動裝入接收SBUF中,在接收SBUF中自動去除控制信息,得到接收的數(shù)據(jù),同時置位接收標(biāo)志RI,向中斷系統(tǒng)提出接收中斷申請。單片機利用中斷系統(tǒng)或查詢得知接收到數(shù)據(jù)后,執(zhí)行讀接收SBUF指令:MOVA,SBUF,將接收的數(shù)據(jù)讀入累加器A中。三.移位時鐘的獲取由以上分析可知,串行通訊主要利用數(shù)字電路中移位寄存器的工作原理構(gòu)成,而移位寄存器需要移位時鐘來控制數(shù)據(jù)移位的速度,即波特率。由圖9-8可知,串行通訊的移位時鐘由單片機內(nèi)部定時器T1產(chǎn)生,具體產(chǎn)生過程如下:T1溢出率經(jīng)16分頻后直接輸出(SMOD=1)或再2分頻(SMOD=0)作為移位時鐘,因此串行通訊的波特率主要由T1的溢出率和SMOD值決定。9.4.2串行口控制寄存器單片機的串行口是可編程的,結(jié)構(gòu)圖中的SMOD等電子開關(guān)的選擇都需要通過將控制字寫入預(yù)定的特殊功能寄存器SCON(串行口控制寄存器)和PCON(電源控制寄存器)來實現(xiàn)的。下面分別對這二個寄存器進行介紹,以便為串行口的編程打下基礎(chǔ)?;啬夸浺?串行口控制寄存器SCONSCON是串行口的主要設(shè)置寄存器,位于特殊功能寄存器SFR區(qū)的98H單元,可以按位尋址,其控制字格式如下圖所示:SCON各位的含義如下:SM0和SM1(SCON.7、SCON.6):串行口工作方式選擇位。對應(yīng)可選四種工作方式,如下表所示:SM0SM1方式說明波特率000移位寄存器固定fosc/1201110位異步收發(fā)(8位數(shù)據(jù))可變10211位異步收發(fā)(9位數(shù)據(jù))固定fosc/64或fosc/3211311位異步收發(fā)(9位數(shù)據(jù))可變表串行口工作方式設(shè)置

SM2(SCON.5):多機通訊控制位主要用于方式2和方式3(含9位數(shù)據(jù))。如果設(shè)置接收機的SM2=1,則接收機允許多機通訊。多機通訊協(xié)議規(guī)定:1.當(dāng)單片機工作在方式2和方式3,并且SM2=1時,如果第9位數(shù)據(jù)為1,說明本幀為地址幀,如果第9位數(shù)據(jù)為0,說明本幀為數(shù)據(jù)幀。2.如果SM2=0,接收一幀數(shù)據(jù)后,不管第9位是1還是0,即不管是地址還是數(shù)據(jù),都將接收的數(shù)據(jù)送SBUF中,并置接收標(biāo)志RI為1,提出接收中斷申請。多機通訊過程如下:(1)當(dāng)一片單片機(稱為主機)與多片單片機(稱為分機,每個分機預(yù)先定義一個地址,即機號)進行多機通訊時,先將所有的從機SM2置為1。(2)當(dāng)主機要和某分機(如1號機)通信時,先發(fā)送一個地址幀,即該從機的機號(如1號機),并使第9位(TB8)為1(表示地址)。3.由于所有從機的SM2=1,所以所有的從機都接收數(shù)據(jù),并且每接收一個數(shù)據(jù),就判斷該數(shù)據(jù)的第9位(RB8)是否為1,如果為1,表明該數(shù)據(jù)是地址,再判斷該地址是否是本機地址,如果是,表明主機將要和本機通信,將本機的SM2設(shè)為0,作好接收數(shù)據(jù)準(zhǔn)備;如果RB8=0,表明是數(shù)據(jù),本機對該數(shù)據(jù)不予理睬。由以上分析可知,只有1號從機經(jīng)地址比較后匹配,將SM2設(shè)置為0,作好接收數(shù)據(jù)準(zhǔn)備,其它分機由于地址不匹配,SM2保持為1。此時主機和1號分機就建立了通訊聯(lián)系。4.主機繼續(xù)發(fā)送數(shù)據(jù),并設(shè)置TB8為0(表明是數(shù)據(jù)),此時由于1號機的SM2=0,不管接收到的數(shù)據(jù)第9位是1還是0,都將數(shù)據(jù)接收下來送SBUF,而其它分機由于SM2=1,數(shù)據(jù)接收后還要判斷接收到的數(shù)據(jù)第9位是1還是0,由于第9位為0,對該數(shù)據(jù)不予理睬。所以只有主機和1號機之間進行通訊。多機通訊過程REN(SCON.4):允許接收控制位,相當(dāng)于串行接收的控制開關(guān),REN=1,允許接收,REN=0,禁止接收,所以,如果要使單片機能接收數(shù)據(jù),必須在初始化時使REN=1。TB8(SCON.3):發(fā)送數(shù)據(jù)的第9位,在方式2和方式3中,根據(jù)數(shù)據(jù)的需要由軟件置1或清0,它可作為奇偶校驗位,也可在多機通訊中作為發(fā)送地址幀或數(shù)據(jù)幀的標(biāo)志位,如果TB8=1,表明該幀是地址,如果TB8=0,表明該幀是數(shù)據(jù)。在方式0和方式1中,該位未使用。RB8(SCON.2):接收數(shù)據(jù)的第9位,在方式2和方式3中,接收的第9位數(shù)據(jù)放RB8。TI(SCON.1):發(fā)送中斷標(biāo)志,在一幀數(shù)據(jù)發(fā)送完后被自動置位。在方式0中串行發(fā)送到第8位數(shù)據(jù)結(jié)束或其它方式中發(fā)送到停止位時由硬件自動置1,它可由軟件查詢。該標(biāo)志同時向中斷系統(tǒng)提出申請,表明數(shù)據(jù)已經(jīng)發(fā)送完,單片機響應(yīng)該中斷后,該標(biāo)志不會自動清0,必須由軟件清0,以免再次中斷。SCON各位介紹RI(SCON.0):接收中斷標(biāo)志在接收到一幀數(shù)據(jù)后被自動置位。在方式0中串行接收到第8位數(shù)據(jù)結(jié)束或其它方式中接收到停止位時由硬件自動置1,它可由軟件查詢。該標(biāo)志同時向中斷系統(tǒng)提出申請,表明一幀數(shù)據(jù)已經(jīng)成功接收完畢,要求CPU取走該數(shù)據(jù),單片機響應(yīng)該中斷,并取走該數(shù)據(jù)后,該標(biāo)志不會自動清0,必須由軟件清0,以免再次中斷。在中斷系統(tǒng)中,發(fā)送標(biāo)志TI和接收標(biāo)志RI共用同一個中斷源,CPU事先并不知產(chǎn)生的串行口中斷是由發(fā)送標(biāo)志TI還是接收標(biāo)志RI引起,所以在全雙工通訊中,必須由軟件來判別。復(fù)位時,SCON所有位清0?;啬夸浂?PCON(電源控制寄存器)

PCON中只有D7位SMOD與串行通訊有關(guān),由結(jié)構(gòu)圖可知,在方式1、方式2、方式中決定移位時鐘是否需要增倍,當(dāng)SMOD=1,波特率提高一倍。但必須注意,PCON不能按位單獨對SMOD進行設(shè)置,只能以字節(jié)尋址方式對PCON寄存器進行設(shè)置。電源控制寄存器PCON9.4.3串行口的工作方式一、方式0

方式0為移位寄存器工作方式,主要用于擴展并行輸入或輸出口,解決單片機I/O端口不夠的問題。數(shù)據(jù)由RXD引腳輸入或輸出,同步移位時鐘由TXD引腳輸出。發(fā)送和接收均為8位數(shù)據(jù),低位在先,高位在后。波特率較高,固定為fosc/12。該方式不適用于二個8051之間的直接數(shù)據(jù)通訊,但可以通過外接移位寄存器來實現(xiàn)單片機的I/0口擴展。1.方式0輸出(發(fā)送)

對發(fā)送數(shù)據(jù)緩沖器SBUF寫入一個數(shù)據(jù),就啟動了串行口方式0的發(fā)送過程:由RXD輸出第一位數(shù)據(jù)D0給串入并出移位寄存器的數(shù)據(jù)輸入端,同時內(nèi)部定時邏輯以機器周期的速率由TXD輸出移位時鐘給串入并出移位寄存器的時鐘端。這樣經(jīng)過8個機器周期后,發(fā)送的數(shù)據(jù)全部由發(fā)送SBUF移出到串入并出移位寄存器的并行數(shù)據(jù)輸出端,并置發(fā)送標(biāo)志TI為1,實現(xiàn)了輸出I/O口的擴展。2.方式0輸入(接收)

當(dāng)SCON中的接收允許位REN=1,同時使接收中斷標(biāo)志RI=0,就啟動了串行口方式0的接收過程:當(dāng)需要輸入外部數(shù)據(jù)時,由單片機的P1.0腳輸出低電平,控制并入串出移位寄存器74LS165的SH/LD端,裝入要輸入的數(shù)據(jù),然后使單片機的P1.0為高電平,使移位寄存器74LS165的SH/LD為高電平,工作于移位寄存器工作方式,這樣在TXD管腳以機器周期為速率的移位時鐘驅(qū)動下,將數(shù)據(jù)由RXD管腳輸入到單片機的接收緩沖器SBUF中,同時置中斷標(biāo)志RI為1。如要再次接收數(shù)據(jù),必須由軟件將RI清0。二、方式1

串行口工作為方式1時,為十位數(shù)據(jù)的異步通訊方式,TXD為數(shù)據(jù)發(fā)送引腳,RXD為接收數(shù)據(jù)引腳,傳送一幀數(shù)據(jù)的格式如下圖所示,其中1位起始位,8位數(shù)據(jù)位,一位停止位。1方式1輸出當(dāng)執(zhí)行一條寫SBUF指令時,就啟動了串行口發(fā)送過程。在發(fā)送移位時鐘(由波特率確定,可變)的同步下,從TXD引腳先送出起始位,然后送出8位數(shù)據(jù),最后是停止位。一幀十位數(shù)據(jù)發(fā)送完后,中斷標(biāo)志TI置1。方式1的發(fā)送時序如下圖所示,方式1的波特率由T1的溢出率決定。2.方式1輸入方式1的接收時序如下圖所示。當(dāng)用軟件置REN=1時,接收器以所選擇波特率16倍的速率采樣RXD引腳電平,當(dāng)檢測到RXD引腳輸入電平發(fā)生負(fù)跳變時,則說明已經(jīng)檢測到起始位,將其移入接收移位寄存器,并開始依次接收這一幀的其它數(shù)據(jù)位。在接收過程中,數(shù)據(jù)從移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時,控制電路進行最后一次移位。當(dāng)RI=0時,將接收到的8位數(shù)據(jù)裝入接收SBUF中,并置RI=1,向CPU請求中斷。三、方式2和方式3

串行口工作為方式2和方式3時為十一位數(shù)據(jù)異步通訊方式,TXD為數(shù)據(jù)發(fā)送引腳,RXD為接收數(shù)據(jù)引腳,傳送一幀數(shù)據(jù)的格式如下圖所示。其中1位起始位,8位數(shù)據(jù)位和1位附加位(發(fā)送時為SCON中的TB8,接收時為RB8),1位停止位。方式2的波特率固定為fosc/64或fosc/32,而方式3的波特率由定時器T1的溢出率決定。1.方式2和方式3輸出當(dāng)CPU執(zhí)行一條寫SBUF指令時,就啟動了串行口發(fā)送過程。在發(fā)送移位時鐘的同步下,從TXD引腳先送先送出起始位,然后送出9位數(shù)據(jù)(含1位附加位TB8),最后是停止位。一幀十一位數(shù)據(jù)發(fā)送完后,中斷標(biāo)志TI置1。方式2和方式3的發(fā)送時序如下圖所示,方式2的波特率固定,方式3的波特率由T1的溢出率決定。2.方式2和方式3輸入方式1的接收時序如下圖所示。當(dāng)用軟件置REN=1時,接收器以所選擇波特率的16倍速率采樣RXD引腳電平,當(dāng)檢測到RXD引腳輸入電平發(fā)生負(fù)跳變時,則說明已經(jīng)檢測到起始位,將其移入接收移位寄存器,并開始依次接收這一幀的其它數(shù)據(jù)位。在接收過程中,數(shù)據(jù)從移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時,控制電路進行最后一次移位。當(dāng)RI=0,且SM2=0(或接收到第9位數(shù)據(jù)為1)時,將接收到的9位數(shù)據(jù)的前8位數(shù)據(jù)裝入接收SBUF中,第9位進入RB8,并置RI=1,向CPU請求中斷。四、波特率的計算在串行通訊中,收發(fā)雙方對發(fā)送和接收數(shù)據(jù)的速率必須事先約定。通過軟件編程可對單片機串行口的工作方式和波特率等進行設(shè)置。其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可變的,由T1的溢出率決定。由于移位時鐘的來源不同,各種方式的波特率計算公式也不相同。方式0的波特率=fosc/12,速度最快,一般用于I/O端口擴展。方式1的波特率=(/32)·T1溢出率方式2的波特率=(

/64)·fosc。方式3的波特率=(/32)·T1溢出率當(dāng)T1作為波特率發(fā)生器時,最典型的用法是使T1工作在自動重裝初值的方式2,這時的溢出率取決于TH1中的計數(shù)值。

T1溢出率=fosc/(12×(256-TH1))

表9-2常用的串行口波特率以及各種參數(shù)選取表

串行口foscMHz定時器T1串行口工作方式波特率(b/s)SMODC/T工作方式初值工作方式1和方式362.5K11202FFH19.2K111.059202FDH9600011.059202FDH4800011.059202FAH2400011.059202F4H1200011.059202E8H19.2K1602FEH96001602FDH48000602FDH24000602FAH12000602F3H6000602E6H110060272H五、串行口的初始化在使用串行口之前,必須根據(jù)事先約定的通訊協(xié)議對其進行初始化,主要包括設(shè)置產(chǎn)生波特率的定時器T1,串行口控制和中斷控制。具體步驟如下:

1.由晶振頻率fosc,串行口的工作方式和波特率,查表9-2,得到定時器的工作方式和初值,以及串行口SMOD的值。

2.對T1進行初始化。包括設(shè)置T1的工作方式(編程TMOD寄存器),裝載TL1和TH1,并啟動T1。

3.對串行口進行初始化。包括串行口的工作方式(編程SCON寄存器和PCON寄存器中SMOD位)。

4.串行口工作在中斷方式時,要進行中斷初始化設(shè)置(編程IE、IP寄存器)9.5單片機串行通訊設(shè)計

9.5.1單片機與單片機之間串行通訊這個任務(wù)要求在二塊單片機試驗板(二個同學(xué)一組)之間通過圖9-4的接口電路連接實現(xiàn)單片機通訊,利用矩陣式鍵盤來實現(xiàn)數(shù)據(jù)輸入和發(fā)送,具體要求如下:按鍵K1~K5為發(fā)送數(shù)據(jù)輸入鍵,對應(yīng)的鍵值0~4作為發(fā)送數(shù)據(jù),K6為發(fā)送功能鍵,先由K1~K5確定要發(fā)送的數(shù)據(jù),按下K6實現(xiàn)發(fā)送功能,將要發(fā)送的數(shù)據(jù)發(fā)送到另一塊單片機試驗板將其顯示出來。本程序在第八章按鍵程序的基礎(chǔ)上增加了串行通訊程序段組成,程序中的陰影部分指令即為實現(xiàn)串行通訊功能有關(guān)的指令。波特率設(shè)定為1200b/s,使用串口方式1進行通訊。串行口初始化步驟如下:1.由fosc=6MHz,波特率為1200b/s,串行口工作于方式1,查表9-2,得到T1的工作于方式2,初值為F3H,串行口SMOD位為0。2.T1初始化。包括設(shè)置T1的工作方式為2(編程TMOD寄存器),裝載TL1和TH1初值F3H,并啟動T1。指令如下:

MOVTMOD,#20H;T1工作于定時工作方式2

MOVTH1,#0f3H;裝載TH1初值F3H

MOVTL1,#0f3H;裝載TL1初值F3H

SETBTR1;啟動T13.對串行口進行初始化。包括串行口的工作方式1(編程SCON寄存器和PCON寄存器中SMOD位)。

MOVPCON,#00H;設(shè)置SMOD位為0,由于PCON不能位尋址,所以采取字節(jié)方式進行設(shè)置。

MOVSCON,#50H;設(shè)置串行口的工作方式為1。4.串行口工作在中斷方式,要進行中斷初始化設(shè)置(編程IE、IP寄存器)。

SETBES;開串行口中斷

SETBEA;開總中斷串行口程序流程圖

主程序流程圖

串行中斷子程序

串行口程序流程圖

按鍵子程序

串行口程序清單

編寫完整的程序清單如下,程序中30H單元為顯示緩沖區(qū),保存需顯示的數(shù)據(jù),40H為鍵值暫存單元,41H為列值暫存單元,42H為行值暫存單元,50H單元為接收數(shù)據(jù)暫存單元。ORG0000HAJMPMAINORG0023H;串行口中斷入口地址AJMPCHKZD;跳到串行口中斷程序ORG0050HMAIN:MOVTMOD,#20H;T1工作于定時工作方式2

MOVTH1,#0f3H;裝載TH1初值F3H

MOVTL1,#0f3H;裝載TL1初值F3H

SETBTR1;啟動T1

MOVPCON,#00H;設(shè)置SMOD位為0

MOVSCON,#50H;設(shè)置串行口的工作方式為1

SETBES;開串行口中斷

SETBEA;開總中斷

MOV30H,#00H;顯示緩沖區(qū)清0

MOV40H,#00H;鍵值暫存單元清0

MOV41H,#00H;列值暫存單元清0

MOV42H,#00H;行值暫存單元清0MOV50H,#00H;接收數(shù)據(jù)暫存單元清0MAINHUI:ACALLKEY;調(diào)用按鍵處理子程序

ACALLXIANSHI;調(diào)用顯示子程序

AJMPMAINHUI;反復(fù)執(zhí)行KEY:;鍵處理子程序

MOVP2,#11111000B;將列線全設(shè)為0,行線全設(shè)為1,數(shù)碼管熄滅

MOVA,P2;P2口鍵盤狀態(tài)送入累加器A

ANLA,#00011000B;取出P2.3,P2.4位,,行線狀態(tài)

CJNEA,#00011000B,DYS;如果行線不全為1,表示有鍵按下

AJMPKEYHUI;無鍵按下,鍵處理子程序返回DYS:ACALLXIANSHI;延時去抖動

MOVA,P2;

ANLA,#00011000B;取出P2.3,P2.4位,行線狀態(tài)

CJNEA,#00011000B,PANLIE

;如果行線不全為1,表示確實有鍵按下,跳去判斷哪一列

AJMPKEYHUI;無鍵按下,表示只是干擾或抖動PANLIE:MOVP2,#11111110B;將第0列設(shè)為0,判斷是否第0列

MOVA,P2;P2口鍵盤狀態(tài)送入累加器A

ANLA,#00011000B;取出P2.3,P2.4位,行線狀態(tài)

CJNEA,#00011000B,LIE0

;如果行線不全為1,表示該列有鍵按下,跳到LIE0處

MOVP2,#11111101B;判斷是否第1列

MOVA,P2

ANLA,#00011000B

CJNEA,#00011000B,LIE1

MOVP2,#11111011B;判斷是否第2列

MOVA,P2

ANLA,#00011000B

CJNEA,#00011000B,LIE2

AJMPKEYHUI

;所有列線無鍵按下,跳到鍵處理子程序返回LIE0:MOV41H,#00H;保存列值0

MOV42H,A;保存行值,此時A中為行線的狀態(tài),暫存到42H單元

AJMPDENDAI;跳到等待按鍵彈起LIE1:MOV41H,#01H;保存列值1

MOV42H,AAJMPDENDAILIE2:MOV41H,#02H;保存列值2

MOV42H,ADENDAI:ACALLXIANSHI;等待按鍵彈起,在等待時調(diào)用顯示程序作延時,防止按鍵按下時數(shù)碼管熄滅

MOVP2,#11111000B;將列線全設(shè)為0,行線全設(shè)為1,數(shù)碼管熄滅

MOVA,P2ANLA,#00011000BCJNEA,#00011000B,DENDAI

;行線不全為1,表示按鍵未彈起,繼續(xù)等待

MOVA,42H;取出保存的行值,判具體是哪一行

JNBACC.3,HANG0JNBACC.4,HANG1AJMPKEYHUIHANG0:MOV42H,#00H;第0行,42H單元送0

AJMPQJZ;跳到求鍵值QJZ處HANG1:MOV42H,#01H;第1行,42H單元送1QJZ:MOVA,42H;求出按鍵數(shù)值,鍵值=行值×列數(shù)+列值

MOVB,#03H;B中為列數(shù)

MULAB;行值×列數(shù)

ADDA,41H;加列值

CJNEA,#05H,ZANCUN;判斷是否功能鍵K6,不是跳到鍵值保存ZANCUN處

MOVA,40H;是K6鍵,將上一次按鍵的鍵值發(fā)送出去

MOVSBUF,AAJMPKEYHUIZANCUN:MOV40H,A;將鍵值送40H單元暫存

MOV30H,40H;將鍵值送顯示單元顯示

KEYHUI:RET;鍵處理子程序返回串行中斷程序:CHKZD:JBRI,JS;判斷是否接收中斷

CLRTI;是發(fā)送中斷,清除發(fā)送中斷

AJMPCHZDH;跳到串行中斷返回JS:MOVA,SBUF;取出接收到的數(shù)據(jù)

MOV50H,A;接收的數(shù)據(jù)放50H單元暫存起來以便處理

MOV30H,50H;接收的數(shù)據(jù)放30H單元顯示

CLRRI;清除接收中斷,準(zhǔn)備下一次接收CHZDH:RETIXIANSHI:;顯示子程序

SETBP2.7;第二個數(shù)碼管亮

CLRP2.6;第一個數(shù)碼管熄滅

MOVA,30H;取出顯示數(shù)據(jù)

ANLA,#0FH;取出顯示值的個位(即低四位)

ACALLCHABIAO;調(diào)用查表顯示程序

ACALLDELAY;調(diào)用延時程序

SETBP2.6;第二個數(shù)碼管滅

CLRP2.7;第一個數(shù)碼管熄亮

MOVA,30H;取出顯示數(shù)據(jù)

ANLA,#0F0H;取出顯示值的十位(即高四位)

SWAPA;高、低四位對調(diào),以便于查表取段碼

ACALLCHABIAO;調(diào)用查表顯示程序

ACALLDELAY;調(diào)用延時程序

RET;顯示子程序返回CHABIAO:;查表子程序

MOVDPTR,#TABLE1;DPTR用于保存表地址

MOVCA,@A+DPTR;查表指令

MOVP1,A;將取得的段碼送到P1口顯示

RET;查表子程序返回DELAY:;二層循環(huán)延時子程序

MOVR7,#0FHLOOP2:MOVR6,#0FFHLOOP1:DJNZR6,LOOP1DJNZR7,LOOP2RETTABLE1:DB0COH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

9.5.2單片機與PC機串行通訊一、任務(wù)分析這個任務(wù)要求實現(xiàn)PC機和單片機之間的串行通訊,在PC機上用VB語言編寫程序?qū)崿F(xiàn)數(shù)據(jù)發(fā)送。在PC機界面上單擊命令按鈕將數(shù)據(jù)通過串口和RS-232轉(zhuǎn)換芯片發(fā)送給單片機。單片機接收到數(shù)據(jù)后,將其在數(shù)碼管上顯示出來,設(shè)通訊格式為波特率1200b/s,八位數(shù)據(jù)位,不要校驗位,一位停止位。二、RS-232C標(biāo)準(zhǔn)接口總線以及單片機與PC機串行通訊硬件設(shè)計

RS-232是EIA(美國電子工業(yè)協(xié)會)于1962年制定的標(biāo)準(zhǔn)。RS表示EIA的“推薦標(biāo)準(zhǔn)”,232為標(biāo)準(zhǔn)編號,1969年修訂為RS-232C。RS-232C定義了串行設(shè)備之間進行通訊的物理接口標(biāo)準(zhǔn),包含機械特性、功能特性、電氣特性幾方面的內(nèi)容。1.機械特性完整的RS-232C接口規(guī)定使用25針連接器,連接器的尺寸及每個插針的排列位置都有明確的定義。但一般應(yīng)用中并不一定用到RS-232C標(biāo)準(zhǔn)的全部信號線,所以在實際應(yīng)用中常常使用9針連接器代替25針連接器。9針連接器引腳排列如右圖所示。圖中所示為陽頭定義,通常連于計算機COM口。2.功能特性RS-232C9針接口的主要信號線的功能定義如表9-3所示插針序號信號名稱功能信號方向(以PC機和單片機通訊為例)2TXD發(fā)送數(shù)據(jù)(串行輸出)PC機將數(shù)據(jù)發(fā)送給單片機3RXD接收數(shù)據(jù)(串行接收)PC機接收單片機發(fā)送來的數(shù)據(jù)5SGND信號接地表9-3RS-232C9針接口主要信號線功能

3.電氣特性

RS-232C采用負(fù)邏輯電平,規(guī)定DC(-3V~-15V)為邏輯1,DC(+3V~+15V)為邏輯0。而-3V~+3V為過渡區(qū),不作定義,如下圖所示。RS-232C的邏輯電平與常用的TTL和CMOS電平不兼容,因此要實現(xiàn)它們之間的通訊,必須外加電平轉(zhuǎn)移電路,實現(xiàn)彼此之間的電平轉(zhuǎn)換。一般RS-232C的通訊距離為幾十米,傳輸速率小于20Kb/s。

4.RS-232C與TTL電平轉(zhuǎn)換電路如上所述,PC機的RS-232接口與單片機的串行口不能直接對接,必須進行電平轉(zhuǎn)換,常用的轉(zhuǎn)換芯片有MAX232等,下面介紹MAX232芯片功能和接口電路。MAX232芯片是MAXIM公司生產(chǎn)的、包含二路接收器和驅(qū)動器的電平轉(zhuǎn)換芯片。它通過內(nèi)部的電源電壓變換器,可以把單片機端的TTL電平信號變換為RS-232C接口的邏輯電平信號。所以采用該芯片的串行通訊電路只需單一的+5V電源供電,而無需象某些其它芯片一樣,還需提供額外的±12V電源,其實用性更強,加之價格適中,硬件接口電路簡單,所以被廣泛使用。該芯片的引腳圖如右圖所示。

MAX232芯片的典型應(yīng)用電路圖如右圖所示,內(nèi)部包含+5V到+10V的倍壓器,將+5V電壓升壓為+10V,還包含有+10V至-10V的電壓反相器,將+10V的直流電壓轉(zhuǎn)換為-10V,從而有效的解決了由單電源+5V轉(zhuǎn)換為±10V電源的要求,電路中電容C1、C2、C3、C4稱為升壓電容。電路中T1、T2二路將TTL/CMOS電平轉(zhuǎn)換為RS-232電平,電路中R1、R2二路將RS-232電平轉(zhuǎn)換為TTL/CMOS電平采用MAX232接口芯片組成的單片機與PC機串行通訊接口電路

三.單片機程序編寫

波特率設(shè)為1200b/s,使用串口方式1進行通訊,程序中30H單元為顯示緩沖區(qū),保存需顯示的數(shù)據(jù),40H為鍵值暫存單元,41H為列值暫存單元,42H為行值暫存單元,50H單元為接收數(shù)據(jù)暫存單元。ORG0000HAJMPMAINORG0023H;串行口中斷入口地址AJMPCHKZD;跳到串行口中斷程序ORG0050HMAIN:MOVPCON,#00H;設(shè)置SMOD位為0

MOVTMOD,#20H;T1工作于定時工作方式2

MOVTH1,#0F3H;裝載TH1初值F3H

MOVTL1,#0F3H;裝載TL1初值F3HSETBTR1;啟動T1

MOVSCON,#50H;設(shè)置串行口的工作方式為1

SETBES;開串行口中斷

SETBEA;開總中斷

MOV40H,#00H;接收數(shù)據(jù)緩沖單元BBB:ACALLKEY;調(diào)用按鍵處理子程序

MOV30H,40H;接收數(shù)據(jù)送顯示緩沖單元

ACALLXIANSHI;調(diào)用顯示子程序

AJMPBBB;反復(fù)工作KEY:;鍵處理子程序

MOVP2,#11111000B;將列線全設(shè)為0,行線全設(shè)為1,數(shù)碼管熄滅

MOVA,P2;P2口鍵盤狀態(tài)送入累加器A

ANLA,#00011000B;取出P2.3,P2.4位,行線狀態(tài)

CJNEA,#00011000B,DYS;如果行線不全為1,表示有鍵按下

AJMPKEYHUI;無鍵按下,鍵處理子程序返回DYS:ACALLXIANSHI;延時去抖動

MOVA,P2

ANLA,#00011000B;取出P2.3,P2.4位,行線狀態(tài)

CJNEA,#00011000B,PANLIE

;如果行線不全為1,表示確實有鍵按下,跳去判斷哪一列

AJMPKEYHUI;無鍵按下,鍵處理子程序返回PANLIE:MOVP2,#11111110B;將第0列設(shè)為0,判斷是否第0列

MOVA,P2;P2口鍵盤狀態(tài)送入累加器A

ANLA,#00011000B;取出P2.3,P2.4位,行線狀態(tài)

CJNEA,#00011000B,LIE0MOVP2,#11111101B;判斷是否第1列

MOVA,P2ANLA,#00011000BCJNEA,#00011000B,LIE1MOVP2,#11111011B;判斷是否第2列

MOVA,P2ANLA,#00011000BCJNEA,#00011000B,LIE2AJMPKEYHUI;所有列線無鍵按下,跳到鍵處理子程序返回LIE0:MOV41H,#00H;保存列值0

MOV42H,A;保存行值,

AJMPDENDAI;跳到等待按鍵彈起LIE1:MOV41H,#01H;保存列值1

MOV42H,AAJMPDENDAILIE2:MOV41H,#02H;保存列值2

MOV42H,ADENDAI:ACALLXIANSHI;等待按鍵彈起,在等待時調(diào)用顯示程序作延時,防止按鍵按下時數(shù)碼管熄滅

MOVP2,#11111000B;將列線全設(shè)為0,行線全設(shè)為1,數(shù)碼管熄滅

MOVA,P2ANLA,#00011000BCJNEA,#00011000B,DENDAI;行線不全為1,表示按鍵未彈起

MOVA,42H;取出保存的行值,判具體是哪一行

JNBACC.3,HANG0JNBACC.4,HANG1AJMPKEYHUIHANG0:MOV42H,#00H;第0行,42H單元送0

AJMPQJZ;跳到求鍵值QJZ處HANG1:MOV42H,#01H;第1行,42H單元送1QJZ:MOVA,42H;求出按鍵數(shù)值,鍵值=行值×列數(shù)+列值

MOVB,#03H;B中為列數(shù)

MULAB;行值×列數(shù)

ADDA,41H;加列值

CJNEA,#05H,ZANCUN;判斷是否功能鍵K6,不是跳到鍵值保存ZANCUN處

MOVA,40H;是K6鍵,將上一次按鍵的鍵值發(fā)送出去

MOVSBUF,AAJMPKEYHUIZANCUN:MOV40H,A;將鍵值送40H單元暫存

MOV30H,40H;將鍵值送顯示單元顯示

KEYHUI:RET;鍵處理子程序返回串行中斷程序CHKZD:JBRI,JS;判斷是否接收中斷

CLRTI;是發(fā)送中斷,清除發(fā)送中斷

AJMPCHZDH;跳到串行中斷返回JS:MOVA,SBUF;取出接收到的數(shù)據(jù)

CLRC;清除借位標(biāo)志

SUBBA,#30H;將接收的ASCII碼恢復(fù)為數(shù)字,因為數(shù)字的ASCII碼和數(shù)字之間相差30H,即數(shù)字=數(shù)字的ASCII碼-30H

MOV50H,A;接收的數(shù)字送40H單元

CHZDH:CLRRI;清除接收標(biāo)志

RETI;鍵處理子程序返回XIANSHI:;顯示子程序

SETBP2.7;第二個數(shù)碼管亮

CLRP2.6;第一個數(shù)碼管熄滅

MOVA,30H;取出顯示數(shù)據(jù)

ANLA,#0FH;取出顯示值的個位(即低四位)

ACALLCHABIAO;調(diào)用查表顯示程序

ACALLDELAY;調(diào)用延時程序

SETBP2.6;第二個數(shù)碼管滅

CLRP2.7;第一個數(shù)碼管熄亮

MOVA,30H;取出顯示數(shù)據(jù)

ANLA,#0F0H;取出顯示值的十位(即高四位)

SWAPA;高、低四位對調(diào),以便于查表取段碼

ACALL

溫馨提示

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

評論

0/150

提交評論