濟大單片機實驗指導書_第1頁
濟大單片機實驗指導書_第2頁
濟大單片機實驗指導書_第3頁
濟大單片機實驗指導書_第4頁
濟大單片機實驗指導書_第5頁
已閱讀5頁,還剩34頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機實驗指導書電子信息與通信工程系2014-3-6第一部分 單片機功能及結構介紹MCS-51單片機內部結構MCS-51的引腳說明:MCS-51系列單片機AT89SXX的引腳配置圖如下:Pin19:時鐘XTAL1腳,片內振蕩電路的輸入端。Pin18:時鐘XTAL2腳,片內振蕩電路的輸出端。AT89SXX的時鐘有兩種方式,一種是片內時鐘振蕩方式,但需在18和19腳外接石英晶體(0-33MHz)和振蕩電容,振蕩電容的值一般取10p-30p。另外一種是外部時鐘方式,即將XTAL1接地,外部時鐘信號從XTAL2腳輸入。Pin9:RESET/Vpd復位信號復用腳。8051的初始態如下表:特殊功能寄存器初

2、始態特殊功能寄存器初始態ACC00HB00HPSW00HSP07HDPH00HTH000HDPL00HTL000HIPxxx00000BTH100HIE0xx00000BTL100HTMOD00HTCON00HSCONxxxxxxxxBSBUF00HP0-P31111111BPCON0xxxxxxxB8051的復位方式可以是自動復位,也可以是手動復位,見下圖。此外,RESET/Vpd還是一復用腳,Vcc掉電期間,此腳可接上備用電源,以保證單片機內部RAM的數據不丟失。Pin30:ALE/當訪問外部程序器時,ALE(地址鎖存)的輸出用于鎖存地址的低位字節。而訪問內部程序存儲器時,ALE端將有一個

3、1/6時鐘頻率的正脈沖信號,這個信號可以用于識別單片機是否工作,也可以當作一個時鐘向外輸出。Pin29:當訪問外部程序存儲器時,此腳輸出負脈沖選通信號,PC的16位地址數據將出現在P0和P2口上,外部程序存儲器則把指令數據放到P0口上,由CPU讀入并執行。Pin31:EA/Vpp程序存儲器的內外部選通線,當EA為高電平并且程序地址小于4kB時,讀取內部程序存儲器指令數據,而超過4kB地址則讀取外部指令數據。如EA為低電平,則不管地址大小,一律讀取外部程序存儲器指令。MCS-51單片機的指令時序MCS-51的時序單位有四個:節拍、狀態、機器周期和指令周期。1個節拍(P)=1個振蕩脈沖周期1個狀態

4、(S)=2個節拍=2個振蕩脈沖周期1個機器周期(T)=6個狀態=12個振蕩脈沖周期1個指令周期=幾個周期周期MCS-51單片機存儲器結構程序存儲器MCS-51具有64kB程序存儲器尋址空間,對于內部有ROM的AT89SXX等單片機,正常運行時,則需接高電平,使CPU先從內部的程序存儲中讀取程序,當PC值超過內部ROM的容量時,才會轉向外部的程序存儲器讀取程序。0000H0002H單元,系統復位后,PC為0000H,單片機從0000H單元開始執行程序,如果程序不是從0000H單元開始,則應在這三個單元中放一條無條件轉移指令,讓CPU直接去執行用戶指定的程序。0003H002AH,這40個單元各有

5、用途,它們被均勻地分為五段,它們的定義如下:0003H000AH外部中斷0中斷地址區。000BH0012H定時/計數器0中斷地址區。0013H001AH外部中斷1中斷地址區。001BH0022H定時/計數器1中斷地址區。0023H002AH串行中斷地址區。數據存儲器MCS-51單片機的數據存儲器在物理上和邏輯上都分為兩個地址空間,一個是內部數據存儲區和一個外部數據存儲區。MCS-51內部RAM有128或256個字節的用戶數據存儲(不同的型號有分別)。MCS-51的數據存儲器均可讀寫,部分單元還可以位尋址。8051內部RAM共有256個單元,這256個單元分為兩部分。其一是地址從00H7FH單元

6、(共128個字節)為用戶數據RAM。從80HFFH地址單元(也是128個字節)為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結構分布。在00H1FH共32個單元中被均勻地分為四塊,每塊包含八個8位寄存器,均以R0R7來命名,稱為通用寄存器。由程序狀態字寄存器(PSW)來管理它們,CPU只要定義PSW的第3和第4位(RS0和RS1),即可選中這四組通用寄存器。對應的編碼關系如圖2所示。單元地址MSB位地址LSB2FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H2DH6FH6EH6DH6CH6BH6AH69H68H2CH67H66H

