单片机应用技术(高职高专)

上传人:xzh****18 文档编号:51819033 上传时间:2018-08-16 格式:PPT 页数:47 大小:922KB
返回 下载 相关 举报
单片机应用技术(高职高专)_第1页
第1页 / 共47页
单片机应用技术(高职高专)_第2页
第2页 / 共47页
单片机应用技术(高职高专)_第3页
第3页 / 共47页
单片机应用技术(高职高专)_第4页
第4页 / 共47页
单片机应用技术(高职高专)_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《单片机应用技术(高职高专)》由会员分享,可在线阅读,更多相关《单片机应用技术(高职高专)(47页珍藏版)》请在金锄头文库上搜索。

1、第3章 汇编语言程序设计 书名:单片机应用技术 ISBN: 978-7-111-30844-7 作者:廖世海 吴政江 出版社:机械工业出版社 本书配有电子课件第3章 汇编语言程序设计 第3章 汇编语言程序设计 廖世海制作第3章 汇编语言程序设计 3.1 计算机语言概述 3.2 汇编语言程序设计基础 3.3 汇编语言程序设计 3.4 汇编语言程序举例 3.5基本技能训练 编程使P1.7输出1kHz 的方波 第3章 汇编语言程序设计第3章 汇编语言程序设计 3.1 计算机语言概述3.1.1 机器语言机器语言是直接用二进制代码“0”和“1”来表达计算机程序的指令和数据的原始语言,是早期为计算机编程使

2、用的语言,是一种低级语言。特点:被计算机直接识别,能直接运行。缺点:机器语言书写不便,而且难以记忆。第3章 汇编语言程序设计 3.1.2 汇编语言汇编语言是一种用缩写的英文词符号或数字符号代替机器的二进制指令进行编写的程序设计语言,也是面向机器的低级语言。汇编语言书写的指令与机器语言书写的指令是一一对应的。 特点:记忆方便,不能直接运行,面向机器的,属于低级语言。缺点:不同厂家的MCU,指令系统不同,通用性不强,对程序员有较高的要求。 第3章 汇编语言程序设计 3.1.3 高级语言高级语言是一种语法和结构更类似普通英文、独立于计算机硬件结构的通用的程序设计语言,比如C、C+、VB、PASCAL

3、语言等。高级语言优点:接近算法语言,提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高;远离机器语言,与具体的计算机硬件关系不大,程序可移植性好,代码重用率高。 第3章 汇编语言程序设计 3.2 汇编语言程序设计基础3.2.1 汇编语言格式MCS-51单片机的汇编语言的指令语句由4个部分组成,分别是标号、操作码、操作数和注释。在书写时,各部分严格用定界符加以分隔。其格式为:标号(名字):操作码(助记符) 操作数(参数) ;注释第3章 汇编语言程序设计 3.2.2 汇编语言程序设计步骤汇编语言程序设计过程是用汇编方式对指令序列进行 正确合理组合编排,并调试完成形成

4、一定功能的可执 行程序的过程。为了完成这一过程,一般可以分为以下六个步骤:1分析问题。2确定符合计算机运算的算法。3绘制程序流程图。 第3章 汇编语言程序设计 4存储器分配。5根据流程图编写汇编语言程序。6程序调试与修改。3.2.2 汇编语言程序设计步骤3.2.3 汇编语言源程序的汇编 汇编语言源程序的汇编过程就是将汇编语言的源程序转换成机器的二进制目标代码。汇编有两种方法:手工汇编、机器汇编 第3章 汇编语言程序设计 3.3 汇编语言程序设计 汇编语言程序设计的基本结构通常有:顺序结构分支结构循环结构子程序任何复杂的程序都可由它们组合而成。第3章 汇编语言程序设计 3.3.1 顺序程序设计单

