教學課件-單片機實驗與實訓指導(王曙霞)_第1頁
教學課件-單片機實驗與實訓指導(王曙霞)_第2頁
教學課件-單片機實驗與實訓指導(王曙霞)_第3頁
教學課件-單片機實驗與實訓指導(王曙霞)_第4頁
教學課件-單片機實驗與實訓指導(王曙霞)_第5頁
已閱讀5頁,還剩886頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1.1單片機芯片的內部結構及原理1.2MCS-51系列單片機指令系統

一、單片機的概念

單片機即單片微型計算機,就是將CPU、RAM、ROM、定時/計數器和多種I/O接口電路都集成在一塊芯片上的微型計算機。

二、單片機的類型

MCS-51系列單片機包括許多類型,常用的有80C51子系列、80C52子系列,其配置如表1.1所示。MCS-51系列單片機與AT89C51和87C51芯片內部結構及原理兼容。1.1單片機芯片的內部結構及原理表1.1MCS-51系列單片機配置一覽表

三、MCS-51系列單片機的內部結構

MCS-51單片機結構框圖如圖1.1所示,各功能部件由內部總線連接在一起。

MCS-51單片機芯片內部集成包括下列部件:

(1)一個8位微處理器CPU。

(2)?256B數據存儲器RAM和特殊功能寄存器SFR。

(3)?4KB內部程序存儲器ROM。

(4)兩個定時/計數器,用以對外部事件進行計數,也可用作定時器。

(5)四個8位可編程的I/O(輸入/輸出)并行端口,每個端口既可做輸入,也可做輸出。

(6)一個串行端口,用于數據的串行通信。

(7)具有五個中斷源、兩個優先級的中斷結構。

(8)內部有一個振蕩器和時鐘電路。

(9)有一個可編程全雙工的串行口。

(10)可尋址64KB的外部數據存儲空間和64KB的外部程序存儲器的控制電路。圖1.1MCS-51單片機結構框圖

四、MCS-51系列單片機的引腳功能

MCS-51系列單片機引腳及總線結構如圖1.2所示。

(1)主電源引腳VCC和VSS。

(2)外接晶振引腳XTAL1和XTAL2。

(3)控制或其他電源復用引腳RST/VPD、ALE/和/

VPP。

(4)輸入/輸出引腳P0、P1、P2、P3(共32根)。圖1.2MCS-51系列單片機引腳及總線結構(a)引腳圖;(b)引腳功能分類五、MCS-51系列單片機存儲器結構

1.程序存儲器對于80C51來說,程序存儲器(ROM)的內部地址為0000H~0FFFH,共4KB;外部地址為1000H~FFFFH,共60KB。程序存儲器的結構如圖1.3所示。當=1,程序計數器由內部0FFFH執行到外部1000H時,會自動跳轉;當

=0時,只執行外部程序。對于87C51來說,內部有4KB的EPROM,將它作為內部程序存儲器;80C31內部無程序存儲器,必須外接程序存儲器。圖1.3MCS-51單片機存儲器空間結構圖(a)程序存儲器;(b)內部數據存儲器;(c)外部數據存儲器

80C31最多可外擴64KB程序存儲器,其中6個單元地址具有特殊用途,保留給系統使用,如表1.2所示。其中,0000H是系統的啟動地址,一般在該單元中存放一條絕對跳轉指令;另外0003H、000BH、0013H、001BH和0023H對應5個中斷源的中斷服務入口地址。表1.2MCS-51單片機復位、中斷入口地址

2.內部數據存儲器

MCS-51單片機片內RAM的配置如圖1.3(b)所示。片內RAM為256字節,地址范圍為00H~FFH,分為兩大部分:低128字節(00H~7FH)為真正的RAM區;高128字節

(80H~FFH)為特殊功能寄存器區SFR。

在低128字節RAM中,00H~1FH共32單元是4個通用工作寄存器區。每一個區有8個通用寄存器R0~R7。寄存器和RAM地址對應關系如表1.3所示。RAM中的位尋址區地址表如表1.4所示,SFR特殊功能寄存器地址表如表1.5所示。表1.3寄存器和RAM地址對照表表1.4RAM中的位尋址區地址表表1.5SFR特殊功能寄存器地址表

MCS-51系列單片機指令按照功能可分為數據傳送類指令、算術運算類指令、邏輯運算與循環類指令、程序轉移類指令和位操作類指令。

1.2MCS-51系列單片機指令系統

一、數據傳送類指令

1.訪問RAM和SFR的指令

(1)以A為目的操作數:4.數據交換字節交換:XCHA,Rn ;(A)(Rn)XCHA,direct ;(A)(direct)XCHA,@Ri ;(A)((Ri))半字節交換:XCHDA,@Ri ;(A0~3)((Ri)0~3)SWAPA ;(A0~3)(A4~7)

5.堆棧操作

所謂堆棧是指在片內RAM中按“先進后出,后進先出”原則設置的專用存儲區。數據的進棧和出棧由指針SP統一管理。堆棧操作有如下兩條專用指令:

PUSHdirect ;(SP)←(SP)+1,((SP))←(direct)

POP ??direct ;(direct)←(SP),(SP)←(SP)?-1二、算術運算類指令

1.加法指令

ADDA,Rn ;(A)←(A)+(Rn)

ADDA,direct ;(A)←(A)+(direct)

ADDA,@Ri ;(A)←(A)+((Ri))

ADDA,#data ;(A)←(A)+#data

2.帶進位加法指令

ADDCA,Rn ;(A)←(A)+(Rn)+(C)

ADDCA,direct ;(A)←(A)+(direct)+(C)

ADDCA,@Ri ;(A)←(A)+((Ri))+(C)

ADDCA,#data ;(A)←(A)+#data+(C)3.帶借位減法指令

SUBBA,Rn ;(A)←(A)?-(Rn)?-(C)

SUBBA,direct ;(A)←(A)?-(direct)?-(C)

SUBBA,@Ri ;(A)←(A)?-((Ri))?-(C)

SUBBA,#data ;(A)←(A)?-#data?-(C)

4.乘法指令

MULAB ;(B)(A)←(A)×(B)。A和B中各存放一

;個8位無符號數,指令執行后,16位

;乘積的高8位在B中,低8位存A中5.除法指令

DIVAB ;(A)÷(B)→商在A中,余數在B中

6.加1指令

INCA ;(A)←(A)+1

INCRn ;(Rn)←(Rn)+1

INCdirect ;(direct)←(direct)+1

INC@Ri ;((Ri))←((Ri))+1

INCDPTR ;(DPTR)←(DPTR)+17.減1指令

DECA ;(A)←(A)?-1

DECRn ;(Rn)←(Rn)?-1

DECdirect ;(direct)←(direct)?-1

DEC@Ri ;((Ri))←((Ri))?-1

8.十進制調整指令

DAA;把A中按二進制相加的結果調

整成按BCD碼相加的結果三、邏輯運算與循環類指令

1.“與”操作指令

ANLA,direct ;(A)←(A)∧(direct)

ANLA,Rn ;(A)←(A)∧(Rn)

ANLA,@Ri ;(A)←(A)∧((Ri))

ANLA,#data ;(A)←(A)∧#data

ANLdirect,A ;(direct)←(direct)∧(A)

ANLdirect,#data ;(direct)←(direct)∧#data2.“或”操作指令

ORLA,direct ;(A)←(A)∨(direct)

ORLA,Rn ;(A)←(A)∨(Rn)

