数码转换实验学号:1042402025姓名:张炎峰专业:电气工程与自动化2.2.1、实验目的1、掌握不同进制数及编码相互转换的方法,加深对数码转换的理解;2、熟悉KeilC51集成开发环境的操作及程序调试方法。2.2.2、实验设备PC机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51系统平台”、或“TD-PITE教学实验系统+TD-51系统平台”2.2.3、实验内容1、将BCD码整数0~255存入片内RAM的20H\21H\22H中,然后转换为二进制整数00H~FFH,保存到寄存器R4中。2、将16位二进制整数存入R3、R4寄存器中,转换为10进制整数,以组合BCD形式存储在RAM的20H\21H\22H单元中。2.2.4、实验步骤1、二进制整数转换为十进制整数实验参考例程:ORG0000HLJMPMAIN程序初始清零ORG0100HMAIN:MOVR0,#22H//转换结果低位地址存入R0MOVA,R0//将转换结果低位地址压入堆栈PUSHACCMOVR7,#03HCLRALP1:MOV@R0,ADECR0寄存器A中此时为零,通过将他赋值给20H、21H、DJNZR7,LP122H将他们三个寄存器清零POPACC将22H赋值给R0,既转换结果低位地址赋值给R0MOVR0,AMOVR7,#16用于作为控制16位二进制数转换的循环控制数LP2:PUSHACC保存转换结果地位地址CLRC将进位标志位清零,在下面对R4的循环左移中将R4低位赋值为零MOVA,R4首先对R4进行循环左移,并将其R4最高位存到RLCA进位标志位,R4最低位赋值为0,然后将R3循环MOVR4,A左移,并将R4的最高位赋值给R3的最低位,MOVA,R3达到16位二进制数整体左移一位并将16位二进RLCA制数的最高位保存到进位标志位MOVR3,AMOVB,#03H十进制数有六位,需占用三个存储单元,用来作为循环控制数LP3:MOVA,@R0这几行的目的是为了进行R0*2的操作,没有ADDCA,@R0采用乘法运算是为了通过进位标志位传递进位,避免DAA使用乘法程序带来的进位的问题,使得程序简单MOV@R0,A把十进制数存入存储单元中DECR0地址自减,指向高位地址DJNZB,LP3循环计算六位二进制数,完成一位二进制数的转换POPACC再将转换结果的低位地址赋值给R0MOVR0,ADJNZR7,LP2循环载入16位二进制数,以完成转换工作LJMPMAINEND(1)、编写实验程序,程序流程图如图所示,编译链接无误后,进入调试状态。我的是实验程序如下:(2)、修改R3、R4寄存器,例如:A2H、FCH;(3)、在LJMPMAIN语句行设置断点,然后运行程序;(4)、程序停止后,查看寄存器20H的内容,应为:04H、17H、24H;(5)、反复修改R3、R4寄存器的内容,运行试验程序,验证程序的正确性。(6)实验程序分析二进制转换为十进制的计算过程:A2FC(H)=41724(D)A2FC(H)=1010001011111100(B)41724(D)=1×2^15+0×2^14+1×2^13+0×2^12+0×2^11+0×2^10+1×2^9+0×2^8+1×2^7+1×2^6+1×2^5+1×2^4+1×2^3+1×2^2+0×2^1+0×2^0实验参考例程的计算过程:首先,保存转换结果地位地址;然后,结果存储地址清零;然后,复位进位标志,对二进制数(A2FC)进行循环左移一位,取出最高位(此时为1),放入到进位标志位中,此时,R3R4中剩下的是0100010111111000(B)(45F8(H));然后是将结果地址中的数(初值为0)×2,再加上进位标志位(即二进制数最高位),进行十进制调整(此时,×2计算与十进制调整不会同时产生进位,因为任意一个十六进制的两位数×2+1,若产生进位,则剩下的两位16进制数进行十进制调整必定不会产生进位);接下来是对原二进制数的第二位的进行计算;二进制数总共有16位,所以循环次数设为16。假设结果存储地址中的十进制数是Ai;16位二进制数的每一位的值是Bi初始值A0=0第一次循环A1=A0×2+B15第二次循环A2=A1×2+B14=(A0×2+B15)×2+B14=B15×2+B14×2^0;第三次循环A3=A2×2+B13=(B15×2+B14)×2+B13=B15×2^2+B14×2^1+B13×2^0第四次循环A4=A3×2+B12=(B15×2^2+B14×2+B13)×2+B12=B15×2^3+B14×2^2+B13×2^1+B12×2^0以此类推……第十六次循环A16=A15×2+B0=B15×2^15+B14×2^14+B13×2^13+……+B1×2^1+B0×2^0=1×2^15+0×2^14+1×2^13+0×2^12+0×2^11+0×2^10+1×2^9+0×2^8+1×2^7+1×2^6+1×2^5+1×2^4+1×2^3+1×2^2+0×2^1+0×2^0=41724(D)由于该程序在每一次循环(即每一次计算)时都进行了一次十进制调整,所以十六次循环计算可以用最后一个总的表达式进行十进制计算。