《單片機應(yīng)用實訓(xùn)教程》課件第2章_第1頁
《單片機應(yīng)用實訓(xùn)教程》課件第2章_第2頁
《單片機應(yīng)用實訓(xùn)教程》課件第2章_第3頁
《單片機應(yīng)用實訓(xùn)教程》課件第2章_第4頁
《單片機應(yīng)用實訓(xùn)教程》課件第2章_第5頁
已閱讀5頁,還剩225頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章MCS-51單片機綜合應(yīng)用實訓(xùn)實訓(xùn)2.1單片機多功能實訓(xùn)電路的設(shè)計與測試實訓(xùn)2.2單片機溫度控制器的設(shè)計與調(diào)試實訓(xùn)2.3單片機步進電機控制器的設(shè)計與調(diào)試

實訓(xùn)2.4接觸式IC卡讀寫器的設(shè)計與調(diào)試

實訓(xùn)2.1單片機多功能實訓(xùn)電路的設(shè)計與測試

1.實訓(xùn)目的

(1)了解單片機應(yīng)用系統(tǒng)的基本組成,通過分析多功能實訓(xùn)電路的組成,熟練掌握單片機實訓(xùn)電路的工作原理、各部分的連接方式與完成功能。

(2)掌握對硬件電路進行測試的基本方法,掌握測試程序的設(shè)計要領(lǐng)。

2.實訓(xùn)設(shè)備與器件實訓(xùn)設(shè)備:單片機集成開發(fā)環(huán)境、多功能實訓(xùn)電路板。

3.項目設(shè)計要求完成基于MCS-51單片機的多功能實訓(xùn)電路,包括8個發(fā)光二極管模擬信號燈的顯示、RAM/ROM擴展電路、LED數(shù)碼顯示、鍵盤電路、模/數(shù)轉(zhuǎn)換電路以及與PC機的接口電路。

4.實訓(xùn)內(nèi)容

1)硬件設(shè)計單片機實訓(xùn)電路主要為教學(xué)配套使用,因此在電路設(shè)計上盡量全面,基本包括了單片機系統(tǒng)的所有部分,以完成各個實訓(xùn)項目。在該電路板中,核心器件是8031單片機芯片,外部擴展了一片EPROM2764、一片RAM6264、一片EEPROM2864A、一片8155、一片ADC0809和MAX232等,這些主要芯片的功能如下所述。

(1)EPROM2764:紫外線可擦除、電可編程的只讀存儲器,通常用于存放編制好的程序和常數(shù)表格。(2)RAM6264:靜態(tài)隨機存儲器,通常用于存放采集到的原始數(shù)據(jù)、處理中的數(shù)據(jù)及最后的結(jié)果。

(3)EEPROM2864A:電可擦除、電可編程的只讀存儲器。它是近年來被廣泛使用的一種只讀存儲器。其主要優(yōu)點是能在應(yīng)用系統(tǒng)中進行在線改寫,并能在斷電情況下保存數(shù)據(jù)而不需要保護電源。它兼有程序存儲器與數(shù)據(jù)存儲器的特點。

(4)8155A:一種可編程的RAM和I/O接口芯片,本實訓(xùn)系統(tǒng)主要用它來作擴展鍵盤和數(shù)碼管顯示的接口。(5)ADC0809:一種8路模擬輸入的8位逐次逼近式A/D轉(zhuǎn)換器件。

(6)MAX232:標準的串行口電平轉(zhuǎn)換器,用來將單片機和PC機聯(lián)系起來。為了方便實訓(xùn),在單片機P1口連接了8個發(fā)光二極管,同時將常用的I/O口、外部中斷、定時器輸入脈沖等引出,具體電路連接參見書末附圖。圖2.1.1多功能實訓(xùn)電路板2)測試程序

(1)電路制作完成后,要通過程序測試系統(tǒng)各部分是否正常工作。要求本實訓(xùn)電路的測試程序運行后,首先點亮P1口連接的8個二極管,以確定電路能否正常工作;再運行鍵盤程序以按鍵查詢。每個按鍵完成相應(yīng)電路的檢測,具體分配如下:

0#~B#鍵:檢測對應(yīng)按鍵是否連接正常,P1口的8個發(fā)光二極管顯示鍵號。

C#鍵:檢測6264的連接,低4位的4個二極管點亮。

D#鍵:檢測2864的連接,高4位的4個二極管點亮。

E#鍵:檢測8155連接的LED,8個LED全部顯示8。

F#鍵:檢測ADC0809的連接,改變電阻R25,LED顯示結(jié)果連續(xù)變化。(2)測試程序流程圖如圖2.1.2所示。圖2.1.2測試程序流程圖(3)源程序。根據(jù)上述思路,編寫源程序如下:

ORG 0000H AJMP MAIN PORT EQU 4400H PORTA EQU 4401H PORTB EQU 4402H PORTC EQU 4403H BUFFO EQU 20H BUFF1 EQU 21H;*************************主程序*******************************

ORG 0100HMAIN:MOV SP,#50H MOV DPTR,#PORT ;8155初始化

MOV A,#03H MOVX @DPTR,A MOV P1,#00H ;點亮8個二極管START:LCALL KEYTEST ;調(diào)用鍵入測試程序

JNZ RETEST SJMP START ;無鍵按下,返回測試,鍵入KEYRETEST:LCALL DELAYLCALL KEYTESTJNZ KEDATA ;若無抖動則查鍵號,否則返回KEYSJMP STARTKEDATA:LCALL SERCH ;調(diào)用鍵號測試程序TEST: CJNE A,#0CH,PR01 AJMP KEY0CPR01: CJNE A,#0DH,PR02 AJMP KEY0DPR02: CJNE A,#0EH,PR03 AJMP KEY0EPR03: CJNE A,#0FH,KEY0toB AJMP KEY0F KEY0toB:MOVP1,A ;0#~B#鍵,鍵號直接送P1口顯示

