微處理器程序設(shè)計(jì)-以51單片機(jī)為例 課件 項(xiàng)目4 智慧校園一卡通應(yīng)用及維護(hù) 任務(wù)4.1_第1頁
微處理器程序設(shè)計(jì)-以51單片機(jī)為例 課件 項(xiàng)目4 智慧校園一卡通應(yīng)用及維護(hù) 任務(wù)4.1_第2頁
微處理器程序設(shè)計(jì)-以51單片機(jī)為例 課件 項(xiàng)目4 智慧校園一卡通應(yīng)用及維護(hù) 任務(wù)4.1_第3頁
微處理器程序設(shè)計(jì)-以51單片機(jī)為例 課件 項(xiàng)目4 智慧校園一卡通應(yīng)用及維護(hù) 任務(wù)4.1_第4頁
微處理器程序設(shè)計(jì)-以51單片機(jī)為例 課件 項(xiàng)目4 智慧校園一卡通應(yīng)用及維護(hù) 任務(wù)4.1_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

項(xiàng)目四智慧校園一卡通應(yīng)用及維護(hù)

馮蓉珍

《微處理器程序設(shè)計(jì)》教學(xué)目標(biāo)和技能要求知識(shí)目標(biāo)1、理解微處理器的串行通信原理;2、掌握串行通信寄存器設(shè)置;3、掌握串行通信中斷服務(wù)程序編寫。能力目標(biāo)1、能靈活設(shè)計(jì)串行口電路實(shí)現(xiàn)通信;2、能靈活針對(duì)硬件通信電路、編寫串行通信應(yīng)用程序;3、能對(duì)雙機(jī)通信電路進(jìn)行正確連線;4、能靈活應(yīng)用MAX232進(jìn)行單片機(jī)與PC之間的串行口通信;5、能靈活應(yīng)用通信的標(biāo)準(zhǔn)接口實(shí)現(xiàn)通信;6、能使用編譯器下載程序到單片機(jī)中。教學(xué)目標(biāo)和技能要求任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)目標(biāo)通過本任務(wù)的設(shè)計(jì)和制作,要求學(xué)生利用微處理器之間的串行通信,實(shí)現(xiàn)智慧校園一卡通數(shù)據(jù)的獲取,并根據(jù)卡里余額控制學(xué)生是否具備用水用電條件。培養(yǎng)學(xué)生利用串行通信解決實(shí)際問題的能力,從而能更好地應(yīng)用與維護(hù)一卡通數(shù)據(jù)。知識(shí)準(zhǔn)備1、串行通信基礎(chǔ)

實(shí)際應(yīng)用中,不但計(jì)算機(jī)與外部設(shè)備之間需要進(jìn)行信息交換,在計(jì)算機(jī)之間也需要交換信息,這些信息的交換稱為“通信”知識(shí)準(zhǔn)備1.1串行通信與并行通信

通信的基本方式分為并行通信和串行通信兩種。

并行通信,即數(shù)據(jù)的各位同時(shí)傳送;其特點(diǎn)是傳輸速度快,但當(dāng)距離較遠(yuǎn)、位數(shù)又多時(shí)通信線路復(fù)雜且成本高。

串行通信,即數(shù)據(jù)一

位一位的順序傳送。其特點(diǎn)是通信線路簡(jiǎn)單,只要一對(duì)傳輸線就可實(shí)現(xiàn)通信,大大降低系統(tǒng)成本,尤其適合遠(yuǎn)距離通信,不過其傳輸速度慢。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)圖4-1并行通信和串行通信示意圖

知識(shí)準(zhǔn)備1.2單工通信與雙工通信

按照數(shù)據(jù)的傳送方向,串行通信可分為單工、半雙工和全雙工三種制式,如圖所示。

在單工制式下,通信一方只具備發(fā)送器,另一方只具備接收器,數(shù)據(jù)只能按照一個(gè)固定的方向傳送,圖(a)所示。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)圖4-2單工通信、半雙工通信、全雙工通信三種通信制式

知識(shí)準(zhǔn)備1.2單工通信與雙工通信

在半雙工制式下,通信雙方都具備發(fā)送器和接收器,但同一時(shí)刻只能有一方發(fā)送,另一方接收;兩個(gè)方向上的數(shù)據(jù)傳送不能同時(shí)進(jìn)行,其收發(fā)開關(guān)一般由軟件控制的電子開關(guān),如圖(b)所示。

在全雙工制式下,通信雙方都具備發(fā)送器和接收器,可以同時(shí)發(fā)送和接收,即數(shù)據(jù)可以在兩個(gè)方向上同時(shí)傳送,如圖(c)所示。

在實(shí)際應(yīng)用中,盡管多數(shù)串行通信電路接口具有全雙工功能,但一般情況下,只工作于半雙工制式下,這種用法簡(jiǎn)單、實(shí)用。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備1.3異步通信和同步通信

