单片机汇编语言程序设计

上传人:cn****1 文档编号:569526488 上传时间:2024-07-30 格式:PPT 页数:43 大小:1.10MB
返回 下载 相关 举报
单片机汇编语言程序设计_第1页
第1页 / 共43页
单片机汇编语言程序设计_第2页
第2页 / 共43页
单片机汇编语言程序设计_第3页
第3页 / 共43页
单片机汇编语言程序设计_第4页
第4页 / 共43页
单片机汇编语言程序设计_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《单片机汇编语言程序设计》由会员分享,可在线阅读,更多相关《单片机汇编语言程序设计(43页珍藏版)》请在金锄头文库上搜索。

1、单片机原理及应用单片机原理及应用林峰林峰 1 13666-026-3163666-026-QQQQ:358719121358719121电子与电气工程系电子与电气工程系 实验实验3#-5023#-502MCS-51MCS-51汇编语言程序设计汇编语言程序设计J汇编语言程序设计概述J汇编语言源程序的汇编J汇编语言实用程序设计MCS-51MCS-51汇编语言程序设计汇编语言程序设计程序设计程序设计:就是编制计算机的程序,即应用计算机所能识别的、接受的语言把要解决的问题的步骤有序地描述出来。汇编语言和高级语言的区别:汇编语言:程序效率高,占用资源少;面向硬件,可移植性差高级语言:直观易懂,容易维护,

2、可移植性好;占用资源多,程序效率没有汇编高C语言:语言: i=100; while(i-); for(k=0;k0Y= 0 X=0 -1X255,因此单重循环程序无法实现,可采用双重循环的方法编写50ms延时程序。 查表程序设计查表程序设计 ORG 1000H DELAY: MOV R7, #200 ; 设设置外循置外循环环次数(需要次数(需要1个个mp) DLY1: MOV R6, #123 ; 设设置内循置内循环环次数次数 DLY2: DJNZ R6, DLY2 ;(R6)-1!=0,则顺则顺序序执执行,否行,否则转则转回回 ; DLY2继续继续循循环环,延,延时时间为时时间为 ; 2 s

3、123=246 sNOP ; 延延时时间为时时间为1 sDJNZ R7,DLY1 ;(R7)-1=0,顺顺序序执执行,否行,否则转则转回回 ;DLY1继续继续循循环环,延,延时时间为时时间为 ;(246211)20021=50.003msRET; 子程序子程序结结束束END循环程序设计循环程序设计3 3循环程序时应注意的问题循环程序时应注意的问题(1 1)循环程序是一个有始有终的整体,它的执行是有条件)循环程序是一个有始有终的整体,它的执行是有条件的,所以要避免从循环体外直接转到循环体内部。的,所以要避免从循环体外直接转到循环体内部。(2 2)多重循环程序是从外层向内层一层一层进入,循环结)多

4、重循环程序是从外层向内层一层一层进入,循环结束时是由内层到外层一层一层退出的。束时是由内层到外层一层一层退出的。(3 3)编写循环程序时,首先要确定程序结构,处理好逻辑)编写循环程序时,首先要确定程序结构,处理好逻辑关系关系(4 4)循环体是循环程序中重复执行的部分,应仔细推敲,)循环体是循环程序中重复执行的部分,应仔细推敲,合理安排,应从改进算法、选择合适的指令入手对其进行优合理安排,应从改进算法、选择合适的指令入手对其进行优化,以达到缩短程序执行时间的目的。化,以达到缩短程序执行时间的目的。 子程序设计子程序设计子程序:子程序:能够完成确定任务,并能为其他程序反复调用的程序段称为子程序。特

5、点:特点:子程序可以多次重复使用,避免重复性工作,缩短整个程序,节省程序存储空间,有效地简化程序的逻辑结构,便于程序调试。 主程序:主程序:调用子程序的程序叫做主程序或称调用程序。1子程序的调用与返回子程序的调用与返回 主程序调用子程序的过程:在主程序中需要执行这种操作的地方执行一条调用指令(LCALL或ACALL),转到子程序,而完成规定的操作后,再在子程序最后应用RET返回指令返回到主程序断点处,继续执行下去。子程序设计子程序设计(1 1)子程序的调用)子程序的调用子程序的入口地址:子程序的入口地址:子程序的第一条指令地址称为子程序的入口地址,常用标号表示。程序的调用过程:程序的调用过程:

6、CPU收到ACALL或LCALL指令后,首先将当前的PC值(调用指令的下一条指令的首地址)压入堆栈保存(低8位先进栈,高8位后进栈),然后将子程序的入口地址送入PC,转去执行子程序。(2 2)子程序的返回)子程序的返回主程序的断点地址:主程序的断点地址:子程序执行完毕后,返回主程序的地址称为主程序的断点地址,它在堆栈中保存。子程序的返回过程:子程序的返回过程:子程序执行到RET指令后,将压入堆栈的断点地址弹回给PC(先弹回PC的高8位,后弹回PC的低8位),使程序回到原先被中断的主程序地址(断点地址)去继续执行。子程序设计子程序设计注意:注意:中断服务程序是一种特殊的子程序,它是在计算机响应中

7、断时,由硬件完成调用而进入相应的中断服务程序。RETI指令与RET指令相似,区别在于RET是从子程序返回,RETI是从中断服务程序返回。2 2保存与恢复寄存器内容保存与恢复寄存器内容(1 1)保护现场)保护现场:主程序转入子程序后,保护主程序的信息不会在运行子程序时丢失的过程称为保护现场。保护现场通常在进入子程序的开始时,由堆栈完成。如: PUSH PSW PUSH ACC 子程序设计子程序设计(2 2)恢复现场)恢复现场从子程序返回时,将保存在堆栈中的主程序的信息还原的过程称为恢复现场。恢复现场通常在从子程序返回之前将堆栈中保存的内容弹回各自的寄存器。如: POP ACC POP PSW子程