AJMP STARTKEY0C: MOV A,#0F0H ;C#鍵,檢測6264 MOV DPTR,#1000H MOVX @DPTR,A MOV A,@DPTR ;對1000H單元傳送數(shù)據(jù)

MOV P1,A ;點亮低4位二極管

AJMP START KEY0D: MOV A,#0FH ;D#鍵,檢測2864 MOV DPTR,#3000H MOVX @DPTR,A LCALL DELAY ;調(diào)用延時,等待2864寫入數(shù)據(jù)

MOV A,@DPTR ;對3000H單元傳送數(shù)據(jù)

MOV P1,A ;點亮高4位二極管

AJMP STARTKEY0E:MOV DPTR,#PORTA ;E#鍵,檢測8155連接的LED MOV A,#00H MOVX @DPTR,A ;8個LED全部選中

INC DPTR MOV A,#0FFH MOVX @DPTR,A ;所有段顯示

AJMP STARTKEY0F: ;F#鍵檢測A/D轉(zhuǎn)換芯片

MOV BUFF0,#00H ;顯示緩沖區(qū)清0 MOV BUFF1,#00HSTAR:MOV DPTR,#6000H ;選中0809通道0 MOV A,#00H MOVX @DPTR,A ;啟動A/D轉(zhuǎn)換WAIT:JB P3.3,WAIT ;查詢轉(zhuǎn)換是否結(jié)束

MOVX A,@DPTR ;取轉(zhuǎn)換結(jié)果到A累加器

LCALL SEPR ;調(diào)用拆字子程序

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

AJMP STAR ;重新啟動轉(zhuǎn)換;*************************拆字子程序SEPR****************************;功能:將一個8位二進制數(shù)的高、低4位拆開,分別存入兩個單元;入口參數(shù):A累加器存放待拆分數(shù)據(jù);出口參數(shù):內(nèi)部RAM的BUFF0單元存放低4位數(shù)據(jù);BUFF1單元存放高4位數(shù)據(jù)SEPR: ;略,詳見第1章實訓(xùn)1.5…RET;************************顯示子程序DISP**************************;功能:在最后兩位數(shù)碼管顯示數(shù)字(十六進制);入口參數(shù):內(nèi)部RAM的BUFF0、BUFF1單元,分別存放待顯示的兩個數(shù)字DISP: ;略,詳見第1章實訓(xùn)1.5 RET;************************鍵入測試子程序KEYTEST******************;功能:掃描鍵盤,查詢有無鍵按下;出口參數(shù):累加器A,A=0表示無鍵按下,A≠0表示有鍵按下KEYTEST:;略,詳見第1章實訓(xùn)1.2RET……;************************鍵號測試程序SEARCH*********************;功能:求按鍵的鍵號;出口參數(shù):累加器A中存放鍵號00H~0FHSEARCH: ;略,詳見第1章實訓(xùn)1.2

RET;***********************延時子程序DELAY**********************DELAY:MOV R4,#0FDH ;延時子程序TM0: MOV R5,#0AHTM1: NOP NOP DJNZ R5,TM1 DJNZ R4,TM0 RET END…

5.調(diào)試步驟

(1)與仿真器連接好,加電,觀察電路板電源指示燈是否正常。

(2)輸入源程序,匯編糾錯。

(3)全速運行程序,觀察8個二極管是否點亮,以確定電路能否工作。

(4)依次按下16個鍵,觀察是否顯示正確,有問題時檢查對應(yīng)硬件電路,排除電路故障。

6.實訓(xùn)分析與總結(jié)

1)時鐘和復(fù)位電路時鐘電路用于產(chǎn)生單片機工作所需要的時鐘信號,單片機本身就如一個復(fù)雜的同步時序電路,為了保證同步工作方式的實現(xiàn),電路應(yīng)在惟一的時鐘信號控制下嚴格地按時序進行工作。在MCS-51芯片內(nèi)部有一個高增益反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。而在芯片的外部,XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個穩(wěn)定的自激振蕩器,這就是單片機的時鐘電路,如圖2.1.3所示。圖2.1.3時鐘振蕩電路

一般電容C1和C2取30pF左右,晶體的振蕩頻率范圍是1.2~12MHz,若晶體振蕩頻率高,則系統(tǒng)的時鐘頻率也高,單片機運行速度也就快。MCS-51在通常應(yīng)用的情況下,使用振蕩頻率為6MHz、11.0592MHz或12MHz。在本電路中選用11.0592MHz的晶振。單片機復(fù)位是使CPU和系統(tǒng)中的其他功能部件都處在一個確定的初始狀態(tài),并從這個狀態(tài)開始工作,sPC=0000H,使單片機從第一個單元取指令。無論是在單片機剛開始接上電源時,還是斷電后或者發(fā)生故障后都要復(fù)位。復(fù)位信號通過單片機的第9個引腳RESET接入,常見的是上電復(fù)位和按鍵復(fù)位電路,如圖2.1.4所示。圖2.1.4單片機復(fù)位電路(a)上電復(fù)位電路;(b)按鍵復(fù)位電路2)P1口的應(yīng)用在實訓(xùn)電路中,P1通過反相器74LS240連接了8個發(fā)光二極管,此時P1口作為輸出口,可以用8個二極管來模擬各種信號,以完成各種應(yīng)用程序,例如第1章實訓(xùn)1.2中的交通燈控制器。在測試程序中,首先對這部分進行了試驗。3)片外存儲器的擴展片外存儲器的擴展主要分為數(shù)據(jù)存儲器和程序存儲器。當單片機片內(nèi)RAM容量不夠時,需要擴展數(shù)據(jù)存儲器,往往采用RAM或電可擦除的EEPROM芯片來完成;當單片機程序容量較大,片內(nèi)ROM容量不夠或片內(nèi)無ROM時,需要擴展程序存儲器,往往采用EPROM等芯片來完成。二者擴展的最大容量都為64K。無論RAM還是ROM擴展,在與MCS-51單片機連接時都要接好3個總線:

