第4章 mcs-51汇编语言程序设计课件

上传人:aa****6 文档编号:57220176 上传时间:2018-10-20 格式:PPT 页数:80 大小:303KB
返回 下载 相关 举报
第4章  mcs-51汇编语言程序设计课件_第1页
第1页 / 共80页
第4章  mcs-51汇编语言程序设计课件_第2页
第2页 / 共80页
第4章  mcs-51汇编语言程序设计课件_第3页
第3页 / 共80页
第4章  mcs-51汇编语言程序设计课件_第4页
第4页 / 共80页
第4章  mcs-51汇编语言程序设计课件_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《第4章 mcs-51汇编语言程序设计课件》由会员分享,可在线阅读,更多相关《第4章 mcs-51汇编语言程序设计课件(80页珍藏版)》请在金锄头文库上搜索。

1、第四章 MCS-51汇编语言程序设计,4.1 汇编语言程序设计概述 4.2 顺序与循环程序设计 4.3 子程序的设计 4.4 分支转移程序设计 4.5 查表程序设计 4.6 综合编程举例,4.1 汇编语言程序设计概述,4.1.1 概述MCS-51单片机的汇编语言指令系统,每一条指令就是汇编语言的一条命令语句。由于汇编语言是面向机器硬件的语言,因此使用汇编语言进行程序设计,必须熟悉MCS-51单片机的硬件结构、指令系统、寻址方式等,才能编写出符合要求的程序。,汇编语言语句有两种基本类型: 1. 指令语句每一条指令在汇编时都产生一个指令代码,也称为机器代码,该机器代码对应着机器的一种操作。 2.

2、伪指令语句伪指令语句没有目标代码,它主要是为汇编程序服务的,在汇编过程中起控制作用。,标号字段和操作字码段之间要有冒号“ :”相隔; 操作码字段和操作数字段间的分界符是空格; 双操作数之间用逗号相隔; 操作数字段和注释字段之间的分界符用分号“;”相隔。,标号字段 操作码字段 操作数字段 注释字段 (LABLE)(OPCODE) (OPRAND) (COMMENT),MCS-51汇编语言的4分段格式:,1.标号字段 标号是语句所在地址的标志符号,2.操作码字段规定语句执行的操作,不能空缺 3.操作数字段存放指令的操作数或操作数地址,可以采用字母和数字的多种表示形式 4.注释字段,在MCS-51汇

3、编语言中应有向汇编程序发出的指示信息, 告诉它如何完成汇编工作,这一任务是通过使用伪指令来实现的。“伪”体现在汇编时,伪指令没有相应的机器代码产生。伪指令具有控制汇编程序的输入输出、定义数据和符号、条件汇编、分配存储空间等功能。不同汇编语言的伪指令也有所不同,但一些基本的内容却是相同的。,伪指令,下面介绍在MCS-51汇编语言程序中常用的伪指令。ORG 汇编起始地址命令 END 汇编语言程序结束伪指令 EQU 赋值伪指令 DB 定义字节伪指令 DW 定义字伪指令BIT 位地址符号伪指令 DATA 定义标号数值伪指令,ORG 汇编起始地址命令,功能:规定程序的起始地址。如果不用ORG规定,则汇编

4、的得到的目标程序将从0000H开始。通用形式ORG M ,M为十或十六进制数.例如:ORG 2000HSTART:MOV A, #00H,注意:在一个源程序中,可以多次使用ORG指令,来规定不同的程序段的起始地址。但是,地址必须由小到大排列,不能交叉、重叠。,END 汇编语言程序结束伪指令,功能:用在程序末尾,表示程序已经结束。汇编程序对END以后的指令不再汇编。,EQU 赋值伪指令,功能: 把操作数段中的地址或数据赋值 给标号字段中的标号。 格式: 标号 (字符名称) EQU 数或汇编符号 例: AA EQU R1 ;R1与AA等值,DB 定义字节伪指令,功能:从指定单元开始定义(存储)若干

5、个字节的数值或ASCII码字符。常用于定义数据常数表。 格式: 操作码 操作数DB 字节常数或ASCII字符 例: ORG 1000H DB 76H,73,C,B DB 0ACH则(1000H)=76H (1001H)=49H (1002H)=43H(1003H)=42H (1004H)=0ACH,DW 定义字伪指令,功能:从指定单元开始定义(或存储)若干个字的数据或ASCII码字符。格式: 操作码 操作数DW 字常数或ASCII字符,BIT 位地址符号伪指令,功能: 把位地址赋予所规定的字符名称。 格式: 字符名称 操作码 操作数BIT 位地址 例: ABC BIT P1.0Q4 BIT P

6、2.2汇编后,位地址P1.0、P2.2分别赋给变量ABC和Q4。,DATA 定义标号数值伪指令,功能: 给标号段中的标号赋以数值。 格式: 标号 操作码 操作数 字符名称: DATA 表达式 例:MN: DATA 3000H 汇编后MN的值为3000H.,DATA与EQU的区别在于:用DATA定义的标识符汇编时作为标号登记在符号表中,所以可以先使用后定义;而EQU定义的标识符必须先定义后使用,因后者不登记在符号表中。,4.1.2 汇编语言程序设计步骤,使用汇编语言作为程序设计语言的步骤与高级语言编程步骤类似,但略有差异。其程序设计步骤大致可分为以下几步: 1分析课题,确定算法或解题思路。 2画

