第四章+汇编语言程序设计.ppt_第1页
第四章+汇编语言程序设计.ppt_第2页
第四章+汇编语言程序设计.ppt_第3页
第四章+汇编语言程序设计.ppt_第4页
第四章+汇编语言程序设计.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、2020/9/23,1,第四章 汇编语言程序设计,通过前面的学习,我们已经了解了单片机内部的结构,MCS-51指令系统的寻址方式、各类指令的格式及功能。 下面我们就是要如何利用MCS-51的指令系统,来编写高效、充分利用其特点的程序。,2020/9/23,2,4.1 概述,1、 程序设计语言,机器语言、汇编语言、高级语言,源程序 目标程序,低级语言,机器语言,汇编,高级语言,机器语言,编译,2020/9/23,3,汇编语言语句格式,标号: 操作码 操作数 ;注解,2020/9/23,4,2、关于流程图符号:,开始、结束-圆角矩形 工作任务-矩形 判断分支-菱形 程序流向- 程序连接-,开始,结

2、束,2020/9/23,5,3 、 常用的伪指令,ORG 定位目的程序的起始地址。 格式:ORG 表达式 如:ORG 0000H 注:表达式必须为16位地址值。 END 汇编语言程序结束伪指令。 注:一定放在程序末尾!,2020/9/23,6,EQU (或DATA) 赋值伪指令。 格式: 字符名称 EQU 数值或汇编符号 例:AAEQU30H;也可写成 AA DATA 30H K1EQU40H;也可写成 K1 DATA 40H MOV A,#AA;30HA MOV A,K1 ;(40H)A,2020/9/23,7,DB 从指定单元开始定义(存储)若干个字节的数据或ASCII码字符,常用于定义数

3、据常数表。 格式:DB 字节常数或ASCII字符 例:ORG1000H DB34H,0DEH,A,B DB0AH,0BH,20,2020/9/23,8,DW 从指定单元开始定义(存储)若干个字的数据 或ASCII码字符。 格式:DW字常数或ASCII字符 例: ORG 2000H DW1234H,B DW0AH,20,2020/9/23,9,BIT 位地址符号指令。 把位地址赋于规定的字符名称。 格式:字符名称BIT位地址 例:ABCBITP1.1 QQBITP3.2,2020/9/23,10,4.2 程序设计基础与举例,4.2.1 顺序结构程序 顺序结构程序是最简单的程序结构,程序执行时一条

4、接一条地按顺序执行指令。,2020/9/23,11,例:将20H单元的压缩(Packed )BCD码拆成两个ACSII码存入21H、22H单元。,3 6,3 9,BCD 0 1 2 . 9,ASCII 30H 31H 32H . 39H,2020/9/23,12,(20H)A,10HB,A/B,A中为高4位BCD码, B中为低4位BCD码,(B)+30HB,(B)21H,(A)+30HA,(A)22H,开始,结束,2020/9/23,13,ORG 0000H MOV A,20H MOV B,#10H DIV AB ORL B,#30H MOV 21H,B ORL A,#30H MOV 22H,

5、A END,;除以10H ;高4位BCD码转换位ASCII码 ;低4位BCD码转换位ASCII码,2020/9/23,14,4.2.2 分支程序,分支程序可根据要求无条件或条件地改变程序执行流向。编写分支程序主要在于正确使用转移指令。分支程序有:单分支结构、多重单分支结构、多分支结构(散转)。,条件成立?,下条指令,程序段A,1、单分支结构,Y,N,2020/9/23,15,例1:设变量x以补码形式存放在片内RAM 30H单元中,变量y与x的关系是:,编程根据x的值求y值并放回20H单元中。,2020/9/23,16,2020/9/23,17,ORG 0000H START:MOV A,X J

6、Z ZERO ;x=0,转移 JNB ACC.7,P ;x0,转移 MOV A,#05H ;x0,不转移 ADD A,X MOV Y,A JMP ED P: MOV Y,X JMP ED ZERO: MOV Y,#20H ED: JMP $,X EQU 30H Y EQU 20H,2020/9/23,18,4.2.2 分支程序,2、多分支结构(散转),K=?,转向0分支,转向1分支,转向n-1分支,转向n分支,. . . . . .,K=0,K=1,K=n-1,K=n,2020/9/23,19,START:MOV DPTR,#TAB MOV A,R7 ADD A,R7 ;(R7)2A JMP