(1)地址總線AB:由單片機的P0口和P2口提供,P0口通過鎖存器(一般采用74LS373)連接到存儲器芯片的低8位地址,P2口直接一一對應(yīng)地連接高8位地址。(2)數(shù)據(jù)總線DB:MCS-51系列單片機是8位機,所以數(shù)據(jù)線只有8根,片外存儲器也只能使用8位存儲器。單片機P0口的8根口線作為擴展時的數(shù)據(jù)總線,直接連接到所擴展芯片的數(shù)據(jù)線上。

(3)控制總線CB:對于RAM和ROM,控制線是不同的。對于ROM擴展,將單片機的PSEN信號接到ROM的讀選通信號OE上;對于片外RAM擴展,需分別將單片機的和WR信號分別連接到RAM的讀、寫控制信號上。除此以外,存儲器芯片片選信號的連接也至關(guān)重要,它決定了擴展芯片的地址范圍,片選信號一般都由P2口剩余的口線通過譯碼器輸出而得。根據(jù)上述幾個關(guān)鍵點,在實訓(xùn)板中,我們這樣設(shè)計了數(shù)據(jù)存儲器和程序存儲器的擴展,如圖2.1.5所示。圖2.1.5RAM和ROM擴展

在擴展電路中,作為數(shù)據(jù)存儲器的是RAM6264和EEPROM2864,擴展容量一共是16K。作為程序存儲器的是EPROM2764,擴展容量是8K。3個芯片的片選線CE由譯碼器74LS138的輸出決定,74LS138在整個實訓(xùn)電路中的作用都是選通地址,在8155、ADC0809中也用到了74LS138的輸出,請讀者注意分析。根據(jù)圖2.1.5的連接關(guān)系,可確定各芯片的地址范圍如下:因此,數(shù)據(jù)存儲器的地址范圍為6264:0000H~1FFFH2864:2000H~3FFFH程序存儲器的地址范圍為

2764:0000H~1FFFH

在測試程序中,通過對6264的1000H單元以及2864的3000H單元傳送數(shù)據(jù)并顯示,以確定這部分電路是否正常。4)可編程接口芯片8155的擴展

51系列單片機內(nèi)部有4個雙向的并行I/O端口P0~P3,在無片外存儲器擴展的系統(tǒng)中,這4個端口都可以作為準雙向通用I/O口使用。在具有片外擴展存儲器的系統(tǒng)中,通過上述分析我們知道,P0口分時地作為低8位地址線和數(shù)據(jù)線,P2口作為高8位地址線,這時,P0口和部分或全部的P2口無法再作通用I/O口了。P3口具有第二功能,在應(yīng)用系統(tǒng)中也常被使用。因此在大多數(shù)的應(yīng)用系統(tǒng)中,真正能夠提供給用戶使用的只有P1口和部分P2、P3口。所以,MCS-51單片機的I/O端口通常需要擴充,以便和更多的外設(shè)(如顯示器、鍵盤)進行聯(lián)系。表2.1.1地址分配圖2.1.68155接口電路根據(jù)圖2.1.6中的的連接關(guān)系,可以確定地址如下:

此時,8155內(nèi)部RAM的地址范圍為4000H~40FFH,8155各端口的地址為(設(shè)無關(guān)位為0,這些地址都不是惟一的):命令/狀態(tài)口 4400HA口 4401HB口 4402HC口 4403H定時器低字節(jié) 4404H定時器高字節(jié) 4405H5)顯示和鍵盤電路在單片機應(yīng)用系統(tǒng)中,常見的顯示器有LED和LCD,關(guān)于LCD的應(yīng)用在實訓(xùn)1.3中已有介紹。這里只介紹LED和單片機的接口方法,LED在單片機應(yīng)用中有兩種顯示方式:靜態(tài)顯示和動態(tài)顯示。由于動態(tài)顯示占用的資源少,所以被廣泛使用。鍵盤常見的有獨立鍵盤和行列式鍵盤,當按鍵數(shù)量少時,通常采用獨立鍵盤;當按鍵數(shù)較多時,獨立鍵盤占用的I/O口線多,因此采用行列式鍵盤電路。在實際應(yīng)用中,常常把鍵盤和顯示電路做在一起,構(gòu)成實用的顯示鍵盤電路,圖2.1.7即為通過8155連接實現(xiàn)的一種顯示和鍵盤接口電路。圖2.1.7顯示和鍵盤電路

圖2.1.7接有8個共陰極數(shù)碼管、16個按鍵。8個數(shù)碼管的各相同段分別連接在一起,點亮各段的段選碼由8155的PB口輸出提供,每個數(shù)碼管的位選碼由8155的PA口輸出提供。同時,PA口的輸出又作為行列式鍵盤的列線,供鍵盤逐列掃描時使用,鍵盤的行線由8155的PC口輸入電平。因此,可以看出,可編程I/O口芯片81553個端口的功能應(yīng)為:A、B口輸出,C口輸入,在對8155進行初始化時一定要注意。實訓(xùn)中的初始化語句為:MOV DPTR,#4400H ;選中8155命令寄存器MOV A,#03HMOVX@DPTR,A ;寫入命令字6)A/D轉(zhuǎn)換接口電路

A/D轉(zhuǎn)換器用于實現(xiàn)模擬量→數(shù)字量的轉(zhuǎn)換,在本實訓(xùn)電路中連接了A/D轉(zhuǎn)換芯片ADC0809,該芯片可實現(xiàn)8路模擬信號的分時采集。電路板中ADC0809與8051單片機的連接關(guān)系以及分析使用在第1章的實訓(xùn)1.5中已介紹,此處不再贅述。