ORLA,@Ri ;(A)←(A)∨((Ri))

ORLA,#data ;(A)←(A)∨#data

ORLdirect,A ;(direct)←(direct)∨(A)

ORLdirect,#data ;(direct)←(direct)∨#data3.“異或”操作指令

XRLA,direct ;(A)←(A)

(direct)

XRLA,Rn ;(A)←(A)

(Rn)

XRLA,@Ri ;(A)←(A)

((Ri))

XRLA,#data ;(A)←(A)

#data

XRLdirect,A ;(direct)←(direct)

(A)

XRLdirect,#data ;(direct)←(direct)

#data四、程序轉移類指令

1.無條件轉移指令

絕對(短)轉移指令:

AJMPaddr11 ;(PC0~10)←addr11

長轉移指令:

LJMPaddr16 ;(PC)←addr16

短(相對)轉移指令:

SJMPrel ;(PC)←(PC)+2+rel

間接轉移指令:

JMP @A+DPTR ;(PC)←(A)+(DPTR)2.條件轉移指令

累加器為零(非零)轉移指令:

JZrel ;若(A)=0,則(PC)←(PC)+rel,否則程序順序執行

JNZrel;若(A)≠0,則(PC)←(PC)+rel,否則程序順序執行

減1非零轉移指令:

DJNZRn,rel ;(Rn)←(Rn)?-1,若(Rn)≠0,則

(PC)←(PC)+rel,否則順序執行

DJNZdirect,rel;(direct)←(direct)-1,若(direct)≠0,則

(PC)←(PC)+rel,否則順序執行兩數不等轉

移指令:五、位操作類指令

1.位傳送指令

MOVC,bit ;(CY)←(bit)

MOVbit,C ;(bit)←(CY)

2.位置位和位清零指令

CLRC ;(CY)←0

CLRbit ;(bit)←0

SETBC ;(CY)←1

SETBbit ;(bit)←14.位控制轉移指令

JBbit,rel ;若(bit)=1,則(PC)←(PC)+rel,否則順序執行

JNBbit,rel ;若(bit)=0,則(PC)←(PC)+rel,否則順序執行

JBCbit,rel ;若(bit)=1,則(PC)←(PC)+rel,(bit)←0,否則

順序執行

JC?rel ;若(CY)=0,則(PC)←(PC)+rel,否則順序執

JNC???rel ;若(CY)≠0,則(PC)←(PC)+rel,否則順序執

行2.1QTH-2008XS單片機實驗儀功能介紹2.2QTH-2008XS下載式單片機實驗儀開發環境2.3鍵盤監控程序簡介2.4鍵盤操作說明

QTH-2008XS型號實驗儀自帶下載式CPU和仿真監控程序,不需要仿真器和編程工具,只需通過COM口便可與PC機連接,直接調試實驗程序,是廉價的仿真實驗儀。

QTH-2008XS實驗儀除了一些通用的特性外,還具備如下一些特點。

(1)采用模塊化設計:所有電路單元盡可能獨立開放,提高實驗的自由度、靈活性,各單元模塊可組成多種功能各異的實驗電路,提高學生的創造性,如通過DIP開關來切換鍵盤顯示實驗區是否對用戶開放等。2.1QTH-2008XS單片機實驗儀功能介紹

(2)提供了豐富的外圍芯片:擴展RAM,244、273擴展I/O口,8251與PC機進行串行通信,8253計數器,8255并行擴展實驗進行交通燈等實驗,8259中斷,0809A/D通過調節電位器觀察輸出值的變化,0832D/A編程實現方波及階梯波等波形,164串/并轉換用于顯示電子鐘DS1302的“秒”,138譯碼提供各模塊的選通信號,393分頻—振蕩電路通過分頻得到相應的頻率。

(3)體現了完善的功能:CPLD可編程邏輯實驗——利用下載電纜進行在線編程;RS232與RS485轉換,并通過RS232與PC機通信實驗;12864液晶顯示實驗——顯示中文及英文字符;16×16點陣式LED實驗——移動中文字幕;邏輯加密卡——密碼及內容的讀寫;7289鍵盤顯示實驗——模擬電子鐘;種類齊全的總線實驗(SPI總線的串行EEPROM及看門狗——?X5045、Microwire總線的串行EEPROM——?AT93C46、I2C總線的串行EEPROM——?AT24C16、單總線結構的數字式溫度傳感器——DS18B20、其他總線的電子鐘——DS1302);繼電器實驗——演示單刀雙擲繼電器的常開常閉狀態;直流電機,步進電機,光磁控制風扇,電子音響,打印機接口等實驗。

(4)領先的開發環境:全新的Windows界面版本,支持軟件模擬調試,支持C語言混合碼調試,使C語言調試更加直觀方便。支持ASM、PLM、C語言多模塊混合語言源程序調試。先進的錯誤定位,可直接進入錯誤位置,無需查找錯誤信息。所有軟件均可直接在線修改、編譯、連接、裝載。

一、連接系統電源

QTH-2008XS下載式實驗儀由一組外接電源系統驅動。通電時,先接通目標系統穩壓電源,然后接通PC機和QTH-2008XS下載式實驗儀的電源;斷電時,先關閉PC機和

QTH-2008XS下載式實驗儀電源,然后關閉目標系統穩壓電源。2.2QTH-2008XS下載式單片機實驗儀開發環境

二、QTH-2008XS開發環境的啟動和退出

在正確安裝QTH-2008XS下載式單片機實驗儀軟件后,如果要啟動程序,只需把鼠標指向Windows桌面上的程序圖標(如QTH-2008XS開發系統V2006.1)便可啟動程序。如果已經連接實驗儀,則QTH軟件進入自動搜索狀態。如果QTH自動識別實驗儀連機正常,則直接進入QTH實驗儀開發環境界面。如果沒有連接好實驗儀,則屏幕上出現如圖2.1所示的“連機出錯”提示框;如果只是進入軟件調試,則點擊提示框中的“是(Y)”按鈕。圖2.1“連機出錯”提示框

三、QTH-2008XS開發環境菜單介紹

QTH-2008XS開發環境界面如圖2.2所示。它有許多菜單項,主菜單包含了絕大多數操作命令。用戶通過閱讀菜單項,即可掌握每個菜單命令的具體功能。QTH-2008XS也可以使用下述熱鍵和工具欄圖標快速完成常用菜單項的功能:

文件(F):包括文件有關的操作,如打開、關閉、打印等。

編輯(E):包括拷貝、剪切、粘貼、書簽、查找和替換等。

查看(V):包括工具欄和有關窗口的顯示等。

項目(P):包括編譯和連接等。

調試(D):包括加載目標文件、單步、斷點、全速執行等。

設置(S):包括仿真機的設置、設置文本編輯器、項目屬性等。

外設(O):包含定時器、串行口、中斷等命令。

窗口(W):選擇或改變當前活動窗口及窗口排列方式。

幫助(H):顯示相應幫助文件和鍵操作。圖2.2QTH-2008XS開發環境界面四、QTH-2008XS開發環境使用方法

1.進入QTH-2008XS開發環境

雙擊桌面中QTH-2008XS圖標,出現如圖2.2所示界面。

2.創建程序文件如果要創建一個新的程序文件,可從“文件”菜單中選擇“新建”命令或單擊工具欄上的“新建”命令按鈕,出現如圖2.3所示界面,就可在打開的一個空的源程序窗口中編輯新文件。如果從“文件”菜單中選擇“打開”命令或單擊工具欄上的“打開”命令按鈕,將彈出如圖2.4所示的“打開”對話框,選取正確的路徑和文件名,就可以打開一個以前編譯好的文件。圖2.3新建文件界面