7、65H64H63H62H61H60H2BH5FH5EH5DH5CH5BH5AH59H58H2AH57H56H55H54H53H52H51H50H29H4FH4EH4DH4CH4BH4AH49H48H28H47H46H45H44H43H42H41H40H27H3FH3EH3DH3CH3BH3AH39H38H26H37H36H35H34H33H32H31H30H25H2FH2EH2DH2CH2BH2AH29H28H24H27H26H25H24H23H22H21H20H23H1FH1EH1DH1CH1BH1AH19H18H22H17H16H15H14H13H12H11H10H21H0FH0EH0DH

8、0CH0BH0AH09H08H20H07H06H05H04H03H02H01H00HMCS-51單片機存儲器結構特殊功能寄存器MCS-51有21個特殊功能寄存器,它們被離散地分布在內部RAM的80HFFH地址中,用戶不能修改其結構。表2是特殊功能寄存器分布一覽表。標識符號地址寄存器名稱ACC0E0H累加器B0F0HB寄存器PSW0D0H程序狀態字SP81H堆棧指針DPTR82H、83H數據指針(16位)含DPL和DPHIE0A8H中斷允許控制寄存器IP0B8H中斷優先控制寄存器P080HI/O口0寄存器P190HI/O口1寄存器P20A0HI/O口2寄存器P30B0HI/O口3寄存器PCON8

9、7H電源控制及波特率選擇寄存器SCON98H串行口控制寄存器SBUF99H串行數據緩沖寄存器TCON88H定時控制寄存器TMOD89H定時器方式選擇寄存器TL08AH定時器0低8位TH08CH定時器0高8位TL18BH定時器1低8位TH18DH定時器1高8位程序計數器PC(program Counter)PC是一個16位的計數器,用于存放一條要執行的指令地址,尋址范圍為64kB,PC有自動加1功能,即完成了一條指令的執行后,其內容自動加1。PC本身并沒有地址,因而不可尋址,用戶無法對它進行讀寫,但是可以通過轉移、調用、返回等指令改變其內容,以控制程序按我們的要求去執行。累加器ACC(Accum

10、ulator)累加器A是一個最常用的專用寄存器,大部分單操作指令的一個操作數取自累加器,很多雙操作數指令中的一個操作數也取自累加器。加、減、乘、除法運算的指令,運算結果都存放于累加器A或AB累加器對中。寄存器B在乘除法指令中,乘法指令中的兩個操作數分別取自累加器A和寄存器B,其結果存放于AB寄存器對中。除法指令中,被除數取自累加器A,除數取自寄存器B,結果商存放于累加器A,余數存放于寄存器B中。程序狀態字(Program Status Word)程序狀態字是一個8位寄存器,用于存放程序運行的狀態信息,這個寄存器的一些位可由軟件設置,有些位則由硬件運行時自動設置的。寄存器的各位定義如下,其中PS

11、W.1是保留位,未使用。下表是它的功能說明,并對各個位的定義介紹如下:程序狀態字位序PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0位標志CYACF0RS1RS0OV-PPSW.7(CY)進位標志位,此位有兩個功能:一是存放執行某寫算數運算時,存放進位標志,可被硬件或軟件置位或清零。二是在位操作中作累加位使用。PSW.6(AC)輔助進位標志位,當進行加、減運算時當有低4位向高4位進位或借位時,AC置位,否則被清零。AC輔助進位位也常用于十進制調整。PSW.5(F0)用戶標志位,供用戶設置的標志位。PSW.4、PSW.3(RS1和 RS0)寄存器組選擇位。可參見本

12、章的圖2定義。PSW.2(OV)溢出標志。帶符號加減運算中,超出了累加器A所能表示的符號數有效范圍(-128+127)時,即產生溢出,OV=1。表明運算運算結果錯誤。如果OV=0,表明運算結果正確。PSW.0(P)奇偶校驗位。聲明累加器A的奇偶性,每個指令周期都由硬件來置位或清零,若值為1的位數奇數,則P置位,否則清零。數據指針(DPTR)數據指針為16位寄存器,編程時,既可以按16位寄存器來使用,也可以按兩個8位寄存器來使用,即高位字節寄存器DPH和低位字節DPL。堆棧指針SP(Stack Pointer)堆棧是一種數據結構,它是一個8位寄存器,它指示堆棧頂部在內部RAM中的位置。系統復位后

