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

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

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

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

2、以记忆。,3.1.2汇编语言 汇编语言是一种用缩写的英文词符号或数字符号代替机器的二进制指令进行编写的程序设计语言,也是面向机器的低级语言。汇编语言书写的指令与机器语言书写的指令是一一对应的。 特点: 记忆方便,不能直接运行,面向机器的,属于低级语言。 缺点: 不同厂家的MCU,指令系统不同,通用性不强,对程序员有较高的要求。,3.1.3 高级语言,高级语言是一种语法和结构更类似普通英文、独立于计算机硬件结构的通用的程序设计语言,比如C、C+、VB、PASCAL语言等。,高级语言优点:接近算法语言,提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高;远离机器语言

3、,与具体的计算机硬件关系不大,程序可移植性好,代码重用率高。,3.2 汇编语言程序设计基础,3.2.1 汇编语言格式 MCS-51单片机的汇编语言的指令语句由4个部分组成,分别是标号、操作码、操作数和注释。在书写时,各部分严格用定界符加以分隔。其格式为: 标号(名字):操作码(助记符) 操作数(参数) ;注释,3.2.2 汇编语言程序设计步骤,汇编语言程序设计过程是用汇编方式对指令序列进行正确合理组合编排,并调试完成形成一定功能的可执行程序的过程。 为了完成这一过程,一般可以分为以下六个步骤: 1分析问题。 2确定符合计算机运算的算法。 3绘制程序流程图。,4存储器分配。 5根据流程图编写汇编

4、语言程序。 6程序调试与修改。,3.2.2 汇编语言程序设计步骤,3.2.3 汇编语言源程序的汇编 汇编语言源程序的汇编过程就是将汇编语言的源程序转换成机器的二进制目标代码。汇编有两种方法:手工汇编、机器汇编,3.3 汇编语言程序设计,汇编语言程序设计的基本结构通常有: 顺序结构 分支结构 循环结构 子程序 任何复杂的程序都可由它们组合而成。,3.3.1 顺序程序设计,单片机程序的顺序结构是最简单的一种程序结构,这种程序中,没有任何分支转移指令。单片机执行这类程序时,是按照指令编写的先后顺序逐一完成的。,拆字程序,【例3.1】将30H的内容拆开,高位送31H低位,低位送32H低位。 解 :,O

5、RG 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)低位存入(32H) END,3.3.2 分支程序设计,分支程序是单片机利用条件转移指令实现转移的,其主要特点是程序的流向有两个或两个以上的出口,根据指定的条件进行选择确定。 分支结构程序可根据程序要求无条件或有条件地改变程序执行的顺序,选择程序序流向。编写这类结构程序的关键是正确使用转移指令,即无条件转移、条件转移和散转。,【例3.2】 设补码数x存放在30H单元之中,

6、函数值y按下式进行赋值: Y=,MAIN:MOV A,30H JZ LOOP1 JNB ACC.7,LOOP2 ADD A,#5 MOV 30H,A LOOP2:SJMP $ LOOP1:MOV 30H,#10H SJMP $,程序流程图,3.3.3 循环程序设计,循环结构的程序一般包括下面几个部分: 1.置循环初值: 2.循环体 3.循环修改 4.循环控制 若循环程序的循环体中不再包括循环程序,即为单循环程序。如果在循环体中还包含循环程序,就称为循环嵌套,循环嵌套有二重、三重、甚至多重嵌套。,【例3.3】数据传送程序,将内部RAM 40H单元开始的内容依次传送到外部RAM 1000H单元开始

7、的区域,直到遇到传送的内容是0为止。,ORG 2000H MOV R0, #40H ;指向数据首地址 MOV DPTR, #1000H ;指向外部数据首地址 MAIN:MOV A, R0 ;A(R0) MOVX DPTR, A ;(DPTR)A CJNE A,#00H, NEXT SJMP FINISH ;若A=0,传送完成 NEXT:INC R0 ;修改地址指针 INC DPTR AJMP MAIN ;继续传送 FINISH:SJMP $ END,【例3.4】使用软件延时的方法,设计一段延时时间约为1ms的延时子程序。,假设单片机晶振频率fosc=12MHz,则机器周期Tcy=1s,DJNZ

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

9、用时应注意以下几点: (1)子程序结构要独立 (2)现场保护和现场恢复 现场保护和现场恢复一般是通过堆栈操作指令来完成的。 例如,以下子程序就是通过堆栈操作指令来完成现场保护和现场恢复的。,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)参数传递 子程序可分为有参数子程序和无参数子程序。在有参子程序的调用与