圖2.4“打開”對話框

3.保存文件

若打開一個空的源程序窗口后,應先將其保存成擴展名為?.ASM的源程序,如圖2.5所示,以防止程序丟失。若用C語言編制源程序時,則擴展名為?.C。

4.輸入程序

將編寫好的程序輸入到保存的窗口中,如圖2.6所示。圖2.5保存文件圖2.6輸入程序

5.編譯及連接源程序當源程序編制好后,必須對源程序進行編譯及連接操作。在圖2.7的“項目”菜單中選擇“編譯當前文件”命令,或者單擊工具欄上的“編譯”命令按鈕,QTH-2008XS實驗儀接收到編譯命令后,可自動地對當前正在使用的程序文件進行在線編譯。編譯結束后,信息欄窗口下面出現如圖2.8所示窗口,顯示當前程序的編譯狀況。當編譯發生錯誤時,信息窗口中的錯誤信息自動與源文件關聯,提示出錯的位置,如圖2.9所示,出現“”光標的位置是提示出錯;或者在信息窗口錯誤提示處雙擊鼠標左鍵,也可將錯誤信息與源文件的錯誤位置關聯,在錯誤程序上出現“”光標。如果編譯出現錯誤,在修改文件后重復進行編譯操作,直到錯誤修改完畢。圖2.7編譯及連接源程序圖2.8編譯后信息欄圖2.9程序編譯出錯提示當編譯后沒有語法錯誤時,在“項目”菜單中選擇“編譯連接裝載”命令,QTH即自動對當前的單文檔或多文檔進行編譯,在所有文檔編譯通過后自動進行連接操作。連接成功后源程序將出現“”光標指向程序首地址,如圖2.10所示。圖2.10連接成功

6.重新裝入程序在調試過程中,可以根據需要隨時重新裝入程序。從“調試”菜單選擇“裝載”命令(快捷鍵Ctrl+L),或者單擊工具欄上的“裝載”命令按鈕。裝載完成后,開發環境中調試工具條所有命令按鈕變亮。

7.斷點設置與清除當程序編譯連接成功后,可在源程序窗口設定斷點。將鼠標指向源程序行左側需設定斷點行處,按下鼠標左鍵設置后,斷點以“”標記在文本左側的灰色狀態欄內。重復上述步驟,設定更多的斷點,如圖2.11所示。或者單擊“調試”菜單選擇“設置斷點”命令(快捷鍵F9),還可以單擊工具條的“設置斷點”命令按鈕。設置斷點后,當重復調試程序時,程序只要運行到此處就會停在該斷點處。清除斷點時只需在所設斷點行處按下鼠標左鍵,或者在“調試”菜單下點擊“復位”命令,就可以快速觀察程序運行到斷點時的執行結果。圖2.11斷點的設置

8.設置PC指針

單片機在復位時自動將PC的內容設定為0000H。在調試源程序過程中,如果需要從某一地址處開始執行程序,則可以重新設置PC指針改變程序執行地址,將鼠標指向程序行左側需設定斷點行處,按下鼠標右鍵。或者從“設置”菜單中打開設置PC值窗口,在修改PC值窗口中直接輸入程序地址。

9.單步執行調試從“調試”菜單中選擇“單步執行”命令(快捷鍵F8),或者單擊工具欄上的“單步執行”命令按鈕,系統就按照PC所指示的地址(箭頭處)執行該條指令。PC的內容將自動指向下一條將要執行指令的地址,箭頭也向下移動一次。當執行調用指令(LCALLXX,ACALLXX)時,單步運行可以跟蹤到子程序內部,在調試中可以觀察主程序、子程序內部各條指令的運行結果及程序運行過程。

10.宏單步(步越)

從“調試”菜單中選擇“宏單步”命令(快捷鍵F10),或者單擊工具欄上的“宏單步”命令按鈕,系統就按照PC所指示的地址(箭頭處)執行該條指令。但當執行調用指令(LCALLXX,ACALLXX)時,宏單步不能跟蹤到子程序內部,它將該子程序視為一個語句一次執行完全部指令,PC的內容將自動指向該調用指令的下一條指令的地址。

11.執行到光標處先將光標調到某條需要觀察執行結果的指令處,單擊“調試”菜單中的“執行到光標處”命令(快捷鍵F7),或者單擊工具欄上的“執行到光標處”命令按鈕,程序就從當前地址處開始執行到當前光標所在的程序行。如果當前光標處在一個不可執行的程序行上,則QTH不能執行該操作。此方法可根據操作者的實際需要,快速觀察程序運行至某處的執行結果,加快調試程序的速度。

12.屏蔽斷點全速運行程序單擊“調試”菜單中的“屏蔽斷點全速運行”命令(快捷鍵CTRL+F5),或者單擊工具欄上的“全速運行”命令按鈕,程序從當前程序地址處開始全速執行程序,并屏蔽所有斷點直至按復位鍵停止。全速運行程序可以快速觀察到程序執行的最后結果。

13.查看CPU片內寄存器內容單擊“查看”菜單中的“寄存器窗口”命令,或者單擊工具條上的“寄存器窗口”命令按鈕,出現如圖2.12所示的窗口。通過寄存器窗口可以觀察到特殊功能寄存器窗口的內容變化情況。若使光標進入任一窗口某一指定數據位置,即可對該窗口的內容直接進行修改。

14.查看數據存儲器單擊“查看”菜單中的“數據存儲器”命令,或者單擊工具欄上的“數據存儲器”命令按鈕,出現如圖2.13所示的窗口。在該窗口中可以觀察到程序在運行時內部數據存儲器窗口(Data)和外部數據存儲器窗口(Xdata)的內容變化情況。若使光標進入任一窗口某一指定數據位置,即可對該窗口的內容直接進行修改。圖2.12寄存器窗口圖2.13數據存儲器窗口

15.查看變量單擊“查看”菜單中的“變量表”命令(快捷鍵Ctrl+W),或者單擊工具欄上的“變量表”命令按鈕,出現如圖2.14所示的窗口。通過該窗口可以查看程序運行中某些符號的參數及變量的變化值。圖2.14變量變化窗口

1.鍵盤監控程序工作狀態

用戶可以通過28個鍵向QTH-2008XS實驗儀發出各種操作命令,大多數鍵均有兩個以上功能,本機無上下擋轉換鍵,實驗儀進行什么操作不僅與按壓什么鍵有關,而且與當時實驗儀的狀態有關。下述各工作狀態在操作中是一些重要概念,需讀者掌握。

待命狀態0:在本狀態時,顯示器左端顯示一個閃動的“P”提示符,表示實驗儀在初始化狀態。實驗儀接通電源自動復位或按壓RESET鍵,都可以使本機處于待命狀態0。在大多數情況下,按MON鍵也可以使實驗儀進入待命狀態0。2.3鍵盤監控程序簡介待命狀態1:在本狀態時,顯示器顯示一到八位數字,數字中間沒有間隔。如果顯示八位數字,則第一位會不斷閃動。在待命狀態0時,按數字鍵本機便轉入待命狀態1。另外,當執行用戶程序時,遇斷點、單步執行、宏單步執行等都會使實驗儀進入待命狀態1。