7)串行通信接口在實際應(yīng)用領(lǐng)域,通常需要PC機和單片機之間進行通信,關(guān)于二者之間的通信原理、電路設(shè)計和應(yīng)用編程,在第1章的實訓(xùn)1.6中作者已進行了詳細的分析,讀者可參考使用。該多功能實訓(xùn)電路板直接引用其連接方法。

7.思考題

(1)單片機時鐘電路和復(fù)位電路的作用是什么?

(2)74LS138的作用是什么?

(3)請仔細查看電路原理圖分析單片機、的連接,總結(jié)哪些外部器件需連接這些信號。

(4)在電路中,信號和ALE的作用是什么?

(5)若在電路中連接液晶LCD,需怎樣實現(xiàn)?請畫出示意圖。

(6)如果在電路中增加D/A轉(zhuǎn)換器件,如何實現(xiàn)?請選擇器件并畫出與單片機的連接原理圖。實訓(xùn)2.2單片機溫度控制器的設(shè)計與調(diào)試

1.實訓(xùn)目的

(1)掌握單線數(shù)字溫度傳感器DS18B20的測量原理、特性以及在溫度測量中的硬件和軟件設(shè)計。

(2)掌握運用開發(fā)系統(tǒng)調(diào)試溫控系統(tǒng)應(yīng)用程序的基本方法。

2.實訓(xùn)設(shè)備與器件實訓(xùn)設(shè)備:單片機集成開發(fā)環(huán)境、綜合實訓(xùn)板、溫控接口板。

3.項目設(shè)計要求用MCS-51單片機設(shè)計一個溫控系統(tǒng)。要求具有對環(huán)境溫度進行實時測量,當外界溫度高于設(shè)定最高溫度時,啟動風(fēng)扇降溫;當外界溫度低于指定最低溫度時,將發(fā)出報警聲。

4.實訓(xùn)內(nèi)容設(shè)計要求:設(shè)計一個溫控系統(tǒng),用二位LED數(shù)碼管顯示測量的實時溫度,可以設(shè)定最高限報警溫度值和最低限報警溫度值。1)硬件設(shè)計溫度測量采用最新的單線數(shù)字溫度傳感器DS18B20,DS18B20是美國DALLAS半導(dǎo)體公司最新推出的一種改進型智能溫度傳感器。與傳統(tǒng)的熱敏電阻相比,它能夠直接讀出被測溫度并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。可以分別在93.75ms和750ms內(nèi)完成9位和12位的數(shù)字量,并且從DS18B20讀出的信息或?qū)懭隓S18B20的信息僅需要一根口線(單線接口)讀寫,溫度變換功率來源于數(shù)據(jù)總線,總線本身也可以向所掛接的DS18B20供電,而無需額外電源。因而,使用DS18B20可使系統(tǒng)結(jié)構(gòu)更趨簡單,可靠性更高。降溫控制系統(tǒng)采用低壓直流電風(fēng)扇。當溫度高于設(shè)定最高限溫度時,啟動風(fēng)扇降溫,當溫度降到指定最高限溫度以下后,風(fēng)扇自動停止運轉(zhuǎn)。

溫控系統(tǒng)的溫度顯示和溫度的設(shè)定直接采用綜合實訓(xùn)板上的顯示和鍵盤。當環(huán)境溫度低于設(shè)定的最低限溫度值時,也采用綜合實訓(xùn)板上的蜂鳴器進行報警。用0#、1#鍵作為溫度最高限、最低限的設(shè)定功能鍵;2#、3#鍵作為溫度值設(shè)定的增加和減小功能鍵。

0#鍵:作為最高限溫度的設(shè)定功能鍵。按一次進入最高限溫度設(shè)定狀態(tài),選擇最高限溫度值后,再按一次確認設(shè)定完成。

1#鍵:作為最低限溫度的設(shè)定功能鍵。按一次進入最低限溫度設(shè)定狀態(tài),選擇最低限溫度值后,再按一次確認設(shè)定完成。

2#鍵:+1功能鍵,每按一次將溫度值加1,范圍為1~99℃。

3#鍵:-1功能鍵,每按一次將溫度值減1,范圍為99~1℃。圖2.2.1溫控系統(tǒng)硬件接線原理圖2)軟件設(shè)計

(1)溫控系統(tǒng)采用模塊化程序結(jié)構(gòu),可以分成以下程序模塊:①系統(tǒng)初始化程序:首先完成變量的設(shè)定、中斷入口的設(shè)定、堆棧、輸入輸出口及外部部件的初始化工作。②主程序MAIN:完成鍵盤掃描、溫度值采集及轉(zhuǎn)換、溫度值的顯示。當溫度值高于設(shè)定最高限時,驅(qū)動風(fēng)扇工作;當溫度值低于設(shè)定最低限時,驅(qū)動蜂鳴器報警。③鍵盤掃描程序KEYSCAN:完成鍵盤的掃描并根據(jù)確定的鍵值執(zhí)行相應(yīng)的功能,主要完成最高溫度、最低溫度的設(shè)定。④溫度采集程序GET_TEMPER:完成DS18B20的初始化并發(fā)出溫度轉(zhuǎn)換命令,經(jīng)過指定時間后讀取轉(zhuǎn)換的溫度值。根據(jù)DS18B20的通信協(xié)議,主機控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過3個步驟:每一次讀寫之前都要對DS18B20進行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進行預(yù)定的操作。復(fù)位要求CPU將數(shù)據(jù)線下拉500μs,然后釋放。DS18B20收到信號后等待16~60μs左右,后發(fā)出60~240μs的存在低脈沖,CPU收到此信號表示復(fù)位成功。⑤溫度轉(zhuǎn)換程序TEMPER_COV:根據(jù)精度要求對采集到的溫度值進行處理并轉(zhuǎn)換成便于顯示的BCD碼值。⑥顯示子程序DISPLAY:顯示實時溫度及設(shè)定溫度值。⑦DS18B20初始化子程序INIT_1820:DS18B20在工作之前必須按照指定的要求完成初始化工作,否則無法正常工作。⑧DS18B20讀寫子程序WRITE_1820、READ_1820、READ_1820T完成對18B20的讀寫功能,其中,READ_1820從DS18B20中讀出一個字節(jié)的數(shù)據(jù),READ_1820T從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù)。⑨延時程序DELAY、DELAY1滿足18B20要求的延時間隔及程序中的延時功能。(2)軟件流程框圖分別如圖2.2.2、2.2.3、2.2.4、2.2.5和2.2.6所示。圖2.2.2主程序流程圖圖2.2.3DS18B20初始化程序流程圖圖2.2.4鍵盤掃描子程序圖2.2.5DS18B20寫入子程序圖2.2.6DS18B20讀取子程序(3)下面給出參考程序。;晶振:12MHz;HIG_TMP EQU 32H ;設(shè)定的最高溫度值LOW_TMP EQU 33H ;設(shè)定的最低溫度值NUB_VAL EQU 34H ;加1、減1的暫存值TEMPER_H EQU 36H ;采集到溫度值的低位TEMPER_L EQU 35H ;采集到溫度值的高位TEMPER_NUM EQU 30H;PORT EQU 4400H ;8155口地址PORTA EQU 4401H ;8155A口地址PORTB EQU 4402H ;8155B口地址PORTC EQU 4403H ;8155C口地址;FLAG1 BIT 00H ;18B20初始化完成標志KEY_MK BIT 08H ;鍵盤按下標志KEY_HMK BIT 09H ;S1鍵按下標志KEY_LMK BIT 0AH ;S2鍵按下標志DISP_MK BIT 0BH;溫度設(shè)定狀態(tài)標志DQ BIT P1.1;