5、片机程序的顺序结构是最简单的一种程序结构,这种程序中,没有任何分支转移指令。单片机执行这类程序时,是按照指令编写的先后顺序逐一完成的。第3章 汇编语言程序设计 拆字程序 【例3.1】将30H的内容拆开,高位送31H低位,低位送32H低位。 解 :屏蔽高位后送( 32H)高低位交换,屏蔽高 位后送(31H)开始A(30H)A(30H)返回拆字程序流程图ORG 0050H CWORD:MOV A, 30H SWAP A ANL A, #0FH MOV 31H, A ;将(30H)高位存入( 31H) MOV A, 30H ANL A, #0FH MOV 32H, A ;将(30H)低位存入( 32

6、H) END 第3章 汇编语言程序设计 3.3.2 分支程序设计分支程序是单片机利用条件转移指令实现转移的,其主要特点是程序的流向有两个或两个以上的出口,根据指定的条件进行选择确定。分支结构程序可根据程序要求无条件或有条件地改变程序执行的顺序,选择程序序流向。编写这类结构程序的关键是正确使用转移指令,即无条件转移、条件转移和散转。第3章 汇编语言程序设计 【例3.2】 设补码数x存放在30H单元之中,函数值y按下式进行赋值:Y=MAIN:MOV A,30HJZ LOOP1JNB ACC.7,LOOP2ADD A,#5MOV 30H,ALOOP2:SJMP $LOOP1:MOV 30H,#10H

7、SJMP $ 程序流程图第3章 汇编语言程序设计 3.3.3 循环程序设计循环结构的程序一般包括下面几个部分:1.置循环初值:2.循环体3.循环修改4.循环控制若循环程序的循环体中不再包括循环程序,即为单循环程序。如果在循环体中还包含循环程序,就称为循环嵌套,循环嵌套有二重、三重、甚至多重嵌套。第3章 汇编语言程序设计 【例3.3】数据传送程序将内部RAM 40H单元开始的内容依次传送到外部RAM 1000H单元开始的区域,直到遇到传送的内容是0为止。数据传送程序流图程图开 始DPTR、R0赋初值(R0)A A(DPTR)A=0DPTR加1结 束YN第3章 汇编语言程序设计 ORG 2000H

8、MOV R0, #40H ;指向数据首地址MOV DPTR, #1000H ;指向外部数据首地址MAIN:MOV A, R0 ;A(R0)MOVX DPTR, A ;(DPTR)ACJNE A,#00H, NEXTSJMP FINISH ;若A=0,传送完成NEXT:INC R0 ;修改地址指针INC DPTRAJMP MAIN ;继续传送FINISH:SJMP $END 第3章 汇编语言程序设计 【例3.4】使用软件延时的方法,设计一段延时时间约为1ms的延时子程序。假设单片机晶振频率fosc=12MHz,则机器周期Tcy=1s,DJNZ R1,$为2机器周期指令,一重循环最多耗时为2552

9、s=510s,要延时1ms,子程序为两层循环程序段,其对应的程序流程图如图所示。编程如下: 延时子程序第3章 汇编语言程序设计 RELAY:MOV R0,#02 ;外层层循环环次数为为2次LOOP1:MOV R1,#250 ;内层循环次数为250次DJNZ R1,$ ;内层循环DJNZ R0,LOOP1 ;外层循环RET 第3章 汇编语言程序设计 所谓子程序,是指能够完成一定功能,可以被其它程序段(相对而言,称为主程序)调用执行,并能返回调用程序处的程序段。子程序的调用可以嵌套进行,即子程序可以调用其它子程序,甚至可以调用自身(称为递归调用)。3.3.4 子程序设计第3章 汇编语言程序设计 子

10、程序在编写和调用时应注意以下几点:(1)子程序结构要独立(2)现场保护和现场恢复 现场保护和现场恢复一般是通过堆栈操作指令来完成的。例如,以下子程序就是通过堆栈操作指令来完成现场保护和现场恢复的。第3章 汇编语言程序设计 LP1: PUSH ACC ;LP1为子程序的入口地址,将A的值压入堆栈进行保护PUSH PSW ;将PSW的值压入堆栈进行保护PUSH B ;将B的值压入堆栈进行保护POP B ;从堆栈中弹出B并恢复B的值POP PSW ;从堆栈中弹出PSW并恢复PSW的值POP ACC ;从堆栈中弹出A并恢复A的值RET ;返回第3章 汇编语言程序设计 (3)参数传递 子程序可分为有参数