13、,SP的初始值為07H,使得堆棧實際上是從08H開始的。I/O口專用寄存器(P0、P1、P2、P3)I/O口寄存器P0、P1、P2和P3分別是MCS-51單片機的四組I/O口鎖存器。數據傳送都統一使用MOV指令來進行,這樣的好處在于,四組I/O口還可以當作寄存器直接尋址方式參與其他操作。定時/計數器(TL0、TH0、TL1和TH1)MCS-51單片機中有兩個16位的定時/計數器T0和T1,它們由四個8位寄存器組成的,兩個16位定時/計數器卻是完全獨立的。我們可以單獨對這四個寄存器進行尋址,但不能把T0和T1當作16位寄存來使用。定時/計數器方式選擇寄存器(TMOD)TMOD寄存器是一個專用寄存

14、器,用于控制兩個定時計數器的工作方式。串行數據緩沖器(SBUF)串行數據緩沖器SBUF用來存放需發送和接收的數據,它由兩個獨立的寄存器組成,一個是發送緩沖器,另一個是接收緩沖器,要發送和接收的操作其實都是對串行數據緩沖器進行。MCS-51定時/計數器定時/計數器的工作方式MCS-51單片機內部的定時/計數器的結構如圖所示,定時器T0特性功能寄存器TL0(低8位)和TH0(高8位)構成,定時器T1由特性功能寄存器TL1(低8位)和TH1(高8位)構成。特殊功能寄存器TMOD控制定時寄存器的工作方式,TCON則用于控制定時器T0和T1的啟動和停止計數,同時管理定時器T0和T1的溢出標志等。TMOD

15、和TCON這兩個特殊功能寄存器的格式參見下表:1.定時/計數器的方式控制字TMOD,字節地址為89H,其格式如表1:D7D6D5D4D3D2D1D0GATAM1M0GATAM1M0T1方式字段T0方式字段2.定時器控制積存器TCON,字節地址為88H,位地址為88H8FH,其格式如表2:TCON結構D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0MCS-51的中斷系統2.中斷處理流程CPU響應中斷請求后,就立即轉入執行中斷服務程序。不同的中斷源、不同的中斷要求可能有不同的中斷處理方法,但它們的處理流程一般都如下所述。現場保護和現場恢復中斷開始前需將個有關寄存器的

16、內容壓入堆棧進行保存,以便在恢復原來程序時使用。中斷服務程序完成后,繼續執行原先的程序,就需把保存的現場內容從堆棧中彈出,恢復積存器和存儲單元的原有內容。中斷打開和中斷關閉在中斷處理進行過程中,可能又有新的中斷請求到來,這里規定,現場保護和現場恢復的操作是不允許打擾的,否則保護和恢復的過程就可能使數據出錯,為此在進行現場保護和現場恢復的過程中,必須關閉總中斷,屏蔽其它所有的中斷,待這個操作完成后再打開總中斷,以便實現中斷嵌套。中斷服務程序中斷服務程序就是執行中斷處理的具體內容,一般以子程序的形式出現。中斷返回在MCS-51單片機中,中斷返回是通過一條專門的指令RETI實現的。3.MCS-51的

17、中斷源8051有5個中斷源,它們是兩個外中斷INT0(P3.2)和INT1(P3.3)、兩個片內定時/計數器溢出中斷TF0和TF1,一個是片內串行口中斷TI或RI,這幾個中斷源由TCON和SCON兩個特殊功能寄存器進行控制。TCON寄存器的結構如下:TCOND7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88HIE1:外部邊沿觸發中斷1請求標志,其功能和操作類似于TF0。IT1:外部中斷1類型控制位, IT1=1,邊沿觸發。IT=0是電平觸發。IE0:外部邊沿觸發中斷0請求標志,其功能和操作類似于IE1。IT0:外

18、部中斷0類型控制位,其功能和操作類似于IE1。SCON是串行口控制寄存器,地址為98H,其格式如下:SCOND7D6D5D4D3D2D1D0-TIRI位地址99H98HTI:MCS-51串行口的發送中斷標志,在串行口以方式0發送時,每當發送完8位數據,由硬件置位。如果以方式1、方式2或方式3發送時,在發送停止位的開始時TI被置1,TI=1表示串行發送器正向CPU發出中斷請求,向串行口的數據緩沖器SBUF寫入一個數據后就立即啟動發送器繼續發送。但是CPU響應中斷請求后,轉向執行中斷服務程序時,并不清零TI,TI必須由用戶的中斷服務程序清“0”,即中斷服務程序必須有“CLR TI”或“ANL SC

19、ON, #0FDH”等指令來清零TI。RI:串行口接收中斷標志.若串行口接收器允許接收,并以方式0工作,每當接收到8位數據時,RI被置1,若以方式1、2、3方式工作,當接收到半個停止位時,TI被置1,當串行口一方式2或3方式工作,且當SM2=1時,僅當接收到第9位數據RB8為1后,同時還要在接收到半個停止位時,RI被置1。RI為1表示串行口接收器正向CPU申請中斷。同樣RI標志栩栩如生由用戶的軟件清“0”。4.中斷的控制IE的結構格式如下。IED7D6D5D4D3D2D1D0EA-ESET1EX1ET0EX0位地址AFHACHABHAAHA9HA8HEA:中斷總控制位,EA=1,CPU開放中斷

