教學(xué)課件-單片機(jī)實(shí)驗(yàn)與實(shí)訓(xùn)指導(dǎo)(王曙霞)_第1頁(yè)
教學(xué)課件-單片機(jī)實(shí)驗(yàn)與實(shí)訓(xùn)指導(dǎo)(王曙霞)_第2頁(yè)
教學(xué)課件-單片機(jī)實(shí)驗(yàn)與實(shí)訓(xùn)指導(dǎo)(王曙霞)_第3頁(yè)
教學(xué)課件-單片機(jī)實(shí)驗(yàn)與實(shí)訓(xùn)指導(dǎo)(王曙霞)_第4頁(yè)
教學(xué)課件-單片機(jī)實(shí)驗(yàn)與實(shí)訓(xùn)指導(dǎo)(王曙霞)_第5頁(yè)
已閱讀5頁(yè),還剩886頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1.1單片機(jī)芯片的內(nèi)部結(jié)構(gòu)及原理1.2MCS-51系列單片機(jī)指令系統(tǒng)

一、單片機(jī)的概念

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

二、單片機(jī)的類型

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

三、MCS-51系列單片機(jī)的內(nèi)部結(jié)構(gòu)

MCS-51單片機(jī)結(jié)構(gòu)框圖如圖1.1所示,各功能部件由內(nèi)部總線連接在一起。

MCS-51單片機(jī)芯片內(nèi)部集成包括下列部件:

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

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

(3)?4KB內(nèi)部程序存儲(chǔ)器ROM。

(4)兩個(gè)定時(shí)/計(jì)數(shù)器,用以對(duì)外部事件進(jìn)行計(jì)數(shù),也可用作定時(shí)器。

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

(6)一個(gè)串行端口,用于數(shù)據(jù)的串行通信。

(7)具有五個(gè)中斷源、兩個(gè)優(yōu)先級(jí)的中斷結(jié)構(gòu)。

(8)內(nèi)部有一個(gè)振蕩器和時(shí)鐘電路。

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

(10)可尋址64KB的外部數(shù)據(jù)存儲(chǔ)空間和64KB的外部程序存儲(chǔ)器的控制電路。圖1.1MCS-51單片機(jī)結(jié)構(gòu)框圖

四、MCS-51系列單片機(jī)的引腳功能

MCS-51系列單片機(jī)引腳及總線結(jié)構(gòu)如圖1.2所示。

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

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

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

VPP。

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

1.程序存儲(chǔ)器對(duì)于80C51來(lái)說,程序存儲(chǔ)器(ROM)的內(nèi)部地址為0000H~0FFFH,共4KB;外部地址為1000H~FFFFH,共60KB。程序存儲(chǔ)器的結(jié)構(gòu)如圖1.3所示。當(dāng)=1,程序計(jì)數(shù)器由內(nèi)部0FFFH執(zhí)行到外部1000H時(shí),會(huì)自動(dòng)跳轉(zhuǎn);當(dāng)

=0時(shí),只執(zhí)行外部程序。對(duì)于87C51來(lái)說,內(nèi)部有4KB的EPROM,將它作為內(nèi)部程序存儲(chǔ)器;80C31內(nèi)部無(wú)程序存儲(chǔ)器,必須外接程序存儲(chǔ)器。圖1.3MCS-51單片機(jī)存儲(chǔ)器空間結(jié)構(gòu)圖(a)程序存儲(chǔ)器;(b)內(nèi)部數(shù)據(jù)存儲(chǔ)器;(c)外部數(shù)據(jù)存儲(chǔ)器

80C31最多可外擴(kuò)64KB程序存儲(chǔ)器,其中6個(gè)單元地址具有特殊用途,保留給系統(tǒng)使用,如表1.2所示。其中,0000H是系統(tǒng)的啟動(dòng)地址,一般在該單元中存放一條絕對(duì)跳轉(zhuǎn)指令;另外0003H、000BH、0013H、001BH和0023H對(duì)應(yīng)5個(gè)中斷源的中斷服務(wù)入口地址。表1.2MCS-51單片機(jī)復(fù)位、中斷入口地址

2.內(nèi)部數(shù)據(jù)存儲(chǔ)器

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

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

在低128字節(jié)RAM中,00H~1FH共32單元是4個(gè)通用工作寄存器區(qū)。每一個(gè)區(qū)有8個(gè)通用寄存器R0~R7。寄存器和RAM地址對(duì)應(yīng)關(guān)系如表1.3所示。RAM中的位尋址區(qū)地址表如表1.4所示,SFR特殊功能寄存器地址表如表1.5所示。表1.3寄存器和RAM地址對(duì)照表表1.4RAM中的位尋址區(qū)地址表表1.5SFR特殊功能寄存器地址表

MCS-51系列單片機(jī)指令按照功能可分為數(shù)據(jù)傳送類指令、算術(shù)運(yùn)算類指令、邏輯運(yùn)算與循環(huán)類指令、程序轉(zhuǎn)移類指令和位操作類指令。