按照串行數(shù)據(jù)的始終控制方式,串行通信可以分為異步通信和同步通信兩類。1.3.1異步通信(AsynchronousCommunication)

在異步通信中,數(shù)據(jù)通常以字符為單位組成字符幀傳送的。字符幀由發(fā)送端一幀一幀地發(fā)送,每一幀數(shù)據(jù)是低位在前、高位在后,通過傳輸線由接收端一幀一幀的接收。

發(fā)送端和接收端分別使用各自獨(dú)立的時(shí)鐘來控制數(shù)據(jù)的發(fā)送和接收,這兩個(gè)時(shí)鐘彼此獨(dú)立,互不同步。

異步通信設(shè)備簡(jiǎn)單、便宜,但由于需要傳輸其字符幀中的開始位和停止位,因此異步通信的數(shù)據(jù)開銷比例較大,傳輸效率較低。

異步通信有兩個(gè)比較重要的指標(biāo):字符幀格式和波特率。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備(1)字符幀字符幀也稱為數(shù)據(jù)幀,由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位四部分組成。如圖所示。(i)起始位:位于字符幀開頭,只占一位,為邏輯低電平,用于向接收設(shè)備表示發(fā)送端開始發(fā)送一幀信息。(ii)數(shù)據(jù)位:緊跟在起始位之后,根據(jù)情況可以取5位、6位、7位或8位,低位在前,高位在后。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)圖4-3串行通信字符幀格式

知識(shí)準(zhǔn)備(iii)奇偶校驗(yàn)位:位于數(shù)據(jù)位之后,僅占一位,用來表示串行通信中采用奇校驗(yàn)還是偶校驗(yàn),由用戶編程決定。(iv)停止位:位于字符幀最后,為邏輯高電平。通??扇?位、1.5位或2位,用于向接收端表示一幀字符信息已經(jīng)發(fā)送完,也為發(fā)送下一幀做準(zhǔn)備。

停止位之后緊接著可以是下一個(gè)字符幀的起始位,也可以是空閑位(邏輯1高電平),意味著線路處于等待狀態(tài)。(2)波特率(BaudRate)

波特率為每秒鐘傳送二進(jìn)制數(shù)碼的位數(shù),單位為b/s(位/秒),或bps(bitpersecond的縮寫)。波特率用于表示數(shù)據(jù)傳輸?shù)乃俣?,波特率越高,?shù)據(jù)傳輸?shù)乃俣仍娇?。通常異步通信的波特率?0-19200bps。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備1.3.2同步通信(SynchronousCommunication)

同步通信是以數(shù)據(jù)塊方式傳輸數(shù)據(jù)。通常在面向字符的同步傳輸中,其幀的格式由三部分組成,即由若干個(gè)字符組成的數(shù)據(jù)塊,在數(shù)據(jù)塊前加上1~2個(gè)同步字符SYN,在數(shù)據(jù)塊的后面根據(jù)需要加入若干個(gè)校驗(yàn)字符CRC,如圖所示。

同步通信方式的同步由每個(gè)數(shù)據(jù)塊前面的同步字符實(shí)現(xiàn)。同步字符的格式和數(shù)量可以根據(jù)需要約定。接收端在檢測(cè)到同步字符之后,便確認(rèn)開始接收有效數(shù)據(jù)字符。

與異步通信不同的是,同步方式需要提供單獨(dú)的時(shí)鐘信號(hào),且要求接收器時(shí)鐘和發(fā)送器時(shí)鐘嚴(yán)格保持同步。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)圖4-4同步通信數(shù)據(jù)格式知識(shí)準(zhǔn)備1.4串行口的連接方法

根據(jù)通信距離的不同,串行口的電路連接方式有三種。如果距離很近,只要兩根信號(hào)線(TXD,RXD)和一根地線(GND)就可以實(shí)現(xiàn)互聯(lián);為了提高通信距離,并且距離在15m以內(nèi)可以采用RS-232接口實(shí)現(xiàn);如果是遠(yuǎn)距離通信,可通過調(diào)制解調(diào)器進(jìn)行通信互聯(lián)。2、串行接口