存儲器讀/寫狀態:顯示器顯示六位數字,第五、六位為空格,第七位或第八位數字不斷閃動。在待命狀態1時,按MEM、DRAM鍵或設置斷點、斷點查找等都會使實驗儀進入該狀態。按壓RESET鍵和MON鍵,可以退出該狀態,返回待命狀態0。寄存器讀/寫狀態:顯示器顯示五位數字,第一位為寄存器代號,第二、三、四位為空格,第五至第八位顯示寄存器內容,其中一位不斷閃動。在待命狀態1并且顯示器上只有一位數字時(寄存器代號),按REG鍵可使實驗儀進入讀/寫狀態。按壓RESET鍵和MON鍵可以退出該狀態,返回待命狀態0。特殊功能寄存器和RAM區讀/寫狀態:顯示器顯示六位數字,第一、二位為CPU內部RAM地址,第三、四位為空格,第五、六位顯示該地址內容,第七、八位顯示下一地址單元內容,其中一位不斷閃動。按壓LAST、NEXT鍵進入偶地址或奇地址向上、向下讀/寫操作。在待命狀態1并且顯示器上只有兩位數字時(特殊功能寄存器、RAM區地址),按SFR、REG鍵使計算機進入該狀態。特殊功能寄存器只能讀出不能寫入,按壓RESET鍵和MON鍵可以退出該狀態,返回待命狀態0。

2.鍵盤監控特點

鍵盤控制具有以下特點:

(1)?QTHBUG沒有換擋鍵,鍵的功能取決于實驗儀所處的狀態。各個鍵的功能同實驗儀的狀態聯系在一起,免去了記憶上下擋的麻煩。實驗儀的狀態可以從顯示器的方式中判斷,不會引起混亂。

(2)具有單步、宏單步跟蹤功能,持續按壓單步STEP、宏單步SCAL鍵,實驗儀便進入跟蹤狀態,以每分鐘200多條指令快速執行用戶程序,同時顯示程序執行地址及該單元內容和累加器的內容,只要松開鍵便可以立刻停止,返回待命狀態。

(3)?QTHBUG有靈活的斷點設置、單步、宏單步、自動跟蹤等功能,大大提高了本機的開發功能,為用戶節省了調試程序的時間。

(4)斷點的清除可以單個進行。如果操作者忘記了所設斷點的地址,按壓斷點查找鍵GTBP,可以找出程序中設置的全部斷點,用STBP鍵設置斷點時,顯示器會顯示已設置的斷點個數,以避免設置過多的斷點。

(5)在QTHBUG中,對寄存器的讀寫采用讀/寫寄存器對拼成(16位)的形式進行,按壓NEXT或LAST鍵可以訪問到所有的寄存器。NEXT和LAST具有自動連續功能,簡化了操作,節省了時間。

(6)除復位鍵以外,大多數鍵有自動連續功能,持續按鍵0.8秒以上,就會產生連續按鍵的效果,達到快速掃描、檢查,簡化了操作,節省了時間。

1.硬件復位——RESET鍵

QTH-2008XS實驗儀在上電或按下RESET鍵時均使系統復位,復位時程序計數器PC及SFR均被初始化為MCS-51執行復位后的內容。

在任何時刻按壓復位鍵RESET,都會迫使實驗儀進入初始化狀態(與上電復位作用一樣),在復位信號有效期間,所有輸出信號均無效,數據及地址總線均為三態,并且在RESET變低前每一個周期重復執行CPU內部復位。2.4鍵盤操作說明

(1)置用戶堆棧指針07H。

(2)進入監控程序,顯示器左端顯示“P”表示處于待命狀態,可以接受數字鍵和命令鍵輸入。

(3)清除用戶斷點,并進入連機通信等待狀態。

2.返回待命狀態——MON鍵

按MON鍵,可使實驗儀進入待命狀態0,通常用MON鍵進行以下操作:

(1)清除已送入顯示器的數字。

(2)退出其他操作狀態。例如,退出存儲器讀/寫狀態和寄存器讀/寫狀態等。

按MON鍵不會影響用戶的存儲區、寄存器,以及已設置的斷點,也不會影響實驗儀的當前模式。3.送數命令——16個數字鍵

16個數字鍵0~F,一般是用來向實驗儀輸入十六進制數字,輸入的數將立刻顯示在顯示儀上,等待輸入數字的位置通常由光標指出。數字輸入后,光標就自動移到下一位,即下一位的數字閃動,表明它準備接受更改的位置,但有以下兩種情況不出現光標:

(1)在待命狀態1時,顯示的數字不夠8位,即右邊還有空格(不顯示的位),光標的位置實際在空格處,這時觀察不到光標。

(2)在特殊功能寄存器讀狀態時,不能修改其內容,所以這時光標不閃動。

16數字鍵與寄存器標號共用一位地址表示寄存器或部分SFR。

4.存儲器讀/寫命令——MEM、NEXT、LAST鍵

這一組命令用來檢查(讀出)或更改(寫入)內存單元,通過這些鍵盤命令操作向實驗儀送入程序和數據。

先按MON鍵,使實驗儀處于待命狀態0,然后輸入四位表示要檢查的存儲器地址,再按MEM存儲器讀/寫鍵,讀出該單元的內容,實驗儀便進入存儲器讀/寫狀態。

在存儲器讀/寫狀態,顯示器的左邊四位數字是內存單元的地址,右邊兩位是該單元的內容,光標(閃動的數字)表示等待修改(寫入)的數字。MEM、NEXT、LAST鍵的具體使用情況如表2.1所示。表2.1MEM、NEXT、LAST鍵的使用說明存儲器讀/寫狀態是QTHBUG的一種重要狀態,這時多數的命令鍵都具有與待命狀態1不同的功能,請用戶注意。存儲器讀/寫狀態的明顯標志是:顯示六位數字,第五位、第六位為空格,光標在第七位或第八位。但在待命狀態1多輸送了數字,光標也會移到第五位至第八位,這是唯一的例外。在存儲器讀/寫狀態,各功能鍵功能都以下排字表示。使用LAST或NEXT鍵可以讀出上一個或下一個存儲單元,同時光標自動移到第七位。持續按LAST或NEXT鍵在0.8秒以上,實驗儀便開始對內存進行向上或向下掃描,依次顯示各單元地址及內容。松開按鍵,掃描立即停止,實驗儀仍處于存儲器讀/寫狀態。利用這種功能可以快速檢查某一內存區的內容,或快速移動要檢查的單元,從而簡化操作。

按MON鍵,可使實驗儀退出存儲器讀/寫狀態返回待命狀態0,操作步驟見表2-1。

5.寄存器、片內RAM區讀/寫命令——REG、NEXT、

LAST鍵

對寄存器采取讀出寄存器對或16位寄存器的形式,8位寄存器也都拼成16位,寄存器對用代號表示(見表2.2)。表2.2一位地址表示的寄存器或部分SFR標號表寄存器讀/寫狀態是:顯示器上五個數字,第一位數字表示寄存器對(都是16位)的代號,右邊的4位數字表示該寄存器或寄存器對的內容。光標處于顯示器的第五位到第八位之間。

若要對寄存器的內容進行改寫,可按所需的數字鍵,則光標所在處的數字即被更換,光標往左移一位(若到了最左端,又重新回到起始位)。片內RAM區讀/寫狀態是:顯示器上顯示六個數字,左邊兩位是RAM區地址,右邊四位是該地址及下一地址的內容,第三、四兩位是空格。光標處于顯示器的第五位與第八位之間。