1.2MCS-51系列單片機(jī)指令系統(tǒng)

一、數(shù)據(jù)傳送類指令

1.訪問RAM和SFR的指令

(1)以A為目的操作數(shù):4.?dāng)?shù)據(jù)交換字節(jié)交換:XCHA,Rn ;(A)(Rn)XCHA,direct ;(A)(direct)XCHA,@Ri ;(A)((Ri))半字節(jié)交換:XCHDA,@Ri ;(A0~3)((Ri)0~3)SWAPA ;(A0~3)(A4~7)

5.堆棧操作

所謂堆棧是指在片內(nèi)RAM中按“先進(jìn)后出,后進(jìn)先出”原則設(shè)置的專用存儲(chǔ)區(qū)。數(shù)據(jù)的進(jìn)棧和出棧由指針SP統(tǒng)一管理。堆棧操作有如下兩條專用指令:

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

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

1.加法指令

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

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

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

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

2.帶進(jìn)位加法指令

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中各存放一

;個(gè)8位無(wú)符號(hào)數(shù),指令執(zhí)行后,16位

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

DIVAB ;(A)÷(B)→商在A中,余數(shù)在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.十進(jìn)制調(diào)整指令

DAA;把A中按二進(jìn)制相加的結(jié)果調(diào)

整成按BCD碼相加的結(jié)果三、邏輯運(yùn)算與循環(huán)類指令

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四、程序轉(zhuǎn)移類指令

1.無(wú)條件轉(zhuǎn)移指令

絕對(duì)(短)轉(zhuǎn)移指令:

AJMPaddr11 ;(PC0~10)←addr11

長(zhǎng)轉(zhuǎn)移指令:

LJMPaddr16 ;(PC)←addr16

短(相對(duì))轉(zhuǎn)移指令:

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

間接轉(zhuǎn)移指令:

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

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

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

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

減1非零轉(zhuǎn)移指令:

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

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

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

(PC)←(PC)+rel,否則順序執(zhí)行兩數(shù)不等轉(zhuǎn)

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

1.位傳送指令

MOVC,bit ;(CY)←(bit)

MOVbit,C ;(bit)←(CY)

2.位置位和位清零指令

CLRC ;(CY)←0

CLRbit ;(bit)←0

SETBC ;(CY)←1

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

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

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

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

順序執(zhí)行

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

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

行2.1QTH-2008XS單片機(jī)實(shí)驗(yàn)儀功能介紹2.2QTH-2008XS下載式單片機(jī)實(shí)驗(yàn)儀開發(fā)環(huán)境2.3鍵盤監(jiān)控程序簡(jiǎn)介2.4鍵盤操作說明

QTH-2008XS型號(hào)實(shí)驗(yàn)儀自帶下載式CPU和仿真監(jiān)控程序,不需要仿真器和編程工具,只需通過COM口便可與PC機(jī)連接,直接調(diào)試實(shí)驗(yàn)程序,是廉價(jià)的仿真實(shí)驗(yàn)儀。

QTH-2008XS實(shí)驗(yàn)儀除了一些通用的特性外,還具備如下一些特點(diǎn)。

(1)采用模塊化設(shè)計(jì):所有電路單元盡可能獨(dú)立開放,提高實(shí)驗(yàn)的自由度、靈活性,各單元模塊可組成多種功能各異的實(shí)驗(yàn)電路,提高學(xué)生的創(chuàng)造性,如通過DIP開關(guān)來(lái)切換鍵盤顯示實(shí)驗(yàn)區(qū)是否對(duì)用戶開放等。2.1QTH-2008XS單片機(jī)實(shí)驗(yàn)儀功能介紹

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

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

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

一、連接系統(tǒng)電源

QTH-2008XS下載式實(shí)驗(yàn)儀由一組外接電源系統(tǒng)驅(qū)動(dòng)。通電時(shí),先接通目標(biāo)系統(tǒng)穩(wěn)壓電源,然后接通PC機(jī)和QTH-2008XS下載式實(shí)驗(yàn)儀的電源;斷電時(shí),先關(guān)閉PC機(jī)和

QTH-2008XS下載式實(shí)驗(yàn)儀電源,然后關(guān)閉目標(biāo)系統(tǒng)穩(wěn)壓電源。2.2QTH-2008XS下載式單片機(jī)實(shí)驗(yàn)儀開發(fā)環(huán)境

二、QTH-2008XS開發(fā)環(huán)境的啟動(dòng)和退出

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

三、QTH-2008XS開發(fā)環(huán)境菜單介紹

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

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

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

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

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

調(diào)試(D):包括加載目標(biāo)文件、單步、斷點(diǎn)、全速執(zhí)行等。

設(shè)置(S):包括仿真機(jī)的設(shè)置、設(shè)置文本編輯器、項(xiàng)目屬性等。

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

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

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

1.進(jìn)入QTH-2008XS開發(fā)環(huán)境

雙擊桌面中QTH-2008XS圖標(biāo),出現(xiàn)如圖2.2所示界面。

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

圖2.4“打開”對(duì)話框

