单片机实验一

xiaoxiao2021-02-28  79

1、实验内容一 1.1、问题一: 编写以下实验题的程序,进行单步执行,观察相应专用寄存器、RAM空间(包括工作寄存器区、位寻址区、用户RAM区)数据的变化情况以及程序存储器的指令代码。 1.2、问题一的代码

ORG 0000H AJMP START ORG 0100H START:MOV A,#66H MOV R0, #22H MOV @R0,#5 MOV A, 20H XCHD A, @R0 ORL 22H, #30H SWAP A ORL A, #30H MOV 2FH, A SETB 7FH SJMP $ END

1.3、问题一的结果和现象: 单步运行的结果: 程序跳过第一句伪代码,直接运行第二句代码,即短转移指令,运行对应地址所存的代码。 第三句代码说明START函数的首地址为0100H,进行单步运行运行第四句以累加器为目的操作数的指令代码,累加器ACC被赋值#66H。 单步运行第五句以寄存器Rn为目的操作数的指令后,寄存器R0被赋值#22H。 继续单步运行运行第六句以间接地址为目的操作数的指令后,片内RAM的22H地址被赋值05H。 再单步运行第七句以累加器为目的操作数的指令,将地址20H里的数值赋值给累加器A,即累加器被赋值0。 接着单步运行第八句交换指令,累加器与工作寄存器R0所指存储单元中的低半字节内容互换,即累加器被赋值05H,地址22H的内容被置零。 单句运行第九句逻辑或指令,直接地址单元22H中的内容和累加器A中的内容执行逻辑或操作,结果存在直接单元22H中,即将00H与30H相加赋值给22H。 单句运行第十句交换指令,将累加器的内容高低半字节互换,即将累加器的高板子节赋值5,低半字节赋值0。 单句运行第十一句逻辑或指令,即,可知累加器被赋值70H,有累加器中有奇数个1,则P=1。 单句运行第十二句以直接地址作为目的操作数的指令,将累加器的值送到2FH单元中。 单句运行第十三句置位指令,即将2FH最高位置1,即,即2FH的值被赋值为F0H。 单句运行第十四句相对转移指令,即死循环。 2、实验内容二 2.1、问题二: 设30H和32H开头分别存放两个16位无符号二进制数(低8位在低地址30H、32H,高8位在高地址31H、33H),完成两个数相加的程序,并将结果放入34H开头的单元。将1122H和3344H分别送入RAM单元,观察结果和CY标志;再分别将8899H和AABBH放入RAM单元,再观察结果和CY标志。 2.2、问题二的代码: 计算1122H和3344H相加的代码如下:

ORG 0000H AJMP START START:MOV 30H,#22H MOV 31H,#11H MOV 32H,#44H MOV 33H,#33H MOV A , 30H ADD A , 32H MOV 34H , A MOV A , 31H ADD A , 33H MOV 35H , A

计算8899H和AABBH相加的代码如下:

ORG 0000H AJMP HSUM HSUM:MOV 30H,#99H MOV 31H,#88H MOV 32H,#0BBH MOV 33H,#0AAH MOV A , 30H ADD A , 32H MOV 34H , A MOV A , 31H ADD A , 33H MOV 35H , A

2.3、问题二的实验结果和现象: 计算1122H和3344H相加的实验结果,地址34H存放低8位66H,地址35H存放高8位44H,Cy没有进位。 计算8899H和AABBH相加的实验结果,地址34H存放低8位54H,地址35H存放高8位32H,Cy有进位。 3、实验内容三 3.1、问题三: 将30H单元内的2个BCD数相乘,乘积转换为BCD数,并把乘积送入31H单元。 3.2、问题三的代码:

ORG 0000H AJMP START ORG 0100H START:MOV 30H, #99H MOV A ,30H MOV B , #10H DIV AB MUL AB MOV B , #0AH DIV AB SWAP A ADDC A , B END

3.3、问题三的实验结果和现象: 累加器和地址31H存放成绩结果十进制结果81,现象如图。 4、实验内容四 4.1、问题四: 验证堆栈操作的步骤:

(A)=50H,(B)=60H PUSH ACC ①(SP)←(SP)+1, ②ACC中的内容压入SP指向的单元。 POP B ① SP指向的单元内容弹出到B ②(SP)←(SP)-1。

4.2、问题四的代码:

ORG 0000H AJMP START ORG 0200H START:MOV A,#50H MOV B , #60H PUSH ACC POP B END

4.3、问题四的实验结果和现象: 进行单步运行,运行完PUSH语句后,SP加1,实际情况是SP先加1,堆栈再放入数据;运行完POP语句后,B的值被赋值为50H,SP减1,实际情况是堆栈数据先出栈,SP再减1.现象如图: 执行完PUSH语句: 执行完POP语句: 5、实验内容五 5.1、问题五: 实现将30H内无符号数扩大6倍,设扩大6倍的值不超过255。 5.2、问题五的代码:

ORG 0000H AJMP START ORG 0200H START:MOV 30H,#12H MOV A , 30H RL A MOV 31H , A RL A ADDC A , 31H END

5.3、问题五的实验结果和现象: 实验结果为累加器和30H存放12H放大6倍的结果6CH,现象如图: 6、实验内容六 6.1、问题六: 完成0~9的平方值查表程序,要求分别利用DPTR和PC作为变址寄存器,并比较两者的异同。 6.2、问题六的代码: 运用DPTR作为变址寄存器代码如下:

ORG 0000H AJMP START ORG 0100H START:MOV 30H,#02H MOV A , 30H MOV DPTR , #TAB MOVC A,@A+DPTR MOV 30H , A ORG 0200H TAB: DB 0,1,4,9,16,25,36,49,64,81 END

运用PC作为变址寄存器代码如下:

ORG 0000H AJMP START ORG 0100H START:MOV 30H,#02H MOV A , 30H MOV DPTR , #TAB ADD A,#02H MOVC A,@A+PC MOV 30H , A TAB: DB 0,1,4,9,16,25,36,49,64,81 END

6.3、问题六的实验结果和现象: 利用DPTR和PC作为变址寄存器,以PC为基址时,不用设置PC的值,只需根据A的内容,就可以查出表格中的数据。但表格只能放在该条查表指令后面的256个单元中,并且需要根据查表语句和表之间的代码的所占字节数对A进行相加。而以DPTR为基址时,表格的大小和位置可以在64KB的ROM中任意安排,并且表格可被任意程序块所共享。 实验结果为累加器存放2的平方数4。 运用PC作为变址寄存器现象如图: 运用DPTR作为变址寄存器现象如图:

转载请注明原文地址: https://www.6miu.com/read-2350309.html

最新回复(0)