51單片機(jī)內(nèi)部集成了1~2個(gè)可編程通用異步串行通信接口(UniversalAsychronousReceive/Transmitter,即UART),采用全雙工制式,可以同時(shí)進(jìn)行數(shù)據(jù)的接收和發(fā)送,也可以做同步移位寄存器。該串行通信接口有四種工作方式,可以通過軟件編程設(shè)置為8位、10位、11位的數(shù)據(jù)幀格式,并能設(shè)置各種波特率。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備2.1串行口結(jié)構(gòu)51系列單片機(jī)的串行口主要由兩個(gè)獨(dú)立的串行數(shù)據(jù)緩沖寄存器SBUF(一個(gè)發(fā)送緩沖寄存器,一個(gè)接收緩沖寄存器)、串行口控制寄存器SCON、輸入移位寄存器PCON及若干控制門電路組成?;窘Y(jié)構(gòu)如圖所示。圖4-5串行口內(nèi)部結(jié)構(gòu)圖任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備2.2特殊功能寄存器(1)串行口數(shù)據(jù)緩沖寄存器SBUF串行口數(shù)據(jù)緩沖寄存器SBUF用于存放發(fā)送/接收的數(shù)據(jù);(2)串行口控制寄存器SCON串行口控制寄存器SCON用于控制串行口的工作方式和工作狀態(tài),可進(jìn)行位尋址,復(fù)位時(shí),SCON各位均清0。波特率發(fā)生器由定時(shí)器T1構(gòu)成,波特率與單片機(jī)晶振頻率、定時(shí)器T1初值、串行口工作方式以及波特率選擇位SMOD有關(guān)。表4-1為SCON的格式;表4-2為SCON各位的含義。表4-1串行口控制寄存器SCON的格式位序號(hào)D7D6D5D4D3D2D1D0位符號(hào)SM0SM1SM2RENTB8RB8TIRI任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備表4-2串行口控制寄存器SCON各位的含義控制位說明SM0SM1工作方式選擇位SM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/1201方式110位UART可變10方式211位UARTfosc/64或fosc/3211方式311位UART可變SM2多機(jī)通信控制位在方式0中,SM2應(yīng)為0。.在方式1處于接收時(shí),若SM2=1,則只有當(dāng)接收到有效的停止位后,RI才置1。在方式2、3處于接收時(shí),若SM2=1,且接收到的第9位數(shù)據(jù)RB8為0時(shí),不激活RI;若SM2=1,且RB8=1時(shí),置RI=1。在方式2、3處于發(fā)送方式時(shí),若SM2=0,則無論接收到的第9位RB8為0還是1,TI、RI都以正常方式被激活。REN允許串行接收位由軟件置位或清零。REN=1,允許接收;REN=0,禁止接收。TB8發(fā)送數(shù)據(jù)的第9位在方式2、3中由軟件置位或清零。一般可做奇偶校驗(yàn)位。在多機(jī)通信中,可作為區(qū)別地址幀或數(shù)據(jù)幀的標(biāo)志位,一般約定地址幀時(shí)TB8為1,數(shù)據(jù)幀時(shí)TB8為0。RB8接收數(shù)據(jù)的第9位功能同TB8。TI發(fā)送中斷標(biāo)志位在方式0中,發(fā)送完8位數(shù)據(jù)后,由硬件置位;在其他方式中,在發(fā)送停止位之初由硬件置位。因此,TI=1是發(fā)送完一幀數(shù)據(jù)的標(biāo)志,其狀態(tài)既可供軟件查詢使用,也可請(qǐng)求中斷。TI位必須由軟件清0。RI接收中斷標(biāo)志位在方式0中,接收完8位數(shù)據(jù)后,由硬件置位;在其他方式中,當(dāng)接收到停止位時(shí)該位由硬件置1。因此,RI=1是接收完一幀數(shù)據(jù)的標(biāo)志,其狀態(tài)既可供軟件查詢使用,也可請(qǐng)求中斷。RI位也必須由軟件清0。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備(3)電源控制寄存器PCON

電源控制寄存器PCON是一個(gè)特殊的功能寄存器,它主要用于電源控制方面。另外,PCON中的最高位SMOD位稱為波特率加倍位,用于對(duì)串行口的波特率控制。它的格式如表4-3所示。表4-3PCON格式D7D6D5D4D3D2D1D0SMON---GF1GF0PDIDL其中,最高位SMON位串行口波特率選擇位。當(dāng)SMOD=1時(shí),串行口工作方式1、方式2、方式3時(shí)的波特率加倍。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備2.3串行口工作方式(1)方式0

在方式0下,串行口做同步移位寄存器使用,其波特率固定為Fosc/12。串行數(shù)據(jù)從RXD(P3.0)端輸入或輸出,同步移位脈沖由TXD(P3.1)送出。這種方式用于擴(kuò)展I/0端口。(2)方式1

在方式1下,串行口為波特率可調(diào)的10位通用異步接口UART,發(fā)送或接受的一幀信息包括1位起始位、8位數(shù)據(jù)位和1位停止位。數(shù)據(jù)幀格式如圖4-6所示。圖4-6方式1下的10位幀格式任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備

