80C51汇编语言程序设计_第1页
80C51汇编语言程序设计_第2页
80C51汇编语言程序设计_第3页
80C51汇编语言程序设计_第4页
80C51汇编语言程序设计_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、80C51汇编语言程序设计第一页,共44页。了解汇编语言的特点,明确程序设计的基本思路 熟悉汇编语言的语句结构,能正确书写汇编语言程序 理解伪指令的功能,能正确使用80C51常用伪指令 熟悉几种基本的程序结构 能读懂教材中的程序实例,学会编写同等难度的应用程序 本章学习目标 :2022/9/132第二页,共44页。 单片机应用系统由硬件系统和应用程序构成 汇编语言 高级语言 应用程序设计方法 汇编语言,生成的目标程序占内存空间少、运行速度快,具有效率高、实时性强,适合于编写短小高速的程序。 高级语言,对系统的功能描述与实现简单,程序阅读、修改和移植方便,适合于编写复杂的程序。 2022/9/1

2、33第三页,共44页。4.1 程序编制的方法和技巧4.1.1 程序编制的步骤 明确任务:功能要求、技术指标 运行环境调研一、任务分析 将实际问题转化为计算机处理的程序算法 算法比较与优化(内存需求与运行速度)二、算法设计2022/9/134第四页,共44页。三、流程描述 流程图符号 “超级循环”框架2022/9/135第五页,共44页。一、强化模块观念使程序占用空间减少、结构清晰注意循环初值和结束条件,避免“死机”现象子程序的现场保护(注意栈平衡、寄存器内容)程序模块(主程序模块、各种子程序模块)模块化优点:分块设计、便于阅读、调试方便4.1.2 程序编制的方法和技巧二、采用循环和子程序对中断

3、子程序还有注意保护PSW的内容2022/9/136第六页,共44页。4.1.3 汇编语言的语句格式标号是指令的符号地址。通常作为转移指令的操作数。非数字字符开头,后跟字母、数字、“-”、“?”等不能用已定义的保留字(指令助记符、伪指令等)后跟英文冒号“:”Keil的汇编器A51可以识别的语句形式为:一、标号(即符号地址)标号: 指令助记符 操作数1, 操作数2, 操作数3, ;注释二、指令助记符是指令功能的英文缩写,是汇编语句中唯一不能空缺的部分。2022/9/137第七页,共44页。操作数用于给指令的操作提供数据或地址。(1)数据: 二进制(B) 十进制(D或省略D) 十六进制(H),注意A

4、F开头时要加“0” ASCII码,如 A,1245(2)符号:符号名、标号或“$”(PC的当前值)(3)表达式:由运算符和数据构成(见表4.1)三、操作数四、注释英文分号“;”开头2022/9/138第八页,共44页。表4.12022/9/139第九页,共44页。程序设计实例引入实例假设一个班有50个人,共有3门选修课:计算机算法服装CAD设计德语请找出:同时选了三门课的同学;2022/9/1310第十页,共44页。问题的解决第一步 如何在计算机中表示选修某门课的所有同学5122325225392939412252939计算机算法服装CAD设计德语选修这门人数学生的学号这个过程实际上是设计数据

5、结构的问题2022/9/1311第十一页,共44页。问题的解决第二步 设计思路:找出同时选了三门课的同学这个过程实际上是设计算法的过程,既构建模型。计算机算法CAD设计德语2022/9/1312第十二页,共44页。重复该过程第三步:设计流程找出第一个学生他选了德语吗?他选了CAD吗?记录要找的人还有学生吗?下一个学生NNYNYY结束他选计算机吗?NY2022/9/1313第十三页,共44页。几点启示整体构思;构建整体流程框图;结构合理,流程清晰,简单明了;局部模块化;2022/9/1314第十四页,共44页。为什么要用流程图?符合人进行逻辑思考的习惯计算机从根本上来说,没有任何逻辑性,所以,你