20、。EA=0,CPU禁止所有中斷。ES:串行口中斷控制位,ES=1允許串行口中斷,ES=0,屏蔽串行口中斷。ET1:定時/計數器T1中斷控制位。ET1=1,允許T1中斷,ET1=0,禁止T1中斷。EX1:外中斷1中斷控制位,EX1=1,允許外中斷1中斷,EX1=0,禁止外中斷1中斷。ET0:定時/計數器T0中斷控制位。ET1=1,允許T0中斷,ET1=0,禁止T0中斷。EX0:外中斷0中斷控制位,EX1=1,允許外中斷0中斷,EX1=0,禁止外中斷0中斷。MCS-51有兩個中斷優先級,即高優先級和低優先級,每個中斷源都可設置為高或低中斷優先級。MCS-51還有一個申請優先級寄存IP,IP的格式如

21、下,字節地址是B8H。IPD7D6D5D4D3D2D1D0-PSPT1Px1PT0PX0位地址BCHBBHBAHB9HB8HPS:串行口中斷口優先級控制位,PS=1,串行口中斷聲明為高優先級中斷,PS=0,串行口定義為低優先級中斷。PT1:定時器1優先級控制位。PT1=1,聲明定時器1為高優先級中斷,PT1=0定義定時器1為低優先級中斷。PX1:外中斷1優先級控制位。PT1=1,聲明外中斷1為高優先級中斷,PX1=0定義外中斷1為低優先級中斷。PT0:定時器0優先級控制位。PT1=1,聲明定時器0為高優先級中斷,PT1=0定義定時器0為低優先級中斷。PX0:外中斷0優先級控制位。PT1=1,聲

22、明外中斷0為高優先級中斷,PX1=0定義外中斷0為低優先級中斷。5.中斷的響應中斷響應的主要內容就是由硬件自動生成一條長調用LCALL addr16指令,這里的addr16就是程序存儲器中相應的中斷區入口地址,這些中斷源的服務程序入口地址如下:中斷源入口地址外中斷00003H定時/計數器0000BH外中斷10013H定時/計數器0001BH串行口中斷0023H生成LCALL指令后,CPU緊跟著便執行之.首先將PC(程序計數器)的內容壓入堆棧保護斷點,然后把中斷入口地址賦予PC,CPU便按新的PC地址執行程序。MCS-51的串行通信口MCS-51單片機內部有一個全雙工的串行通信口,即串行接收和發

23、送緩沖器(SBUF),這兩個在物理上獨立的接收發送器,既可以接收數據也可以發送數據。但接收緩沖器只能讀出不能寫入,而發送緩沖器則只能寫入不能讀出,它們的地址為99H。這個通信口既可以用于網絡通信,亦可實現串行異步通信,還可以構成同步移位寄存器使用。串行數據通信兩種形式異步通信接收器和發送器有各自的時鐘,它們的工作是非同步的,異步通信用一幀來表示一個字符。同步通信同步通信格式中,發送器和接收器由同一個時鐘源控制,同步傳輸方式去掉了這些起始位和停止位,只在傳輸數據塊時先送出一個同步頭(字符)標志即可。串行數據通信的傳輸速率串行數據傳輸速率有兩個概念,即每秒轉送的位數bps(Bit per seco

24、nd)和每秒符號數波特率(Band rate),在具有調制解調器的通信中,波特率與調制速率有關。2.MCS-51的串行口和控制寄存器串行口控制寄存器MCS-51單片機串行口寄存器結構如圖3所示。SBUF為串行口的收發緩沖器,它是一個可尋址的專用寄存器,其中包含了接收器和發送器寄存器,可以實現全雙工通信。但這兩個寄存器具有同一地址(99H)。MCS-51的串行數據傳輸很簡單,只要向發送緩沖器寫入數據即可發送數據。而從接收緩沖器讀出數據即可接收數據。接收緩沖器前有一級輸入移位寄存器,目的在于接收數據時避免發生數據幀重疊現象。而發送數據時就不需要這樣設置,因為發送時,CPU是主動的,不可能出現這種現