8、序设计子程序设计3 3编写子程序时应注意的问题编写子程序时应注意的问题 子程序的入口地址一般用标号表示,标号习惯上以子程序的任务命名。例如,延时子程序常以DELAY作为标号。 单片机能自动保护和恢复主程序的断点地址。但对于各工作寄存器、特殊功能寄存器和内存单元的内容,则必须通过保护现场和恢复现场实现保护。 主程序通过调用指令调用子程序,子程序返回主程序之前,必须执行子程序末尾的一条返回指令RET。子程序设计子程序设计解:解:计算某数的平方可采用查计算某数的平方可采用查表的方法实现,并编写成子程表的方法实现,并编写成子程序。只要两次调用子程序,并序。只要两次调用子程序,并求和就可得运算结果。求和

9、就可得运算结果。 例题例题8 8 编制程序实现编制程序实现c=a2+b2,a, ba, b均为均为1 1位十进制数。设位十进制数。设a, ba, b分分别存放于片内别存放于片内RAM的的30H, 31H两两个单元中,结果个单元中,结果c c存放于片内存放于片内RAM的的40H单元。单元。查表程序设计查表程序设计 ORG 1000H SR: MOV A, 30H; 将30H中的内容a送入A ACALL SQR; 转求平方子程序SQR处执行 MOV R1, A; 将a2结果送R1 MOV A, 31H; 将31H中的内容b送入A ACALL SQR; 转求平方子程序SQR处执行 ADD A, R1

10、; a2+b2结果送A MOV 40H, A; 结果送40H单元中 SJMP $; 程序执行完,“原地踏步” SQR: INC A MOVC A, A+PC RET TABLE: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 END求平方子程序求平方子程序(采用查平方(采用查平方表的方法):表的方法):散转程序设计散转程序设计散转程序:散转程序:是一种并行分支程序(多分支程序),它是根据某种输入或运算结果,分别转向各个处理程序。在MCS51中用JMP A+DPTR指令来实现程序的散转。转移的地址最多为256个。其结构如图下所示。散转程序设计散转程序设计(1)应用转

11、移指令表实现的散转程序直接利用转移指令(AJMP或LJMP)将欲散转的程序组形成一个转移表,然后将标志单元内容读入累加器A,转移表首址送入DPTR中,再利用散转指令JMP A+DPTR实现散转。(2)应用地址偏移量表实现的散转程序直接利用地址偏移量形成转移表,特点是程序简单、转移表短,转移表和处理程序可位于程序存储器的任何地方。(3)应用转向地址表的散转程序直接使用转向地址表。其表中各项即为各转向程序的入口。散转时,使用查表指令,按某单元的内容查找到对应的转向地址,将它装入DPTR,然后清累加器A,再用JMP A+DPTR指令直接转向各个分支程序。散转程序的设计方法散转程序的设计方法散转程序设

12、计散转程序设计(4)应用RET指令实现散转程序用子程序返回指令RET实现散转。其方法是:在查找到转移地址后,不是将其装入DPTR中,而是将它压入堆栈中(先低位字节,后高位字节,即模仿调用指令)。然后通过执行RET指令,将堆栈中的地址弹回到PC中实现程序的转移。 例题例题9 9 编制程序用单片机实现四则运算。解:解:在单片机的键盘上设置“、”四个运算按键。其键值存放在寄存器R2中,当(R2)00H时做加法运算,当(R2)01H时做减法运算,当(R2)02H时做乘法运算,当(R2)03H时做除法运算。P1口输入被加数、被减数、被乘数、被除数,输出商或运算结果的低8位;P3口输入加数、减数、乘数、除

13、数,输出余数或运算结果的高8位。子程序设计子程序设计程序简化流程图如下图所示。 ORG 1000H START: MOV P1, #DATA1H ; 给P1口、P3口送入数据DATA1, ;DATA2,用于计算 MOV P3, #DATA2H子程序设计子程序设计MOV DPTR, #TABLE ; 将基址TABLE送DPTRCLR C ; Cy清0MOV A, R2 ; 将运算键键值送ASUBB A, #04H ; 将键值和04H相减,用于产生Cy标志JNC ERROR ; 若输入按键不合理,程序转ERROR处; 否则,按键合理,程序继续执行ADD A, #04H ; 还原键值CLR C ;

14、Cy清0RL A ; 将A左移,即键值2,形成正确的散转偏移量 JMP A+DPTR ; 程序跳到(A)+(DPTR)形成的新地址TABLE: AJMP PRG0 ; 程序跳到PRG0处,将要做加法运算 AJMP PRG1 ; 程序跳到PRG1处,将要做减法运算 AJMP PRG2 ; 程序跳到PRG2处,将要做乘法运算 AJMP PRG3 ; 程序跳到PRG3处,将要做除法运算ERROR:(按键错误的处理程序)(略)汇编程序设计汇编程序设计u逻辑错误:逻辑错误:主要是语法错误。u功功能能错错误误:主要是设计思想或算法导致不能实现软件功能的错误。u指指令令错错误误:是指在编辑应用指令时所产生的错误。如:指令疏漏、位置不妥、指令不当和非法调用等。u程程序序跳跳转转错错误误:是指程序运行不到指定的地方,或发生死循环等。u子程序错误:子程序错误:u动动态态错错误误:是指系统动态性能没有达到设计指标的错误。如:控制系统的实时响应速度、显示器的亮度、定时器的精度等。u上电复位电路的错误:上电复位电路的错误:u中中断断程程序序错错误误:是指现场的保护与恢复错误、触发方式错误等。常见的软件错误常见的软件错误

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号