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

下載本文檔

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

文檔簡介

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

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

51

與匯編語言的混合編程9.69.5

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

系列單片機的Keil

C51

開發(fā)語言KeilC51

語言概述KeilC51

完全支持C

的標準指令和很多用來優(yōu)化51

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

語言擴展指令。KeilC51

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

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

語言編寫單片機應用程序,進行51

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

語言相比,C51

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

語言程序設計相同。9.1 51

系列單片機的Keil

C51

開發(fā)語言C51

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

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

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

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

系列單片機的Keil

C51

開發(fā)語言Keil

C51

的關(guān)鍵字9.1 51

系列單片機的Keil

C51

開發(fā)語言Keil

C51

的關(guān)鍵字9.1 51

系列單片機的Keil

C51

開發(fā)語言Keil

C51

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

的基本數(shù)據(jù)類型程序設計離不開對數(shù)據(jù)的處理。一個程序如果沒有數(shù)據(jù),它就無法工作。數(shù)據(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ù)字的寫法直接寫成十進制,如12345、-12345、

0等,也可以寫成十六進制,寫成十六進制時必須以0x

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

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

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

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

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

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

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

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

的常量位標量位標量是C51

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

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

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

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

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

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

[存儲類型]

變量名變量的存儲種類有4

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

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

的變量存儲器類型——Keil

C51

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

的變量存儲器類型存儲器類型就是指該變量在C51

硬件系統(tǒng)中所使用的存儲區(qū)域,并在編譯時能夠準確定位。一個變量除了與存儲單元相對應外,還與它所在的存儲空間有關(guān),即還需要指出其存儲類型。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

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

特殊功能寄存器型:51

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

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

區(qū)的高128

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

對其進行定義。sbit可尋址位:在51

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

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

的變量存儲器模式定義變量時如果省略存儲器類型,Keil

C51

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

或LARGE

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

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

存儲模式中把變量定位在51

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

單片機系統(tǒng)的外部數(shù)據(jù)存儲器中,外部數(shù)據(jù)存儲器最多可有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ù)類型名”可以按用戶的習慣或根據(jù)任務的需要來決定。關(guān)鍵字typedef

的作用只是將C

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

的指針它的指針也可以簡單理解為“存儲某個地址的變量”。C

語言中指針變量的一般定義形式為:類型標識符*

變量名;C

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

的構(gòu)造類型結(jié)構(gòu)結(jié)構(gòu)是將若干個不同類型的數(shù)據(jù)變量有序地組合在一起而形成的一種數(shù)據(jù)的集合體。組成該集合體的各個數(shù)據(jù)變量稱為結(jié)構(gòu)成員,整個集合體使用一個單獨的結(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)存空間,只是在時間上交錯開,以提高內(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)造類型枚舉枚舉的定義應當列出該類型變量的可取值,其形式為:“枚舉”實際上是一個有名字的某些整型數(shù)常量的集合,這些整型數(shù)常量是該類型變量可取的所有的合法值,即在“枚舉”類型的定義中列舉出所有可能的取值。enum

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

語言程序設計對照LOOP:CPLP1.0NOPSIMPLOOPEND也可以用C51

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

口的第0

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

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

中調(diào)用的max(

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

中傳遞給max(

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

和b,存放在何處可使匯編程序能夠獲取它們的值;返回值傳遞,匯編語言計算得到的結(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)的每個匯編語句前加“asm”預編譯指令。方法2:把asm

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

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

函數(shù)需要對Keil

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

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

程序的方法與在C

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

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

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

Assembler

SRC

File”和“Assemble

SRCFile”選項,編譯模塊文件,得到相應的a51

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

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

C51

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

均已正確安裝在C:\Program

Files

的目錄里,把C:\ProgramFiles\LabcenterElectronics\Proteus7Professional\MODELS\VDM51.dll復制到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ù)實際情況寫,不要和原來的重復。進入KeilC

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

與Keil

C51

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

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

與Keil

C51

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

VSM

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

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

與Keil

C51

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

添加執(zhí)行文件Proteus

與KeilC51

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

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

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

與Keil

C51

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

插座上,代替目標板上的CPU

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

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

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

存儲器用仿真器的讀出/修改目標系統(tǒng)擴展RAM

或I/0

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

存儲器,然后用讀樣機擴展RAM

或I/0

口的命令讀出外部RAM

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

電路和CPU

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

電路沒有加電,或總線信號對ALE、WR

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

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

口的讀寫操作和I/O

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

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

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

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

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

顯示器從0~9

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

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

CPU不響應任何中斷或不響應某一個中斷;錯循環(huán)響應中斷:這種錯誤是CPU

循環(huán)地響應某一個中斷,使CPU

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

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

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

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

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

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

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

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

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

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

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

ISIS,在ProteusISIS

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

C51

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

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

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

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

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

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

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

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

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

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

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

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

AT89C51);TAX

信息平臺(通過RS-485通信提供機車實時運行信息);壓力檢測模塊(線性光隔離放大電路);A/D

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

卡轉(zhuǎn)儲及地面數(shù)據(jù)處理模塊;機車換向和選向模塊及手動實驗模塊等組成。系統(tǒng)以嵌入式單片機AT89C51

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

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

接口電路:

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

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

V,模塊完全采用CPU

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論