25、象。串行通信控制寄存器SCONSCON是專用寄存器,用于串行數據的通信控制,單元地址是98H,其結構格式如下:SCOND7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI位地址9FH9EH8DH9CH9BH9AH99H98H各控制位功能介紹如下:(1).SM0、SM1:串行口工作方式控制位。(SM0,SM1)=00方式0 (SM0,SM1)=01方式1(SM0,SM1)=10方式2 (SM0,SM1)=11方式3(2).SM2:多機通信控制位。多機通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。接收狀態,當串行口工作于方式2或3,以及SM2=1時,只有當接收

26、到第9位數據(RB8)為1時,才把接收到的前8位數據送入SBUF,且置位RI發出中斷申請,否則會將接受到的數據放棄。當SM2=0時,就不管第位數據是0還是1,都難得數據送入SBUF,并發出中斷申請。工作于方式0時,SM2必須為0。(3).REN:允許接收位。REN用于控制數據接收的允許和禁止,REN=1時,允許接收,REN=0時,禁止接收。(4).TB8:發送接收數據位8。在方式2和方式3中,TB8是要發送的即第9位數據位。在多機通信中同樣亦要傳輸這一位,并且它代表傳輸的地址還是數據,TB8=0為數據,TB8=1時為地址。(5).RB8:接收數據位8。在方式2和方式3中,RB8存放接收到的第9

27、位數據,用以識別接收到的數據特征。(6).TI:發送中斷標志位。可尋址標志位。方式0時,發送完第8位數據后,由硬件置位,其它方式下,在發送或停止位之前由硬件置位,因此,TI=1表示幀發送結束,TI可由軟件清“0”。(7).RI:接收中斷標志位。可尋址標志位。接收完第8位數據后,該位由硬件置位,在其他工作方式下,該位由硬件置位,RI=1表示幀接收完成。電源管理寄存器PCONPCON是為CHMOS型單片機的電源控制設置的專用寄存器,地址是87H,格式如下:PCOND7D6D5D4D3D2D1D0位符號SMOD-GF1GF0PDIDL在CHMOS型單片機中,除SMOD位外,其他位均為虛設的,SMOD

28、是串行口波特率倍增位,當SMOD=1時,串行口波特率加倍。系統復位默認為SMOD=0。中斷允許寄存器IEES為串行中斷允許控制位,ES=1允許串行中斷,ES=0,禁止串行中斷。位符號EA-ESET1EX1ET0EX0位地址AFHAEHADHACHABHAAHA9HA8H第二部分 單片機下載軟件使用說明使用AT89S5X系列單片機必須使用該下載軟件,使用STC系列單片機則不需要使用該軟件。progisp是超強的AT系列芯片下載軟件,它支持所有的AVR芯片的編程,支持AT89S51/AT89S52,支持自定義并口下載編程器,支持自定義串口的下載編程器,支持USBASP編程器,支持并口的并行編程器,

29、支持USBProg編程器,支持自定義編程芯片,支持自定義編程熔絲信息提示信息,支持USBProg的在線升級,支持USBProg-C實現脫機下載,支持自定義漢化信息提示,支持工程管理-可以將所有的配置數據與編程數據打包為單一文件。1、如何安裝?progisp是一個綠色軟件,直接解壓縮即可使用,進入軟件主目錄,運行“progisp.exe”(將該文件設為桌面快捷方式,方便以后操作)即可運行程序。2、如何使用?運行“progisp.exe”后,進入以下界面:按以下步驟進行操作: 選擇芯片:AT89S52。 點擊“調入Flash”,選擇要下載的HEX文件。 點擊“自動”即可完成下載。第三部分 Keil

30、軟件使用說明 利用KeilSoftware可以開發所有8051系列單片機的嵌入式應用。KeilSoftware的8051開發工具提供以下程序,可以用它們來編譯C源碼,匯編源程序,連接和重定位目標文件和庫文件,創建HEX文件,調試目標程序。一、uVision2集成開發環境 uVision2IDE是一個基于Window的開發平臺,包含一個高效的編輯器,一個項目管理器和一個MAKE工具。 uVision2支持所有的KEIL8051工具,包括C編譯器,6過程:u 全功能的源代碼編輯器。u 器件庫用來配置開發工具設置。u 項目管理器用來創建和維護項目ou 集成的MAKE工具可以匯編,編譯和連接嵌入式應用

31、。u 所有開發工具的設置都是對話框形式的。u 真正的源代碼級的對CPU和外圍器件的調試器。u 高級GDI(AGDl)接口用來在目標硬件上進行軟件調試,以及和Monitor-51 進行通信。u 與開發工具手冊和器件數據手冊和用戶指南有直接的鏈接。二、關于開發環境 uVision2界面提供一個菜單,一個工具條以便快速選擇命令按鈕,另外還有源代碼的顯示窗口,對話框和信息顯示。 uVision2允許同時打開瀏覽多個源文件。1、項目管理 工程(project)是由源文件、開發工具選項以及編程說明三部分組成的。 一個單一的uVision2工程能夠產生一個或多個目標程序。產生目標程序的源文件構成“組”。開發

