也仿真一下:
单步前先调整存储区窗口,改成外部扩展存储器:
把D:0 改成 X:0
先把0x000100的内容改成45
单步一次:
再单步一次:
累加器A马上变成45
仔细看看:
仔细看看:
程序存储器的数据输出:
想速度快,效率高,就搞个表格
放在程序存储器区间,用下列指令
MOVC A,@A+PC ; PC<--- (PC) +1, (A) ←((A) + (PC))
MOVC A,@A+DPTR ; (A)←((A) + (DPTR) )
把程序存储器的内容送入累加器
看看查表的例子:
我们看看查表子程序的调用:
$NOMOD51
$include (../../COMM-AI8051U/AI8051U.INC)
Fosc_KHZ EQU 24000 ;24000KHZ
ORG 0000H
LJMP MAIN;跳转到主程序;
ORG 0100H ;定义起始存储器位置
MAIN:
;MOV SP, #70H;对堆栈指针赋值
;MOV R0,#60H ;将立即数60H送到寄存器R0中
;MOV @R0, #56H ;将立即数56H送入到R0间接寻址的单元中,
;;执行后60H单元的内容变为56H
;MOV A, #98H
;MOV 20H,#56H;将立即数56H送入20H单元中
;MOV P2,#80H ;把立即数80H直接送入P2口中
;MOV R1, #82H
;MOV A, @R1
MOV DPTR,#2050H ;表示把16位常数装入数据指针。执行后,DPTR=2050H,其中DPH=20H,DPL=50H。
MOV DPTR, #0100H
MOVX A, @DPTR
MOV A, #7
LCALL GETSQ
MOV50H,A
LOOP:
LJMP LOOP
GETSQ: PUSH DPH ;保护DPTR内容
PUSH DPL
MOV DPTR,#TABLE ;赋表首址→DPTR
MOVC A,@A+DPTR;据A中内容查表
POP DPL
POP DPH;恢复DPTR原内容
RET;返回
TABLE:DB 00,01,04,09,16,25,36,49,64,81
END