第9章 單片機(jī)的Keil C51開發(fā)語言與應(yīng)用系統(tǒng)研制《單片機(jī)原理與應(yīng)用系統(tǒng)設(shè)計(jì)》_第1頁
第9章 單片機(jī)的Keil C51開發(fā)語言與應(yīng)用系統(tǒng)研制《單片機(jī)原理與應(yīng)用系統(tǒng)設(shè)計(jì)》_第2頁
第9章 單片機(jī)的Keil C51開發(fā)語言與應(yīng)用系統(tǒng)研制《單片機(jī)原理與應(yīng)用系統(tǒng)設(shè)計(jì)》_第3頁
第9章 單片機(jī)的Keil C51開發(fā)語言與應(yīng)用系統(tǒng)研制《單片機(jī)原理與應(yīng)用系統(tǒng)設(shè)計(jì)》_第4頁
第9章 單片機(jī)的Keil C51開發(fā)語言與應(yīng)用系統(tǒng)研制《單片機(jī)原理與應(yīng)用系統(tǒng)設(shè)計(jì)》_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

《單片機(jī)原理與應(yīng)用系統(tǒng)設(shè)計(jì)》?精品課件合集第X章XXXX第9章單片機(jī)的KeilC51開發(fā)語言與應(yīng)用系統(tǒng)研制9.19.2第九章 單片機(jī)的Keil

C51開發(fā)語言與應(yīng)用系統(tǒng)研制51系列單片機(jī)的Keil C51開發(fā)語言9.39.4Keil C51的數(shù)據(jù)結(jié)構(gòu)單片機(jī)匯編語言與C語言程序設(shè)計(jì)對照C

51

與匯編語言的混合編程9.69.5

單片機(jī)應(yīng)用系統(tǒng)調(diào)試單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例9.7單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)總結(jié)9.1 51

系列單片機(jī)的Keil

C51

開發(fā)語言KeilC51

語言概述KeilC51

完全支持C

的標(biāo)準(zhǔn)指令和很多用來優(yōu)化51

單片機(jī)指令結(jié)構(gòu)的C

語言擴(kuò)展指令。KeilC51

軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面。Keil

C51生成的目標(biāo)代碼效率很高,多數(shù)語句生成的匯編代碼緊湊,易理解。用C51

語言編寫單片機(jī)應(yīng)用程序,進(jìn)行51

系列單片機(jī)系統(tǒng)開發(fā),編程者可以專注于應(yīng)用軟件部分的設(shè)計(jì),則不用具體組織、分配存儲(chǔ)器資源和處理端口數(shù)據(jù)。與標(biāo)準(zhǔn)C

語言相比,C51

在數(shù)據(jù)類型、變量存儲(chǔ)模式、輸入/輸出處理、函數(shù)等方面有一定差異,它需要根據(jù)單片機(jī)存儲(chǔ)結(jié)構(gòu)及內(nèi)部資源定義相應(yīng)的數(shù)據(jù)類型和變量,而其他語法規(guī)則、程序結(jié)構(gòu)及程序設(shè)計(jì)方法等與標(biāo)準(zhǔn)的C

語言程序設(shè)計(jì)相同。9.1 51

系列單片機(jī)的Keil

C51

開發(fā)語言C51

的程序結(jié)構(gòu)C51

程序的基本單位是函數(shù)。一個(gè)C51

源程序至少包含一個(gè)主函數(shù),也可以是一個(gè)主函數(shù)和若干個(gè)其他函數(shù)。主函數(shù)是程序的入口;主函數(shù)中的所有語句執(zhí)行完畢,則程序結(jié)束。圖為LED

指示燈閃爍電路原理圖。9.1 51

系列單片機(jī)的Keil

C51

開發(fā)語言Keil

C51

的關(guān)鍵字9.1 51

系列單片機(jī)的Keil

C51

開發(fā)語言Keil

C51

的關(guān)鍵字9.1 51

系列單片機(jī)的Keil

C51

開發(fā)語言Keil

C51

的關(guān)鍵字9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的基本數(shù)據(jù)類型程序設(shè)計(jì)離不開對數(shù)據(jù)的處理。一個(gè)程序如果沒有數(shù)據(jù),它就無法工作。數(shù)據(jù)在計(jì)算機(jī)內(nèi)存中的存放情況由數(shù)據(jù)結(jié)構(gòu)決定。C

語言的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類型出現(xiàn)的。在C

語言中,基本數(shù)據(jù)類型有char、int、short、float

和double等,而對于Keil

C51

編譯器來說,short

型等同于int

型,double

型等同于float

型。9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的常量整型常量整型常量就是整型常數(shù),可按一般數(shù)字的寫法直接寫成十進(jìn)制,如12345、-12345、

0等,也可以寫成十六進(jìn)制,寫成十六進(jìn)制時(shí)必須以0x

開頭,如0x64、0x123、0xFF等。另外還可以在整型常數(shù)后面加一個(gè)字母“L”,構(gòu)成長整型數(shù),如10L、123L

和0x4FL。浮點(diǎn)型常數(shù)可以寫成十進(jìn)制定點(diǎn)表示形式,即由數(shù)字和小數(shù)點(diǎn)組成,如3.14159、-4.7、130.4

