原文:http://zyq5510806.blog.163.com/blog/static/122738986201111831442694/
Keil C51 調試程序時, 對 ROM的查看 以及RAM 查看或修改
可以進行以下操作;
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 調試的時候打開監視窗口;

2. 打開內存視窗,
在地址框填寫:
C: 0000 ; 查看 CODE 區
D: 0000 ; 查看 DATA 區
I: 0000 ; 查看 IDATA 區
X: 0000 ; 查看 XDATA 區

Regs是片內內存的相關情況值,Sys是系統一些累加器、計數器等。Regs很簡單就不多說。具體介紹一下Sys
a 累加器ACC,往往在運算前暫存一個操作數(如被加數),而運算后又保存其結果(如代數和)。
b 寄存器B ,主要用於乘法和除法操作
sp
sp_max
dptr 數據指針DPTR
PC $
states 執行指令的數量
sec 執行指令的時間累計(單位 秒)
psw 程序狀態標志寄存器PSW,八位寄存器,用來存放運算結果的一些特征,如有無進位、借位等。
p 奇偶標志P。反映累加器ACC內容的奇偶性,如果ACC中的運算結果有偶數個1(如11001100B,其中有4個1),則P為0,否則,P=1。
f1
ov 溢出標志位OV。MCS-51反映帶符號數的運算結果是否有溢出,有溢出時,此位為1,否則為0。
rs
f0
ac 輔助進位標志AC。又稱半進位標志,它反映了兩個八位數運算低四位是否有半進位,即低四位相加(或減)有否進位(或借位),如有則AC為1狀態,否則為0。
cy 進位標志CY(PSW7)。它表示了運算是否有進位(或借位)。如果操作結果在最高位有進位(加法)或者借位(減法),則該位為1,否則為0
由於PSW存放程序執行中的狀態,故又叫程序狀態字?運算器中還有一個按位(bit)進行邏輯運算的邏輯處理機(又稱布爾處理機)
根據指令執行的不同上述值會有相應的變化,也正是為了監測這些在單片機中看不到的值而達到調試的目的。
雖然軟件調試無法實現硬件調試那樣的信號輸出,但是可以通過軟件窗口的模擬監測輸出信號的高低電平以及單片機相關端口的變化。
這是全部打開后的效果。
有了輸出,就應該有輸入的設置
這個按鈕可以打開輸入預設窗口,輸入值窗口如下:
選擇不同的Int Source 會有不同的 Selected Interrupt的變化,通過選擇與賦值達到模擬輸入的目的。
可以在代碼所在窗口的最左邊右擊按鈕插入一個斷點,如下圖所示:
有了這個功能,你就可以控制監控要執行到某位置時系統的狀態。
最后在介紹一下一個很實用的功能:
這個是Disassembly Windows,按下后可以把C51 Disassembly 為相應的匯編語言,如果你有 相應的匯編知識的話就可以對比C51 與匯編的對比了。由於匯編的效率高很多,這也可以作為查看C51執行效率的一個方法。
上圖中就可以看出,C51 代碼是如何被解釋為匯編的。