微机原理与应用:第二十讲 汇编语言子程序设计举例_第1页
微机原理与应用:第二十讲 汇编语言子程序设计举例_第2页
微机原理与应用:第二十讲 汇编语言子程序设计举例_第3页
微机原理与应用:第二十讲 汇编语言子程序设计举例_第4页
微机原理与应用:第二十讲 汇编语言子程序设计举例_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二十讲,汇编语言子程序设计举例,1,课堂互动八,2,题一、在51系列单片机的指令系统中,计算指令的时间单位是什么,题二、在51系列单片机的指令系统中,最长指令的机器周期是多少,题三、若单片机的时钟频率为24Mhz,那么一个机器周期的时间是多少,题四、在51系列单片机的指令系统中,最长的指令字节是多少,题五、汇编语言中,伪指令的作用是什么,题六、汇编语言中,伪指令与机器指令的区别是什么,题七、什么是子程序的安全性问题,题八、解决子程序的安全性问题的方法有哪些,例4-14,编制一个子程序,其功能是延时100ms。设系统时钟频率为12Mhz,解:所谓延时程序就是让CPU空转一段时间,这在控制程序中

2、经常遇到。延时的控制涉及到指令的执行周期,而指令执行的周期又与CPU的时钟频率有关。根据第三章3.6节所述,若系统时钟频率为12Mhz,则每一个机器周期是1s。延时程序结构一般采用循环程序结构,如果延时时间较长,则需要采用多重循环结构程序。按题意,程序编制如下,3,例4-14程序,延时100ms子程序 ;入口参数:子程序名D100MS,影响0区寄存器R6、R7。 ;出口参数:无。 D100MS:MOVR7,#200; LOOP1:MOVR6,#250 LOOP2:DJNZR6,LOOP2; DJNZR7,LOOP1; RET,4,延时子程序时间的计算方法,指令“DJNZR6,LOOP2”执行一

3、次需要2个机器周期,也就是2s,该指令被执行的次数为:250200=50,000次,耗时500002s=100,000s=100ms,5,仔细计算以上子程序的延时,应该将所有指令的耗时全部计上,精确的耗时计算如下,第一条指令耗时:11s=1s。 第二条指令耗时:11s200=200s。 第三条指令耗时:21s50000=100ms。 第四条指令耗时:21s200=400s 。 第五条指令耗时:21s =2。 总共耗时为:1+200+100000+400+2=100603s=100.603ms,6,较精确的延时子程序,D100MS:MOVR7,#200; LOOP1:MOVR6,#248; NO

4、P; LOOP2:DJNZR6,LOOP2; DJNZR7,LOOP1; RET,以上程序总共耗时为:1+200+200+2002482+2002+2=1000003s=100.003ms,7,例4-15,编制一子程序,将5个压缩BCD码转换成10个非压缩BCD码,如图4-7所示。设进子程序前,压缩BCD码被放在40H为首地址的内部数据存储器中;子程序运行后,非压缩BCD放在50H为首地址的内部数据存储器中,ACC,00H,R0,R1,8,例4-15程序,5个压缩BCD码转换成10个非压缩BCD码子程序 ;入口参数:子程序名BCDCON,压缩BCD码被放在40H为首地址的内部数据存储器中。影响

5、1区寄存器R0、R1和R6。 ;出口参数:非压缩BCD码放在50H为首地址的内部数据存储器中,9,例4-15程序续,BCDCON:PUSHACC;保护现场。 PUSHPSW;保护现场。 MOVPSW,#08H;将工作寄存器设置在1区。 MOVR0,#40H;设置压缩BCD码数据区指针。 MOVR1,#50H;设置非压缩BCD码数据区指针。 MOVR6,#5;设置计数器。 LOOP:CLRA;把ACC清零。 XCHDA,R0;将压缩BCD码与ACC的低4位交换。 MOVR1,A;存放已形成的非压缩BCD码,10,例4-15程序续,INCR1;调整数据区指针。 MOVA,R0;将压缩BCD码的高4

6、位送入ACC。 SWAPA;形成非压缩BCD码。 MOVR1,A;存放已形成的非压缩BCD码。 INCR1;调整非压缩BCD码数据区指针。 INCR0;调整压缩BCD码数据区指针。 DJNZR6,LOOP;若数据未转换完,则继续转换。 POPPSW;若数据已转换完,则恢复现场。 POPACC;恢复现场。 RET,11,定点数运算程序设计,1、双字节补码加法程序设计,例4-16:编一子程序,完成两双字节补码相加。设加数和被加数分别存放在R2R3和R4R5中,运算的结果存放在R6R7中。若运算结果发生溢出,使00H位单元=1;反之,使00H位单元=0,12,程序编制,双字节补码加法子程序 ;入口参数:子程序名COMADD,加数和被加数分别存放在0区寄存器R2R3和R4R5中。 ;出口参数:运算的结果存放在0区寄存器R6R7中。若运算结果发生溢出,00H位单元=1;反之,00H位单元=0,FLAGBIT00H;定义设置溢出标志位。 COMADD:PUSHPSW;保护现场。 PUSHACC;保护现场。 MOVA,R3;取补码数据的低8位于ACC。 ADDA,R5;补码数据的低8位相加,13,程序编制续,MOVR7,A;存放补码数据的低8位相加的结果。 MOVA,R2;取补码数据的高8位于ACC。 ADDCA,R4;补码数据的高8位相加,并加低8位进位。 MOVR6,A;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论