11、子程序和无参数子程序。 在有参子程序的调用与返回过程中,就需要 在主程序和子程序之间进行参数的传递。第3章 汇编语言程序设计 子程序示例【例3.5】试编程,计算C=A2+B2;并将C送内部RAM 40H单元(设A、B分别放在20H、21H内部单元中;且C0FFH)。 解:由于要求两次平方,所以可以用子 程序结构,其程序流程图如下图所示。第3章 汇编语言程序设计 子程序流程图 第3章 汇编语言程序设计 ORG 0030HSTART: MOV A,20HLCALL PF ;调用求平方子程序MOV R1,A ;20H赋值MOV A,21HLCALL PFADD A,R1 MOV 40H, ASJMP

12、 $PF: INC A ;求平方子程序MOVC A, A+PCRETTAB:DB 0,1,4,9,16,25,36,49,64,81END 第3章 汇编语言程序设计 3.4 汇编语言程序举例3.4.1 代码转换程序计算机中的数制较多,在实际应用中,常常需要将一种 数制转换成另一种数制。数制之间的转换方法较多,不 同数制之间的转换方法也不同。【例3.6】将8位无符号二进制数转换为BCD数。设8位二 进制数在R2中,BCD数存放到R1(百位)和R0(十位 和个位)中。解:把8位二进制数分别除以100、10,分离出百位、十位 和个位,并把百位存放到R1,把十位和个位组合后存放到 R0中。 程序如下:

13、第3章 汇编语言程序设计 ORG 2000HMOV A,R2 ;将8位二进制数送A中MOV B,#100 ;除数为100DIV AB ;A为百位,B为100以下的二进制数MOV R1,A ;存百位BCD数MOV A,#10 ;除数为10XCH A,BDIV AB ;A为十位数,B为个位数SWAP AADD A,B ;十位、个位BCD数组合在一起MOV R0,A ;存十位和个位BCD数END第3章 汇编语言程序设计 【例3.7】 四位二进制数转换为ASCII代码。 解:由二进制数和ASCII代码之间的对应关系可知,对于小于10的四位二进制数加30H得到相应的ASCII代码,对于大于等于10的四位

14、二进制数加37H得到相应的ASCII代码,假设四位二进制数存放于R2中,转换后的ASCII代码也存于R2中。 第3章 汇编语言程序设计 BINASC:PUSH PSWMOV A, R2 ;取四位二进制ANL A,#0FH ;屏蔽高四位PUSH ACCCLR CSUBB A,#0AHPOP ACCJC LOOP ;该数=10(A)+07HA(A)+30HA存结果ASCII码开始结束二进制数转换为ASCII码第3章 汇编语言程序设计 3.4.2 算术运算程序进行多字节加、减运算时,应按照从低位字节向高位字节的顺序进行,高位字节运算时应考虑低位字节运算的进位或借位。【例3.8】 已知两个10字节的无

15、符号数分别存放在以BLOCK1和BLOCK2为起始地址的存储区中,求两个数的和,并把结果存放在以BLOCK1为起始地址的存储区中。解:设R0、R1为地址指针,R0指向第一个加数,R1指向另一个加数。R2为循环计数器,初值为字节数10。编程如下:第3章 汇编语言程序设计 ORG 0100HBLOCK1 DATA 20HBLOCK2 DATA 30HMOV R0,#BLOCK1MOV R1,#BLOCK2 ;设置两个地址指针MOV R2,#10 ;设置循环计 数器初值CLR C ;进位标志初值为 0LOOP: MOV A,R0 ;取被加数到AADDC A,R1 ;加数与被加数相加并加低位进位,结果放A中MOV R0,A ;存结果INC R0 ;指针指向被加数更高位INC R1 ;指针指向加数更高

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 电气技术

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