等,也可以寫成指數(shù)形式,即:9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的常量字符型常量字符型常量是單引號(hào)內(nèi)的字符,如‘a(chǎn)’、‘b’等,一個(gè)字符占用一個(gè)字節(jié)。對于不可以顯示的控制字符,可以在該字符前面加一個(gè)反斜杠“\”組成專用轉(zhuǎn)義字符。利用轉(zhuǎn)義字符可以完成一些特殊功能和輸出時(shí)的格式控制。9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的常量字符型常量——常用轉(zhuǎn)義字符表9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的常量字符串型常量字符串型常量由雙引號(hào)內(nèi)的字符組成,如“ABCDE”、“OK”等。當(dāng)引號(hào)內(nèi)沒有字符時(shí),稱為空字符串。請注意字符串常量前面和后面的雙引號(hào)是界限符,當(dāng)需要表示雙引號(hào)字符串時(shí),可以使用轉(zhuǎn)義符號(hào)“\”表示如“\”。在C

語言中,字符串常量是作為字符類型數(shù)組來處理的,所以在存儲(chǔ)字符串時(shí),系統(tǒng)會(huì)在字符串尾部加上\0

轉(zhuǎn)義字符以作為該字符串的結(jié)束符,正因如此,字符串常量“A”和字符常量‘A’是不同的,前者在存儲(chǔ)時(shí)多占用一個(gè)字節(jié)的空間。9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的常量位標(biāo)量位標(biāo)量是C51

編譯器擴(kuò)充的一種數(shù)據(jù)類型,它用關(guān)鍵字bit

來定義,其值是一個(gè)二進(jìn)制位。在函數(shù)中可以包含bit

類型的參數(shù),函數(shù)的返回值也可以為bit

型。9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的變量變量定義在程序執(zhí)行過程中,數(shù)值可以發(fā)生改變的量稱為變量。變量的基本屬性是變量名和變量值。變量值與存儲(chǔ)單元的內(nèi)容相對應(yīng)。定義一個(gè)變量的格式如下:[存儲(chǔ)種類]

數(shù)據(jù)類型

[存儲(chǔ)類型]

變量名變量的存儲(chǔ)種類有4

種:自動(dòng)、外部、靜態(tài)和寄存器。C51規(guī)定變量名可以由字母、數(shù)字和下畫線3

種字符組成,且第一個(gè)字符必須為字母或下畫線,變量名長度無統(tǒng)一規(guī)定,隨編譯系統(tǒng)而定。9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的變量存儲(chǔ)器類型——Keil

C51

編譯器所能識(shí)別的存儲(chǔ)器類型9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的變量存儲(chǔ)器類型存儲(chǔ)器類型就是指該變量在C51

硬件系統(tǒng)中所使用的存儲(chǔ)區(qū)域,并在編譯時(shí)能夠準(zhǔn)確定位。一個(gè)變量除了與存儲(chǔ)單元相對應(yīng)外,還與它所在的存儲(chǔ)空間有關(guān),即還需要指出其存儲(chǔ)類型。9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的變量數(shù)據(jù)類型——C51

支持的基本數(shù)據(jù)類型9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的變量數(shù)據(jù)類型——C51

增加的特殊數(shù)據(jù)類型bit

位型是C51

編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可定義一個(gè)位變量或位函數(shù),但不能定義位指針,也不能定義位數(shù)組。sfr

特殊功能寄存器型:51

系列單片機(jī)內(nèi)有21

個(gè)特殊功能寄存器(SFR),分散在片內(nèi)RAM

區(qū)的高128

字節(jié),地址為80H~FFH。為了能直接訪問這些SFR,需要通過關(guān)鍵字sfr

對其進(jìn)行定義。sbit可尋址位:在51

系列單片機(jī)中,經(jīng)常要訪問特殊功能寄存器中的某些位,用關(guān)鍵字sbit

定義可位尋址的特殊功能寄存器的位尋址對象。9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的變量存儲(chǔ)器模式定義變量時(shí)如果省略存儲(chǔ)器類型,Keil

C51

編譯系統(tǒng)則會(huì)按編譯模式SMALL、COMPACT

或LARGE

所規(guī)定的默認(rèn)存儲(chǔ)器類型去指定變量的存儲(chǔ)區(qū)域。SMALL存儲(chǔ)模式把所有函數(shù)變量和局部數(shù)據(jù)段放在51

單片機(jī)系統(tǒng)的內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū),因此對這種變量的訪問數(shù)據(jù)最快。COMPACT

存儲(chǔ)模式中把變量定位在51

系統(tǒng)的外部數(shù)據(jù)存儲(chǔ)器中。LARGE存儲(chǔ)模式中,所有函數(shù)和過程的變量以及局部數(shù)據(jù)段都被定位在51

單片機(jī)系統(tǒng)的外部數(shù)據(jù)存儲(chǔ)器中,外部數(shù)據(jù)存儲(chǔ)器最多可有64

KB。9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的變量重新定義數(shù)據(jù)類型重新定義方法如下:Typedef已有的數(shù)據(jù)類型 新的數(shù)據(jù)類型名;在這里“已有的數(shù)據(jù)類型”指的是C

語言中所有的數(shù)據(jù)類型,包括結(jié)構(gòu)、指針和數(shù)組等。“新的數(shù)據(jù)類型名”可以按用戶的習(xí)慣或根據(jù)任務(wù)的需要來決定。關(guān)鍵字typedef

的作用只是將C

語言中已有的數(shù)據(jù)類型作了置換,因此可用置換后的新數(shù)據(jù)類型名來進(jìn)行變量的定義。9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)C51

的指針?biāo)闹羔樢部梢院唵卫斫鉃椤按鎯?chǔ)某個(gè)地址的變量”。C

語言中指針變量的一般定義形式為:類型標(biāo)識(shí)符*