7、工作流程图(图形的符号规定均同于高级语言流程图) 3分配内存单元,确定程序与数据区存放地址。 4编写源程序。 5上机调试、修改,最后确定源程序。,程序设计时,必须根据实际问题和所使用的计算机的特点来确定算法,然后按照尽可能使程序简短和缩短运行时间两个原则编写程序。,4.1.3 汇编语言源程序的汇编 语言源程序翻译成机器代码(指令代码)的过程称为“汇编”。手工汇编通过查指令的机器代码表,逐个把助记符指令翻译成机器代码,再进行调试和运行。,缺点:繁琐、容易出错。所以只有小程序或受条件限制时才使用。在实际的程序设计中,都是采用机器汇编来自动完成。,机器汇编 借助于微计算机来代替手工汇编。它实际上是通

8、过执行汇编程序来对源程序进行汇编的。由于使用微型计算机完成了汇编,而汇编后得到的机器代码却是在单片机上运行,所以这种机器汇编又称为交叉汇编。交叉汇编后,通过微机的串口(或并口)将汇编得到的机器代码送到用户样机(或在线仿真器)再进行程序的调试和运行。,有时,在分析现成产品的ROM/EPROM中的程序时,要将二进制数的机器代码语言程序翻译成汇编语言源程序,该过程称为反汇编。,4.2 顺序与循环程序设计,顺序结构的程序是一种最简单、最基本的程序(也称为简单程序)。它的特点是按程序编写的顺序一次执行,程序流向不变。这类程序是所有复杂程序的基础。在很多实际程序中会遇到需多次重复执行某段程序的情况,可把这

9、段程序设计为循环结构程序,这样可大大缩短程序。,4.2.1 顺序程序设计,要写出高质量的程序还是需要掌握一定的技巧,需要熟悉指令系统,正确地选择指令,最大限度地优化程序的目的。例1:将20H单元的两个BCD码拆开并变成ASCII码,存入21H、22H单元。,方法一 采用把BCD数除以10H的方法,除后相当于把此数右移了4位,这样两个BCD码分别移到A、B的低4位,然后再各自与30H相“或”即变为ASCII码。,地址 机器码 周期数 源程序ORG 2000H 2000H 74 20 1 MOV A, 20H 2002H 75 F0 10 2 MOV B, #10H 2005H 84 4 DIV

10、AB 2006H 43 F0 30 2 ORL B, #30H 2009H 85 22 F0 2 MOV 22H, B 200CH 44 30 1 ORL A, #30H 200EH F5 21 1 MOV 21H, AEND此程序占用字节数为16,执行机器周期数为13。,方法二 采用先把20H中低4位BCD码交换出来加以转换、存放,然后再把高4位BCD码交换至低4位加以转换、存放。,地 址 机器码 周期数 源程序ORG 2000H2000H 78 22 1 MOV R0 ,#22H2002H 76 00 1 MOV R0, #02004H E5 20 1 MOV A , 20H2006H D

11、6 1 XCHD A ,R02007H 43 22 30 1 ORL 22H, #30H200AH C4 1 SWAP A200BH 44 30 1 ORL A , #30H200DH F5 21 1 MOV 21H, AEND此程序占用字节数为15,执行机器周期为9。,例2:设有两个4位BCD码,分别存放在23H、22H单元和33H、32H单元中,求它们的和,并送入43H、42H单元中去。 解:由于BCD码是分放在高、低位两个字节中,因而要从低位字节开始相加,且每进行一次加法运算,需要进行一次BCD码调整。,ORG 2000HCLR CMOV A, 22HADD A, 32HDA AMOV

12、42H, AMOV A, 23HADDC A, 33HDA AMOV 43H, A LL:SJMP LLEND,4.2.2 循环程序设计,循环程序的基本结构: 循环初态 设置循环过程中工作单元的初始值。 例如:设置循环次数计数器、地址指针赋初值。 循环体 重复执行的程序段部分称为循环体,完成主要的操作(包括对地址指针的修改)。 循环控制部分 用于控制循环的执行和结束。在循环初态已经给出了 循环结束条件,即循环次数初值。循环程序每执行一次 ,都检查结束条件。当条件不满足时,修改地址指针和 控制变量;当条件满足时,停止循环。,若循环程序的循环体中不再包含循环程序,即为单重循环程序。如果在循环体中还

13、包含循环程序,那么这种现象称为循环嵌套。注意:多重循环程序中,只允许外重循环嵌套内重循环程序,不允许循环互相相交,也不允许从循环程序的外部跳入循环程序的内部。,Xi为单字节数,顺序存放在RAM从50H开始的单元,n放在R2中现在要求它们的和(双字节)并放在R3R4中,则有: MOV R3,#0MOV R4,#0MOV R0,#50HLOOP: MOV A,R4ADD A,R0MOV R4,AINC R0CLR AADDC A,R3MOV R3,ADJNZ R2,LOOPEND,思考多字节加(减)法是否可用循环程序实现? 如何实现?,例2: 多重循环-软件延时程序(50ms延时)。我们知道使用1

14、2MHz晶振时,1个机器周期为1 us,执行1条DJNZ指令的时间就为2 us。用双重循环可以写出如下程序段: DEL: MOV R7,#200DEL1: MOV R6,#125DEL2: DJNZ R6,DEL2; 1252=250usDJNZ R7,DEL1; 0.25ms200=50 msRET,由于没有考虑到除“DJNZ R6,DEL2”,指令外的其他指令的时间,如把其它指令的时间计算在内,则延时时间为:(250+1+2)*200+1=50.601ms,比较精确的延时,可修改程序如下:DEL: MOV R7,#200 DEL1: MOV R6,#123NOP DEL2: DJNZ R6,DEL2; 2123+2=248usDJNZ R7,DEL1; (2482)200150.001ms注意:用软件实现延时程序,不允许有中断,否则将严重影响定时的准确性。,

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

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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