3.保存文件

若打開一個(gè)空的源程序窗口后,應(yīng)先將其保存成擴(kuò)展名為?.ASM的源程序,如圖2.5所示,以防止程序丟失。若用C語(yǔ)言編制源程序時(shí),則擴(kuò)展名為?.C。

4.輸入程序

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

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

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

7.?dāng)帱c(diǎn)設(shè)置與清除當(dāng)程序編譯連接成功后,可在源程序窗口設(shè)定斷點(diǎn)。將鼠標(biāo)指向源程序行左側(cè)需設(shè)定斷點(diǎn)行處,按下鼠標(biāo)左鍵設(shè)置后,斷點(diǎn)以“”標(biāo)記在文本左側(cè)的灰色狀態(tài)欄內(nèi)。重復(fù)上述步驟,設(shè)定更多的斷點(diǎn),如圖2.11所示?;蛘邌螕簟罢{(diào)試”菜單選擇“設(shè)置斷點(diǎn)”命令(快捷鍵F9),還可以單擊工具條的“設(shè)置斷點(diǎn)”命令按鈕。設(shè)置斷點(diǎn)后,當(dāng)重復(fù)調(diào)試程序時(shí),程序只要運(yùn)行到此處就會(huì)停在該斷點(diǎn)處。清除斷點(diǎn)時(shí)只需在所設(shè)斷點(diǎn)行處按下鼠標(biāo)左鍵,或者在“調(diào)試”菜單下點(diǎn)擊“復(fù)位”命令,就可以快速觀察程序運(yùn)行到斷點(diǎn)時(shí)的執(zhí)行結(jié)果。圖2.11斷點(diǎn)的設(shè)置

8.設(shè)置PC指針

單片機(jī)在復(fù)位時(shí)自動(dòng)將PC的內(nèi)容設(shè)定為0000H。在調(diào)試源程序過程中,如果需要從某一地址處開始執(zhí)行程序,則可以重新設(shè)置PC指針改變程序執(zhí)行地址,將鼠標(biāo)指向程序行左側(cè)需設(shè)定斷點(diǎn)行處,按下鼠標(biāo)右鍵?;蛘邚摹霸O(shè)置”菜單中打開設(shè)置PC值窗口,在修改PC值窗口中直接輸入程序地址。

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

10.宏單步(步越)

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

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

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

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

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

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

1.鍵盤監(jiān)控程序工作狀態(tài)

用戶可以通過28個(gè)鍵向QTH-2008XS實(shí)驗(yàn)儀發(fā)出各種操作命令,大多數(shù)鍵均有兩個(gè)以上功能,本機(jī)無(wú)上下?lián)蹀D(zhuǎn)換鍵,實(shí)驗(yàn)儀進(jìn)行什么操作不僅與按壓什么鍵有關(guān),而且與當(dāng)時(shí)實(shí)驗(yàn)儀的狀態(tài)有關(guān)。下述各工作狀態(tài)在操作中是一些重要概念,需讀者掌握。

待命狀態(tài)0:在本狀態(tài)時(shí),顯示器左端顯示一個(gè)閃動(dòng)的“P”提示符,表示實(shí)驗(yàn)儀在初始化狀態(tài)。實(shí)驗(yàn)儀接通電源自動(dòng)復(fù)位或按壓RESET鍵,都可以使本機(jī)處于待命狀態(tài)0。在大多數(shù)情況下,按MON鍵也可以使實(shí)驗(yàn)儀進(jìn)入待命狀態(tài)0。2.3鍵盤監(jiān)控程序簡(jiǎn)介待命狀態(tài)1:在本狀態(tài)時(shí),顯示器顯示一到八位數(shù)字,數(shù)字中間沒有間隔。如果顯示八位數(shù)字,則第一位會(huì)不斷閃動(dòng)。在待命狀態(tài)0時(shí),按數(shù)字鍵本機(jī)便轉(zhuǎn)入待命狀態(tài)1。另外,當(dāng)執(zhí)行用戶程序時(shí),遇斷點(diǎn)、單步執(zhí)行、宏單步執(zhí)行等都會(huì)使實(shí)驗(yàn)儀進(jìn)入待命狀態(tài)1。

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

2.鍵盤監(jiān)控特點(diǎn)

鍵盤控制具有以下特點(diǎn):

(1)?QTHBUG沒有換擋鍵,鍵的功能取決于實(shí)驗(yàn)儀所處的狀態(tài)。各個(gè)鍵的功能同實(shí)驗(yàn)儀的狀態(tài)聯(lián)系在一起,免去了記憶上下?lián)醯穆闊?。?shí)驗(yàn)儀的狀態(tài)可以從顯示器的方式中判斷,不會(huì)引起混亂。

(2)具有單步、宏單步跟蹤功能,持續(xù)按壓?jiǎn)尾絊TEP、宏單步SCAL鍵,實(shí)驗(yàn)儀便進(jìn)入跟蹤狀態(tài),以每分鐘200多條指令快速執(zhí)行用戶程序,同時(shí)顯示程序執(zhí)行地址及該單元內(nèi)容和累加器的內(nèi)容,只要松開鍵便可以立刻停止,返回待命狀態(tài)。