32、工具選項可以對應目標,組或單個文件。uVision2包含一個器件數據庫(devicedatabase),可以自動設置匯編器、編譯器、連接定位器及調試器選項,來滿足用戶充分利用特定微控制器的要求。此數據庫包含:片上存儲器和外圍設備的信息,擴展數據指針(extra data pointer)或者加速器(mathaccelerator)的特性。uVision2可以為片外存儲器產生必要的連接選項:確定起始地址和規模。2、集成功能uVision2的強大功能有助于用戶按期完工。 集成源極瀏覽器利用符號數據庫使用戶可以快速瀏覽源文件。用詳細的符號信息來優化用戶變數存儲器。 文件尋找功能:在特定文件中執行全局

33、文件搜索。 工具菜單:允許在V2集成開發環境下啟動用戶功能。 可配置SVCS接口:提供對版本控制系統的入口。 PCLINT接口:對應用程序代碼進行深層語法分析。 Infineon的EasyCase接口:集成塊集代碼產生。 Infineon的DAVE功能:協助用戶的CPU和外部程序。DAVE工程可被直接輸入uVision2。三、 編輯器和調試器1、源代碼編輯器uVision2編輯器包含了所有用戶熟悉的特性。彩色語法顯像和文件辯識都對C源代碼進行和優化。可以在編輯器內調試程序,它能提供一種自然的調試環境,使你更快速地檢查和修改程序。2、斷點uVision2允許用戶在編輯時設置程序斷點(甚至在源代碼

34、未經編譯和匯編之前)。用戶啟動V2調試器之后,斷點即被激活。斷點可設置為條件表達式,變量或存儲器訪問,斷點被觸發后,調試器命令或調試功能即可執行。 在屬性框(attributescolumn)中可以快速瀏覽斷點設置情況和源程序行的位置。代碼覆蓋率信息可以讓你區分程序中已執行和未執行的部分。3、調試函數語言uVision2中,你可以編寫或使用類似C的數語言進行調試。1).內部函數:如printf, memset, rand及其它功能的函數。2).信號函數:模擬產生CPU的模擬信號和脈沖信號。3).用戶函數:擴展指令范圍,合并重復動作。4、變量和存儲器用戶可以在編輯器中選中變呈來觀察其取值。雙層窗

35、口顯示,可進行以下調整:1).當前函數的局部變量2).用戶在兩個不同watch窗口頁面上的自定義變量3).堆棧調用(callstack)頁面上的調用記錄(樹)(call tree)4).不同格式的四個存儲區四、創建應用如何創建一個新的工程?按如下步驟可建立一個新的工程1、 首先打開Keil軟件的開發環境,如下圖所示。2、 點擊菜單project,選擇new project:3、 輸入工程文件的名字,選擇你要保存的路徑,比如保存到Keil目錄里,工程文件的名字為test,如下圖所示,然后點擊保存。4、 這時彈出一個對話框,要求你選擇單片機的型號,你可以根據你使用的單片機來選擇,keil c51幾

36、乎支持所有的51內核的單片機,例如,選擇Atmel公司的AT89C51,可以選擇ATMELAT89C51,然后點擊確定。5、 點擊確定后,彈出一個對話框,如下:詢問是否復制標準8051啟動代碼并將其加入已建工程中。按“是“,進入下一步。6、 接下來要創建一個源程序文件,建立一個匯編或.C文件,如果你已經有源程序文件,可以忽略這一步,點擊菜單FileNew:7、 輸入一個簡單的程序,如下:8、 選擇菜單 FileSave9、 選擇你要保存的路徑,在文件名里輸入文件名,注意一定要輸入擴展名,如果是C程序文件,擴展名為.C,如果是匯編文件,擴展名為.asm(或.a51),如果是ini文件,擴展名為.

37、ini,其他文件類型,比如注解說明文件,可以保存為.txt的擴展名。這里將文件保存為asm結尾的源程序文件,所以擴展名為.asm,保存為test.asm的名字,點擊保存。10、點擊Target1前面的+號,展開里面的內容source Group1:11、用鼠標右鍵點擊Source Group1(注意用鼠標右鍵),彈出一個菜單,選擇Add Files to GroupSource Group1。選擇剛才編寫的文件test.asm如果在上述目錄下看不到該文件,文件類型選All files(*.*),將顯示該目錄下的所有文件。12、點擊Add按鈕,將文件加入工程。注意:在類型Type一欄,選Asse