ORG 0000H AJMP START

;

ORG 0030HSTART:

MOV SP,#60H ;設(shè)置堆棧值

MOV IE,#00H MOV TCON,#00H MOV TMOD,#10H MOV DPTR,#PORT ;初始化8155口,A、B輸出C輸入

MOV A,#43H MOVX @DPTR,A SETB DQ SETB P1.2 MOV R0,#20H MOV R1,#20H MOV A,#00HSTART_1:

MOV @R0,A INC R0 DJNZ R1,START_1START_2:

CLR P1.0 CLR P1.2 MOV HIG_TMP,#30H ;初始高溫限值設(shè)為30℃ MOV LOW_TMP,#20H ;初始低溫限值設(shè)為20℃

ACALL RE_CONFIG NOP ACALL INIT_1820 JNB FLAG1,START_2MAIN:

ACALL KEY_SCAN JB KEY_LMK,MAIN1 JB KEY_HMK,MAIN1 ACALL GET_TEMPER ;采集溫度值

ACALL TEMPER_COV ;溫度值轉(zhuǎn)換MAIN1:

ACALL DISPLAY MOV A,TEMPER_NUM CJNE A,HIG_TMP,MAIN2 CLR CMAIN2:

JC MAIN3 SETB P1.2 ;啟動風(fēng)扇

AJMP MAINMAIN3:

CJNE A,LOW_TMP,MAIN4 CLR CMAIN4:

JNC MAIN5 SETB P1.0 ;啟動報警器

AJMP MAINMAIN5:

CLR P1.0 CLR P1.2 AJMP MAIN NOP;讀出轉(zhuǎn)換后的溫度值GET_TEMPER:

SETB DQ ;定時入口GET_TMP1:

LCALLINIT_1820 ;第一步,完成對18B20初始化

JB FLAG1,GET_TMP2 LJMP GET_TMP1 ;若DS18B20不存在,則繼續(xù)初始化GET_TMP2:

LCALLDELAY1 ;延時80μs MOV A,#0CCH ;第二步,ROM命令,跳過ROM匹配——0CC LCALLWRITE_1820

;

MOV A,#44H ;第三步,功能命令,發(fā)出溫度轉(zhuǎn)換命令

LCALLWRITE_1820GET_TMP5:

NOP LCALLDISP3 CLR DQ NOP NOP SETB DQ ;釋放數(shù)據(jù)線

MOV R3,#4 ;延時14μs DJNZ R3,$ CLR C MOV C,DQ JNC GET_TMP5GET_TMP3:

LCALL INIT_1820 ;第一步,對18B20初始化

JB FLAG1,GET_TMP4 LJMP GET_TMP3GET_TMP4:

LCALLDELAY1 MOV A,#0CCH ;第二步,ROM命令,跳過ROM匹配

LCALLWRITE_1820 MOV A,#0BEH ;第三步,功能命令,發(fā)出讀溫度命令

LCALLWRITE_1820

;

LCALLREAD_1820;READ_1820 RET;寫DS18B20的程序WRITE_1820:

MOV R2,#8 CLR CWRITE1: CLR DQ MOV R3,#7 ;延時14μs DJNZ R3,$ RRC A MOV DQ,C MOV R3,#21 ;延時45μs DJNZ R3,$ SETB DQ NOP DJNZ R2,WRITE1 SETB DQ RET;讀DS18B20的程序,從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù)READ_1820:

MOV R4,#2 ;將溫度高位和低位從DS18B20中讀出

MOV R1,#35H ;低位存入35H,高位存入36HREAD0:

MOV R2,#8 MOV A,#00HREAD1:

CLR C ;讀取一位數(shù)需要70μs SETB DQ NOP NOP CLR DQ ;保持1μs以上的低電平

NOP NOP SETB DQ ;釋放數(shù)據(jù)線

MOV R3,#3 ;延時7μs,必須在15μs內(nèi)讀取數(shù)據(jù)DJNZ R3,$ MOV C,DQ RRC A MOV R3,#26 ;延時53μs DJNZ R3,$ DJNZ R2,READ1 MOV @R1,A INC R1 DJNZ R4,READ0 SETB DQ ;用RESET來終止數(shù)據(jù)讀取