(3)?QTHBUG有靈活的斷點(diǎn)設(shè)置、單步、宏單步、自動(dòng)跟蹤等功能,大大提高了本機(jī)的開發(fā)功能,為用戶節(jié)省了調(diào)試程序的時(shí)間。

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

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

(6)除復(fù)位鍵以外,大多數(shù)鍵有自動(dòng)連續(xù)功能,持續(xù)按鍵0.8秒以上,就會(huì)產(chǎn)生連續(xù)按鍵的效果,達(dá)到快速掃描、檢查,簡(jiǎn)化了操作,節(jié)省了時(shí)間。

1.硬件復(fù)位——RESET鍵

QTH-2008XS實(shí)驗(yàn)儀在上電或按下RESET鍵時(shí)均使系統(tǒng)復(fù)位,復(fù)位時(shí)程序計(jì)數(shù)器PC及SFR均被初始化為MCS-51執(zhí)行復(fù)位后的內(nèi)容。

在任何時(shí)刻按壓復(fù)位鍵RESET,都會(huì)迫使實(shí)驗(yàn)儀進(jìn)入初始化狀態(tài)(與上電復(fù)位作用一樣),在復(fù)位信號(hào)有效期間,所有輸出信號(hào)均無(wú)效,數(shù)據(jù)及地址總線均為三態(tài),并且在RESET變低前每一個(gè)周期重復(fù)執(zhí)行CPU內(nèi)部復(fù)位。2.4鍵盤操作說明

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

(2)進(jìn)入監(jiān)控程序,顯示器左端顯示“P”表示處于待命狀態(tài),可以接受數(shù)字鍵和命令鍵輸入。

(3)清除用戶斷點(diǎn),并進(jìn)入連機(jī)通信等待狀態(tài)。

2.返回待命狀態(tài)——MON鍵

按MON鍵,可使實(shí)驗(yàn)儀進(jìn)入待命狀態(tài)0,通常用MON鍵進(jìn)行以下操作:

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

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

按MON鍵不會(huì)影響用戶的存儲(chǔ)區(qū)、寄存器,以及已設(shè)置的斷點(diǎn),也不會(huì)影響實(shí)驗(yàn)儀的當(dāng)前模式。3.送數(shù)命令——16個(gè)數(shù)字鍵

16個(gè)數(shù)字鍵0~F,一般是用來(lái)向?qū)嶒?yàn)儀輸入十六進(jìn)制數(shù)字,輸入的數(shù)將立刻顯示在顯示儀上,等待輸入數(shù)字的位置通常由光標(biāo)指出。數(shù)字輸入后,光標(biāo)就自動(dòng)移到下一位,即下一位的數(shù)字閃動(dòng),表明它準(zhǔn)備接受更改的位置,但有以下兩種情況不出現(xiàn)光標(biāo):

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

(2)在特殊功能寄存器讀狀態(tài)時(shí),不能修改其內(nèi)容,所以這時(shí)光標(biāo)不閃動(dòng)。

16數(shù)字鍵與寄存器標(biāo)號(hào)共用一位地址表示寄存器或部分SFR。

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

這一組命令用來(lái)檢查(讀出)或更改(寫入)內(nèi)存單元,通過這些鍵盤命令操作向?qū)嶒?yàn)儀送入程序和數(shù)據(jù)。

先按MON鍵,使實(shí)驗(yàn)儀處于待命狀態(tài)0,然后輸入四位表示要檢查的存儲(chǔ)器地址,再按MEM存儲(chǔ)器讀/寫鍵,讀出該單元的內(nèi)容,實(shí)驗(yàn)儀便進(jìn)入存儲(chǔ)器讀/寫狀態(tài)。

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

按MON鍵,可使實(shí)驗(yàn)儀退出存儲(chǔ)器讀/寫狀態(tài)返回待命狀態(tài)0,操作步驟見表2-1。

5.寄存器、片內(nèi)RAM區(qū)讀/寫命令——REG、NEXT、

LAST鍵

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

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

若要對(duì)RAM區(qū)的內(nèi)容進(jìn)行改寫,可按所需的數(shù)字鍵,則光標(biāo)所在處的數(shù)字即被更換。按NEXT或LAST鍵,可查看該下一個(gè)或上一個(gè)寄存器對(duì),RAM區(qū)(按代號(hào)順序排列)的內(nèi)容。持續(xù)按鍵的時(shí)間在0.8秒以上時(shí),可實(shí)現(xiàn)快速查找寄存器及RAM區(qū)。

按MON鍵,可以從寄存器RAM區(qū)讀/寫狀態(tài)退回待命狀態(tài)0。

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

6.外部數(shù)據(jù)、RAM、I/O口讀/寫命令——DRAM、

NEXT、LAST鍵