38、mbly language file。然后,點擊OK按鈕,把文件加入工程。點擊CLOSE按鈕,關閉該對話框。出現如下畫面。13、雙擊test.asm文件,可以打開文件,程序出現變色顯示,說明程序已被系統辨識。五、參數設置1、 接著上圖,用鼠標右鍵點擊Target 1,選擇 Options for Target Target1,出現下圖:Xtal(Mhz):是設置單片機的工作的頻率,默認是24OMHZ,如果單片機的晶振用的是1l.0592Mhz,那么在框里輸入ll.0592(單位是Mhz,所以帶小數點)。Use On-chip ROM(0x00xfff):這個選項是使用片上的Flash Rom,

39、我們知道At89C51有4k的flash Rom,取決于你的應用系統,你的單片機的EA接高電平的話,請選中這個選項,如果單片機的EA接低電平,表示使用外部Rom,不要選中該項。我們在這里選中它。 Off-chip Code memory:表示你在片外接的Rom的開始地址和大小,如果你沒有外接程序存儲器,那么不要填任何數據我們在這里假設使用一個片外的Rom,地址從Ox8000開始(不要填成8000,如果是8000,是10進制的數,一般填16進制的數),Size為外接Rom的大小假設接了一塊0x1000字節的rom。最多可以外接3塊Rom,如果還用了別的地址,就添上。Off-Chip Xdata