6、必须告诉它,先做什么,后做什么,遇到什么情况又该做什么,等等流程图设计本身是一个逐步求精的过程,最终将任务划分为若干能由机器指令实现的小模块2022/9/1315第十五页,共44页。4.2.1 源程序的编辑和汇编一、源程序的编辑 ORG 0000H LJMP MAIN ORG 0040HMAIN:MOV R7,#16 MOV R0,#60H MOV A,#55HLOOP:MOV R0,A INC R0 DJNZ R7,LOOP SJMP $ END依据汇编语言规则用好伪指令符号不用中文SJMP $ 用于调试以 .ASM存盘4.2 源程序的编辑和汇编2022/9/1316第十六页,共44页。二、

7、源程序的汇编汇编源程序转为目标程序的过程叫汇编汇编通常在Windows下的集成开发环境完成用A51.EXE汇编生成.OBJ、.LIB及.LST三、目标程序的连接.OBJ、.LIB经BL51.EXE生成无扩展名的绝对地址目标文件绝对地址目标文件可以用于仿真器调试调试无误的目标文件用OH51.EXE转换为.HEX文件.HEX文件经编程器写入单片机存储器2022/9/1317第十七页,共44页。 指令格式为: ORG nn 该指令的作用是指明后面的程序或数据块的起始地址, 它总是出现在每段源程序或数据块的开始。 式中, nn为 16 位地址, 汇编时nn确定了此语句后面第一条指令或第一个数据的地址,

8、此后的源程序或数据块就依次连续存放在以后的地址内, 直到遇到另一个ORG指令为止。 4.2.2 伪指令伪指令,也叫汇编命令。仅对汇编过程进行指示伪指令无对应的单片机可执行代码一、起始地址设定伪指令ORG2022/9/1318第十八页,共44页。 指令格式: 字符名称 EQU 数字或汇编符号 例: PA8155 EQU 8001H ;即给标号PA8155赋值为8001H 使指令中的字符名称等价于给定的数字或汇编符号。 如果在程序中要多次使用到某一地址,由EQU指令将其赋值给一个字符名称, 一旦需要对其进行变动, 只要改变EQU命令后面的数字即可。 注意:由 EQU等值的字符名称必须先赋值后使用,

9、 且在同一个源程序中, 同一个标号只能赋值一次。二、结束汇编伪指令END2022/9/1319第十九页,共44页。 (3)定义字节指令DB 指令格式: 标号: DB 8位二进制数表 功能: 把 8 位二进制数表依次存入从标号开始的连续的存储单元中。 标号区段可有可无,DB指令之后的 8 位二进制数表是字节常数或用逗号隔开的字节串,也可以是用引号括起来的ASCII码字符串 (一个 ASCII字符相当于一个字节)。2022/9/1320第二十页,共44页。 (5)汇编结束指令END 指令格式: 标号: END 地址或标号 格式中标号以及END后面的地址或标号可有可无。 功能: 提供汇编结束标志。汇

10、编程序遇到 END后就停止汇编, 对 END以后的语句不予处理, 故 END应放在程序的结束处。 2022/9/1321第二十一页,共44页。4.2.2 伪指令伪指令,也叫汇编命令。仅对汇编过程进行指示伪指令无对应的单片机可执行代码一、起始地址设定伪指令ORGORG 表达式 该命令总是出现在源程序的开始位置。用来规定目标程序的起始地址。表达式通常为十六进制地址,例:ORG 8000HSTART:MOV A,#30H ORG可多次使用,但地址值的顺序要由小到大END该伪指令位于源程序的最后一行。2022/9/1322第二十二页,共44页。三、定义字节数据表伪指令DB四、定义字数据表伪指令DW10