NOP NOP CLR DQ ACALL DELAY1 ;延時80μs SETB DQ RET;將從DS18B20中讀出的溫度數(shù)據(jù)進行轉(zhuǎn)換TEMPER_COV:

MOV A,TEMPER_H CJNE A,#0F8H,TEMPER_COV1 CLR CTEMPER_COV1:

JC TEMPER_COV2 CPL A MOV TEMPER_H,A MOV A,TEMPER_L CPL A ADD A,#01H MOV TEMPER_L,ATEMPER_COV2:

MOV A,TEMPER_L;舍去溫度低位中小數(shù)點后的四位溫度數(shù)值

ANL A,#0F0H SWAP A MOV TEMPER_NUM,ATEMPER_COV3:

MOV A,TEMPER_H ANL A,#07H SWAP A ORL A,TEMPER_NUM MOV TEMPER_NUM,A;保存變換后的溫度數(shù)據(jù)

LCALL BIN_BCD RET;將十六進制的溫度數(shù)據(jù)轉(zhuǎn)換成壓縮BCD碼BIN_BCD:

MOV DPTR,#TEMP_TAB MOV A,TEMPER_NUM MOVC A,@A+DPTR MOV TEMPER_NUM,A RETTEMP_TAB:

DB 00H,01H,02H,03H,04H,05H,06H,07H DB 08H,09H,10H,11H,12H,13H,14H,15H DB 16H,17H,18H,19H,20H,21H,22H,23H DB 24H,25H,26H,27H,28H,29H,30H,31H DB 32H,33H,34H,35H,36H,37H,38H,39H DB 40H,41H,42H,43H,44H,45H,46H,47H DB 48H,49H,50H,51H,52H,53H,54H,55H DB 56H,57H,58H,59H,60H,61H,62H,63H DB 64H,65H,66H,67H,68H,69H,70H,71H DB 72H,73H,74H,75H,76H,77H,78H,79H DB 80H,81H,82H,83H,84H,85H,86H,87H DB 88H,89H,90H,91H,92H,93H,94H,95H DB 96H,97H,98H,99H;鍵盤掃描程序KEY_SCAN:

MOV DPTR,#PORTB MOV A,#00H MOVX @DPTR,A

; MOV DPTR,#PORTA ;第一列為低電平

MOV A,#0FEH MOVX @DPTR,A NOP MOV DPTR,#PORTC MOVX A,@DPTR CPL A ANL A,#0FH ;屏蔽高4位

CJNE A,#00H,KEY_0 CLR KEY_MKKEY_E:

RETKEY_0:

JB KEY_MK,KEY_E SETB KEY_MK MOV R6,#4FH ACALL DEL1

;

JNB ACC.0,KEY_1 ;S1是否被按下

JB KEY_LMK,KEY_E ;

JB KEY_HMK,KEY_0_1 ;S1是否已經(jīng)執(zhí)行過

SETB KEY_HMK ;沒有,則設(shè)置已經(jīng)執(zhí)行過標志

SETB DISP_MK MOV NUB_VAL,HIG_TMP ACALLDISPLAY AJMP KEY_4KEY_0_1:

CLR KEY_HMK CLR DISP_MK MOV HIG_TMP,NUB_VAL AJMP KEY_1_2KEY_1:

JNB ACC.1,KEY_2 ;S2是否被按下

JB KEY_HMK,KEY_E JB KEY_LMK,KEY_1_1 ;S2是否已經(jīng)執(zhí)行過

SETB KEY_LMK ;沒有,則設(shè)置已經(jīng)執(zhí)行過標志

SETB DISP_MK MOV NUB_VAL,LOW_TMP ACALLDISPLAY AJMP KEY_4KEY_1_1:

CLR KEY_LMK CLR DISP_MK MOV LOW_TMP,NUB_VALKEY_1_2:

;ACALLINIT_1820 ;JNB FLAG1,KEY_1_2 ACALL RE_CONFIG AJMP KEY_4KEY_2:

JNB ACC.2,KEY_3 JB KEY_LMK,KEY_2_1 JB KEY_HMK,KEY_2_1 AJMP KEY_4KEY_2_1:

CLR DISP_MK MOV A,NUB_VAL CJNE A,#63H,KEY_2_2 AJMP KEY_4KEY_2_2:

INC A MOV NUB_VAL,A ACALL DISPLAY AJMP KEY_4KEY_3:

JNB ACC.3,KEY_4 JB KEY_LMK,KEY_3_1 JB KEY_HMK,KEY_3_1 AJMP KEY_4KEY_3_1:

CLR DISP_MK MOV A,NUB_VAL JZ KEY_4 DEC A MOV NUB_VAL,A ACALL DISPLAYKEY_4:

RET;顯示子程序DISPLAY:

JB KEY_HMK,DISP0 JB KEY_LMK,DISP1 AJMP DISP3DISP0:

JNB DISP_MK,DISP2 MOV R0,#0BFH ;高位地址

MOV A,#0AH ;高位顯示“H” ACALL SCAN_TAB MOV R0,#7FH ;低位地址

MOV A,#0BH ;低位顯示“-” ACALL SCAN_TAB RETDISP1:

JNB DISP_MK,DISP2 MOV R0,#0BFH MOV A,#0CH ;高位顯示“L” ACALL SCAN_TAB MOV R0,#7FH MOV A,#0DH ;低位顯示“-” ACALL SCAN_TAB RETDISP2:

MOV TEMPER_NUM,NUB_VALACALL BIN_BCD

;MOVR1,ADISP3:

JB KEY_HMK,DISP3_1 ;個位顯示的地址送R0 JB KEY_LMK,DISP3_1 MOV R0,#0BFH AJMP DISP3_2DISP3_1:

MOV R0,#7FHDISP3_2:

MOV A,TEMPER_NUM ;取顯示單元內(nèi)容

ANL A,#0FH ACALL SCAN_TAB

;

JB KEY_HMK,DISP3_3 ;十位顯示地址送R0 JB KEY_LMK,DISP3_3 MOV R0,#0DFH AJMP DISP3_4DISP3_3:

MOV R0,#0BFHDISP3_4:

MOV A,TEMPER_NUM ;取顯示單元內(nèi)容

SWAP A ;高4位與低4位互換

ANL A,#0FH ;取顯示內(nèi)容十位

ACALLSCAN_TAB

;

JB KEY_HMK,DISP6 ;取小數(shù)點顯示

JB KEY_LMK,DISP6 MOV R0,#7FH MOV A,TEMPER_L JB ACC.3,DISP4 MOV A,#00H AJMP DISP5DISP4:

MOV A,#05HDISP5:

ACALL SCAN_TABDISP6:

RETSCAN_TAB:

MOV DPTR,#TAB MOVC A,@A+DPTR ;查表,取顯示字符

MOV DPTR,#PORTB JB KEY_HMK,SCAN_1 JB KEY_LMK,SCAN_1 CJNE R0,#0BFH,SCAN_1 ORL A,#80HSCAN_1:

MOVX @DPTR,A;顯示字符送B口

MOV DPTR,#PORTA MOV A,R0 MOVX@DPTR,A ;顯示位送A口,顯示數(shù)據(jù)個位

MOV R6,#0FH ACALL DEL1 RETTAB:

DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;共陰極字型碼表

DB 7FH,6FH,36H,40H,38H,40H;DS18B20初始化程序INIT_1820:

SETB DQ NOP NOP CLR DQ ;將數(shù)據(jù)線下拉500μs

;

ACALLYS500 ;500μs延時子程序 ;

SETB DQ ;釋放數(shù)據(jù)線 ;ORL P1,#02H ;P1.1轉(zhuǎn)為輸入 ;

ACALL DELAY1 ;80μs延時子程序 ;

JNB DQ,TSR3 ;判斷DS18B20是否存在

AJMP TSR4 ;不存在,轉(zhuǎn)TSR4TSR3:

SETB FLAG1 ;置標志位,表示DS1820存在

AJMP TSR5TSR4:

CLR FLAG1 ;清標志位,表示DS1820不存在

AJMP TSR7TSR5:

MOV R0,#6BH ;200μsTSR6:

DJNZ R0,TSR6 ;延時TSR7:

SETB DQ RET;重新寫DS18B20暫存存儲器設(shè)定值RE_CONFIG:

MOV A,#0CCH ;發(fā)SKIPROM命令

LCALL WRITE_1820 MOV A,#4EH ;發(fā)寫暫存存儲器命令

LCALL WRITE_1820 MOV A,HIG_TMP ;TH(報警上限)中寫入指定值

LCALL WRITE_1820 MOV A,LOW_TMP ;TL(報警下限)中寫入指定值

LCALL WRITE_1820 MOV A,#1FH ;選擇9位溫度分辨率

LCALL WRITE_1820 RET;延時子程序DELAY:

MOV R6,#0FFH ;延時130msDEL1:

MOV R7,#0FFHDEL2:

DJNZ R7,DEL2 DJNZ R6,DEL1 RETDELAY1:

MOV R7,#27H ;延時80μs DJNZ R7,$ RETYS500:

MOV R7,#0F9H ;延時500μsYS500_1:

DJNZ R7,YS500_1 RET

;

END

5.實訓(xùn)分析與總結(jié)

(1)該實訓(xùn)項目主要是以DS18B20為例,訓(xùn)練單片機應(yīng)用系統(tǒng)與外圍應(yīng)用系統(tǒng)或部件組合的綜合設(shè)計、分析與調(diào)試方法。學(xué)會分析和掌握專用芯片或器件的功能、控制方法和編程技巧,能根據(jù)專用芯片或部件的技術(shù)資料、讀寫時序要求設(shè)計硬件接口及軟件編程,完成單片機應(yīng)用系統(tǒng)的整個開發(fā)過程。

(2)實訓(xùn)項目中的難點是理解和掌握DS18B20的專用特性和功能,能根據(jù)廠商提供的技術(shù)資料,編制出相應(yīng)的初始化程序、讀寫程序。

(3)程序仍采用模塊化結(jié)構(gòu),鍵盤、顯示、延時子程序可以采用原有子程序,本程序是在原有的子程序基礎(chǔ)上進行簡化而成的。(4)運行狀態(tài)采用標志化管理可使程序結(jié)構(gòu)更加簡化。在上述程序中,對各按鍵的操作過程和狀態(tài)都采用標識位來描述,對于不應(yīng)具有連動功能的按鍵采用標志位限制,只有在鍵盤掃描程序確定沒有任何按鍵按下時才清除按鍵標志。這樣既可以起到按鍵防抖動的作用,同時還可防止由于誤操作或按鍵習(xí)慣問題導(dǎo)致的按鍵被多次執(zhí)行的情況。

(5)調(diào)試程序時,重點分析和調(diào)試DS18B20的初始化及讀寫程序,嚴格按照技術(shù)資料提供的時序要求,檢查時序的前后次序和延時時間,要結(jié)合能反映故障存在與否的參數(shù)變化、運行路徑變化、顯示內(nèi)容變化等選擇合適的觀測點和觀測對象,再運用適當?shù)恼{(diào)試方法,快速地檢驗調(diào)試結(jié)果,由此分析和判斷出故障點。(6)為了能在實訓(xùn)室對溫度測量進行測試,可分別設(shè)定溫度的最高位和最低位分別為36℃和32℃(當時的室溫)。由于人體的體溫一般高于36℃,用手指接觸測溫點,會導(dǎo)致高溫報警,從而啟動風(fēng)扇降溫,拿開手之后,測溫點的溫度會逐步下降。如果此時的室溫低于設(shè)定的最低溫度,系統(tǒng)會啟動蜂鳴器報警。調(diào)試程序時,如果顯示的溫度值與實際不符或沒有顯示,可以首先檢查DS18B20的初始化過程是否成功,然后在讀取溫度值的操作完成后檢查所讀到的值是否正常,確信沒有問題的情況下,檢查數(shù)據(jù)轉(zhuǎn)換和顯示程序是否存在問題。6.參考資料

1)DS18B20簡介