變量名;C

語言為指針運(yùn)算專門設(shè)置了兩種運(yùn)算符:&運(yùn)算符:這是取地址運(yùn)算符,返回其后所跟操作數(shù)的地址。*運(yùn)算符:把它的操作數(shù)當(dāng)?shù)刂穪韺Υ?,并訪問那個(gè)地址以便操作所需要的值。9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的構(gòu)造類型結(jié)構(gòu)結(jié)構(gòu)是將若干個(gè)不同類型的數(shù)據(jù)變量有序地組合在一起而形成的一種數(shù)據(jù)的集合體。組成該集合體的各個(gè)數(shù)據(jù)變量稱為結(jié)構(gòu)成員,整個(gè)集合體使用一個(gè)單獨(dú)的結(jié)構(gòu)變量名。結(jié)構(gòu)類型的一般定義格式為:struct

結(jié)構(gòu)名{成員分量};9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)KeilC51

的構(gòu)造類型聯(lián)合Keil

C51

中還有一種數(shù)據(jù)類型,它可以使各種類型的數(shù)據(jù)共同使用同一塊內(nèi)存空間,只是在時(shí)間上交錯(cuò)開,以提高內(nèi)存的利用效率,這種數(shù)據(jù)類型叫聯(lián)合,也有人稱之為共同體。聯(lián)合說明和定義的格式如下:union[聯(lián)合名]{數(shù)據(jù)類型

成員名;數(shù)據(jù)類型

成員名;…}[聯(lián)合變量名];9.2 Keil C51 的數(shù)據(jù)結(jié)構(gòu)Keil

C51

的構(gòu)造類型枚舉枚舉的定義應(yīng)當(dāng)列出該類型變量的可取值,其形式為:“枚舉”實(shí)際上是一個(gè)有名字的某些整型數(shù)常量的集合,這些整型數(shù)常量是該類型變量可取的所有的合法值,即在“枚舉”類型的定義中列舉出所有可能的取值。enum

枚舉名{標(biāo)識(shí)符[=整型常數(shù)],標(biāo)識(shí)符[=整型常數(shù)],…標(biāo)識(shí)符[=整形常數(shù)],}枚舉變量;9.3 單片機(jī)匯編語言與C

語言程序設(shè)計(jì)對照LOOP:CPLP1.0NOPSIMPLOOPEND也可以用C51

語言寫出完成同樣功能的程序如下:為了讓單片機(jī)從P1

口的第0

位線上輸出一個(gè)方波信號(hào),可用匯編語言簡單地編寫下列程序:9.4 C51 與匯編語言的混合編程在C51

中調(diào)用匯編程序需要解決的問題:程序的尋址,在main.c

中調(diào)用的max(

)函數(shù),如何與匯編文件中的相應(yīng)代碼對應(yīng)起來;參數(shù)傳遞,從main.c

中傳遞給max(

)函數(shù)的參數(shù)a

和b,存放在何處可使匯編程序能夠獲取它們的值;返回值傳遞,匯編語言計(jì)算得到的結(jié)果,存放在何處可使C

語言程序能夠獲取。9.4 C51 與匯編語言的混合編程在C51

中調(diào)用匯編程序需要解決的問題:函數(shù)名的轉(zhuǎn)換規(guī)則9.4 C51 與匯編語言的混合編程在C51

中調(diào)用匯編程序需要解決的問題:參數(shù)轉(zhuǎn)換規(guī)則9.4 C51 與匯編語言的混合編程在C51

中調(diào)用匯編程序需要解決的問題:匯編語言返回值9.4 C51 與匯編語言的混合編程在C51

中嵌入?yún)R編代碼方法1:直接在函數(shù)體內(nèi)的每個(gè)匯編語句前加“asm”預(yù)編譯指令。方法2:把a(bǔ)sm

作為關(guān)鍵字,后續(xù)的匯編語句用大括號(hào)括起來即可。方法3:在C模塊內(nèi)通過語句“#

pragma”嵌入?yún)R編代碼。上述嵌入?yún)R編代碼的C

函數(shù)需要對Keil

編譯器進(jìn)行一定設(shè)置后才能正常編譯。9.4 C51 與匯編語言的混合編程匯編程序調(diào)用C

程序在匯編程序中調(diào)用C

程序的方法與在C

程序中調(diào)用匯編程序的方法基本相同,也是先用C51

編寫出程序的主體,在程序中加入#pragma

src(*.a51)控制命令,或在工程項(xiàng)目窗口中設(shè)置“Generate

Assembler

SRC

File”和“Assemble

SRCFile”選項(xiàng),編譯模塊文件,得到相應(yīng)的a51

文件,按要求改寫匯編代碼。這樣做是把匯編程序與C

程序的接口和各種段的安排都交給編譯器處理,減少編寫程序的工作量。9.4 C51 與匯編語言的混合編程Proteus與Keil

C51

的聯(lián)調(diào)假若KeilC與Proteus

均已正確安裝在C:\Program

Files

的目錄里,把C:\ProgramFiles\LabcenterElectronics\Proteus7Professional\MODELS\VDM51.dll復(fù)制到C:\ProgramFiles\keilC\C51\BIN

目錄中。用記事本打開C:\Program

Files\keilC\C51\TOOLS.INI文件,在[C51]欄目下加入:TDRV5=BIN\VDM51.DLL

