欢迎来到天天文库
浏览记录
ID:14025996
大小:159.00 KB
页数:8页
时间:2018-07-25
《分支和循环程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《微处理器原理与应用》实验报告实验四一、实验名称:分支和循环程序设计二、实验目的:1、掌握分支程序编写方法2、掌握循环程序设计的方法和技巧3、学习程序调试的基本过程和方法三、实验内容:1.分支程序设计:(1)有两个8位无符号数NA、NB分别存放在内部RAM的40H,41H单元,当NA=NB时将该单元置0xff。源程序如下:汇编语言程序:ORG0000HAJMPSTARTORG0100HSTART:MOVA,40H//把(40H)中的值赋给累加器ACJNEA,
2、41H,LOOP1//判断累加器A与41H中数。如果A=(41H),则顺序执行,如果A>=(41H),则Cy=0,否则Cy=1。如果A<(41H),则执行跳转语句LOOP1。AJMPLOOP2//跳转到LOOP2LOOP1:JCLOOP3//如果Cy=0,顺序执行,如果Cy=1,跳转到LOOP3LOOP2:MOV42H,#0FFH//(42H)中赋值0xffAJMPLOOP//跳转到LOOPLOOP3:MOV42H,#88H//(42H)中赋值0x88LOOP:AJMPLOOPENDC51程序如下:#includ
3、e#includevoidmain(){unsignedcharna,nb,f; na=DBYTE[0x0040]; //把(0x0040)中的数赋给na nb=DBYTE[0x0041];//把(0x0041)中的数赋给nbif(na4、则,当NA>=NB时将该单元置0xff。NA、NB分别存放在内部RAM的40H,41H及50H,51H单元。提示:MCS-51指令系统没有16位比较指令,只能使用8位比较指令,于是应先比较两数的高8位,若NA的高8位小于NB的高8位,则说明NANB;将42H单元置0xff。若NA的高8位等于NB的高8位,则再比较两者的低8位,方法同上(当NA=NB时,也将42H单元置0xff)。2.循环程序设计(1)在片内RAM的10H单元存5、放一个8位无符号二进制数,要求将其每一位转换成相应的ASCII码,并以高位在前,低位在后的顺序依次存放到片内RAM以11H单元为首的连续单元中,编制相应的程序。分析:用带进位的循环左移指令RLC,通过对C标志的判断,可知该位为1还是0。ORG0000HAJMPSTARTORG0100HSTART:MOVR2,#08H//R2中赋值08H,控制八位二进制数的转换MOVR0,#10H//R0中赋值(10H)这个地址,MOVA,@R0//把地址(10H)中的数送到累加器A中INCR0//R0中的地址变量加一XUNHUA6、N:RLCA//带标志位Cy左移一位JCLOOP1//判断标志位,如果Cy=0,顺序执行,如果Cy=1,跳转到LOOP1MOV@R0,#30H//对R0中的地址变量赋值AJMPLOOP2LOOP1:MOV@R0,#31H//对R0中的地址变量赋值LOOP2:INCR0//R0中的地址变量加一DJNZR2,XUNHUAN//判断R2-1!=0时跳转到XUNHUANLOOP:SJMPLOOPEND(2)编写该程序的C51程序。提示:要判断一个字节中第i位(i=7-0)的值是0或1,可用第i位值为1的字节数与之按位相与7、,若结果为0,表明该位为0,反之为1。例如:数0x82,即10000010,要判断第7位的值,可将0x82与0x80(即10000000,第7位为1)按位相与,结果不为0,所以0x82的第7位值为1。.要在片内RAM0x11地址连续存放转换后的ASCII码,可定义一个指向无符号单字节数的指针,将该指针的初值设为0x11,后在循环体内加1即可。四、实验步骤:1、分支程序的设计(1)阅读理解源程序的汇编语言代码和C语言代码。(2)在理解了8位数据的大小比较的基础上,编写汇编程序和C语言程序对16位的数据的大小进行比较8、。2、循环程序的设计(1)对一个片内的地址中的8位二进制数,转换成ACSII码,并依次存放在一个连续的地址单元中。阅读理解这个汇编程序。(2)完成(1)的要求用C语言程序的编写代码。五、实验代码:16位数据的比较大小汇编语言代码:ORG0000HAJMPSTARTORG0100HSTART:MOVA,41H//把41H中的值赋给累加器ACJNEA,51H,LOOP1//判
4、则,当NA>=NB时将该单元置0xff。NA、NB分别存放在内部RAM的40H,41H及50H,51H单元。提示:MCS-51指令系统没有16位比较指令,只能使用8位比较指令,于是应先比较两数的高8位,若NA的高8位小于NB的高8位,则说明NANB;将42H单元置0xff。若NA的高8位等于NB的高8位,则再比较两者的低8位,方法同上(当NA=NB时,也将42H单元置0xff)。2.循环程序设计(1)在片内RAM的10H单元存
5、放一个8位无符号二进制数,要求将其每一位转换成相应的ASCII码,并以高位在前,低位在后的顺序依次存放到片内RAM以11H单元为首的连续单元中,编制相应的程序。分析:用带进位的循环左移指令RLC,通过对C标志的判断,可知该位为1还是0。ORG0000HAJMPSTARTORG0100HSTART:MOVR2,#08H//R2中赋值08H,控制八位二进制数的转换MOVR0,#10H//R0中赋值(10H)这个地址,MOVA,@R0//把地址(10H)中的数送到累加器A中INCR0//R0中的地址变量加一XUNHUA
6、N:RLCA//带标志位Cy左移一位JCLOOP1//判断标志位,如果Cy=0,顺序执行,如果Cy=1,跳转到LOOP1MOV@R0,#30H//对R0中的地址变量赋值AJMPLOOP2LOOP1:MOV@R0,#31H//对R0中的地址变量赋值LOOP2:INCR0//R0中的地址变量加一DJNZR2,XUNHUAN//判断R2-1!=0时跳转到XUNHUANLOOP:SJMPLOOPEND(2)编写该程序的C51程序。提示:要判断一个字节中第i位(i=7-0)的值是0或1,可用第i位值为1的字节数与之按位相与
7、,若结果为0,表明该位为0,反之为1。例如:数0x82,即10000010,要判断第7位的值,可将0x82与0x80(即10000000,第7位为1)按位相与,结果不为0,所以0x82的第7位值为1。.要在片内RAM0x11地址连续存放转换后的ASCII码,可定义一个指向无符号单字节数的指针,将该指针的初值设为0x11,后在循环体内加1即可。四、实验步骤:1、分支程序的设计(1)阅读理解源程序的汇编语言代码和C语言代码。(2)在理解了8位数据的大小比较的基础上,编写汇编程序和C语言程序对16位的数据的大小进行比较
8、。2、循环程序的设计(1)对一个片内的地址中的8位二进制数,转换成ACSII码,并依次存放在一个连续的地址单元中。阅读理解这个汇编程序。(2)完成(1)的要求用C语言程序的编写代码。五、实验代码:16位数据的比较大小汇编语言代码:ORG0000HAJMPSTARTORG0100HSTART:MOVA,41H//把41H中的值赋给累加器ACJNEA,51H,LOOP1//判
此文档下载收益归作者所有