7、A+DPTR TAB: AJMP B0 AJMP B1 AJMP BN,例2 :根据R7的内容,转至对应的分支程序。设R7的内容为0N,对应的处理程序地址分别为B0BN,AJMP B0,AJMP B1,B0: B1: BN:,2020/9/23,20,4.2.3 循环程序,循环程序一般由: 初始化部分 循环体部分-处理部分、修改部分、控制部分 结束部分 其结构一般有两种: 先进入处理部分,再控制循环 至少执行一次循环体 先控制循环,再进入处理部分 循环体是否执行,取决于判断结果。,2020/9/23,21,开始,设置循环初值,循环处理,循环修改,结束处理,结束,循环结束?,N,Y,Y,N,20

8、20/9/23,22,循环控制的一般方法: 循环次数已知 利用循环次数控制 循环次数未知 利用关键字控制,2020/9/23,23,例1 (上机调试): 将内部RAM中起始地址为data的数据串送到外部RAM中起始地址为buffer的存储区域中,直到发现$字符,传送停止-循环次数事先不知道,应先判断,后执行。,MOV R0,#data MOV DPTR,#buffer LOOP1:MOV A,R0 CJNE A,#24H,LOOP2 ;判断是否为字符 JMP LOOP3 ;是,转结束 LOOP2:MOVX DPTR,A ;不是,传送数据 INC R0 INC DPTR JMP LOOP1 ;传

9、送下一数据 LOOP3:END,2020/9/23,24,补充: 子程序问题,子程序设计时注意事项: 1. 给子程序赋一个名字。实际为入口地址代号。 2. 要能正确传递参数: 入口条件:子程序中要处理的数据如何给予。 出口条件:子程序处理结果如何存放。 (寄存器、存储器、堆栈方式) 3. 保护与恢复现场: 保护现场:压栈指令PUSH 恢复现场:弹出指令POP 4. 子程序可以嵌套,2020/9/23,25,例1 (上机调试) :利用查表法求平方和 ,设a、b、c分别存于内部RAM的DA0、DB0、DC0三个单元中。,MOV A,DA0 ;取a ACALL SQR ;调用查表子程序 MOV R1

10、,A ;a的平方暂存R1中 MOV A, DB0 ;取b ACALL SQR ;调用查表子程序 ADD A,R1 ;求出平方和暂存阿A中 MOV DC0,A ;结果存于DC 中 SJMP $ SQR:MOV DPTR,#TAB ;子程序 MOVC A,A+DPTR RET TAB:DB 0,1,4,9,16,25,36,49,64,81 END,利用累加器或寄存器传递参数,2020/9/23,26,4.3 MCS-51单片机汇编程序设计举例,4.3.1 算术运算程序的设计,例2 多字节无符号数相减p84。,例1 多字节无符号数相加p84。,2020/9/23,27,例1 : 50ms延时子程序

11、。设晶振频率为12MHz,则机器周期为1us。,DEL: MOV R7,#200 ;1MC DEL1:MOV R6,#123 ;1MC NOP ;1MC DJNZ R6,$ ;2MC DJNZ R7,DEL1 ;2MC RET ;2MC,延时时间:t=1+200(1+1+2*123)+2+2 50000us=50ms,4.3.2 定时程序的设计,2020/9/23,28,4.3.3 查表程序的设计,十六进制数与ASCCII码之间的转换,表4-1 十六进制数与ASCII码之间的关系,2020/9/23,29,例1 将一位十六进制数转换成ASCII码,设十六进制数存放在R0中,转换后的ASCII码

12、放在R2中。,HTASC: MOV A, R0 ;取十六进制数 ANL A,#0FH ;取低四位 MOV DPTR,#ASCTAB ;DPTR指向ASCII表 MOVC A,A+DPTR ;查表得ASCII码 MOV R2,A ;保存 RET;子程序返回 ASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H,2020/9/23,30,例2 将多位十六进制数转换成ASCII码,设R0指向十六进制数低位, R2存放字节数,转换后R1指向ASCII码高位。,HTASC: MOV A,R0 ;取十六进制

13、数 ANL A,#0FH ;取低四位 MOV DPTR,#ASCTAB ;DPTR指向ASCII表 MOVC A,A+DPTR ;查表得ASCII码 MOV R1,A ;保存 INC R1 MOV A,R0 ;取十六进制数高四位 SWAP A ANL A,#0F0H ;取低四位 ADD A,#06H ;偏移修正 MOVC A,A+PC ;查表 MOV R1,A ;保存 INC R0 ;指向下一单元 INC R1 DJNZ R2,HTASC RET ASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H,2020/9/23,31,编程实现:

温馨提示

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

最新文档

评论

0/150

提交评论