("Proteus

VSM

Monitor-51

Driver")。其中“TDRV5”中的“5”要根據(jù)實(shí)際情況寫,不要和原來的重復(fù)。進(jìn)入KeilC

μVision3集成開發(fā)環(huán)境,創(chuàng)建一個(gè)新項(xiàng)目(Project),并為該項(xiàng)目選定合適的單片機(jī)CPU器件及加入KeilC源程序。9.4 C51 與匯編語言的混合編程Proteus

與Keil

C51

的聯(lián)調(diào)單擊“Project

菜單/OptionsforTarget”選項(xiàng)或者點(diǎn)擊工具欄的“optionfortarget”按鈕,彈出窗口,點(diǎn)擊“Debug”按鈕。9.4 C51 與匯編語言的混合編程Proteus

與Keil

C51

的聯(lián)調(diào)在出現(xiàn)的對話框里在右欄上部的下拉菜單里選中“Proteus

VSM

Monitor-51Driver”,并且還要點(diǎn)擊一下“Use”前面表明選中的小圓點(diǎn)。再點(diǎn)擊“Setting”按鈕,設(shè)置通信接口,在“Host”后面添上“127.0.0.1”,如果使用的不是同一臺(tái)電腦,則需要在這里添上另一臺(tái)電腦的IP

地址(另一臺(tái)電腦也應(yīng)安裝Proteus)。在“Port”后面添加“8000”,點(diǎn)擊“OK”按鈕即可。9.4 C51 與匯編語言的混合編程Proteus

與Keil

C51

的聯(lián)調(diào)通信設(shè)置9.4 C51 與匯編語言的混合編程設(shè)置KeilC

添加執(zhí)行文件Proteus

與KeilC51

的聯(lián)調(diào)進(jìn)入Proteus的ISIS,鼠標(biāo)左鍵點(diǎn)擊菜單“Debug”,選中“useromotedebuger

monitor”,便可實(shí)現(xiàn)KeilC與Proteus連接調(diào)試。在圖形編輯窗口內(nèi),將鼠標(biāo)置于單片機(jī)上,單擊鼠標(biāo)右鍵,選中該對象,單擊鼠標(biāo)左鍵,進(jìn)入對象屬性編輯頁面,在“Program

File”中,通過打開按鈕,添加程序執(zhí)行文件。9.4 C51 與匯編語言的混合編程Proteus

與Keil

C51

的聯(lián)調(diào)KeilC與Proteus連接仿真調(diào)試。單擊仿真運(yùn)行開始按鈕,我們能清楚地觀察到每一個(gè)引腳的電頻變化,紅色代表高電平,藍(lán)色代表低電平。9.5 單片機(jī)應(yīng)用系統(tǒng)調(diào)試硬件調(diào)試方法——常見的硬件故障邏輯錯(cuò)誤:樣機(jī)硬件的邏輯錯(cuò)誤是由于設(shè)計(jì)錯(cuò)誤和加工過程中的工藝性錯(cuò)誤所造成的。這類錯(cuò)誤包括:錯(cuò)線、開路、短路、相位錯(cuò)等。元器件失效:原因有兩個(gè)方面:一是器件本身已損壞或性能差,二是由于組裝錯(cuò)誤造成的元器件失效??煽啃圆睿航饘倩?、接插件接觸不良會(huì)造成系統(tǒng)時(shí)好時(shí)壞,經(jīng)不起振動(dòng);內(nèi)部和外部的干擾、電源紋波系數(shù)過大、器件負(fù)載過大等會(huì)造成邏輯電平不穩(wěn)定。走線和布局的不合理等也會(huì)引起系統(tǒng)可靠性差。電源故障:包括電壓值不符合設(shè)計(jì)要求;電源引出線和插座不對應(yīng),各電源之間的短路,變壓器功率不足,內(nèi)阻大,負(fù)載能力差等。9.5 單片機(jī)應(yīng)用系統(tǒng)調(diào)試硬件調(diào)試方法靜態(tài)測試在樣機(jī)加電之前,先用萬用表等工具,根據(jù)硬件電氣原理圖和裝配圖仔細(xì)檢查樣機(jī)線路的正確性,并核對元器件的型號(hào)、規(guī)格和安裝是否符合要求。加電后檢查各插件上引腳的電位,仔細(xì)測量各點(diǎn)電位是否正常,尤其應(yīng)注意單片機(jī)插座上的各點(diǎn)電位,若有高壓,聯(lián)機(jī)時(shí)將會(huì)損壞仿真器。在不加電情況下,除單片機(jī)以外,插上所有的元器件,用仿真插頭將樣機(jī)的單片機(jī)插座和仿真器的仿真接口相連。這樣便為聯(lián)機(jī)調(diào)試做好了準(zhǔn)備。9.5 單片機(jī)應(yīng)用系統(tǒng)調(diào)試硬件調(diào)試方法聯(lián)仿真器調(diào)試對實(shí)驗(yàn)系統(tǒng)板進(jìn)行調(diào)試,通常要使用單片機(jī)開發(fā)系統(tǒng)。開發(fā)系統(tǒng)都帶有一個(gè)仿真插頭,可直接插入目標(biāo)系統(tǒng)(實(shí)驗(yàn)板)的CPU

插座上,代替目標(biāo)板上的CPU

對其系統(tǒng)功能進(jìn)行模擬。借用開發(fā)機(jī),不僅可測試系統(tǒng)設(shè)計(jì)的硬件原理及功能,也可進(jìn)行相應(yīng)軟件調(diào)試,并能固化程序來完成整個(gè)開發(fā)過程。利用開發(fā)機(jī)對實(shí)驗(yàn)板的硬件檢查,常常按其功能及I/O

通道分別編寫相應(yīng)簡短的實(shí)驗(yàn)程序,來檢查各部分功能及邏輯是否正確。9.5 單片機(jī)應(yīng)用系統(tǒng)調(diào)試硬件調(diào)試方法檢查各地址譯碼輸出通常,地址譯碼輸出是一個(gè)低電平有效信號(hào)。因此在選到某一個(gè)芯片時(shí)(無論是內(nèi)存還是外設(shè))其選片信號(hào)用示波器檢查應(yīng)該是一個(gè)負(fù)脈沖信號(hào)。由于使用的時(shí)鐘頻率不同,其負(fù)脈沖的寬度和頻率也有所不同。注意在使用示波器測量實(shí)驗(yàn)板的某些信號(hào)時(shí),要將示波器電源插頭上的地線斷開,這是由于示波器測量探頭一端連到外殼,在有些電源系統(tǒng),保護(hù)地和電源地連在一起,有時(shí)會(huì)將電源插座插反,將交流220

V直接引到測量端而將實(shí)驗(yàn)板全部燒毀,并且會(huì)殃及開發(fā)機(jī)。9.5 單片機(jī)應(yīng)用系統(tǒng)調(diào)試硬件調(diào)試方法測試擴(kuò)展RAM

存儲(chǔ)器用仿真器的讀出/修改目標(biāo)系統(tǒng)擴(kuò)展RAM

或I/0

口的命令,將一批數(shù)據(jù)寫入樣機(jī)的外部RAM

存儲(chǔ)器,然后用讀樣機(jī)擴(kuò)展RAM

或I/0

口的命令讀出外部RAM

的內(nèi)容,若對任意的單元讀出和寫入的內(nèi)容一致,則該RAM

電路和CPU

的連接沒有邏輯錯(cuò)誤。若存在寫不進(jìn)、讀不出或讀出和寫入內(nèi)容不一致的現(xiàn)象,則有故障存在,故障原因可能是地址、數(shù)據(jù)線短路,或讀寫信號(hào)沒有加到芯片,或RAM

電路沒有加電,或總線信號(hào)對ALE、WR

、RD的干擾等。此時(shí)可編一段程序,循環(huán)地對某一RAM

單元進(jìn)行讀和寫。9.5 單片機(jī)應(yīng)用系統(tǒng)調(diào)試硬件調(diào)試方法測試I/O口和I/O設(shè)備對于可編程接口電路,先用讀出修改命令把控制字寫入命令口,使之具有系統(tǒng)所要求的邏輯結(jié)構(gòu)。然后分別將數(shù)據(jù)寫入輸出口測量或觀察輸出口和設(shè)備的狀態(tài)變化(如顯示器是否被點(diǎn)亮,繼電器、打印機(jī)等是否被驅(qū)動(dòng)等),用讀命令讀輸入口的狀態(tài),觀察讀出內(nèi)容和輸入口所接輸入設(shè)備(撥盤開關(guān)、鍵盤等)的狀態(tài)是否一致。如果對I/O

口的讀寫操作和I/O

設(shè)備的狀態(tài)變化一致,則I/O

接口和所連設(shè)備沒有故障,如果不一致則可能的故障原因有:I/O

電路和單片機(jī)連接存在邏輯錯(cuò)誤、寫入的命令字不正確、設(shè)備沒有連好等。9.5 單片機(jī)應(yīng)用系統(tǒng)調(diào)試硬件調(diào)試方法測試程序存儲(chǔ)器使樣機(jī)中的EPROM

作為目標(biāo)系統(tǒng)的程序存儲(chǔ)器,再用命令讀出EPROM中內(nèi)容,若讀出內(nèi)容和仿真開發(fā)系統(tǒng)中的一致則無故障,

否則有錯(cuò)誤。一般在目標(biāo)系統(tǒng)中只有一片EPROM,若有故障很容易定位。9.5 單片機(jī)應(yīng)用系統(tǒng)調(diào)試硬件調(diào)試方法測試晶振和復(fù)位電路用選擇開關(guān),使目標(biāo)系統(tǒng)中晶振電路作為系統(tǒng)晶振電路,此時(shí)系統(tǒng)若正常工作,則晶振電路無故障,否則檢查一下晶振電路便可查出故障所在。按下樣機(jī)復(fù)位開關(guān)(如果存在)或樣機(jī)加電應(yīng)使系統(tǒng)復(fù)位,否則復(fù)位電路也有錯(cuò)誤。9.5 單片機(jī)應(yīng)用系統(tǒng)調(diào)試硬件調(diào)試方法檢查按鍵輸入及顯示電路某些按鍵直接讀入狀態(tài),可按開關(guān)量輸入進(jìn)行檢查。若是掃描鍵盤,則要編寫相應(yīng)的鍵盤掃描程序,并逐一按鍵,在顯示器上顯示相應(yīng)的代碼。顯示器檢查根據(jù)設(shè)計(jì)的是掃描顯示還是靜態(tài)顯示,是硬件七段譯碼還是軟件七段譯碼來編寫相應(yīng)的檢查程序。硬件七段譯碼將要顯示字符的BCD代碼直接送到七段字形譯碼驅(qū)動(dòng)器上,軟件譯碼就是根據(jù)要顯示的字符數(shù)字,去查一個(gè)字形代碼表從中取出字形代碼送到該顯示器的字形代碼鎖存器。在檢查時(shí),要將七段LED

顯示器從0~9

逐一檢查,對有些特殊字符需要時(shí)也要進(jìn)行檢查,以防丟段或連線有錯(cuò)。9.5 單片機(jī)應(yīng)用系統(tǒng)調(diào)試軟件調(diào)試方法常見的軟件錯(cuò)誤類型程序失控:現(xiàn)象是當(dāng)以斷點(diǎn)或連續(xù)方式運(yùn)行時(shí),目標(biāo)系統(tǒng)沒有按規(guī)定的功能進(jìn)行操作或什么結(jié)果也沒有,是由于程序轉(zhuǎn)移到?jīng)]有預(yù)料到的地方或在某處死循環(huán)所造成的。這類錯(cuò)誤的原因有:程序中轉(zhuǎn)移地址計(jì)算錯(cuò)誤;堆棧溢出;工作寄存器沖突等。在采用實(shí)時(shí)多任務(wù)操作系統(tǒng)時(shí),錯(cuò)誤可能在操作系統(tǒng)中,沒有完成正確的任務(wù)調(diào)度操作,也可能在高優(yōu)先級任務(wù)程序中,該任務(wù)不釋放處理機(jī),使CPU

