keil調(diào)試過程
在 Kei 里使用 DeBug 模式時,如要 查看外部 RAM 的數(shù)據(jù) 或查看 ACC 的內(nèi)容
可以進(jìn)行以下操作;
sysGetTxMode:
LCALL Com0185(C:2B95)
JNB 0xE0.0,sysGetTxMode
........
........
ret
Com0185:
MOV DPTR,#0x7020
MOVX A,@DPTR
RRC A
RRC A
ANL A,#0x3F
RET
1. 在Keil 調(diào)試的時候打開監(jiān)視窗口;
2. 打開內(nèi)存視窗,
在地址框填寫:
C:0000 ; 查看CODE區(qū)
D:0000 ; 查看DATA區(qū)
I: 0000 ; 查看IDATA區(qū)
X:0000 ; 查看XDATA區(qū)
Regs是片內(nèi)內(nèi)存的相關(guān)情況值,Sys是系統(tǒng)一些累加器、計數(shù)器等。Regs很簡單就不多說。具體介紹一下Sys
a累加器ACC,往往在運(yùn)算前暫存一個操作數(shù)(如被加數(shù)),而運(yùn)算后又保存其結(jié)果(如代數(shù)和)。
b寄存器B,主要用于乘法和除法操作
sp
sp_max
dptr數(shù)據(jù)指針DPTR
PC $
states執(zhí)行指令的數(shù)量
sec執(zhí)行指令的時間累計(單位秒)
psw程序狀態(tài)標(biāo)志寄存器PSW,八位寄存器,用來存放運(yùn)算結(jié)果的一些特征,如有無進(jìn)位、借位等。
p奇偶標(biāo)志P。反映累加器ACC內(nèi)容的奇偶性,如果ACC中的運(yùn)算結(jié)果有偶數(shù)個1(如11001100B,其中有4個1),則P為0,否則,P=1。
f1
ov溢出標(biāo)志位OV。MCS-51反映帶符號數(shù)的運(yùn)算結(jié)果是否有溢出,有溢出時,此位為1,否則為0。
rs
f0
ac輔助進(jìn)位標(biāo)志AC。又稱半進(jìn)位標(biāo)志,它反映了兩個八位數(shù)運(yùn)算低四位是否有半進(jìn)位,即低四位相加(或減)有否進(jìn)位(或借位),如有則AC為1狀態(tài),否則為0。
cy進(jìn)位標(biāo)志CY(PSW?7)。它表示了運(yùn)算是否有進(jìn)位(或借位)。如果操作結(jié)果在最高位有進(jìn)位(加法)或者借位(減法),則該位為1,否則為0
由于PSW存放程序執(zhí)行中的狀態(tài),故又叫程序狀態(tài)字?運(yùn)算器中還有一個按位(bit)進(jìn)行邏輯運(yùn)算的邏輯處理機(jī)(又稱布爾處理機(jī))
根據(jù)指令執(zhí)行的不同上述值會有相應(yīng)的變化,也正是為了監(jiān)測這些在單片機(jī)中看不到的值而達(dá)到調(diào)試的目的。
雖然軟件調(diào)試無法實(shí)現(xiàn)硬件調(diào)試那樣的信號輸出,但是可以通過軟件窗口的模擬監(jiān)測輸出信號的高低電平以及單片機(jī)相關(guān)端口的變化。
這是全部打開后的效果。
有了輸出,就應(yīng)該有輸入的設(shè)置
這個按鈕可以打開輸入預(yù)設(shè)窗口,輸入值窗口如下:
選擇不同的Int Source會有不同的Selected Interrupt的變化,通過選擇與賦值達(dá)到模擬輸入的目的。
可以在代碼所在窗口的最左邊右擊按鈕插入一個斷點(diǎn),如下圖所示:
有了這個功能,你就可以控制監(jiān)控要執(zhí)行到某位置時系統(tǒng)的狀態(tài)。
最后在介紹一下一個很實(shí)用的功能:
這個是Disassembly Windows,按下后可以把C51 Disassembly為相應(yīng)的匯編語言,如果你有相應(yīng)的匯編知識的話就可以對比C51與匯編的對比了。由于匯編的效率高很多,這也可以作為查看C51執(zhí)行效率的一個方法。
上圖中就可以看出,C51代碼是如何被解釋為匯編的。