汇编语言的设计单片机课件(最新版)

上传人:F****n 文档编号:88051582 上传时间:2019-04-17 格式:PPT 页数:77 大小:1.13MB
返回 下载 相关 举报
汇编语言的设计单片机课件(最新版)_第1页
第1页 / 共77页
汇编语言的设计单片机课件(最新版)_第2页
第2页 / 共77页
汇编语言的设计单片机课件(最新版)_第3页
第3页 / 共77页
汇编语言的设计单片机课件(最新版)_第4页
第4页 / 共77页
汇编语言的设计单片机课件(最新版)_第5页
第5页 / 共77页
点击查看更多>>
资源描述

《汇编语言的设计单片机课件(最新版)》由会员分享,可在线阅读,更多相关《汇编语言的设计单片机课件(最新版)(77页珍藏版)》请在金锄头文库上搜索。

1、第4章 汇编语言程序设计,单片机原理与接口技术,2,4.1 汇编语言程序设计概述,程序设计语言可分为:机器语言、汇编语言和高级语言。 1.机器语言 二进制代码表示的指令、数字和符号称为机器语言。 缺点:不易懂,难记忆,易出错。,3,2.汇编语言 用英文助记符来表示的指令称为符号语言或汇编语言。 将汇编语言程序转换成为机器语言的过程称为汇编。 汇编语言特点: 面向机器的语言,编程员须对51单片机的硬件有相当深入的了解。 效率高,占用ROM小,运行速度快。 能直接管理和控制硬件设备,能处理中断,能直接访问存储器及I/O接口等。 汇编语言和机器语言都要针对具体硬件,通用性差。,4,3.高级语言 Ba

2、sic、Delphi以及C语言等,擅长于科学计算。 优点:通用性强,直观、易懂、易学,可读性好。 可使用C(C51)、PL/M语言对单片机应用程序进行设计。 对于程序的空间和时间要求很高的场合,汇编语言仍是必不可缺的。 C语言和汇编语言混合编程 在需要即直接控制硬件,又要进行复杂计算的场合,可考虑采用C语言和汇编语言混合编程。,5,汇编有两种形式:手工汇编和机器汇编。 当使用机器汇编时,必须让汇编程序知道哪些是指令,哪些是数据,程序的开始和结束等等。这就需要加入控制汇编的指令伪指令。 经汇编形成机器码后,伪指令即失效,伪指令在汇编时并不产生任何机器代码。 功能:用来对汇编过程进行指示和控制,便

3、于简化汇编语言程序的编制和阅读。,4.2 伪指令,6,1. 起始汇编 ORG Origin 格式:ORG 16位地址 指明程序或数据块的起始地址,用在每段源程序或数据块的开始。 若缺省ORG,则汇编得到的机器码紧接在上一段代码之后开始。 程序中可多次使用ORG,但地址必须是从小到大,不能交叉也不能重叠。,7,2. 结束汇编 END 格式:END END是汇编语言源程序的结束标志,用于终止源程序的汇编工作,一般放到所有指令的最后。 整个源程序中只能有一条END命令。 若后面还有程序段,则不进行汇编。,8,3. 赋值 EQU Equate 格式: 字符名称 EQU 数字或汇编符号 功能:将右边的值

4、赋给左边的字符。 右边可以是字节、字。 赋值的字符在源程序中可作为数值或地址使用。 例: N EQU 30H LED EQU 40H MOV A,N ;(30H)A MOV A,#LED ; 40HA MOV A,LED ;(40H)A,9,4. 定义字节 DB Define byte 格式:标号: DB 数据或表格 功能:把数据或表格依次存入从标号开始的连续字节单元。十进制则转为十六进制,字母转为ASCII码。 例: ORG 1000H FIRST: DB DB 73H,01H,91H,07H,10,4. 定义字节 DB Define byte 格式:标号: DB 数据或表格 功能:把数据或