11、00H 该命令用于从标号指定的地址开始,连续存放字节数据表,常与查表指令MOVC配合使用。标号: DB 字节数据表如:ORG 1000HDB -2,-4,-6,8,10,181001H标号: DW 字数据表 ORG 1400HDATA1:DW 324AH,3CH 1400H1401H1402H1403H大端模式2022/9/1323第二十三页,共44页。五、定义常值为符号名伪指令EQU该命令用来给标号赋值。赋值以后,其标号值在整个程序中有效。符号名 EQU 常值表达式 LEN EQU 10 SUM EQU 21HBLOCK EQU 22H CLR A MOV R7,LEN MOV R0,BLO

12、CK LOOP:ADD A,R0 INC R0 DJNZ R7,LOOP MOV SUM,A 符号名为:地址常数段名字符串寄存器名位名比较:标号只能是地址2022/9/1324第二十四页,共44页。六、定义位地址为符号名伪指令BIT符号名 BIT 位地址表达式如:ST BIT P1.0 ;将P1.0的位地址赋给符号名STCF BIT 0D7H ;将位地址为D7H的位定义为符号名用BIT定义的“符号名”一经定义便不能重新定义和改变其它一些伪指令参见教材表4.2 2022/9/1325第二十五页,共44页。4.3 基本程序结构一般不影响标志寄存器PSW的状态。 传送类指令有两大类 一般传送( MO

13、V ) 特殊传送,如: MOVC MOVX PUSH、POP XCH、XCHD SWAP 2022/9/1326第二十六页,共44页。4.3.1 顺序程序(无分支、无循环)4.3 基本程序结构【例4-1】片内RAM的21H单元存放一个十进制数据十位的ASCII码,22H单元存放该数据个位的ASCII码。编写程序将该数据转换成压缩BCD码存放在20H单元。2022/9/1327第二十七页,共44页。 ORG 0040HSTART:MOV A,21H ;取十位ASCII码 ANL A,#0FH ;保留低半字节 SWAP A ;移至高半字节 MOV 20H,A ;存于20H单元 MOV A,22H

14、;取个位ASCII码 ANL A,#0FH ;保留低半字节 ORL 20H,A ;合并到结果单元 SJMP $ END2022/9/1328第二十八页,共44页。4.3.2 分支程序(单分支、双分支、多分支)【例4-2】设变量x以补码的形式存放在片内RAM的30H单元,变量y与x的关系是:当x大于0时,y=x;当x=0时,y=20H;当x小于0时,y=x+5。编制程序,根据x的大小求y并送回原单元。2022/9/1329第二十九页,共44页。 ORG 0040HSTART:MOV A,30H ;取x至累加器 JZ NEXT ;x = 0,转NEXT ANL A,#80H ;否,保留符号位 JZ

15、 DONE ;x 0,转结束 MOV A,#05H ;x 0处理 ADD A,30H MOV 30H,A ;X+05H送Y SJMP DONE NEXT:MOV 30H,#20H ;x = 0,20H送Y DONE:SJMP DONE END 2022/9/1330第三十页,共44页。【例4-3】根据R7的内容x(转移序号)转向相应的处理程序。设R7内容为04,对应的处理程序入口地址分别为PP0PP4。 2022/9/1331第三十一页,共44页。 START:MOV R7,#3 ;以转移序号3为例 ACALL JPNUM AJMP START JPNUM:MOV DPTR,#TAB ;置分支

16、入口地址表首址 MOV A,R7 ADD A,R7 ;乘2,调整偏移量 MOV R3,A MOVC A,A+DPTR ;取地址高字节,暂存于R3 XCH A,R3 INC A MOVC A,A+DPTR ;取地址低字节 MOV DPL,A ;处理程序入口地址低8位送DPL MOV DPH,R3 ;处理程序入口地址高8位送DPH CLR A JMP A+DPTR 2022/9/1332第三十二页,共44页。 TAB:DW PP0 DW PP1 DW PP2 DW PP3 DW PP4 PP0:MOV 30H,#0 ;转移序号为0时,置功能号“0”于30H单元 RET PP1:MOV 30H,#1