在該任務(wù)中死循環(huán)。9.5 單片機(jī)應(yīng)用系統(tǒng)調(diào)試軟件調(diào)試方法常見的軟件錯(cuò)誤類型中斷錯(cuò)誤。不響應(yīng)中斷:

CPU不響應(yīng)任何中斷或不響應(yīng)某一個(gè)中斷;錯(cuò)循環(huán)響應(yīng)中斷:這種錯(cuò)誤是CPU

循環(huán)地響應(yīng)某一個(gè)中斷,使CPU

不能正常地執(zhí)行主程序或其他的中斷服務(wù)程序。錯(cuò)誤的原因有:中斷控制寄存器(IE、IP)的初值設(shè)置不正確,使CPU

沒有開放中斷或不允許某個(gè)中斷源請求;或者對片內(nèi)的定時(shí)器、串行口等特殊功能寄存器和擴(kuò)展的I/O

編程有錯(cuò)誤,造成中斷沒有被激活;或者某一中斷服務(wù)程序不是以RETl

指令作為返回主程序的指令,CPU

雖已返回到主程序但內(nèi)部中斷狀態(tài)寄存器沒有被清除,從而不響應(yīng)中斷;或由于外部中斷源的硬件故障使外部中斷請求無效。9.5 單片機(jī)應(yīng)用系統(tǒng)調(diào)試軟件調(diào)試方法常見的軟件錯(cuò)誤類型輸入輸出錯(cuò)誤。這類錯(cuò)誤包括輸入輸出操作雜亂無章或根本不動(dòng)作,錯(cuò)誤的原因有:輸入輸出程序沒有和I/O