發(fā)送時(shí),當(dāng)數(shù)據(jù)寫入發(fā)送緩沖器SBUF后,啟動(dòng)發(fā)送器發(fā)送,數(shù)據(jù)從TXD輸出。當(dāng)發(fā)送完一幀數(shù)據(jù)后,置中斷標(biāo)志TI為1.方式1的波特率取決于定時(shí)器T1的溢出率和PCON中的SMOD位。具體算法參見2.4小節(jié)的介紹。接收時(shí),REN置1,允許接收,串行口采樣RXD,當(dāng)采樣由1到0跳變時(shí),確認(rèn)是起始位“0”,開始接收一幀數(shù)據(jù)。當(dāng)RI=0,且停止位為1或SM2=0時(shí),停止位進(jìn)入RB8位,同時(shí)置中斷標(biāo)志RI;否則信息將丟失。所以,采用方式1接收時(shí),應(yīng)先用軟件清除RI或SM2標(biāo)志。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備(3)方式2

在方式2下,串行口為11位UART,傳送波特率與SMOD有關(guān)。發(fā)送或接收的一幀數(shù)據(jù)包括1位起始位、8位數(shù)據(jù)位、1位可編程位(用于奇偶校驗(yàn))和1位停止位。其幀格式如圖4-7所示。圖4-7方式2下的11位幀格式任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備

發(fā)送時(shí),先根據(jù)通信協(xié)議由軟件設(shè)置TB8,然后將要發(fā)送的數(shù)據(jù)寫入SBUF,啟動(dòng)發(fā)送。寫SBUF語句,除了將8位數(shù)據(jù)送入SBUF外,同時(shí)還將TB8裝入發(fā)送移位寄存器的第9位,并通知發(fā)送控制器進(jìn)行一次發(fā)送,一幀信息即從TXD發(fā)送。在發(fā)送完一幀信息后,TI被自動(dòng)置1,在發(fā)送下一幀信息之前,TI必須在中斷服務(wù)程序或查詢程序中清零。

當(dāng)REN=1時(shí),允許串行口接收數(shù)據(jù)。當(dāng)接收器采樣到RXD端負(fù)跳變,并判斷起始位有效后,數(shù)據(jù)有RXD端輸入,開始接收一幀信息。當(dāng)接收器接收到第9位數(shù)據(jù)后,若同時(shí)滿足以下條件:RI=0和SM2=0或接收到的第9位數(shù)據(jù)為1,則接收數(shù)據(jù)有效,將8位數(shù)據(jù)送入SBUF,第9位送入RB8,并置RI=1。若不滿足上述條件,則信息丟失。(4)方式3

方式3為波特率可變的11為UART通信方式,除了波特率以外,方式3和方式2完全相同。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備

2.4波特率設(shè)置方法51單片機(jī)串行口通過編程可以有4種工作方式,其中方式0和方式2的波特率是固定的,方式1和方式3的波特率可變,由定時(shí)器T1的溢出率決定。(1)方式0和方式2在方式0下,波特率為時(shí)鐘頻率的1/12,即fosc/12,固定不變。在方式2下,波特率取決于PCON中的SMOD的值,當(dāng)SMOD=0時(shí),波特率為fosc/64;當(dāng)SMOD=1時(shí),波特率為fosc/32,即波特率=2SMOD*fosc/64。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備(2)方式1和方式3

在方式1和方式3下,波特率由定時(shí)器T1的溢出率和SMOD共同決定,即波特率=2SMOD*T1溢出率/32。其中T1的溢出率取決于定時(shí)器T1的計(jì)數(shù)速率和定時(shí)器的預(yù)置值。當(dāng)定時(shí)器T1設(shè)置在定時(shí)方式時(shí),定時(shí)器T1的溢出率=(T1計(jì)數(shù)速率)/(產(chǎn)生溢出所需機(jī)器周期數(shù)),T1計(jì)數(shù)速率=fosc/12;產(chǎn)生溢出所需機(jī)器周期數(shù)=定時(shí)器最大計(jì)數(shù)值M-計(jì)數(shù)初值X,所以,串行口接口工作在方式1和方式3時(shí)的波特率計(jì)算公式為:波特率=(2SMOD/32)*(fosc/(12*(256-X)))計(jì)算初值X=256-(2SMOD/32)*(fosc/(12*波特率))表4-4列出了常用的波特率及獲得方法。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備表4-4常用的波特率及獲得方法波特率fosc(MHz)SMOD定時(shí)器T1C/T方式初始值方式0:1Mbps12XXXX方式2:375kbps121XXX方式1、3:62.5kbps11.05921020xff19.2kbps11.05921020xfd9.6kbps11.05920020xfd4.8kbps11.05920020xfa2.4kbps11.05920020xf41.2kbps11.05920020xe8137.5kbps11.05920020x1d110bps60020x72110bps120010xfeeb任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備綜上所述,設(shè)置串行口波特率的步驟如下:(i)寫TMOD,設(shè)置定時(shí)器T1的工作方式;(ii)給TH1和TL1賦值,設(shè)置定時(shí)器T1的初值X;(iii)置位TR1,啟動(dòng)定時(shí)器T1工作,即啟動(dòng)波特率發(fā)生器。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備3、串行通信程序設(shè)計(jì)串行口通信程序的編程主要包括以下幾個(gè)部分:(1)串行口的初始化編程

