- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二十讲 汇编语言子程序设计举例 * 课堂互动八 * 题一、在51系列单片机的指令系统中,计算指令的时间单位是什么? 题二、在51系列单片机的指令系统中,最长指令的机器周期是多少? 题三、若单片机的时钟频率为24Mhz,那么一个机器周期的时间是多少? 题四、在51系列单片机的指令系统中,最长的指令字节是多少? 题五、汇编语言中,伪指令的作用是什么? 题六、汇编语言中,伪指令与机器指令的区别是什么? 题七、什么是子程序的安全性问题? 题八、解决子程序的安全性问题的方法有哪些? 例4-14 编制一个子程序,其功能是延时100ms。设系统时钟频率为12Mhz。 解:所谓延时程序就是让CPU空转一段时间,这在控制程序中经常遇到。延时的控制涉及到指令的执行周期,而指令执行的周期又与CPU的时钟频率有关。根据第三章3.6节所述,若系统时钟频率为12Mhz,则每一个机器周期是1μs。延时程序结构一般采用循环程序结构,如果延时时间较长,则需要采用多重循环结构程序。按题意,程序编制如下: * 例4-14程序 ;延时100ms子程序 ;入口参数:子程序名D100MS,影响0区寄存器R6、R7。 ;出口参数:无。 D100MS:MOV R7, #200; LOOP1: MOV R6, #250 LOOP2: DJNZ R6, LOOP2; DJNZ R7, LOOP1; RET; * 延时子程序时间的计算方法 指令“DJNZ R6, LOOP2”执行一次需要2个机器周期,也就是2μs。 该指令被执行的次数为:250×200=50,000次,耗时50000×2μs=100,000μs=100ms。 * 仔细计算以上子程序的延时 应该将所有指令的耗时全部计上,精确的耗时计算如下: 第一条指令耗时:1×1μs=1μs。 第二条指令耗时:1×1μs×200=200μs。 第三条指令耗时:2×1μs×50000=100ms。 第四条指令耗时:2×1μs×200=400μs 。 第五条指令耗时:2×1μs =2。 总共耗时为:1+200+100000+400+2=100603μs=100.603ms。 * 较精确的延时子程序 D100MS:MOV R7, #200; LOOP1: MOV R6, #248; NOP; LOOP2: DJNZ R6, LOOP2; DJNZ R7, LOOP1; RET; 以上程序总共耗时为:1+200+200+200×248×2+200×2+2=1000003μs=100.003ms。 * 例4-15 编制一子程序,将5个压缩BCD码转换成10个非压缩BCD码,如图4-7所示。设进子程序前,压缩BCD码被放在40H为首地址的内部数据存储器中;子程序运行后,非压缩BCD放在50H为首地址的内部数据存储器中。 ACC 00H R0 → R1 → * 例4-15程序 ; 5个压缩BCD码转换成10个非压缩BCD码子程序 ;入口参数:子程序名BCDCON,压缩BCD码被放在40H为首地址的内部数据存储器中。影响1区寄存器R0、R1和R6。 ;出口参数:非压缩BCD码放在50H为首地址的内部数据存储器中。 * 例4-15程序续 BCDCON:PUSH ACC; 保护现场。 PUSH PSW; 保护现场。 MOV PSW, #08H; 将工作寄存器设置在1区。 MOV R0, #40H; 设置压缩BCD码数据区指针。 MOV R1, #50H; 设置非压缩BCD码数据区指针。 MOV R6, #5; 设置计数器。 LOOP: CLR A; 把ACC清零。 XCHD A, @R0; 将压缩BCD码与ACC的低4位交换。 MOV @R1, A; 存放已形成的非压缩BCD码。 * 例4-15程序续 INC R1; 调整数据区指针。 MOV A, @R0; 将压缩BCD码的高4位送入ACC。 SWAP A; 形成非压缩BCD码。 MOV @R1, A; 存放已形成的非压缩BCD码。 INC R1; 调整非压缩BCD码数据区指针。 INC R0; 调整压缩BCD码数据区指针。 DJNZ R6, LOOP; 若数据未转换完,则继续转换。 POP PSW; 若数据已转换完,则恢复现场。 POP ACC; 恢复现场。 RET; * 定点数运算程序设计 1、双字节补码加法程序设计 例4-16:编一子程序,完成两双字节补码相加。设加数和被加数分别存放在R2R3和R4R5中,运算的结果存放在R6R7中。若运算结果发生溢出,使00H位单元=1;反之,使00H位单元=0。 * 程序编制 ;双字节补码加法子程序 ;入口参数:子程序名COMADD,加数和被加数分别存放在0区寄存器R2R3和R4R5中
文档评论(0)