硬件協(xié)調(diào)好(如地址錯(cuò)誤、寫入的控制字和規(guī)定的I/O

操作不一致等);時(shí)間上沒有同步;硬件中還存在故障。結(jié)果不正確。目標(biāo)系統(tǒng)基本上已能正常操作,但控制有誤動(dòng)作或者輸出的結(jié)果不正確。這類錯(cuò)誤大多是由于程序中計(jì)算的錯(cuò)誤引起的。9.5 單片機(jī)應(yīng)用系統(tǒng)調(diào)試軟件調(diào)試方法軟件調(diào)試方法程序跳轉(zhuǎn)錯(cuò)。這種錯(cuò)誤的現(xiàn)象是程序運(yùn)行不到指定的地方,或發(fā)生死循環(huán),通常是由于錯(cuò)用了指令或設(shè)錯(cuò)了標(biāo)號(hào)。程序錯(cuò)誤。對于計(jì)算程序,經(jīng)過反復(fù)測試后,才能驗(yàn)證它的正確性。動(dòng)態(tài)錯(cuò)誤。用單步、斷點(diǎn)仿真運(yùn)行命令,一般只能測試目標(biāo)系統(tǒng)的靜態(tài)功能。目標(biāo)系統(tǒng)的動(dòng)態(tài)性能要用全速仿真命令來測試,這時(shí)應(yīng)選中目標(biāo)機(jī)中晶振電路工作。加電復(fù)位電路的錯(cuò)誤。排除硬件和軟件故障后,將EPROM

和CPU插上目標(biāo)系統(tǒng),若能正常運(yùn)行,應(yīng)用系統(tǒng)的開發(fā)研制便完成。若目標(biāo)機(jī)工作不正常,主要是加電復(fù)位電路出現(xiàn)故障造成的。9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例智能溫度計(jì)設(shè)計(jì)DS18B20

數(shù)字式溫度傳感器一線工作協(xié)議流程是:初始化→ROM

操作指令→存儲(chǔ)器操作指令→數(shù)據(jù)傳輸。其工作時(shí)序包括初始化時(shí)序、寫時(shí)序和讀時(shí)序。DS18B20

溫度傳感器組成結(jié)構(gòu)圖9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例智能溫度計(jì)設(shè)計(jì)硬件設(shè)計(jì)打開Proteus

ISIS,在ProteusISIS

編輯窗口中添加元件后按繪圖程序繪制的電路圖。源程序設(shè)計(jì)DS18B20遵循單總線協(xié)議,每次測量必須具有4個(gè)過程:初始化;傳送ROM指令;傳送RAM命令;數(shù)據(jù)交換。9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例智能溫度計(jì)設(shè)計(jì)程序調(diào)試與運(yùn)行結(jié)果生成運(yùn)行的HEX文件。按照前面所介紹的Keil

C51