17、 ;转移序号为1时,置功能号“1”于30H单元 RET PP2:MOV 30H,#2 ;转移序号为2时,置功能号“2”于30H单元 RET PP3:MOV 30H,#3 ;转移序号为3时,置功能号“3”于30H单元 RET PP4:MOV 30H,#4 ;转移序号为4时,置功能号“4”于30H单元 RET 2022/9/1333第三十三页,共44页。4.3.3 循环程序(2种:先执行,后判断;先判断,后执行)【例4-4】将内部RAM的30H至3FH单元初始化为00H。MAIN:MOV R0,#30H ;置初值 MOV A,#00H ; MOV R7,#16 ; LOOP:MOV R0,A ;循

18、环处理 INC R0 ; DJNZ R7,LOOP ;循环修改,判结束 SJMP $ ;结束处理2022/9/1334第三十四页,共44页。【例4-5】将内部RAM起始地址为60H的数据串传送到外部RAM中起始地址为1000H的存储区域,直到发现$ 字符停止传送。 MAIN:MOV R0,#60H ;置初值 MOV DPTR,#1000HLOOP0:MOV A,R0 ;取数据 CJNE A,#24H,LOOP1 ;循环结束? SJMP DONE ;是LOOP1:MOVX DPTR,A ;循环处理 INC R0 ;循环修改 INC DPTR SJMP LOOP0 ;继续循环 DONE:SJMP

19、DONE ;结束处理2022/9/1335第三十五页,共44页。4.4 子程序及其调用 完成通用功能、反复使用的程序设计成子程序。使应用程序结构清晰紧凑,便于阅读和调试 执行要由其它程序来调用,执行完后要返回到调用程序 结构上仍然采用一般程序的3种结构 调用时注意:一是现场的保护和恢复;二是主程序与子程序间的参数传递。2022/9/1336第三十六页,共44页。4.4.1 现场保护与恢复一、在主程序中实现(结构灵活) PUSH PSW ;保护现场( 含当前工作寄存器组号)PUSH ACC ;PUSH B ;MOV PSW,#10H ;切换当前工作寄存器组LCALL addr16 ;子程序调用,

20、 POP B ;恢复现场POP ACC ;POP PSW ;含当前工作寄存器组切换2022/9/1337第三十七页,共44页。二、在子程序中实现(程序规范、清晰)SUB1:PUSH PSW ;保护现场( 含当前工作寄存器组号) PUSH ACC ; PUSH B ; MOV PSW,#10H ;切换当前工作寄存器组 POP B ;恢复现场 POP ACC ; POP PSW ;内含当前工作寄存器组切换 RET2022/9/1338第三十八页,共44页。主程序与子程序的关系 子程序SUB 主程序MAIN返回 LCALL SUB 调用子程序子程序入口地址RET2022/9/1339第三十九页,共4

21、4页。4.4.2 参数传递一、利用累加器或寄存器(简单、快速,但参数个数不多)【例4-6】实现两个8位的十六进制无符号数求和的子程序。SADD:MOV A,R3 ;取加数(在R3中) CLR C ADD A,R4 ;被加数(在R4中)加A JC PP1 MOV R3,#00H ;结果小于255时,高字节R3内容为00H SJMP PP2 PP1:MOV R3,#01H ;结果大于255时,高字节R3内容为01H PP2:MOV R4,A ;结果的低字节在R4中 RET入口:(R3)=加数; (R4)=被加数。出口:(R3)=和的高字节; (R4)=和的低字节。2022/9/1340第四十页,共44页。二、利用存储器(个数多,用R0或R1及DPTR为参数表指针)【例4-7】将内部RAM 中两个4字节无符号整数相加,和的高字节由R0指向。数据采用大端模式存储。入口:(R0)=加数低字节地址; (R1)=被加数低字节地址。出口:(R0)=和的高字节起始地址。 NADD:MOV R7,#4 ;字节数4送计数器 CLR C ;NADD1:MOV A,R0 ;利用指针,取加数低字节 ADDC

温馨提示

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

评论

0/150

提交评论