若要對RAM區的內容進行改寫,可按所需的數字鍵,則光標所在處的數字即被更換。按NEXT或LAST鍵,可查看該下一個或上一個寄存器對,RAM區(按代號順序排列)的內容。持續按鍵的時間在0.8秒以上時,可實現快速查找寄存器及RAM區。

按MON鍵,可以從寄存器RAM區讀/寫狀態退回待命狀態0。

REG、NEXT、LAST鍵的使用說明見表2.3。表2.3REG、NEXT、LAST鍵的使用說明

6.外部數據、RAM、I/O口讀/寫命令——DRAM、

NEXT、LAST鍵

用DRAM鍵可以對擴展的外部數據存儲器、I/O口或擴展的外部RAM的256個字節的內容進行檢查、讀出或更改(寫入)。

外部數據、RAM和I/O口的讀/寫,一般應先按MON鍵,使實驗儀進入待命狀態0。然后按所要訪問的外部數據區的地址及擴展RAM的地址,實驗儀便進入讀/寫狀態。數據存儲器讀/寫的狀態是:顯示器上顯示六個數字,左邊四位數字是存儲單元的地址,第五、六位空格,右邊兩位是該單元的內容,光標在第七位與第八位之間,表示等待修改該單元內容。

按NEXT或LAST鍵,可查訪更改下一個或上一個單元的內容。持續按LAST或NEXT鍵的時間在0.8秒以上,可實現快速查找數據或RAM及I/O口的內容。按MON鍵,可使實驗儀返回待命狀態0。DRAM、NEXT、LAST鍵的使用說明見表2.4。表2.4DRAM、NEXT、LAST鍵的使用說明

7.特殊功能寄存器檢查——SFR、NEXT、LAST鍵

用SFR鍵可以讀出CPU內部特殊功能寄存器的內容。特殊功能寄存器的地址為

80H~FFH,輸入地址不能小于80H。

特殊功能寄存器檢查的狀態標志是:顯示器上顯示六個數字,第一、二數字表示特殊功能寄存器地址,第三到第六位是空格,第七、八位顯示該地址單元的內容。

按NEXT、LAST鍵,可查看上一個或下一個特殊功能寄存器的內容。按MON鍵,可以從特殊功能寄存器讀出狀態退回待命狀態0。其操作見表2.5。表2.5SFR、NEXT鍵的使用說明

8.斷點的設置與清除命令——STBP鍵

設置斷點是調試程序的一種方法。在執行用戶程序的過程中,遇到斷點,程序便會停下來,保護好此時的所有用戶寄存器,并顯示斷點地址及A累加器和下一條指令碼的內容,或顯示用戶設定的內容,進入待命狀態1。這時可利用各種檢查命令,判斷程序執行是否正確。

QTHBUG允許用戶在程序中設置1或2個斷點,也可在ROM區設置斷點,但斷點應設置在每條指令的第一個字節處,否則會造成程序執行的錯誤。斷點最多可設2個,強行設置第3個斷點,將認為是非法的,實驗儀將自動返回待命狀態0,第3個斷點不被接受,但不影響前面已設置的2個斷點,它們仍然是有效的。斷點設置鍵STBP在存儲器讀/寫狀態和待命狀態1有效。在存儲器讀/寫狀態,若現行地址未增設過斷點,按STBP鍵后,顯示器最右邊(第八位)立即顯示已設斷點個數,約1.5秒后,重新回到存儲器讀/寫狀態,這時斷點被接受,此處斷點設置完畢。若實驗儀處于待命狀態0,則應先送4位表示斷點地址的數字,然后按STBP鍵,這時的過程與上面所述一樣。斷點設置完畢,實驗儀進入存儲器讀/寫狀態。斷點清除鍵也是用STBP鍵。如果現行地址(存儲器讀/寫狀態)或送入表示地址的四位數字(待命狀態)處已經設置過斷點,則按STBP鍵的作用就是清除該處的斷點。與設置斷點的區別在于使用STBP清除斷點時,顯示器不顯示斷點個數,實驗儀便進入存儲器讀/寫狀態。用戶可以根據顯示器的變化來判斷實驗儀進行什么操作。如果實驗儀與所設想的不同,例如,想在某地址設置斷點,如果該地址已設置過斷點,按STBP鍵反而將該處斷點清除了,這時顯示器不顯示斷點個數,從而可以判斷這是誤操作,但只需再按一次STBP鍵,即可恢復該處斷點。這種操作設計能有效地防止在同一地址設置一個以上的斷點。

斷點的清除是逐個進行的,但也可以按RESET鍵將所有斷點清除掉,實驗儀返回待命狀態0。

9.查找斷點命令——GTBP鍵

上面已提到斷點的清除是逐個進行的,若已經忘記曾經在何處設置了斷點,如何把斷點地址找出來呢?使用GTBP鍵查找斷點,可以迅速完成這一工作。

GTBP斷點查找在待命狀態1和存儲器讀/寫狀態時有效。在存儲器讀/寫狀態按GTBP鍵,可使實驗儀從現行地址開始向后查找第一個斷點(不一定是第一次設置的斷點),查到之后便停下來,顯示該斷點地址及其內容,實驗儀仍處于存儲器讀/寫狀態。這時如認為該斷點需清除,便可按STBP鍵。再次按GTBP斷點查找鍵,實驗儀又再從現行地址開始向后查找,找到第二個便再停下來,顯示該地址(斷點)及其內容,實驗儀仍處于存儲器讀/寫狀態。如此反復進行,便可把全部斷點查找出來。

查找斷點所需的時間,隨起始地址和斷點的個數而定,但最長不會超過15秒,在查找斷點過程中,MON鍵不起作用。斷點的設置、清除與查找操作過程見表2.6。表2.6STBP、GTBP鍵的使用說明

10.單步執行命令——STEP鍵

單步執行鍵在待命狀態0、待命狀態1和存儲器讀/寫狀態時有效。在待命狀態0,按PC指針單步執行程序;在待命狀態1,按顯示器上的地址單步執行;在存儲器讀/寫狀態,按現行地址執行。

按STEP鍵,實驗儀將依據上述三種情況,執行一條用戶指令,繼而顯示PC、累加器和下一條指令碼的內容,進入待命狀態1,等待下一個命令。將下列程序送入程序存儲器(SRAM):持續按單步鍵0.8秒以上,實驗儀就進入跟蹤執行狀態,以每分鐘200條指令的速度執行用戶程序,同時顯示程序的執行地址和累加器及下一條指令的內容,或顯示用戶指定單元的內容,跟蹤執行程序可監視程序的運行路線。在松開按鍵時,便停止跟蹤狀態,顯示程序運行終止時的PC及累加器的內容,并返回待命狀態0。按MEM鍵,便進入存儲器讀/寫狀態。按MON鍵,返回到待命狀態0。單步命令不會影響已設置的斷點。

11.宏單步執行命令——SCAL鍵