μVision3IDE使用方法對系統(tǒng)建立項(xiàng)目,選定合適的單片機(jī)AT89C51,創(chuàng)建一個(gè)測溫的新文件,并將上述的源程序進(jìn)行編輯和選項(xiàng)操作進(jìn)行編譯生成測溫的HEX文件。調(diào)試與仿真。在Proteus

ISIS編輯窗口中選取AT89C51元件,編輯元件屬性,選擇在KeilC51下生成的測溫HEX文件并生成設(shè)計(jì)的DSN文件,對程序進(jìn)行調(diào)試和仿真。9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例鐵路機(jī)車軸溫報(bào)警裝置設(shè)計(jì)系統(tǒng)概述傳感器的選擇及信號(hào)傳輸方法為了克服傳統(tǒng)的模擬型溫度傳感器精度低、抗干擾能力差、多點(diǎn)測量不便串行通信等弱點(diǎn),為滿足高速列車的需要,采用新型數(shù)字式傳感器DS18B20,將其安裝于每一個(gè)測溫點(diǎn),可一次測出所安裝位置的溫度值。利用傳感器內(nèi)部全球唯一的地址代碼及預(yù)先編制好的傳感器編碼,將每一個(gè)測溫點(diǎn)的溫度值和安裝位置傳輸?shù)絾纹瑱C(jī),通過單片機(jī)集中分析、處理。系統(tǒng)可對高速鐵道列車機(jī)車的軸箱軸承、牽引電機(jī)軸承、抱軸軸承以及車輛的軸箱軸承的溫度進(jìn)行在線監(jiān)測。9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例鐵路機(jī)車軸溫報(bào)警裝置設(shè)計(jì)系統(tǒng)的特點(diǎn)采用高精度數(shù)字化溫度傳感器,新的溫度標(biāo)定及數(shù)據(jù)處理方法,選用高精度數(shù)字化溫度,傳感器直接輸出二進(jìn)制數(shù),系統(tǒng)為全數(shù)字化電路,抗干擾能力強(qiáng)。系統(tǒng)采用模塊化設(shè)計(jì),可擴(kuò)展性強(qiáng)。主機(jī)與接線盒之間采用雙根單總線串行方式傳輸數(shù)據(jù),車下各個(gè)接線盒之間采用環(huán)行接線,不會(huì)因某一處中斷而影響正常工作,因此系統(tǒng)工作可靠。9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例鐵路機(jī)車軸溫報(bào)警裝置設(shè)計(jì)系統(tǒng)的硬件構(gòu)成機(jī)車軸溫報(bào)警硬件結(jié)構(gòu)圖9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例鐵路機(jī)車軸溫報(bào)警裝置設(shè)計(jì)系統(tǒng)的硬件構(gòu)成軸溫監(jiān)測裝置傳感器布置圖9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例鐵路機(jī)車軸溫報(bào)警裝置設(shè)計(jì)系統(tǒng)軟件系統(tǒng)主程序簡化流程9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例鐵路機(jī)車軸溫報(bào)警裝置設(shè)計(jì)可靠性和抗干擾設(shè)計(jì)提高系統(tǒng)電源的抗干擾能力:電源的輸入和輸出端加有參數(shù)適當(dāng)?shù)拇怒h(huán)來吸收、抑制干擾,并在輸入端加裝參數(shù)適當(dāng)?shù)臑V波器來減弱干擾。系統(tǒng)主板的抗干擾設(shè)計(jì):將主電路板上的電源線和地線加粗,并使地線有效接地,可以使瞬態(tài)干擾的能量很快釋放。系統(tǒng)軟件的抗干擾設(shè)計(jì)。系統(tǒng)軟件具有自復(fù)位能力,當(dāng)受強(qiáng)干擾導(dǎo)致程序混亂時(shí),系統(tǒng)能自動(dòng)復(fù)位,初始化后繼續(xù)正常工作9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例鐵路機(jī)車軸溫報(bào)警裝置設(shè)計(jì)總結(jié)采用新型數(shù)字式溫度傳感器,利用單根串行總線傳輸數(shù)字信號(hào)等新技術(shù),設(shè)計(jì)的新型高速機(jī)車軸溫監(jiān)測系統(tǒng)具有測溫精度高、抗干擾能力強(qiáng)、工作穩(wěn)定可靠的特點(diǎn),滿足了高速機(jī)車的需要。運(yùn)行結(jié)果證明了其可行性和實(shí)用性,也可應(yīng)用于其他類型的高速機(jī)車和車輛。這套系統(tǒng)對高速機(jī)車的安全運(yùn)行具有重要作用。9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例基于TAX2

的列車輪軌潤滑系統(tǒng)設(shè)計(jì)概述鐵路列車輪軌潤滑可以明顯減少輪軌的磨損,大大延長車輪和鋼軌的使用壽命,減少能源的不必要損耗,減少機(jī)車車輛和線路維修工作,減少脫軌傾向,提高鐵路運(yùn)行的安全性,降低輪對的扭振,提高機(jī)車車輛運(yùn)行的平穩(wěn)性。為了充分利用資源,提高信息化和控制的自動(dòng)化水平,利用機(jī)車既有的機(jī)車安全信息綜合監(jiān)測裝置TAX

箱(以下簡稱TAX)獲取機(jī)車當(dāng)前的速度和位置等信息,通過計(jì)算機(jī)控制算法計(jì)算自動(dòng)控制噴脂的過程。9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例基于TAX2