串行口的初始化編程主要是對(duì)串行口控制寄存器SCON、電源控制寄存器PCON中的SMOD進(jìn)行設(shè)置及串行口波特率發(fā)生器T1的初始化。若涉及中斷系統(tǒng),則還需要對(duì)中斷允許控制寄存器IE及中斷優(yōu)先級(jí)控制寄存器IP進(jìn)行設(shè)定。

一般步驟為:設(shè)定串行口工作方式;若波特率加倍時(shí),設(shè)定SMOD;波特率可變時(shí),設(shè)定定時(shí)器T1工作方式;計(jì)算T1的初始值;禁止定時(shí)器T1中斷;啟動(dòng)T1,產(chǎn)生波特率;若使用中斷方式,開放CPU中斷,開串行口中斷;根據(jù)需要設(shè)定串行口中斷優(yōu)先級(jí)為高。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備例4-1若fosc=6MHz,波特率為2400bps,SMOD=1,請(qǐng)進(jìn)行初始化編程。解:1)設(shè)定串行口工作方式為1波特率可調(diào)的10位UART,則SM0=0,SM1=1;即SCON=01000000B=0X40;2)假設(shè)波特率加倍,則設(shè)定SMOD=1;3)設(shè)定定時(shí)器T1工作方式2,計(jì)算TH1,TL1初始值TMOD=00100000B=0X20;利用公式:波特率=(2SMOD/32)*(fosc/(12*(256-X)));推出2400=(2/32)*(6*106)/(12*(256-X))=(1/16)*(500000/(256-X))得到X=243D=0xf3;即TH1=0XF3;TL1=0XF3;如果在表格中有相應(yīng)數(shù)據(jù)可以直接查表,也可以利用51單片機(jī)波特率計(jì)算器(網(wǎng)上可以下載)直接計(jì)算。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備4)禁止T1中斷,設(shè)置ET1=0;5)啟動(dòng)T1產(chǎn)生波特率,設(shè)置TR1=1;6)開放CPU中斷,設(shè)置EA=1;7)開串行口中斷,設(shè)置ES=1;8)根據(jù)需要設(shè)定串行口中斷優(yōu)先級(jí)為高,設(shè)置PS=1。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備2)發(fā)送和接收程序設(shè)計(jì)

通信過程包括發(fā)送和接收兩部分,一次通信軟件也包括發(fā)送程序和接收程序,它們分別位于發(fā)送機(jī)和接收機(jī)中。發(fā)送程序和接收程序的設(shè)計(jì)一般采用查詢和中斷兩種方法。

異步串行通信是以幀為基本信息單位傳送的。在每次發(fā)送或接收完一幀數(shù)據(jù)后,將由硬件使SCON中的TI或RI的狀態(tài)是否有效來判斷一次數(shù)據(jù)發(fā)送或接收是否完成如圖4-8所示。在發(fā)送程序中,首先是將數(shù)據(jù)發(fā)送出去,然后查詢是否發(fā)送完畢,再?zèng)Q定是否發(fā)下一幀數(shù)據(jù)。即“先發(fā)后查”。在接收程序中,首先判斷是否接收到一幀數(shù)據(jù),然后保存這一幀數(shù)據(jù),即“先查后收”。

如果采用中斷方法編程,則將TI、RI作為中斷申請(qǐng)標(biāo)志。如果設(shè)置系統(tǒng)允許串行口中斷,則每當(dāng)TI或RI產(chǎn)生一次中斷申請(qǐng),就表示一幀數(shù)據(jù)發(fā)送或接收完成。CPU響應(yīng)一次中斷請(qǐng)求,執(zhí)行一次中斷服務(wù)程序,在中斷服務(wù)程序中完成數(shù)據(jù)的發(fā)送或接收,如圖4-9所示。其中發(fā)送程序中必須有一次發(fā)送數(shù)據(jù)的操作,目的是為了啟動(dòng)第一次中斷,之后的所有數(shù)據(jù)的發(fā)送均在中斷服務(wù)程序中完成。而接收程序中,所有的數(shù)據(jù)接收操作均在中斷服務(wù)程序程序中完成。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備(a)發(fā)送程序(b)接收程序