用DRAM鍵可以對(duì)擴(kuò)展的外部數(shù)據(jù)存儲(chǔ)器、I/O口或擴(kuò)展的外部RAM的256個(gè)字節(jié)的內(nèi)容進(jìn)行檢查、讀出或更改(寫入)。

外部數(shù)據(jù)、RAM和I/O口的讀/寫,一般應(yīng)先按MON鍵,使實(shí)驗(yàn)儀進(jìn)入待命狀態(tài)0。然后按所要訪問的外部數(shù)據(jù)區(qū)的地址及擴(kuò)展RAM的地址,實(shí)驗(yàn)儀便進(jìn)入讀/寫狀態(tài)。數(shù)據(jù)存儲(chǔ)器讀/寫的狀態(tài)是:顯示器上顯示六個(gè)數(shù)字,左邊四位數(shù)字是存儲(chǔ)單元的地址,第五、六位空格,右邊兩位是該單元的內(nèi)容,光標(biāo)在第七位與第八位之間,表示等待修改該單元內(nèi)容。

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

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

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

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

特殊功能寄存器檢查的狀態(tài)標(biāo)志是:顯示器上顯示六個(gè)數(shù)字,第一、二數(shù)字表示特殊功能寄存器地址,第三到第六位是空格,第七、八位顯示該地址單元的內(nèi)容。

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

8.斷點(diǎn)的設(shè)置與清除命令——STBP鍵

設(shè)置斷點(diǎn)是調(diào)試程序的一種方法。在執(zhí)行用戶程序的過程中,遇到斷點(diǎn),程序便會(huì)停下來(lái),保護(hù)好此時(shí)的所有用戶寄存器,并顯示斷點(diǎn)地址及A累加器和下一條指令碼的內(nèi)容,或顯示用戶設(shè)定的內(nèi)容,進(jìn)入待命狀態(tài)1。這時(shí)可利用各種檢查命令,判斷程序執(zhí)行是否正確。

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

斷點(diǎn)的清除是逐個(gè)進(jìn)行的,但也可以按RESET鍵將所有斷點(diǎn)清除掉,實(shí)驗(yàn)儀返回待命狀態(tài)0。

9.查找斷點(diǎn)命令——GTBP鍵

上面已提到斷點(diǎn)的清除是逐個(gè)進(jìn)行的,若已經(jīng)忘記曾經(jīng)在何處設(shè)置了斷點(diǎn),如何把斷點(diǎn)地址找出來(lái)呢?使用GTBP鍵查找斷點(diǎn),可以迅速完成這一工作。

GTBP斷點(diǎn)查找在待命狀態(tài)1和存儲(chǔ)器讀/寫狀態(tài)時(shí)有效。在存儲(chǔ)器讀/寫狀態(tài)按GTBP鍵,可使實(shí)驗(yàn)儀從現(xiàn)行地址開始向后查找第一個(gè)斷點(diǎn)(不一定是第一次設(shè)置的斷點(diǎn)),查到之后便停下來(lái),顯示該斷點(diǎn)地址及其內(nèi)容,實(shí)驗(yàn)儀仍處于存儲(chǔ)器讀/寫狀態(tài)。這時(shí)如認(rèn)為該斷點(diǎn)需清除,便可按STBP鍵。再次按GTBP斷點(diǎn)查找鍵,實(shí)驗(yàn)儀又再?gòu)默F(xiàn)行地址開始向后查找,找到第二個(gè)便再停下來(lái),顯示該地址(斷點(diǎn))及其內(nèi)容,實(shí)驗(yàn)儀仍處于存儲(chǔ)器讀/寫狀態(tài)。如此反復(fù)進(jìn)行,便可把全部斷點(diǎn)查找出來(lái)。

查找斷點(diǎn)所需的時(shí)間,隨起始地址和斷點(diǎn)的個(gè)數(shù)而定,但最長(zhǎng)不會(huì)超過15秒,在查找斷點(diǎn)過程中,MON鍵不起作用。斷點(diǎn)的設(shè)置、清除與查找操作過程見表2.6。表2.6STBP、GTBP鍵的使用說明

10.單步執(zhí)行命令——STEP鍵

單步執(zhí)行鍵在待命狀態(tài)0、待命狀態(tài)1和存儲(chǔ)器讀/寫狀態(tài)時(shí)有效。在待命狀態(tài)0,按PC指針單步執(zhí)行程序;在待命狀態(tài)1,按顯示器上的地址單步執(zhí)行;在存儲(chǔ)器讀/寫狀態(tài),按現(xiàn)行地址執(zhí)行。

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

11.宏單步執(zhí)行命令——SCAL鍵

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

12.執(zhí)行程序命令——EXEC鍵