10、返回过程中,就需要在主程序和子程序之间进行参数的传递。,子程序示例,【例3.5】试编程,计算C=A2+B2;并将C送内部RAM 40H单元(设A、B分别放在20H、21H内部单元中;且C0FFH)。,解:由于要求两次平方,所以可以用子程序结构,其程序流程图如下图所示。,子程序流程图,ORG 0030H START: MOV A,20H LCALL PF ;调用求平方子程序 MOV R1,A ;20H赋值 MOV A,21H LCALL PF ADD A,R1 MOV 40H, A SJMP $ PF: INC A ;求平方子程序 MOVC A, A+PC RET TAB:DB 0,1,4,9,

11、16,25,36,49,64,81 END,3.4 汇编语言程序举例,3.4.1 代码转换程序 计算机中的数制较多,在实际应用中,常常需要将一种数制转换成另一种数制。数制之间的转换方法较多,不同数制之间的转换方法也不同。 【例3.6】将8位无符号二进制数转换为BCD数。设8位二进制数在R2中,BCD数存放到R1(百位)和R0(十位和个位)中。,解:把8位二进制数分别除以100、10,分离出百位、十位和个位,并把百位存放到R1,把十位和个位组合后存放到R0中。 程序如下:,ORG 2000H MOV A,R2 ;将8位二进制数送A中 MOV B,#100 ;除数为100 DIV AB ;A为百位

12、,B为100以下的二进制数 MOV R1,A ;存百位BCD数 MOV A,#10 ;除数为10 XCH A,B DIV AB ;A为十位数,B为个位数 SWAP A ADD A,B ;十位、个位BCD数组合在一起 MOV R0,A ;存十位和个位BCD数 END,【例3.7】 四位二进制数转换为ASCII代码。 解:由二进制数和ASCII代码之间的对应关系可知,对于小于10的四位二进制数加30H得到相应的ASCII代码,对于大于等于10的四位二进制数加37H得到相应的ASCII代码,假设四位二进制数存放于R2中,转换后的ASCII代码也存于R2中。,BINASC:PUSH PSW MOV A

13、, R2 ;取四位二进制 ANL A,#0FH ;屏蔽高四位 PUSH ACC CLR C SUBB A,#0AH POP ACC JC LOOP ;该数10转到LOOP ADD A,#07H LOOP:ADD A,#30H MOV R2,A ;转换后的ASCII码送R2中 POP PSW RET END,3.4.2 算术运算程序 进行多字节加、减运算时,应按照从低位字节向高位字节的顺序进行,高位字节运算时应考虑低位字节运算的进位或借位。 【例3.8】 已知两个10字节的无符号数分别存放在以BLOCK1和BLOCK2为起始地址的存储区中,求两个数的和,并把结果存放在以BLOCK1为起始地址的存

14、储区中。 解:设R0、R1为地址指针,R0指向第一个加数,R1指向另一个加数。R2为循环计数器,初值为字节数10。编程如下:,ORG 0100H BLOCK1 DATA 20H BLOCK2 DATA 30H MOV R0,#BLOCK1 MOV R1,#BLOCK2 ;设置两个地址指针 MOV R2,#10 ;设置循环计数器初值 CLR C ;进位标志初值为0 LOOP: MOV A,R0 ;取被加数到A ADDC A,R1 ;加数与被加数相加并加低位进位,结果放A中 MOV R0,A ;存结果 INC R0 ;指针指向被加数更高位 INC R1 ;指针指向加数更高位 DJNZ R2,LOO

15、P ;未加完则继续 CLR A ADDC A,#0 ;加最高位的进位 MOV R0,A ;保存最高位的进位 SJMP $ END,3.4.3 查找、排序程序 1.查表程序 查表操作可用DPTR的值或PC的值作基地址。 用DPTR的值作基地址的查表步骤为: (1)把表的首地址送到DPTR; (2)把所查表的项数(即在表格中的地址是第几项)送入累加器A中; (3)执行查表指令:MOVC A,A+DPTR查表的结果送入A中。 用PC的值作基地址的查表步骤为: (1)将查表的项数送入累加器A中; (2)将MOVC A,A+PC指令的下一条指令到表格首地址的指令字节数与累加器A的值相加; (3)执行查表

16、指令:MOVC A,A+PC,查表的结果送入A中。,【例3.9】 用查表法求Y=X2。设X的值在R0中,X的取值范围为09,结果送R0中。 解:用PC的值作基地址进行查表求解。程序如下: ORG 0100H MOV A,R0 ;1字节 ADD A,#03 ;2字节 MOVC A,A+PC ;1字节 MOV R0,A ;1字节 SJMP $ ;2字节 TABLE: DB 0,1,4,9,16 DB 25,36,49,64,81 END,2查找程序 数据极值查找是指在给定的数据区中选出最大值或最小值。从一批数据中寻找最大值或最小值的方法很多,最常用的方法是采用比较交换法。 【例3.10】 数据极值查找程序。内部RAM 30H单元开始存放了10个

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

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

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