圖4-8查詢方式程序流程圖任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備(a)發(fā)送程序任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備(b)接收程序圖4-9中斷方式程序流程圖任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備例4-2用查詢方式將甲機(jī)中數(shù)據(jù)塊“950706”傳遞給乙機(jī)。解:設(shè)波特率為9600bps,由T1工作方式2,fosc=11.0596MHz,SMOD=0;查表8-4得到TH1=0XFD;TL1=0XFD;設(shè)定串行口工作方式1,10位UART。發(fā)送數(shù)據(jù)參考程序如下:unsignedchara[6]={9,5,0,7,0,6};//發(fā)送的數(shù)據(jù)放到一數(shù)組中voidmain(){TMOD=0X20;//定時(shí)器T1工作方式2TH1=0XFd;//波特率為9600bpsTL1=0XFd;PCON=0X00;//波特率不加倍SCON=0X40;//串行口工作方式1,10位UARTTR1=1;//啟動(dòng)T1,產(chǎn)生波特率for(i=0;i<6;i++){SBUF=a[i];//把數(shù)組中的數(shù)據(jù)循環(huán)發(fā)送到SBUF中 while(!TI){;}//查詢TI是否為1,數(shù)據(jù)被取走,TI會(huì)變成1 TI=0;//一旦數(shù)據(jù)被取走,則軟件給TI清零 delay(100);//調(diào)用延時(shí)程序,以確保數(shù)據(jù)被對(duì)方接收后再發(fā)下一幀數(shù)據(jù)。}while(1);}任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備接收數(shù)據(jù)參考程序如下:unsignedchari,receive;voidmain(){TMOD=0X20;//定時(shí)器T1工作方式2TH1=0XFD;//波特率為9600bpsTL1=0XFD;PCON=0X00;//波特率不加倍SCON=0X40;//串行口工作方式1,10位UARTTR1=1;//啟動(dòng)T1,產(chǎn)生波特率//EA=1;//CPU開中斷,因?yàn)橥ㄟ^查詢接收數(shù)據(jù),所以不需要開中斷,EA默認(rèn)值為0//REN=1;//允許接收數(shù)據(jù),通過查詢接收數(shù)據(jù),不需要利用中斷,所以此句可取消,REN默認(rèn)值為0i=0;//數(shù)組元素下標(biāo)從0開始while(1){while(RI){;}//查詢RI是否為1RI=0;//如果RI為1,則清RIReceive[i]=SBUF;//把接收到的數(shù)據(jù)放入數(shù)組receive中i++;//數(shù)組元素下標(biāo)加1if(i>=6){i=0;}//當(dāng)數(shù)組元素滿6個(gè),則數(shù)組下標(biāo)從0開始}}任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)知識(shí)準(zhǔn)備接收數(shù)據(jù)參考程序如下:unsignedchari,receive;voidmain(){TMOD=0X20;//定時(shí)器T1工作方式2TH1=0XFD;//波特率為9600bpsTL1=0XFD;PCON=0X00;//波特率不加倍SCON=0X40;//串行口工作方式1,10位UARTTR1=1;//啟動(dòng)T1,產(chǎn)生波特率//EA=1;//CPU開中斷,因?yàn)橥ㄟ^查詢接收數(shù)據(jù),所以不需要開中斷,EA默認(rèn)值為0//REN=1;//允許接收數(shù)據(jù),通過查詢接收數(shù)據(jù),不需要利用中斷,所以此句可取消,REN默認(rèn)值為0

i=0;//數(shù)組元素下標(biāo)從0開始while(1){while(RI){;}//查詢RI是否為1RI=0;//如果RI為1,則清RIReceive[i]=SBUF;//把接收到的數(shù)據(jù)放入數(shù)組receive中

i++;//數(shù)組元素下標(biāo)加1if(i>=6){i=0;}//當(dāng)數(shù)組元素滿6個(gè),則數(shù)組下標(biāo)從0開始}}任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施子任務(wù)一4.1.3獲取智慧校園一卡通數(shù)據(jù)

獲取智慧校園一卡通卡號(hào)數(shù)據(jù),通過單片機(jī)的雙機(jī)通信實(shí)現(xiàn)一卡通卡號(hào)的獲取。假設(shè)一卡通卡號(hào)950706通過刷卡后發(fā)送到了甲機(jī)中(刷卡機(jī)連接單片機(jī)甲機(jī)串口,RFID卡卡號(hào)被刷卡機(jī)讀取到后送入到單片機(jī)甲的緩存中,關(guān)于刷卡讀取數(shù)據(jù)部分內(nèi)容將在RFID技術(shù)課程中進(jìn)行學(xué)習(xí),本案例中利用甲機(jī)模擬刷卡機(jī)),甲機(jī)發(fā)送此數(shù)據(jù)給乙機(jī),乙機(jī)接收到數(shù)據(jù)后,在6個(gè)數(shù)碼管上顯示出來,并且回發(fā)一個(gè)數(shù)據(jù)0xaa給甲機(jī),甲機(jī)收到此數(shù)據(jù)后點(diǎn)亮一個(gè)綠色LED,以表示雙機(jī)通信成功。為表示甲機(jī)正在給乙機(jī)發(fā)送數(shù)據(jù),我們可以在甲機(jī)上連接一個(gè)紅色LED,發(fā)送數(shù)據(jù)期間此LED點(diǎn)亮,數(shù)據(jù)發(fā)送完畢,此燈熄滅。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施