執(zhí)行鍵EXEC在待命狀態(tài)0、待命狀態(tài)1和存儲(chǔ)器讀/寫狀態(tài)時(shí)有效。在待命狀態(tài)0顯示一個(gè)閃動(dòng)“P”,按EXEC鍵,實(shí)驗(yàn)儀將按照用戶PC所指的地址,開始執(zhí)行程序;在待命狀態(tài)1(送入數(shù)字后的狀態(tài)),按顯示器上的地址執(zhí)行程序;在存儲(chǔ)器讀/寫狀態(tài),按顯示器上的現(xiàn)行地址執(zhí)行程序;在其他狀態(tài),EXEC鍵無(wú)效。用EXEC鍵執(zhí)行用戶程序,在程序中遇到斷點(diǎn)時(shí)會(huì)停下來(lái),并保護(hù)所有的寄存器,顯示斷點(diǎn)地址和累加器的內(nèi)容或顯示用戶指定單元的內(nèi)容,并返回待命狀態(tài)1。

遇到斷點(diǎn)中止程序的執(zhí)行后,若再次按EXEC鍵,程序會(huì)從斷點(diǎn)地址處繼續(xù)往下執(zhí)行。操作方法如表2.8所示。表2.8EXEC鍵的使用說明

13.計(jì)算相對(duì)轉(zhuǎn)移偏移量命令——OFST鍵

OFST鍵命令的功能是用來(lái)計(jì)算MCS-51指令系統(tǒng)中相對(duì)轉(zhuǎn)移指令的操作數(shù),即偏移量的值。OFST鍵命令只在存儲(chǔ)器讀/寫狀態(tài)有效。

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

14.十進(jìn)制與十六進(jìn)制轉(zhuǎn)換命令——DEC與HEX鍵

1)?DEC命令鍵

DEC命令鍵的功能是將十進(jìn)制數(shù)字(BCD)轉(zhuǎn)換成十六進(jìn)制數(shù)字。

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

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

2)?HEX命令鍵

HEX命令鍵的功能是將98967F以下的十六進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)。

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

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

15.時(shí)鐘顯示命令——TIME鍵

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

按MON鍵或RESET鍵復(fù)位,將中止時(shí)間顯示。

16.加載命令——LOAD鍵

按LOAD鍵顯示器顯示“—

—LOAD—

—”并將裝入實(shí)驗(yàn)的全部程序。

輸入實(shí)驗(yàn)程序的入口地址,再按執(zhí)行鍵(EXEC),便開始執(zhí)行相應(yīng)的程序。實(shí)驗(yàn)一單片機(jī)實(shí)驗(yàn)儀操作實(shí)驗(yàn)二單片機(jī)指令練習(xí)實(shí)驗(yàn)三單片機(jī)程序設(shè)計(jì)實(shí)驗(yàn)實(shí)驗(yàn)四單片機(jī)I/O控制實(shí)驗(yàn)實(shí)驗(yàn)五中斷系統(tǒng)實(shí)驗(yàn)實(shí)驗(yàn)六定時(shí)器/計(jì)數(shù)器實(shí)驗(yàn)實(shí)驗(yàn)七串/并轉(zhuǎn)換實(shí)驗(yàn)實(shí)驗(yàn)八擴(kuò)展存儲(chǔ)器讀寫實(shí)驗(yàn)實(shí)驗(yàn)九簡(jiǎn)單的I/O擴(kuò)展實(shí)驗(yàn)實(shí)驗(yàn)十8255輸入輸出實(shí)驗(yàn)實(shí)驗(yàn)十一A/D轉(zhuǎn)換實(shí)驗(yàn)實(shí)驗(yàn)十二D/A轉(zhuǎn)換實(shí)驗(yàn)實(shí)驗(yàn)十三可編程序計(jì)數(shù)8253實(shí)驗(yàn)

一、實(shí)驗(yàn)?zāi)康?/p>

熟悉QTH-2008XS單片機(jī)實(shí)驗(yàn)儀的使用方法。

掌握項(xiàng)目、文件的建立方法,寄存器、存儲(chǔ)器內(nèi)容的查看方法,以及程序的執(zhí)行及斷點(diǎn)的設(shè)置方法。

二、實(shí)驗(yàn)設(shè)備

QTH-2008XS單片機(jī)實(shí)驗(yàn)儀一臺(tái),PC機(jī)一臺(tái),QTH-2008XS單片機(jī)開發(fā)環(huán)境。實(shí)驗(yàn)一單片機(jī)實(shí)驗(yàn)儀操作

三、實(shí)驗(yàn)內(nèi)容

(1)閱讀第二章內(nèi)容,學(xué)習(xí)QTH-2008XS單片機(jī)實(shí)驗(yàn)儀的鍵盤和軟件調(diào)試環(huán)境的使用。

(2)按照操作步驟在實(shí)驗(yàn)儀上實(shí)際練習(xí)。

(3)在開發(fā)機(jī)上完成規(guī)定程序的調(diào)試。四、程序調(diào)試

1.拆字程序(寫出單元內(nèi)容)續(xù)表

1)程序調(diào)試步驟

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