宏單步執行鍵在待命狀態0、待命狀態1和存儲器讀/寫狀態時有效。在待命狀態0,按PC指針宏單步執行程序;在待命狀態1,按顯示器上的地址宏單步執行;在存儲器讀/寫狀態,按現行地址執行。按SCAL鍵,實驗儀將依據上述三種情況,執行一條用戶指令,碰到程序中調用或長調用指令,將一次執行完被調用的子程序。繼續顯示PC和下一條指令的內容,進入待命狀態1,等待下一個命令。如果在執行宏單步調用操作中,子程序中含有有條件返回、返回地址被修改、返回地址已彈出等特殊子程序,則不能使用宏單步執行指令,否則會造成出錯。持續按宏單步鍵0.8秒以上,實驗儀就進入跟蹤執行狀態,以每分鐘200條以上指令的速度執行用戶程序,同時顯示程序的執行地址和累加器及下一條指令的內容,或顯示用戶指定單元的內容,因此,持續按宏單步鍵可監視程序的運行路線。在松開按鍵時,便立即停止跟蹤狀態,顯示程序運行終止時的PC和累加器及下一條指令的內容,或顯示用戶指定單元的內容,并返回待命狀態1。操作方法見表2.7。表2.7STEP、SCAL鍵的使用說明

12.執行程序命令——EXEC鍵

執行鍵EXEC在待命狀態0、待命狀態1和存儲器讀/寫狀態時有效。在待命狀態0顯示一個閃動“P”,按EXEC鍵,實驗儀將按照用戶PC所指的地址,開始執行程序;在待命狀態1(送入數字后的狀態),按顯示器上的地址執行程序;在存儲器讀/寫狀態,按顯示器上的現行地址執行程序;在其他狀態,EXEC鍵無效。用EXEC鍵執行用戶程序,在程序中遇到斷點時會停下來,并保護所有的寄存器,顯示斷點地址和累加器的內容或顯示用戶指定單元的內容,并返回待命狀態1。

遇到斷點中止程序的執行后,若再次按EXEC鍵,程序會從斷點地址處繼續往下執行。操作方法如表2.8所示。表2.8EXEC鍵的使用說明

13.計算相對轉移偏移量命令——OFST鍵

OFST鍵命令的功能是用來計算MCS-51指令系統中相對轉移指令的操作數,即偏移量的值。OFST鍵命令只在存儲器讀/寫狀態有效。

先在需要填入偏移量的單元上填入所要轉移的(目標)地址的低字節,然后按OFST鍵,該單元的內容立即轉變成所要求的偏移量,也就是自動將偏移量填入。這時實驗儀仍處于存儲器讀/寫狀態,用戶可繼續往下送入程序。下面舉例說明操作過程:將下列程序送入程序存儲器,操作過程見表2.9。表2.9OFST鍵的使用說明使用OFST命令鍵,進行偏移量的計算,應注意跳轉“出界”的問題。當偏移量計算結果大于7FH,說明是往回跳轉的(減址),否則是向前跳轉(增址)的。若程序設計要往前跳轉,計算結果大于7FH,則出界了。簡單辦法就是把相對跳轉指令改為頁地址轉移指令。

14.十進制與十六進制轉換命令——DEC與HEX鍵

1)?DEC命令鍵

DEC命令鍵的功能是將十進制數字(BCD)轉換成十六進制數字。

在待命狀態0時,按DEC鍵,顯示器左邊第一位顯示一個“D”字,表示下面送入的就是待轉換的十進制數。這時根據需要轉換的十進制數按相應的數字鍵,先高位后低位。由于顯示器位數的限制,這里約定最大只能轉換99999999,因此送入的十進制數字應小于99999999,否則將發生溢出。每送入1位數字,原先送入的數字就自動向左移位,若送入數字多于7位,則只有后7位有效,其余均自動溢出。送數完畢,按HEX鍵,便自動完成轉換,在顯示器左邊第一位顯示一個“H”字符,表示右邊顯示的數字就是轉換結果得出的十六進制數。若想知道它對應的十進制數(即轉換前的數)是多少,只需按一下DEC鍵,就恢復到按HEX鍵前的狀態,顯示轉換前的十進制數。若需要轉換另外一個十進制數,可將該數送入,按HEX鍵即可。

在“DEC”狀態(顯示“D”字時)下,除了數字鍵0~9以外,只有HEX鍵和MON鍵有效(當然RESET鍵在任何狀態都是有效的),按MON鍵可使實驗儀返回待命狀態0。

2)?HEX命令鍵

HEX命令鍵的功能是將98967F以下的十六進制數轉換成十進制數。

HEX命令鍵的操作方法與十制數轉換成十六進制數類似。在待命狀態0時,按HEX鍵,立即在顯示器左邊第一位顯示“H”字符,表示緊跟著是十六進制數。這時由高位開始,依次送入要轉換的數字,送完要轉換的數字后,按DEC鍵,便自動完成轉換,在顯示器左邊第一位顯示一個“D”字符,表示右邊顯示的數字就是轉換后得出的十進制數。在“HEX”狀態(顯示“H”字符)時,除0~F16個數字外,只有RESET、DEC和MON鍵有效。按MON鍵可使實驗儀返回待命狀態0。

DEC、HEX鍵的使用情況見表2.10。表2.10DEC、HEX鍵的使用說明

15.時鐘顯示命令——TIME鍵

時鐘顯示命令TIME用來顯示時間,顯示格式為小時—分鐘—秒鐘。電腦時鐘在晶振為12MHz時顯示正確時間,改變晶振將影響時鐘精度。在待命狀態0,鍵入:00~23小時、00~59分鐘、00~59秒鐘,按下TIME鍵即計時。鍵入非法值(如超過24小時、60分鐘、60秒鐘)時,將返回待命狀態0,不能計時顯示。

按MON鍵或RESET鍵復位,將中止時間顯示。

16.加載命令——LOAD鍵

按LOAD鍵顯示器顯示“—

—LOAD—

—”并將裝入實驗的全部程序。

輸入實驗程序的入口地址,再按執行鍵(EXEC),便開始執行相應的程序。實驗一單片機實驗儀操作實驗二單片機指令練習實驗三單片機程序設計實驗實驗四單片機I/O控制實驗實驗五中斷系統實驗實驗六定時器/計數器實驗實驗七串/并轉換實驗實驗八擴展存儲器讀寫實驗實驗九簡單的I/O擴展實驗實驗十8255輸入輸出實驗實驗十一A/D轉換實驗實驗十二D/A轉換實驗實驗十三可編程序計數8253實驗

一、實驗目的

熟悉QTH-2008XS單片機實驗儀的使用方法。

掌握項目、文件的建立方法,寄存器、存儲器內容的查看方法,以及程序的執行及斷點的設置方法。

二、實驗設備

QTH-2008XS單片機實驗儀一臺,PC機一臺,QTH-2008XS單片機開發環境。實驗一單片機實驗儀操作

三、實驗內容

(1)閱讀第二章內容,學習QTH-2008XS單片機實驗儀的鍵盤和軟件調試環境的使用。

(2)按照操作步驟在實驗儀上實際練習。

(3)在開發機上完成規定程序的調試。四、程序調試

1.拆字程序(寫出單元內容)續表

1)程序調試步驟

(1)將該源程序輸入QTH-2008XS單片機開發環境,保存文件名為**.ASM(文件名后必須加后綴?.ASM)。

(2)對源程序進行編譯。編譯程序時注意:系統復位后PC的值為0000H,即程序從程序存儲器的0000H單元取指令執行。因此,可利用ORG0000H進行定位。但因為程序存儲器的低端有五個地址被固定地用作中斷服務程序的入口地址(如0003H為外部中斷0的中斷服務程序入口地址,000BH為定時器0的中斷服務程序入口地址,000BH為外部中斷1的中斷程序入口地址,0013H為外部中斷1的中斷服務程序入口地址,001BH為定時器1的中斷服務程序入口地址,0023H為串行口的中斷服務程序入口地址),所以在編程時,通常在這些入口地址開始的單元中,放入一條轉移指令,如ORG0000H;AJMPSTART。

