单片机 熟悉键盘操作及数传指令 软件实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一 熟悉键盘操作及数传指令编程设计
1、 实验目的
1. 熟悉软件模拟调试的环境及键盘操作。
2. 掌握汇编语言程序设计的方法,加深对指令的理解。
3. 学会软件模拟调试和察看修改观察项的方法。
2、 实验内容
印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。
三、实验步骤
1. 进入调试软件环境,输入源程序;
2. 汇编源程序;
3. 用单步方式运行程序;
4. 检查并记录各寄存器和存储单元内容的变化。
四、程序清单
内部RAM 数据传送
需要查看的数据有30H,31H,A,R0等。
30H 31H A R0
ORG 0000H
OOH 00H 00H 00H
MOV R0,#30H (R0)=30H 2字节
00H 00H 00H 30H
MOV 30H,#45H (30H)=45H 3字节
45H 00H 00H 30H
MOV 31H,#46H (31H)=46H 3字节
45H 46H 00H 30H
MOV R2,30H (R2)=(30H)=45H 2字节
45H 46H OOH 30H
MOV 02H,31H (02H)=(31H)=46H (R2)=(31H)=46H 3字节 45H 46H00H 30H
MOV A,#87H (A)=87H (0E0H)=87H 2字节
45H 46H 87H 30H
MOV 0E0H,30H (0E0H)=(30H)=45H (A)=45H (psw)=01H(P)=01H 3字节45H 46H 45H 30H
MOV 30H,A (30H)=(A)=45H 2字节
5H 46H 45H 30H
MOV 31H,@R0 (31H)=((R0))=(30H)=45H 2字节
45H 45H 45H 30H
SJMP $
外部数据传送
需要查看的数据有外部数据存储器单元2000H,外部程序存储器单元
2001H。
程2000H 2001H 2002H 数2000H
ORG 0000H 00H
00H 00H 00H
MOV A,#89H (A)=89H (psw)=01H (P)=01H 2字节 44H 78H 67H 00H
MOV DPTR,#2000H (DPTR)=2000H 3字节 44H 78H 67H 00H
MOVX @DPTR,A ((DPTR))=(200H)=(A)=89H 1字节 44H 78H 67H 89H
INC DPTR (DPTR)=(DPTR)+01H=2001H 1字节 44H 78H 67H 89H
CLR A (A)=00H (psw)=00H 1字节 44H 78H 67H 89H
MOVC A,@A+DPTR (A)=((A)+(DPTR))=(2001H)=78H 1字节 44H 78H 67H 89H
SJMP $
ORG 2000H
DB 44H
DB 78H
DB 67H
堆栈操作
需要查看的数据有50H、51H、A及SP指针和堆栈区中数据随PUSH和POP指令执行后的变化情况和数据的存放次序等。
可用于保护现场和恢复现场的程序
50H 51H A SP
RG 0000H
00H 00H 00H 00H
MOV SP,#5FH (SP)=5FH 3字节 00H 00H 00H 5FH
MOV 50H,#3BH (50H)=3BH3字节
3BH 00H 00H 5FH
MOV 51H,#2FH (51H)=2FH3字节 3BH 2FH 00H 5FH
MOV A,#12H (A)=12H2字节 3BH 2FH 12H 5FH
PUSH 50H (SP)=60H (60H)=(50H)=3BH2字节 3BH 2FH 12H 60H
PUSH 51H (SP)=61H (61H)=(51H)=2FH2字节 3BH 2FH 12H 61H
PUSH ACC (SP)=62H (62H)=(A)=12H2字节 3BH 2FH 12H 62H
POP 0E0H (0E0H)=(62H)=12H (SP)=61H2字节 3BH 2FH 12H 61H
POP 51H (51H)=(61H)=2FH (SP)=60H2字节 3BH 2FH 12H 60H
POP 50H (50H)=(60H)=3BH (SP)=5FH2字节 3BH 2FH 12H 5FH
SJMP $
可用于数据交换程序
50H 51H A SP
ORG 0100H (SP)=07H
00H 00H 00H 07H
MOV SP,#6FH (SP)=6FH 3字节
00H 00H 00H 6FH
MOV 50H,#3BH (50H)=3BH3字节
3BH 00H 00H 6FH
MOV 51H,#2FH (51H)=2FH3字节
3BH 2FH 00H 6FH
PUSH 50H (SP)=70H (70H)=(50H)=3BH 2字节
3BH 2FH 00H 70H
USH 51H (SP)=71H (71H)=(51H)=2FH 2字节
3BH 2FH 00H 71H
POP 50H (50H)=(71H)=2FH (SP)=70H2字节
2FH 2FH 00H 70H
POP 51H (51H)=(70H)=3BH (SP)=6FH 2字节
2FH 3BH 00H 6FH
SJMP $
数据交换
记录每条指令运行后的结果,从而加深对各种不同的交换指令的理解。
ORG 0000H (SP)=07H
MOV A,#58H (A)=58H (PSW)=01H (P)=01H 2字节
SWAP A (A)=85H 1字节 “累加器高低半字节交换指令”
MOV 40H,A (40H)=(A)=85H 2字节
MOV A,#30H (A)=30H (PSW)=00H 2字节
MOV R0,#30H (R0)=30H 2字节
MOV @R0,#09H ((R0))=(30H)=09H 2字节
XCHD A,@R0 (A)=39H ((R0))=(30H)=00H 1字节 “低半字节交换指令”
MOV 50H,#1 (50H)=01H 3字节
MOV A,#89H (A)=89H (PSW)=01H (P)=01H 2字节
XCH A,50H (A)=01H (50H)=89H 2字节 “整字节交换指令”
MOV R7,#3 (R7)=03H 2字节
XCH A,R7 (A)=03H (R7)=01H (PSW)=00H 1字节
XCH A,@R0 (A)=00H ((R0))=(30H)=03H 1字节
END
思考题
1、 寄存器寻址与寄存器间接寻址有什么区别?
答:寄存器寻址中寄存器存放操作数;寄存器间接寻址中寄存器存放操作数所在的地址。
2、 PC指针与SP指针有什么区别?
答:PC指针是16位存储器,指向即将执行的命令的栈顶;SP指针是8位寄存器,指栈顶。
3、 DPTR指针与Ri(R0,R1)指针有什么区别?
答:DPTR指片外的64KB数据范围;Ri指针指片内00H—7FH数据范围,只有配合P2使用才可寻址片外64KB外围地址。
4、 立即寻址与直接寻址有什么区别?
答:立即寻址:指令给出操作数地址;直接寻址:指令给出操作数本身。
5、同一个特殊功能寄存器不同表达形式。
答:见书P46 表2-5 例如ACC、OEOH、A都代表A累加器,Cy、0D7H、PSW.7、0D0H.7都可以表示Cy。