(2)對(duì)源程序進(jìn)行編譯。編譯程序時(shí)注意:系統(tǒng)復(fù)位后PC的值為0000H,即程序從程序存儲(chǔ)器的0000H單元取指令執(zhí)行。因此,可利用ORG0000H進(jìn)行定位。但因?yàn)槌绦虼鎯?chǔ)器的低端有五個(gè)地址被固定地用作中斷服務(wù)程序的入口地址(如0003H為外部中斷0的中斷服務(wù)程序入口地址,000BH為定時(shí)器0的中斷服務(wù)程序入口地址,000BH為外部中斷1的中斷程序入口地址,0013H為外部中斷1的中斷服務(wù)程序入口地址,001BH為定時(shí)器1的中斷服務(wù)程序入口地址,0023H為串行口的中斷服務(wù)程序入口地址),所以在編程時(shí),通常在這些入口地址開始的單元中,放入一條轉(zhuǎn)移指令,如ORG0000H;AJMPSTART。

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

(4)當(dāng)編譯程序后出現(xiàn)綠色光標(biāo)時(shí),程序語(yǔ)法正確,可以將源程序裝載入實(shí)驗(yàn)儀。

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

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

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

2)調(diào)試程序說明

(1)外部RAM0100H單元內(nèi)容的修改或連續(xù)地址內(nèi)容的修改,可以通過在查看菜單中單擊數(shù)據(jù)存儲(chǔ)器窗口,然后在數(shù)據(jù)存儲(chǔ)器窗口中單擊鼠標(biāo)右鍵,選擇放置相同數(shù)據(jù)修改對(duì)應(yīng)連續(xù)地址中的數(shù)據(jù),如圖3.2所示,將外部RAM0100H~0102H單元設(shè)置為FFH。圖3.2設(shè)置外部數(shù)據(jù)存儲(chǔ)器連續(xù)地址內(nèi)容

(2)當(dāng)運(yùn)行程序觀察A、DPTR、R0的內(nèi)容時(shí),在“查看”菜單中點(diǎn)擊“寄存器窗口”,就可以觀察寄存器內(nèi)容的變化,如圖3.3所示。

3)思考題

(1)外部數(shù)據(jù)存儲(chǔ)器0100H單元的內(nèi)容與0101H、0102H兩個(gè)單元中的內(nèi)容有什么關(guān)系?

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

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

1)程序調(diào)試步驟

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

(2)對(duì)源程序進(jìn)行編譯。

(3)根據(jù)提示進(jìn)行糾錯(cuò)。

(4)將源程序裝載入實(shí)驗(yàn)儀。

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

(6)確定調(diào)試方法。用單步運(yùn)行方法調(diào)試或用中間設(shè)置斷點(diǎn)方法運(yùn)行程序。

2)思考題

(1)在編譯程序前設(shè)置數(shù)據(jù)與編譯后設(shè)置數(shù)據(jù),運(yùn)行程序的結(jié)果有什么不同?

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

(3)如何選擇調(diào)試方法?一、預(yù)習(xí)內(nèi)容

1.?dāng)?shù)據(jù)傳送類指令

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

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))實(shí)驗(yàn)二單片機(jī)指令練習(xí)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.算術(shù)運(yùn)算類指令

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

3.程序轉(zhuǎn)移類指令

無(wú)條件轉(zhuǎn)移指令:LJMPaddr16(長(zhǎng)轉(zhuǎn)移),AJMPaddr11(短轉(zhuǎn)移),SJMPrel(相對(duì)轉(zhuǎn)移),JMP@A+DPTR(間接轉(zhuǎn)移)。條件轉(zhuǎn)移指令:

JZrel ;若(A)=0,則轉(zhuǎn)移;若(A)≠0,則順序執(zhí)行

JNZrel ;若(A)≠0,則轉(zhuǎn)移;若(A)=0,則順序執(zhí)行

CJNE目的操作數(shù),源操作數(shù),rel

;若兩數(shù)相等,則順序執(zhí)行;若兩數(shù)不等,則

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

順序執(zhí)行;若(direct)≠0,則轉(zhuǎn)移

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

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

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

JCrel ;若(CY)=1,轉(zhuǎn)移;若(CY)=0,則順序執(zhí)行

JNCrel ;若(CY)=0,轉(zhuǎn)移;若(CY)=1,則順序執(zhí)行

JBbit,rel ;若(bit)=1,轉(zhuǎn)移;若(bit)=0,則順序執(zhí)行

JNBbit,rel ;若(bit)=0,1轉(zhuǎn)移;若(bit)=1,則順序執(zhí)行

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

順序執(zhí)行二、實(shí)驗(yàn)練習(xí)

1.實(shí)驗(yàn)?zāi)康?/p>

掌握項(xiàng)目、文件的建立方法,寄存器、存儲(chǔ)器內(nèi)容的查看方法,以及程序的單步執(zhí)行及斷點(diǎn)運(yùn)行程序方法。

熟悉程序轉(zhuǎn)移類指令、算術(shù)運(yùn)算類指令的功能。

2.實(shí)驗(yàn)設(shè)備

QTH-2008XS單片機(jī)實(shí)驗(yàn)儀一臺(tái),PC機(jī)一臺(tái),QTH-2008XS單片機(jī)開發(fā)環(huán)境。

3.實(shí)驗(yàn)內(nèi)容