(3)根據提示進行糾錯。若編譯程序后程序上出現紅色光標,則該指令語法有錯。可根據程序編譯后的提示檢查錯誤,例如:指令助記符如果正確,則助記符為藍色,不正確則為黑色;標點符號的正確使用方法是:標號后為冒號,注釋前為分號,操作數中是逗號。在輸入程序時,其中的字母、符號均須在英文方式下進行,不能在智能全拼或微軟拼音輸入法中輸入。注釋可以用漢字,在程序最后需以“END”作為結束符。

(4)當編譯程序后出現綠色光標時,程序語法正確,可以將源程序裝載入實驗儀。

(5)在運行程序前確定調試前的參數設置。如拆字程序中需設置外部RAM0100H單元的內容,在開發環境中點擊項目菜單中的變量表,然后在變量表窗口中單擊右鍵找到增加觀察項,在觀察變量對話框中添加0100H,在觀察窗口中直接修改0100H單元的內容,如圖3.1所示,將外部RAM0100H單元設置為45H。

(6)確定調試方法。在調試過程中,若要觀察程序最終結果或者觀察硬件電路的最終現象,運行程序采用屏蔽斷點全速運行調試(快捷鍵Ctrl+F5),觀察程序執行后A、R0、DPTR、R7的變化情況;若要觀察每條指令的運行結果或程序運行路徑的變化過程,則采用單步運行(快捷鍵F8)程序,觀察每條指令的執行結果,將結果填入表格中,同時觀測程序運行的路徑,即PC值的變化與預先設置的運行路徑是否一致;若要定點檢查程序運行到某處的結果,則選擇在程序中間設置斷點運行程序,觀察每段程序的執行結果與理論值是否相同。

(7)檢驗程序運行結果是否正確。用理論方法得出的結果與程序運行的結果對照是否相同。若不同,則分析出錯的原因并改正錯誤之處,重新運行程序直到結果正確。圖3.1添加變量表窗口修改變量值

2)調試程序說明

(1)外部RAM0100H單元內容的修改或連續地址內容的修改,可以通過在查看菜單中單擊數據存儲器窗口,然后在數據存儲器窗口中單擊鼠標右鍵,選擇放置相同數據修改對應連續地址中的數據,如圖3.2所示,將外部RAM0100H~0102H單元設置為FFH。圖3.2設置外部數據存儲器連續地址內容

(2)當運行程序觀察A、DPTR、R0的內容時,在“查看”菜單中點擊“寄存器窗口”,就可以觀察寄存器內容的變化,如圖3.3所示。

3)思考題

(1)外部數據存儲器0100H單元的內容與0101H、0102H兩個單元中的內容有什么關系?

(2)將數據傳送到外部用什么指令?用什么尋址方式?

(3)在主程序的開始時為什么要加跳轉指令?LJMP與AJMP指令有什么區別?圖3.3觀察寄存器內容的變化2.利用實驗仿真軟件調試下列程序

1)程序調試步驟

(1)將該源程序輸入QTH-2008XS單片機開發環境,保存文件名為?**.ASM。

(2)對源程序進行編譯。

(3)根據提示進行糾錯。

(4)將源程序裝載入實驗儀。

(5)確定調試前的參數設置。程序中需要設置內部RAM30H、5AH、40H單元的內容,先在“查看”菜單中點擊“寄存器窗口”,然后進入窗口中的內部RAM區,直接修改地址中的內容,如圖3.4所示。P1口的內容在寄存器窗口下設置。圖3.4修改內部RAM單元的內容

(6)確定調試方法。用單步運行方法調試或用中間設置斷點方法運行程序。

2)思考題

(1)在編譯程序前設置數據與編譯后設置數據,運行程序的結果有什么不同?

(2)寫出存儲單元R0、R1、A、B、P1、40H、30H及5AH單元的內容。

(3)如何選擇調試方法?一、預習內容

1.數據傳送類指令

MOV目的操作數,源操作數 ;(目的地址)源操作數

MOVX A,@DPTR ;(A)←((DPTR))

MOVX A,@Ri ;(A)←((Ri))

MOVX @DPTR,A ;((DPTR))←(A)

MOVX @Ri,A ;((Ri))←(A)

MOVC A,@A+DPTR ;(A)←((A)+(DPTR))實驗二單片機指令練習MOVCA,@A+PC ;(PC)←(PC)+1,(A)←((A)+(PC))

XCH A,direct ;(A)(direct)

XCH A,@Ri ;(A)((Ri))

XCH A,Rn ;(A)(Rn)

XCHDA,@Ri ;(A3~0)((Ri)3~0)

SWAPA ;(A7~4)(A3~0)

2.算術運算類指令

指令助記符:ADD(加法),ADDC(帶進位加法),SUBB(帶借位減法),MUL(乘法),DIV(除法),INC(加1),DEC(減1),DA(十進制調整)。

3.程序轉移類指令

無條件轉移指令:LJMPaddr16(長轉移),AJMPaddr11(短轉移),SJMPrel(相對轉移),JMP@A+DPTR(間接轉移)。條件轉移指令:

JZrel ;若(A)=0,則轉移;若(A)≠0,則順序執行

JNZrel ;若(A)≠0,則轉移;若(A)=0,則順序執行

CJNE目的操作數,源操作數,rel

;若兩數相等,則順序執行;若兩數不等,則

轉移DJNZdirect,rel ;(direct)←(direct)?-1,若(direct)=0,則

順序執行;若(direct)≠0,則轉移

DJNZRn,rel ;(Rn)←(Rn)?-1,若(Rn)=0,則順序執

行;若(Rn)≠0,則轉移

子程序調用及返回指令:LCALLaddr16(長調用),ACALLaddr11(短調用),RET(子程序返回),RETI(中斷程序返回)。4.位操作類指令

JCrel ;若(CY)=1,轉移;若(CY)=0,則順序執行

JNCrel ;若(CY)=0,轉移;若(CY)=1,則順序執行

JBbit,rel ;若(bit)=1,轉移;若(bit)=0,則順序執行

JNBbit,rel ;若(bit)=0,1轉移;若(bit)=1,則順序執行

JBCbit,rel ;若(bit)=1,則(bit)←0后轉移;否(bit)=0,則

順序執行二、實驗練習

1.實驗目的

掌握項目、文件的建立方法,寄存器、存儲器內容的查看方法,以及程序的單步執行及斷點運行程序方法。

熟悉程序轉移類指令、算術運算類指令的功能。

2.實驗設備

QTH-2008XS單片機實驗儀一臺,PC機一臺,QTH-2008XS單片機開發環境。

3.實驗內容

(1)按照操作步驟在實驗儀上實際練習。

(2)在開發機上完成規定程序的調試。

(3)回答思考題。

4.程序調試

數據傳送程序(寫出各單元內容)

1)程序調試步驟

(1)將該源程序輸入QTH-2008XS單片機開發環境,保存文件名為**.ASM。

(2)對源程序進行編譯。

(3)根據提示進行糾錯。

(4)將源程序裝載入實驗儀。

(5)確定調試前的參數設置。根據程序要求,首先要修改內部RAM單元的內容,在開發環境中設置40H~4FH單元的初始值,并修改為00H~FFH范圍內的內容。例如:(40H)=01H,(41H)=02H,依次類推。