(1)獨特的單線接口方式:當DS18B20與微處理器連接時,僅需要一條數(shù)據(jù)線即可實現(xiàn)微處理器與DS18B20的雙向通信。

(2)使用中不需要任何外圍元件。

(3)可用數(shù)據(jù)線供電,電壓范圍為+3.0~+5.5V。

(4)測溫范圍為-55~+125℃。固有測溫分辨率為0.5℃。

(5)通過編程可實現(xiàn)9~12位的數(shù)字讀數(shù)方式。(6)用戶可自設(shè)定非易失性的報警上下限值。

(7)支持多點組網(wǎng)功能,多個DS18B20可以并聯(lián)在惟一的數(shù)據(jù)線上,實現(xiàn)多點測溫。

(8)負壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作。2)DS18B20的內(nèi)部結(jié)構(gòu)圖2.2.7DS18B20內(nèi)部結(jié)構(gòu)圖(1)64位光刻ROM的結(jié)構(gòu)如下:MSB LSB MSB LSB MSB LSB

開始8位是產(chǎn)品類型的編號,接著是每個器件的惟一序號,共有48位,最后8位是前56位的CRC校驗碼,這也是多個DS18B20可以采用一線進行通信的原因。(2)非易失性溫度報警觸發(fā)器TH和TL,可通過軟件寫入用戶報警上下限。

(3)高速暫存存儲器。DS18B20溫度傳感器的內(nèi)部存儲器包括一個高速暫存SRAM和一個非易失性的可電擦除的E2PROM。后者用于存儲TH,TL值。數(shù)據(jù)先寫入SRAM,經(jīng)校驗后再傳給E2PROM。而配置寄存器為高速暫存器中的第5個字節(jié),其內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率,DS18B20工作時按此寄存器中的分辨率將溫度轉(zhuǎn)換為相應(yīng)精度的數(shù)值。該字節(jié)各位的定義如下:

低5位一直都是1,TM是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時該位被設(shè)置為0,用戶不要去改動,R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),即設(shè)置分辨率,如表2.2.1所示(DS18B20出廠時被設(shè)置為12位)。表2.2.1R1和R0模式表

由表2.2.1可見,設(shè)定的分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時間就越長。因此,在實際應(yīng)用中要在分辨率和轉(zhuǎn)換時間之間權(quán)衡考慮。高速暫存存儲器除了配置寄存器外,還有其他8個寄存器,其分配如下所示。其中,第1、2個寄存器存儲溫度信息,第3、4個寄存器存儲TH和TL值,第6~8個寄存器未用,表現(xiàn)為全邏輯1;第9個寄存器存儲的是前面所有8個寄存器內(nèi)容的CRC碼,可用來保證通信正確。

當DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號擴展的二進制補碼形式存儲在高速暫存存儲器的第1、2個寄存器。單片機可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后,數(shù)據(jù)格式以0.0625℃/LSB形式表示。溫度值格式如下:

對應(yīng)的溫度計算:當符號位S=0時,直接將二進制位轉(zhuǎn)換為十進制;當S=1時,先將補碼變換為原碼,再計算十進制值。表2.2.2所示為對應(yīng)的一部分溫度值。表2.22部分溫度值

(4)CRC的產(chǎn)生。在64bROM的最高有效字節(jié)中存儲有循環(huán)冗余校驗碼(CRC)。主機根據(jù)ROM的前56位來計算CRC值,并和存入DS18B20中的CRC值做比較,以判斷主機收到的ROM數(shù)據(jù)是否正確。3)DS18B20的測溫原理

DS18B20的測溫原理如圖2.2.8所示。圖中低溫度系數(shù)振蕩器晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給減法計數(shù)器1,高溫度系數(shù)振蕩器晶振隨溫度變化其震蕩頻率明顯改變,所產(chǎn)生的信號作為減法計數(shù)器2的脈沖輸入。圖中還隱含著計數(shù)門,當計數(shù)門打開時,DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時鐘脈沖進行計數(shù),進而完成溫度測量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,在每次測量前,首先將-55℃所對應(yīng)的基數(shù)分別置入減法計數(shù)器1和溫度寄存器中,減法計數(shù)器1和溫度寄存器被預(yù)置在-55℃所對應(yīng)的一個基數(shù)值。圖2.2.8DS18B20的內(nèi)部測溫電路框圖4)DS18B20與單片機的典型接口設(shè)計以MCS51單片機為例,圖2.2.9為典型接口設(shè)計,P1.1口接單線總線。當DS18B20處于寫存儲器操作和溫度A/D變換操作時,為保證在有效的DS18B20時鐘周期內(nèi)提供足夠的電流,需要在數(shù)據(jù)線上加一個4.7kΩ的上拉電阻,另外兩個腳分別接電源和地。主機控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過3個步驟:初始化、ROM操作指令、存儲器操作指令。假設(shè)單片機系統(tǒng)所用的晶振頻率為12MHz,根據(jù)DS18B20的初始化時序、寫時序和讀時序,分別編寫3個子程序:INIT為初始化子程序,WRITE為寫(命令或數(shù)據(jù))子程序,READ為讀數(shù)據(jù)子程序,所有的數(shù)據(jù)讀寫均由最低位開始。圖2.2.9DS18B20與微處理器的典型連接

7.思考題

(1)DS18B20單線通信功能是按照什么方式完成的?它的操作協(xié)議是什么?

(2)DS18B20與MCU連接時為什么在數(shù)據(jù)線上要加一個4.7kΩ的上拉電阻?

(3)如果顯示器件采用LCM162液晶顯示模塊,請編寫一段程序?qū)y得的溫

溫馨提示

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

評論

0/150

提交評論