通過本任務(wù)的設(shè)計(jì)與制作,加深學(xué)生理解串行通信與并行通信方式的異同,要求學(xué)生掌握串行通信的重要指標(biāo)、字符幀和波特率,并熟練應(yīng)用單片機(jī)串行通信接口的使用方法。

本任務(wù)在實(shí)施過程中,學(xué)生重點(diǎn)掌握串行通信的初始化方法,掌握串行通信中斷服務(wù)程序的編程方法,熟悉中斷的執(zhí)行過程。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施1、硬件電路設(shè)計(jì)(1)任務(wù)分析

根據(jù)本任務(wù)的工作內(nèi)容和要求,甲機(jī)需要發(fā)送卡號(hào)數(shù)據(jù)950706給乙機(jī),這串?dāng)?shù)據(jù)可以存放在一字符數(shù)組中,循環(huán)發(fā)送6次,將數(shù)組中的數(shù)據(jù)通過串行口利用中斷方法或者查詢方式發(fā)送給乙機(jī)。乙機(jī)可以通過中斷方式,也可利用查詢方式接收數(shù)據(jù)。一旦數(shù)據(jù)接收成功,則通過串口發(fā)送0xaa給甲機(jī),以表示成功接收完成甲機(jī)發(fā)來的數(shù)據(jù)。甲機(jī)接收到0xaa后點(diǎn)亮綠色LED。甲機(jī)和乙機(jī)均需要完成接收和發(fā)送數(shù)據(jù)操作。

乙機(jī)需要連接6個(gè)數(shù)碼管,顯示從甲機(jī)發(fā)送來的數(shù)據(jù)。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施(2)電路設(shè)計(jì)

根據(jù)任務(wù)分析,乙機(jī)的6個(gè)數(shù)碼管采用動(dòng)態(tài)連接方式,各位共陽極數(shù)碼管相應(yīng)的段選控制端并聯(lián)字一起,由P1口控制,用八同相三態(tài)緩沖器/線驅(qū)動(dòng)器74LS245驅(qū)動(dòng)。各位數(shù)碼管的公共端,也稱為“位選端”,由單片機(jī)的P2口通過六個(gè)反相驅(qū)動(dòng)器74LS04驅(qū)動(dòng)。甲機(jī)作為發(fā)送器,乙機(jī)作為接收器,將甲機(jī)的TXD端連接乙機(jī)的RXD端;甲機(jī)的RXD端連接乙機(jī)的TXD端。需要注意的是兩個(gè)系統(tǒng)必須共地。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施

在甲機(jī)的P1.0口連接綠色LED,一旦甲乙兩個(gè)單片機(jī)成功通信后會(huì)點(diǎn)亮此綠色LED;在甲機(jī)的P1.1口連接紅色LED,在甲乙兩機(jī)進(jìn)行串行通信期間,此燈點(diǎn)亮,其余時(shí)間此燈熄滅。硬件電路如圖4-10所示。注意,此電路圖中晶振電路和復(fù)位電路均沒體現(xiàn),在仿真環(huán)境中默認(rèn)含有此兩部分的電路,可以正常運(yùn)行,在開發(fā)板中不能省略此兩部分電路。任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)圖4-10雙機(jī)通信硬件電路圖任務(wù)實(shí)施2、軟件編程甲機(jī)程序設(shè)計(jì)