5、表格依次存入从标号开始的连续字节单元。十进制则转为十六进制,字母转为ASCII码。 例: ORG 1000H FIRST: DB 73H,01H,91H,07H SECOND:DB 02H,00H,19H,7lH,11,4. 定义字节 DB Define byte 格式:标号: DB 数据或表格 功能:把数据或表格依次存入从标号开始的连续字节单元。十进制则转为十六进制,字母转为ASCII码。 例: ORG 1000H FIRST: DB 73H,01H,91H,07H SECOND:DB 02H,00H,19H,7lH TABLE: DB 96,40H,C,7,1101B,12,5. 定义字

6、DW Define word 格式:标号: DW 数据或表格 功能:同DB,每个字要占两个单元,高8位先存,低8位后存。 例: ORG 1000H DW 3450H,0060H,12,C 程序汇编结果:,13,6. 数据地址赋值 DATA 格式:字符名称 DATA 表达式 功能:类似于EQU,常用来定义数据地址,该语句可放在程序开头或末尾。 例如:BUFFER DATA 20H 赋值后的符号可以在源程序中代替DATA后面的字节地址,便于阅读。 MOV A,BUFFER ;(20H) A MOV A,#BUFFER ; 20H A,14,7. 定义存储空间 DS Dfine storage 格式

7、:标号: DS 表达式 功能:从指定单元开始,保留由表达式指定的若干字节空间作为备用空间。 例: ORG 1000H DS 0AH DB 71H,11H,21H,15,8. 位地址赋值 BIT 格式:标号 BIT 位地址 功能:将位地址赋给标号,类似DATA。 赋值后的符号可以在源程序中代替BIT后面的位地址,便于阅读。 例: FLG BIT ACC.0 ;0E0H AI BIT P1.0 ;90H START BIT 20H STOP BIT 21H,16,除了这些基本伪指令之外,还有一些高性能的汇编程序,可在汇编时进行表达式赋值、条件汇编和宏汇编。 表达式赋值可允许汇编语言程序使用表达式,

8、例如:“ADD A,#ALFA*BETA/2”,其中ALFA和BETA是两个已定义的标号。 条件汇编可使用户在汇编时根据需要对源程序进行汇编,这样有利于程序的调试。 宏汇编:一条宏指令往往包括若干条汇编语言指令,这样在使用宏指令之后可使源程序缩短,简化程序设计。 使用宏指令之前要先对相应的寄存器赋值,否则出错。,17,4.3 汇编语言语句的格式 51单片机汇编语言的四分段格式: 标号字段 操作码字段 操作数字段 注释字段 ORG 0000H START: MOV A,#00H ;0A MOV R1,#10 ;10R1 MOV R2,#00000011B ;3R2 LOOP: ADD A,R2

9、;(A)+(R2)A DJNZ R1,LOOP ;R1内容减1不为零则循环 NOP HERE: SJMP HERE END,18,基本语法规则: 1.标号字段 用符号表示语句所在地址,即地址标号 标号后边必须跟以冒号“ : ” 由18个ASCII字符组成(字母开头,字符和数字) 地址标号在程序中必须唯一 不能使用汇编语言已经定义的符号作为标号 2.操作码字段 是汇编语言不可缺少的部分。,19,3.操作数字段 指令通常是单操作数、双操作数和无操作数三种情况。操作数之间,要以逗号隔开。 (1)十六进制、二进制和十进制形式的操作数表示 二进制:后缀“B” ,Binary 。 十进制:后缀“D”,De

10、cimal,也可省略。 十六进制:后缀“H” ,Hex。 若十六进制操作数以字符AF开头时,要在它前面加 “0”,以便在汇编时与字符AF区别开来。 (2)工作寄存器和特殊功能寄存器的表示 即可用符号来表示,也可用地址来表示。 例如,累加器可用A(或Acc)表示,也可用0E0H来表示。,20,(3) $符号的使用 用于表示转移指令操作码所在的地址。例如: JNB F0,$ 与 HERE:JNB F0,HERE 等价 再如: LOOP:SJMP LOOP 可写为 SJMP $ 4.注释字段 必须以分号“;”隔开,换行书写时也要以分号“;”开头。 汇编时注释字段不会产生机器代码。,21,4.4 汇编