的列車輪軌潤滑系統(tǒng)設(shè)計(jì)輪軌潤滑系統(tǒng)的組成及功能輪軌潤滑控制裝置系統(tǒng)圖9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例基于TAX2

的列車輪軌潤滑系統(tǒng)設(shè)計(jì)輪軌潤滑系統(tǒng)的組成及功能TAX2

型機(jī)車安全信息綜合平臺(tái)是將一些與機(jī)車運(yùn)行有關(guān)的輔助安全信息及數(shù)據(jù)傳輸設(shè)備,以標(biāo)準(zhǔn)插接模塊單元的結(jié)構(gòu)置于工作平臺(tái)中,一方面該工作平臺(tái)中的通信記錄單元獲取監(jiān)控裝置的時(shí)間、公里標(biāo)、速度和車次及列車運(yùn)行實(shí)時(shí)信息,另一方面通過裝置中的信息傳輸單元,可以將列車運(yùn)行的信息實(shí)時(shí)的傳送給各個(gè)模塊單元。9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例基于TAX2

的列車輪軌潤滑系統(tǒng)設(shè)計(jì)輪軌潤滑系統(tǒng)的組成及功能利用機(jī)車已有的TAX

型開放式信息平臺(tái)上留有的備用單元模塊,采用統(tǒng)一的硬件規(guī)范和軟件通信協(xié)議,設(shè)計(jì)基于51

單片機(jī)AT89C51的功能模塊,該模塊通過信息平臺(tái)傳送的列車實(shí)時(shí)信息來判斷并控制噴脂。本方案的信息來源可靠性高,并且模塊集中化、系統(tǒng)化,便于分析和統(tǒng)一管理。9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例基于TAX2

的列車輪軌潤滑系統(tǒng)設(shè)計(jì)輪軌潤滑系統(tǒng)的組成及功能系統(tǒng)功能框圖9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例基于TAX2

的列車輪軌潤滑系統(tǒng)設(shè)計(jì)系統(tǒng)硬件設(shè)計(jì)為完成系統(tǒng)功能,整個(gè)系統(tǒng)主要硬件模塊包括:CPU(ATEMEL

AT89C51);TAX

信息平臺(tái)(通過RS-485通信提供機(jī)車實(shí)時(shí)運(yùn)行信息);壓力檢測模塊(線性光隔離放大電路);A/D

轉(zhuǎn)換模塊;電空閥控制模塊(控制電空閥輸出,防誤動(dòng)及前向和后向電空閥動(dòng)作);狀態(tài)顯示模塊;IC

卡轉(zhuǎn)儲(chǔ)及地面數(shù)據(jù)處理模塊;機(jī)車換向和選向模塊及手動(dòng)實(shí)驗(yàn)?zāi)K等組成。系統(tǒng)以嵌入式單片機(jī)AT89C51

為核心,輔以外圍功能電路,組成在列車安全信息平臺(tái)下的控制功能模塊。9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例基于TAX2

的列車輪軌潤滑系統(tǒng)設(shè)計(jì)系統(tǒng)硬件設(shè)計(jì)隔離的RS-485

接口電路:

TAX通信接口要求各檢測單元都應(yīng)采用帶有電位隔離的RS-485通訊接口芯片,且須保證當(dāng)自身工作狀態(tài)不正常時(shí),不會(huì)影響系統(tǒng)其他部分的正常通訊。風(fēng)管壓力檢測電路設(shè)計(jì)。TAX要求各檢測單元的對外輸入/輸出信號(hào)在電氣上需保證與檢測單元本身電源及系統(tǒng)電源隔離。在噴脂電磁閥的氣流管處加一壓力傳感器,當(dāng)噴脂時(shí)電磁閥開啟,壓力傳感器檢測到電磁閥的氣壓值的變化,并且隨著壓力的變化傳感器輸出的電流量值也隨之變化,通過對這一值的變化來判斷噴脂是否成功。9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例基于TAX2

的列車輪軌潤滑系統(tǒng)設(shè)計(jì)系統(tǒng)硬件設(shè)計(jì)噴脂控制電路:機(jī)車在不同方向上運(yùn)行時(shí),分別由不同方向的供氣電空閥控制不同方向的噴脂。方向選擇電路的設(shè)計(jì)就是以判斷和控制使電控器實(shí)現(xiàn)與機(jī)車運(yùn)行方向一致。機(jī)車噴脂時(shí),電空閥開啟電壓是110

V,模塊完全采用CPU

來進(jìn)行判斷、控制,實(shí)現(xiàn)系統(tǒng)噴脂的集成化、智能化。系統(tǒng)設(shè)計(jì)了噴脂控制電路來實(shí)現(xiàn)弱電控制強(qiáng)電,同時(shí)本電路也有效地防止了電空閥在系統(tǒng)上電或復(fù)位時(shí)的亂噴現(xiàn)象,增強(qiáng)了系統(tǒng)的可靠性。9.6 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)舉例基于TAX2

的列車輪軌潤滑系統(tǒng)設(shè)計(jì)系統(tǒng)軟件設(shè)計(jì)軟件設(shè)計(jì)原則:軟件編制應(yīng)符合[GB

8566—88]《計(jì)算機(jī)軟件開發(fā)規(guī)范》的要求。置上電后,各計(jì)算機(jī)部件應(yīng)能對硬件進(jìn)行自檢,并應(yīng)能對程序代碼進(jìn)行檢查。軟件應(yīng)有較強(qiáng)的抗干擾能力,對程序運(yùn)行異常后應(yīng)有自恢復(fù)措施。軟件編制中的防

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論