在主程序中首先進(jìn)行串行口參數(shù)初始化以及其它參數(shù)的初始化,主要包括:波特率、串行口工作方式、CPU中斷允許、串行口中斷允許,允許接收數(shù)據(jù)等參數(shù)的設(shè)置。銀行動(dòng)態(tài)密碼存放在send數(shù)組中,在主程序中利用查詢方式循環(huán)6次將6個(gè)字符發(fā)送給乙機(jī)。每發(fā)送一個(gè)字符需要延時(shí)一段時(shí)間,以確保數(shù)據(jù)發(fā)送的數(shù)據(jù)被對(duì)方接收。主要代碼如下:任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施voidmain(){TMOD=0X20;//定時(shí)1工作方式2TH1=0XFd;//波特率為9600bpsTL1=0XFd;PCON=0X00;//波特率不加倍SCON=0X40;//串行口工作方式1,10位UARTTR1=1;//啟動(dòng)T1,產(chǎn)生波特率EA=1;//運(yùn)行CPU中斷ES=1;//運(yùn)行串行口中斷REN=1;//運(yùn)行接收數(shù)據(jù)i=0;//發(fā)送數(shù)組下標(biāo)從0開始gled=1;//綠色led熄滅rled=1;//紅色led熄滅for(i=0;i<6;i++){//循環(huán)6次將動(dòng)態(tài)密碼發(fā)送出去任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施for(i=0;i<6;i++){//循環(huán)6次將動(dòng)態(tài)密碼發(fā)送出去SBUF=a[i];//發(fā)送第i個(gè)字符 while(!TI){;}//查詢TI是否為1 TI=0;

rled=0;//點(diǎn)亮發(fā)送數(shù)據(jù)指示燈 delay(100);//延時(shí)}

rled=1;//熄滅紅色ledwhile(1);}任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施甲機(jī)利用中斷方式接收乙機(jī)發(fā)來的握手信號(hào)0xaa,中斷服務(wù)程序如下:voidmyrece()interrupt4using0{//串行口中斷服務(wù)程序if(RI){//緩沖器中有數(shù)據(jù)receivedata=SBUF;//取出緩沖器中的數(shù)據(jù)if(receivedata==0xaa){//判斷接收到的數(shù)據(jù)是否為雙方約定的握手信號(hào)gled=0;//如果是握手信號(hào),則點(diǎn)亮綠色led,表示串行通信成功rled=1;//紅色led熄滅}elsegled=1;//否則,綠色led熄滅,以示串行通信失敗}RI=0;//請(qǐng)RI標(biāo)志}任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施乙機(jī)程序設(shè)計(jì)乙機(jī)利用串行口中斷接收數(shù)據(jù),串行口中斷服務(wù)程序主要代碼如下:voidmyserial()interrupt4using0{//串行口中斷服務(wù)程序if(RI){//緩沖器中有數(shù)據(jù)到來rec[i]=SBUF;//將接收到的數(shù)據(jù)存放到一數(shù)組中 i++;//數(shù)組元素下標(biāo)加1 RI=0;//清RI標(biāo)志 if(i>=6){//數(shù)組下標(biāo)超過6

i=0;//將下標(biāo)清0lable=1;//一旦6個(gè)字符全部收到,置標(biāo)志label為1,表示可以發(fā)送握手信號(hào)給甲機(jī) }}}任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施乙機(jī)將接收到的6位動(dòng)態(tài)密碼,通過6個(gè)數(shù)碼管輪流顯示,利用視覺暫留效應(yīng),只要輪流顯示足夠快,人的眼睛會(huì)認(rèn)為6個(gè)數(shù)碼管是同時(shí)顯示的。輪流顯示方法為,首先第一個(gè)位選端置1,第一個(gè)數(shù)碼管顯示動(dòng)態(tài)密碼的第一個(gè)數(shù)字,然后第二個(gè)位選端置1,第二個(gè)數(shù)碼管顯示動(dòng)態(tài)密碼的第二個(gè)數(shù)字,依次類推,直到顯示第6個(gè)數(shù)字。上述顯示過程在主程序中循環(huán)進(jìn)行。顯示部分主要代碼如下:任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施voiddisplay(){//數(shù)碼管輪流顯示s=0x01;//s=00000001bP2=~s;//P20為0,則通過反相器后第一個(gè)位選端為高電平for(j=0;j<6;j++){//循環(huán)6次P1=table[rec[j]];//將接收到的數(shù)字對(duì)應(yīng)table數(shù)組中段碼賦給P1端口delay(10);//延時(shí) s=s<<1;//左移一位 P2=~s;//輪流置位選端為高電平}}任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施乙機(jī)主程序主要完成初始化設(shè)置,并循環(huán)顯示接收到的數(shù)據(jù),一旦6位動(dòng)態(tài)密碼全部接收完畢,則通過查詢方式向甲機(jī)發(fā)送握手信號(hào)0xaa。主要代碼如下:voidmain(){TMOD=0X20;//定時(shí)器1工作方式2TH1=0XFD;TL1=0XFD;//設(shè)置波特率為9600bpsPCON=0X00;//波特率不加倍SCON=0X40;//串行口通信方式1TR1=1;//啟動(dòng)T1,產(chǎn)生波特率EA=1;//允許CPU中斷ES=1;//允許串行口中斷REN=1;//允許接收數(shù)據(jù)

lable=0;//6個(gè)數(shù)據(jù)接收完畢標(biāo)志位,0為未接收完畢

i=0;//接收數(shù)據(jù)數(shù)組下標(biāo)從0開始

任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施delay(100);while(1){display();//顯示接收到的數(shù)據(jù) if(lable){//6個(gè)字符全部接收完畢 SBUF=0XAA;//發(fā)送握手信號(hào)0xaa給甲機(jī) while(!TI);//查詢TI是否為1 TI=0;//清TIlable=0;//清數(shù)據(jù)接收完畢標(biāo)志位 }}}任務(wù)4.1獲取智慧校園一卡通數(shù)據(jù)任務(wù)實(shí)施4.1.4能力拓展

甲機(jī)發(fā)送的數(shù)據(jù)由和甲機(jī)連接的矩陣鍵盤按鍵值決定。甲機(jī)將矩陣鍵盤中的按鍵值通過串口發(fā)送給乙機(jī),乙機(jī)接收到數(shù)據(jù)后在數(shù)碼管中顯示,同時(shí)對(duì)此數(shù)加1

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論