(6)確定調試方法。用單步運行方法調試,觀察每條指令的執行結果,觀察程序執行后A、R0、DPTR、R7的變化情況。如果循環程序次數多,則采用設置斷點的方法快速得到最終結果。

(7)調試程序,填寫表中的結果(每次循環結果),觀察程序PC值的變化情況和循環的次數。

2)調試程序說明

(1)讀懂程序后,觀察程序運行的結果是否正確。在實際的調試中,由于各種原因,程序運行中可能存在錯誤,因此必須根據執行的結果快速、有效地找到產生故障的原因并排除所有錯誤,直到調試出正確的結果為止。例如,數據傳送程序采用單步運行(F8)程序,邊運行邊觀察程序中單元地址(內部或外部)、工作寄存器、特殊功能寄存器中內容的變化,若運行到MOVX@DPTR,A指令,則1000H單元的內容應該是01H,但如果結果錯誤,這時應該停止運行程序,查看這條指令前面的設置或指令是否正確。

(2)程序中有循環結構,如果想快速觀測程序的最終結果,可先將光標或斷點設置在循環程序的第一條指令和最后一條指令處,然后運用連續運行(F5)命令或執行到光標處(F7)命令執行程序,光標或斷點設置一次程序只能運行一次,如果反復設置光標或斷點,就可以得到每次循環后單元的結果。例如,數據傳送程序斷點設置在“IF:MOVA,@R0”指令和“DJNZR6,LOOP”指令。為提高調試速度,也可以將斷點設置在循環程序的最后一條指令處,用F7快速將程序運行到光標處,就可以直接得到循環程序的最終結果。例如,將上面程序光標設置在RET指令上。如果在點擊運行處出現程序不執行,有可能出現死循環等錯誤,此時,應考慮用單步運行的方法檢查程序運行的路徑是否正確。為縮短調試時間,可在調試循環程序前,將循環初始值中的循環次數改小些,例如,數據傳送程序中MOVR7,#10H改為MOVR7,#05H,然后通過觀察運行路徑和運行的結果,找出循環程序內部出現的故障并加以修改。

3)思考題

(1)指出程序中的循環部分,觀察循環執行的次數。

(2)如何修改循環次數和傳送的數據?

(3)觀察外部RAM中1000H~1010H的內容。

多字節加法程序(寫出各單元內容)續表

1)程序調試步驟

(1)將該源程序輸入QTH-2008XS單片機開發環境,保存文件名為DZJF.ASM。

(2)對源程序進行編譯。

(3)根據提示進行糾錯。

(4)將源程序裝載入實驗儀。

(5)確定調試前的參數設置。根據程序要求,首先要修改內部RAM單元的內容,在開發環境中設置內部RAM30H、31H、32H、40H、41H、42H單元的內容初始值,并修改為00H~FFH范圍內的內容。例如:(30H)=4EH,(31H)=9AH,(32H)=79H,依次類推。

(6)確定調試方法。采用單步運行程序或跳出子程序(Shift+F11)命令運行程序。

(7)觀察執行的結果并填入表中。

2)調試程序說明

(1)多字節加法程序中有子程序調用,在運用單步運行(F8)命令調用子程序指令時,應觀察程序是否能運行到該調用指令的下一條指令處,若能,則說明子程序調用的運行過程是正確的;再檢查子程序的出口內容是否正確,若兩者都正確,則繼續調試程序直到程序結束。若執行了調用子程序后,程序不能返回到該調用指令的下一條指令處,則查看子程序返回指令是否正確。為了提高調試速度,可以用跳出子程序(Shift+F11)命令運行程序,使程序運行時跳過子程序只運行主程序,然后查看運行的結果。

(2)運行程序時應先讀懂程序,然后觀察程序運行的結果是否正確。先用單步運行(F8)程序,觀察30H單元的內容。30H單元中存放的是30H和40H單元設定值相加的結果,先自己手動計算結果,然后和觀察的結果進行比較。如果不相同,則查找程序內部出現的故障并加以修改;如果相同,則繼續調試程序,邊運行邊觀察程序中單元地址、工作寄存器、特殊功能寄存器中內容的變化。

3)思考題

(1)修改程序實現49E9H+98FCH,寫出程序及執行結果。

(2)堆棧指針SP的初始值是什么?在什么情況下需要用指令重新設置該指針內容?

(3)多字節加法程序中調用子程序時SP堆棧指針如何變化?

(4)程序狀態寄存器PSW的作用是什么?常用哪些狀態位?作用是什么?

比較數據大小程序(寫出單元內容)

1)程序調試步驟

(1)將該源程序輸入QTH-2008XS單片機開發環境,保存文件名為DZJF.ASM。

(2)對源程序進行編譯。

(3)根據提示進行糾錯。

(4)將源程序裝載入實驗儀。

(5)確定調試前的參數設置。根據程序要求,首先要修改內部RAM單元的內容,在開發環境中設置內部RAM48H單元的內容初始值,并修改為00H~FFH范圍內的內容,至少設置三次,分別為大于7FH的值、小于7FH的值和等于7FH的值。

(6)確定調試方法。調試方法采用單步運行(F8)程序,觀察程序中控制轉移指令的執行情況,如果要縮短調試時間,則可以用設置斷點運行(F7)程序。斷點設置在NEXT2:SJMP$指令上。

(7)查看程序結果,填寫程序運行后單元的內容。

2)思考題

(1)指出程序運行中的跳轉位置,并說明每次跳轉的條件。

(2)調試程序的方法有幾種?各有什么優點?

一、預習內容

1.偽指令

在匯編源程序的過程中,有一些指令不要求計算機進行任何操作,也沒有對應的機器碼,不產生目標程序,不影響程序的執行,僅僅是能夠幫助匯編進行的一些指令,這些指令稱之為偽指令。實驗三單片機程序設計實驗

(1)設置目標程序起始地址偽指令ORG。

格式:[標號:]ORG16位地址

該偽指令的功能是規定其后面目標程序的起始地址。它放在一段源程序(主程序、子程序)或數據塊的前面。

(2)結束匯編偽指令END。

格式:[標號:]END

該偽指令是匯編語言源程序的結束標志,表示程序結束。

(3)定義字節偽指令DB。

格式:[標號:]DB項或項表

該偽指令的功能是把項或項表的數值(字符則用ASCII碼)存入從標號開始的連續存儲單元中。

(4)定義字偽指令DW。

格式:[標號:]DW項或項表

該偽指令與DB的功能類似,所不同的是DB用于定義一個字節(8位二進制數),而DW則用于定義一個字(即兩個字節,16位二進制數)。

(5)等值偽指令EQU。

格式:[標號:]EQU項

該偽指令的功能是將指令中項的值賦予本語句的標號。項可以是常數、地址標號或表達式。

(6)位地址賦值偽指令BIT。

格式:[標號:]BIT位地址

該偽指令的功能是將位地址賦予特定位的標號,經賦值后就可用指令中BIT左面的標號來代替BIT右邊所指出的位。

2.程序的結構

程序的結構可以分解為:順序結構、分支結構、循環結構、子程序結構。

實現分支結構的指令有:JZREL;JNZREL;JCREL;JNCREL;JBBIT,REL;JNBBIT,REL;JBCBIT,REL;CJNZ比較數據1,比較數據2,REL。

實現循環結構的指令有:DJNZdirect,rel;DJNZRn,rel。

子程序調用和返回的指令有:LCALLaddr16;ACALLaddr11

溫馨提示

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

評論

0/150

提交評論