《【教学课件】第4章80C51汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第4章80C51汇编语言程序设计.ppt(20页珍藏版)》请在三一办公上搜索。
1、第章 80C51汇编语言程序设计,本章的主要内容,程序设计语言和伪指令;MCS-51单片机汇编语言程序设计的步骤延时程序的使用方法查表程序设计数制转换的原理,4.1.1 程序设计语言,机器语言汇编语言C8051语言,4.1.2 伪指令,ORG 操作数;符号名称 EQU 操作数;字符名称 DATA 操作数;【标号:】DB 数据表;【标号:】DW 数据表;字符名称 bit 位地址;P10 bit P1.0,虽然单片机的每条指令能使计算机完成一种特定的操作。但要完成某一特定的任务还需要将这些指令按工作要求有序组合为一段完整的程序。程序实际上是一系列计算机指令的有序集合。我们把利用计算机的指令系统来合
2、理地编写出解决某个问题的程序的过程,称之为程序设计。,4.1.3 简单汇编语言程序设计(67),编制程序的步骤,1.任务分析(硬件、软件系统分析)2.确定算法和工作步骤;3.程序总体设计和流程图绘制,4.分配内存,确定程序与数据区存放地址;5.编写源程序;6.调试、修改,最终确定程序。,方法技巧,模块化设计(显示、打 印、输入、发送)2.尽量采用循环及子程序结构(节省内存),汇编语言的规范,汇编语言源程序由以下两种指令构成汇编语句(指令语句)伪指令(指示性语句)汇编语句的格式:标号:操作码操作数;注释3.数据表示形式:二进制(B)、十六进制(H)、十进制(D或省略)、ASCII码(以单引号标识
3、),4.2.1 三种程序的结构,(1)分支结构或者选择结构(2)循环结构(3)查表程序,4.2.2 三个应用举例,(1)延时程序(2)十六进制ASCII的转换(3)两字节的乘法,(1)延时程序,题目:单片机采用12M晶振,试编写0.1s延时程序 ORG0100H MOVR2,#200LOOP:MOVR3,#250 DJNZR3,$(2周期)DJNZR2,LOOP RET,请思考:机器周期是多少?,请思考:如何计算总的延时时间?,例2:50ms延时子程序。设晶振频率为12MHz,则机器周期为1us。,DEL:MOV R7,#200;1MCDEL1:MOV R6,#123;1MC NOP;1MC
4、DJNZ R6,$;2MC DJNZ R7,DEL1;2MC RET;2MC,延时时间:t=1+200(1+1+2*123)+2+2 50000us=50ms,(2)代码转换类程序设计,十六进制数与ASCII的转换十六进制整数转换成单字节码整数,*单字节十六进制数转换成双字节ASCII码,表4-1 十六进制数与ASCII码之间的关系,例1:待转换的单字节十六进制数在寄存器R2中。高四位的 ASCII码存在A中,低四位的ASCII码存在B中。,ORG 0100H MOVA,R2 MOVB,A;暂存待转换的单字节十六进制数 LCALL MS1 XCHA,B;存放低四位的ASCII码 SWAP A;
5、准备转换高四位 LCALL MS1 SJMP$MS1:ANLA,#0FH CJNE A,#0AH,N1 SJMP DAYU N1:JNC DAYU ADD A,#30H SJMP DIWEI DAYU:ADD A,#37H;将累加器低四位转换成 ASCII DIWEI DIWEI:RET,例2:查找无符号数据块中最大值(P104),ORG 1000H MOV R2,#0AH;共计十个数 CLR ALP:SUBB A,R1 JNC NEXT MOV A,R1;第二个数大 SJMP NEXT1NEXT:ADD A,R1;原数最大,恢复NEXT1:INC R1 DJNZ R2,LP END,请思考:
6、用另外一种方法?,(3)查表程序设计,MOVCA,A+DPTRMOVCA,A+PC,举例:查表求ASCII码已知:R0低四位有一个十六进制数(0F)。将查表找出的相应ASCII码并送回R0中。,ORG0100HMOVA,R0ANLA,#0FH;屏蔽高4位ADDA,#03HMOVCA,A+PC;查表MOVR0,A;存结果SJMP$ASCTAB:DB0,1,2,3,4,5,6,7 DB8,9,A,B,C,D,E,F,请思考:为什么?,4.2 子程序设计时注意事项,1.给子程序赋一个名字。实际为入口地址代号。2.要能正确传递参数:入口条件:子程序中要处理的数据如何给予。出口条件:子程序处理结果如何存放。(寄存器、存储器、堆栈方式)3.保护与恢复现场:保护现场:压栈指令PUSH 恢复现场:弹出指令POP 4.子程序可以嵌套,