(1)按照操作步驟在實(shí)驗(yàn)儀上實(shí)際練習(xí)。

(2)在開發(fā)機(jī)上完成規(guī)定程序的調(diào)試。

(3)回答思考題。

4.程序調(diào)試

數(shù)據(jù)傳送程序(寫出各單元內(nèi)容)

1)程序調(diào)試步驟

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

(2)對(duì)源程序進(jìn)行編譯。

(3)根據(jù)提示進(jìn)行糾錯(cuò)。

(4)將源程序裝載入實(shí)驗(yàn)儀。

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

(6)確定調(diào)試方法。用單步運(yùn)行方法調(diào)試,觀察每條指令的執(zhí)行結(jié)果,觀察程序執(zhí)行后A、R0、DPTR、R7的變化情況。如果循環(huán)程序次數(shù)多,則采用設(shè)置斷點(diǎn)的方法快速得到最終結(jié)果。

(7)調(diào)試程序,填寫表中的結(jié)果(每次循環(huán)結(jié)果),觀察程序PC值的變化情況和循環(huán)的次數(shù)。

2)調(diào)試程序說明

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

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

3)思考題

(1)指出程序中的循環(huán)部分,觀察循環(huán)執(zhí)行的次數(shù)。

(2)如何修改循環(huán)次數(shù)和傳送的數(shù)據(jù)?

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

多字節(jié)加法程序(寫出各單元內(nèi)容)續(xù)表

1)程序調(diào)試步驟

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

(2)對(duì)源程序進(jìn)行編譯。

(3)根據(jù)提示進(jìn)行糾錯(cuò)。

(4)將源程序裝載入實(shí)驗(yàn)儀。

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

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

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

2)調(diào)試程序說明

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

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

3)思考題

(1)修改程序?qū)崿F(xiàn)49E9H+98FCH,寫出程序及執(zhí)行結(jié)果。

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

(3)多字節(jié)加法程序中調(diào)用子程序時(shí)SP堆棧指針如何變化?

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

比較數(shù)據(jù)大小程序(寫出單元內(nèi)容)

1)程序調(diào)試步驟

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

(2)對(duì)源程序進(jìn)行編譯。

(3)根據(jù)提示進(jìn)行糾錯(cuò)。

(4)將源程序裝載入實(shí)驗(yàn)儀。

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

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

(7)查看程序結(jié)果,填寫程序運(yùn)行后單元的內(nèi)容。

2)思考題

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

(2)調(diào)試程序的方法有幾種?各有什么優(yōu)點(diǎn)?

一、預(yù)習(xí)內(nèi)容

1.偽指令

在匯編源程序的過程中,有一些指令不要求計(jì)算機(jī)進(jìn)行任何操作,也沒有對(duì)應(yīng)的機(jī)器碼,不產(chǎn)生目標(biāo)程序,不影響程序的執(zhí)行,僅僅是能夠幫助匯編進(jìn)行的一些指令,這些指令稱之為偽指令。實(shí)驗(yàn)三單片機(jī)程序設(shè)計(jì)實(shí)驗(yàn)

(1)設(shè)置目標(biāo)程序起始地址偽指令ORG。

格式:[標(biāo)號(hào):]ORG16位地址

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

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

格式:[標(biāo)號(hào):]END

該偽指令是匯編語(yǔ)言源程序的結(jié)束標(biāo)志,表示程序結(jié)束。

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

格式:[標(biāo)號(hào):]DB項(xiàng)或項(xiàng)表

該偽指令的功能是把項(xiàng)或項(xiàng)表的數(shù)值(字符則用ASCII碼)存入從標(biāo)號(hào)開始的連續(xù)存儲(chǔ)單元中。

(4)定義字偽指令DW。

格式:[標(biāo)號(hào):]DW項(xiàng)或項(xiàng)表

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

(5)等值偽指令EQU。

格式:[標(biāo)號(hào):]EQU項(xiàng)

該偽指令的功能是將指令中項(xiàng)的值賦予本語(yǔ)句的標(biāo)號(hào)。項(xiàng)可以是常數(shù)、地址標(biāo)號(hào)或表達(dá)式。

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

格式:[標(biāo)號(hào):]BIT位地址

該偽指令的功能是將位地址賦予特定位的標(biāo)號(hào),經(jīng)賦值后就可用指令中BIT左面的標(biāo)號(hào)來(lái)代替BIT右邊所指出的位。

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

程序的結(jié)構(gòu)可以分解為:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、子程序結(jié)構(gòu)。

實(shí)現(xiàn)分支結(jié)構(gòu)的指令有:JZREL;JNZREL;JCREL;JNCREL;JBBIT,REL;JNBBIT,REL;JBCBIT,REL;CJNZ比較數(shù)據(jù)1,比較數(shù)據(jù)2,REL。

實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的指令有:DJNZdirect,rel;DJNZRn,rel。

子程序調(diào)用和返回的指令有:LCALLaddr16;ACALLaddr11

溫馨提示

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

評(píng)論

0/150

提交評(píng)論