11、语言程序设计基本结构,51单片机的编程可以是汇编语言也可以是C语言。 C语言编程快捷,但形成的机器代码长,占用存储空间大,执行慢; 汇编语言产生的机器码简短,占用存储空间小,执行快,能发挥单片机硬件功能。 无论是C语言还是汇编语言,源程序都要转换成机器码单片机才能执行。 汇编语言程序的结构: 顺序程序结构:程序依次执行各条指令 分支程序结构:程序依次执行指令,根据条件跳转 循环程序结构:单循环、多循环、嵌套循环 子程序结构:设计成通用程序块可被其它程序调用,22,4.4.1 顺序程序设计 顺序结构简单、基本。 特点: 程序从第一条一直顺序执行到最后一条指令。 例1 有两组压缩BCD码(如:11

12、83H和5678H),分别存放在23H、22H单元和33H、32H单元,编写求和程序,把和存入43H、42H单元中。(高位在前,低位在后) 分析:没有BCD码求和指令,需用二进制加法后再十进制调整。,23,ORG 0000H MOV A,22H ;取低位 ADD A,32H ;求和 DA A ;十进制数调整 MOV 42H,A ;存低位 MOV A,23H ;取高位 ADDC A,33H DA A MOV 43H,A ;存高位 SJMP $ END,24,例2 求双字节补码。原数存放于R4、R5中,R5存低8位。 分析:假设此双字节数为负数,需将原数取反加一即可。 MOV A,R5 ;取低位字

13、节 CPL A ;取反操作 ADD A,#01H ;加1操作 MOV R5,A MOV A,R4 ;取高字节 CPL A ADDC A,#00H MOV R4,A SJMP $,25,4.4.2 分支程序设计 根据判断条件执行相应程序。 单分支、多分支。 例3 x、y均为有符号字节变量,分别存放在VAR和FUNC单元。编写按照下式要求给y赋值的程序。 1 x 0 y = 0 x = 0 -1 x 0 分析: x是有符号数,先判断正负, 利用JB或JNB 。 判别x是否为0,利用JZ。,26,完整的程序清单: VAR DATA 50H ;x FUNC DATA 52H ;y ORG 0 SJMP

14、 BR1 ORG 0100H BR1: MOV A, VAR ;取出X送A JZ COMP ;若X=0则转到COMP JNB ACC.7, POSI ;若X0则转移到POSI MOV A, #0FFH ;若X0 时A=1 COMP:MOV FUNC, A ;存函数Y值 SJMP $ ;结束程序 END,27,4.4.3 循环程序设计 对某一程序段循环重复执行若干次。 特点:可缩短程序代码,提高运行速度。 分为先循环后判断和先判断后循环两种循环体方式。,例4 已知内部RAM从ADDR1为起始地址的数据块存放无符号数,块长在LEN单元内,编程求出数据块中的最大值并存入MAX单元。,28,程序清单:

15、 ADDR1 DATA 50H LEN DATA 30H MAX DATA 32H MOV MAX,#00H ;MAX单元清零 MOV R1,#ADDR1 ;ADDR1送R1 LOOP:MOV A,R1 ;数据块中数送入A CJNE A,MAX,NEXT1 ;A和(MAX)比较 NEXT1:JC NEXT ;若A(MAX),NEXT MOV MAX,A ;AMAX NEXT:INC R1 ;修改数据块指针R1 DJNZ LEN,LOOP ;若未完,则转LOOP SJMP $ ;结束 END,29,程序清单2: ORG 2000H LOOP:MOV R1, #ADDR1 ;数据块首址送R0 MOV MAX, #00H ;最大数单元清零 LOOP1:MOV A, MAX ;(A)(MAX) CLR C ;清C SUBB A, R1 ;(MAX)-(R1) JNC NEXT ;若(MAX)(R1), 则转移 MOV MAX, R1 ;若(MAX)(R1),则(MAX)(R1) NEXT:INC R1 ;修改地址指针 DJNZ LEN, LOOP1 ;若LEN0则继续比较 RET,30,例5 外部RAM工作单元清零,起始地址在DPTR中,工作单元数在R2中。 程序如下: CLEAR:CLR A MOV R2,#32H ;置计数器 MOV DPTR,#2000H ;起始地址 LOO

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

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

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