40、Memory:那么可以填上你外接的Xdata(外部數據存儲器的起始地址和大小,一般的應用是接一個62256,我們在這里特殊的指定Xdata的起始地址為Ox2000,大小為Ox8000; Code Banking:是使用Code Banking技術keil可以支持程序代碼超過64k的情況,最大可以有2兆的程序代碼。如果代碼超過64k,那么就要使用Code Banking技術,以支持更多的程序空間CodeBanking是一個高級的技術,支持自動的Bank的切換,是建立一個大型系統的需要,比如要在單片機里實現漢字字庫,實現漢字輸入法,都要用到該技術我們在這里不選中它。Memory Model:用鼠標

41、點擊Memory Model的下拉箭頭,會有3個選項。Small:變量存儲在內部ram里Compact:變量存儲在外部ram里,使用頁8位間接尋址Large:變量存儲在外部Ram里,使用16位間接尋址 一般使用Small來存儲變量,就是說單片機優先把變量存儲在內部ram里,如果內部ram不夠了,才會存到外部去Compact的方式要自己通過程序來指定頁的高位地址,編程比較復雜,如果外部ram很少,只有256個字節,那么對該256個字節的讀取就比較快,用MOVXRi,A或MOVX A,Ri指令。 如果超過256字節,那么要不斷地進行切換的話,就比較麻煩。Compact模式適用于比較少的外部ram的

42、情況Large模式,是指變量會優先分配到外部ram里,用MOVX A,DPTR或MOVXDPTR,A來讀取要注意的是,3種存儲方式都支持內部256字節和外部64k字節的ram區別是變量的優先(或默認)存儲在哪里的區別除非你不想把變量存儲在內部ram,才使用后面的Compact,Large模式因為變量存儲在內部ram里,運算速度比存儲在外部ram要快的多,大部分的應用都是選擇Small的模式使用Small的方式:也不是說變量就不可以存儲在外部,一樣可以存儲在外部,只是你要指定,比如:unsigned char xdata a;那么變量a就存儲在外部的ramunsigned char a;變量存儲

43、在內部ram假如用Large的模式:unsigned char xdata a:那么變量a就存儲在外部的ramunsigned char a;變量存儲在外部ram這就是區別,就是說這幾個選項只是影響沒有特別指定變量的存儲空間的時候,默認存儲在哪里,比如上面的變量定義unsigned char a那么我們最好選擇Small Code Rom Size:用鼠標點擊下拉箭頭,將有3個選項:Small:program 2K Or less:適用于89c2051這些芯片,2051只有2k的代碼空間,所以跳轉地址只有2k,編譯的時候會使用ACALLAJMP這些短跳轉指令,而不會使用LCALL,LJMP指令

44、,如果你的代碼跳轉超過2k,那么會出錯。Compact:2k functions,64k program:表示每個子函數的程序大小不超過2k,整個工程可以有64k代碼就是說在main()里可以使用LCALL,LJMP指令,但在子程序里只會使用ACALL,AJMP指令除非你確認你的每個子程序不超過2k,否則不要用Compact方式。Large:64K program:表示程序或子函數都可以大到64k使用code bank還可以更大通常我們都選用該方式Code Rom Size選擇Large方式速度不會比Small慢很多,所以一般沒有必要選擇Compact和Small的方式這里選擇Large方式O

45、perating:點擊下拉箭頭有3個選項: None:表示不使用操作系統 RTX51 Tiny RealTime 0s:表示使用Tiny操作系統 RTX51 Full RealTime 0s:表示使用Full操作系統 Keil c51提供了tiny系統(demo版沒有tiny系統,正版軟件才有),Tiny是一個多任務操作系統,使用定時器0來做任務切換一般用110592Mhz時,切換任務的速度為30毫秒如果有10個任務同時運行,那么切換時間為300毫秒同時不支持中斷系統的任務切換也沒有優先級因為切換的時間太長,實時性大打折扣,多任務情況下(比如5個),輪一次就要150毫秒,150毫秒才處理一個任

46、務,連實現鍵盤掃描這些事情都不行更不要說串口接收,外部中斷等同時切換需要大概1000個機器周期,對cpu的浪費很大,對內部ram的占用也很厲害實際上用到多任務操作系統的情況少之又少關鍵是不適用多任務操作系統一般適合于16位,32位的cpu,不適合8位cpuKeil的多任務操作系統的思想值得學習,特別是任務切換的算法,如何切換任務和保存堆棧等,有一定的研究價值如果熟悉了其切換的方法,可以編寫更好的切換(比如將一次切換的時間從30毫秒改為3毫秒,實用性會好一些。2、 編譯輸出設置(產生.HEX文件)在上圖中,點擊OUTPUT,彈出如下界面:Select Folder for Objects: 為最

47、后生成的可執行文件,選擇文件夾。Name of Executable: 對生成的可執行文件進行命名。Create Hex File:選中小方框,編譯輸出將產生用于最后燒錄的Hex文件,不選中,則不會產生。六、程序調試與仿真程序調試完成以上工作后,就可以對程序進行調試與仿真了。具體步驟如下:1、進行編譯,ProjectBuild Target(Rebuild All Target Files,工程包含文件不止一個)。2、有錯誤出現,在編譯窗口,對錯誤類型和出錯原因有詳細說明,雙擊錯誤標號,就會定位在程序的相應處,修改錯誤,保存,再進行編譯,直到全部通過為止。編譯完全通過后,就可以進行功能仿真了。

48、程序仿真1、 DebugStart/Stop Debug Session圖中,從左邊方框中可觀察程序運行時,R0R7,A,B,SP,PC,PSW等特殊功能寄存器的值,便于及時了解運行結果的對錯。 還可以觀察內部RAM的運行值,例如30H,VIEWmemory window,在地址窗口輸入要觀察地址,內部RAM(I:0X000X7F)30H單元,I:0X30H.從下圖可以看出,運行結果為3。外部存儲器單元(X:0X0000000X00FFFFH)。除此之外,仿真環境還可以觀察、仿真實際外設的運行情況,比如,定時/計數器,串口,P0,P1,P2,P3口,中斷等。觀察外設窗口:點擊Periphera

49、ls按鈕,彈出如下菜單,包含5個功能菜單:Interrupt: 中斷設置與激活。調試技巧:外部中斷INT0對應于P3.2口線,因此,用鼠標單擊PORT 3窗口從右向左數第三位(P3.2口線對應的位),每單擊兩次,觸發一次中斷,原因是外部中斷是下降沿或低電平有效的。外部中斷INT1的試驗方法與外部中斷INT0基本相似。I/O-ports: 包含四個端口,即P0、P1、P2、P3。單擊PORT0,將彈出具體窗口,可以觀察運行的結果。用鼠標可對其進行設置,更改運行時的數據。Serial: 可對串口進行設置,具體如下:Timer:對定時器/計數器進行設置。單擊Timer0,出現如下畫面。第四部分 實驗

50、指導書實驗1、 熟悉單片機開發環境目的:熟悉單片機的開發環境,掌握掌握單片機的編程和調試方法。內容: (1)由撥碼開關輸入開關量到單片機。單片機根據不同的開關量輸出相應的信號,點亮或熄滅LED發光管。 (2)讓小燈進行多種方式顯示。向單片機端口發送不同的數據,點亮LED燈。所需設備:51單片機主控模塊。LED小燈關 開碼撥51單片機實驗原理1:實驗步驟:連接單片機模塊P1口與LED燈的連線,以及P2口與撥碼開關模塊的連線。將P2定義為輸入,接至撥碼開關,把P2口的數據送出到P1口,用LED燈顯示。程序代碼: ORG0000HAJMPMAINORG0040HMAIN:MOVP2,#0FFHMOVA,P2NOPNOPMOVP1,ANOPNOPNOPNOPNOPNOPAJMPMAINEND實驗原理2:實驗步驟:連接單片機模塊P2口與LED燈的連線,控制LED燈有多種顯示方式,如:流水打燈,逐個熄滅/

溫馨提示

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

評論

0/150

提交評論