单片机第八九讲
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、汇编语言的语句格式:
汇编语言源程序是由汇编语句(即指令)组成的。典型的汇编 语句格式如下: [标号:] 操作码 [操作数] [,操作数] [;注释]
2、数据的表示方法:
(1)二进制数:由0、1组成,‚逢2进1”的数制。如: 01011110B (0~1 后缀:B/b) (2)十六进制数:便于读写记忆的二进制数的简写形式。 (0~9,A~F 后缀:H/h)
(2)结束汇编伪指令END 格式:[标号:] END [表达式] 功能:放在汇编语言源程序的末尾,表明源程序的汇编到此 结束,其后的任何内容不予理睬。 (3)赋值伪指令EQU 格式:字符名称x EQU 赋值项n 功能:将赋值项n的值赋予字符名称x。程序中凡出现该字符 名称x就等同于该赋值项n,其值在整个程序中有效。赋值项n 可以是常数、地址、标号或表达式。在使用时,必须先赋值后 使用。 ‚字符名称‛与‚标号‛的区别是‚字符名称‛后无冒号, 而‚标号‛后面有冒号。
(3)十进制数:可用二进制数表示(也称为BCD码, 0~9表示 为:0000~1001B ),也可用十进制数表示(后缀:D/d或无后缀)。
3.伪指令
伪指令(也称为汇编程序的控制命令)是程序员发给汇编
程序的命令,用来设臵符号值、保留和初始化存储空间、控制
用户程序代码的位臵。 伪指令只出现在汇编前的源程序中,仅提供汇编用的某些
JNB ACC.7, POST ; 若A第7位不为1(X为正数),则程序转到
POST处,否则(X为负数)程序往下执行 MOV A, #0FFH ; 将1(补码)送入A中
SJMP COMP
POST: MOV A, #01H COMP: MOV 41H, A
; 程序转到COMP处
; 将+1送入A中 ; 结果存入Y
(5)定义双字节伪指令DW 格式:[标号:] DW x1, x2,…, xn 功能:将双字节数据[或双字节数据组]顺序存放在从标号指定 地址单元开始的存储单元中。其中,xi为16位数值常数,占两个 存储单元,先存高8位(存入低位地址单元中),后存低8位(存 入高位地址单元中)。
(6)预留存储空间伪指令DS 格式:[标号:] DS n
3.4.1 汇编语言程序设计的步骤
汇编语言程序设计:根据任务要求,采用汇编语言编制程序的过程称为汇 编语言程序设计。
汇编语言程序设计的步骤: (1)拟订设计任务书
(2)建立数学模型
(3)确定算法
(4)分配内存单元,编制程序流程图 (5)编制源程序
进一步合理分配存储器单元和了解I/O接口地址;按功能设计程序,明 确各程序之间的相互关系;用注释行说明程序,便于阅读和修改调试和修 改。 (6)上机调试 (7)程序优化
(2)汇编语言:利用指令助记符来描述的程序设计语言。
(3)高级语言:高级语言接近于人的自然语言,是面向过程而 独立于机器的通用语言。
汇编语言的指令类型:
51单片机汇编语言,包含两类不同性质的指令。
(1)基本指令:即指令系统中的指令。它们都是机器能 够执行的指令,每一条指令都有对应的机器码。 (2)伪指令:汇编时用于控制汇编的指令。它们都是机 器不执行的指令,无机器码。
格式:字符名称x
DATA
表达式n
功能:把表达式n的值赋值给左边的字符名称x。n可 以是数据或地址,也可以是包含所定义的‚字符名称x”
在内的表达式,但不能是汇编符号。数值表达式的值在 0-255 之间 。
3.4汇编语言程序设计
3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.6 3.4.7 3.4.8 汇编语言程序设计的步骤 顺序程序设计 分支程序设计 循环程序设计 查表程序设计 子程序设计 散转程序 汇编语言的开发环境
程序如下:
START: ORG 1000H MOV DPTR,#TABLE MOV A,20H ANL A,#0FH MOVC A,@A+DPTR MOV 21H,A MOV A,20H ANL A,#0F0H SWAP A MOVC A,@A+DPTR MOV TABLE: 22H, A SJMP $ DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H END
Y=
1 0 -1
X>0 X=0 X<0
解:此题有三个条件,所以有三个分支程序。
这是一个三分支归一的条件转移问题。 X是有符号数,判断符号位是0还是1可利用 JB或JNB指令。判断X是否等于0则直接可以使 用累加器A的判0指令。 程序流程图如右图所示。
ORG 1000H START: MOV A, 40H JZ COMP ; 将X送入A中 ; 若A为0,转至COMP处
SJMP $
END
; 程序执行完,‚原地踏步‛
3.4.4 循环程序设计
特点:程序中含有可以重复执行的程序段(循环体),采用循环程序可以 有效地缩短程序,减少程序占用的内存空间,使程序的结构紧凑、可读性 好。
组成:循环程序一般由下面四部分组成。 (1)循环初始化。位于循环程序开头,用于完成循环前的准备工作,如 设臵各工作单元的初始值以及循环次数。 (2)循环体。循环程序的主体,位于循环体内,是循环程序的工作程序, 在执行中会被多次重复使用。要求编写得尽可能简练,以提高程序的执行 速度。 (3)循环控制。位于循环体内,一般由循环次数修改、循环修改和条件 语句等组成,用于控制循环次数和修改每次循环时的参数。 (4)循环结束。用于存放执行循环程序所得的结果,以及恢复各工作单 元的初值。
程序如下:
ORG 1000H START: MOV A, 30H ; 取两位BCD压缩码a1a0送A
ANL A, #0F0H
SWAP A MOV B, #0AH MUL AB MOV R0, A MOV A, 30H ANL A, #0FH
; 取高4位BCD码a1
; 高4位与低4位换位 ; 将二进制数10送入B ; 将10×a1送入A中 ; 结果送入R0中保存 ; 再取两位BCD压缩码a1a0送A ; 取低4位BCD码a0
编制程序流程图:是指用各种图形、符号、指向线等来说明程 序设计的过程。国际通用的图形和符号说明如下: 椭圆框:开始和结束框,在程序的开始和结束时使用。 矩形框:处理框,表示要进行的各种操作。 菱形框:判断框,表示条件判断,以决定程序的流向。
流向线:流程线,表示程序执行的流向。
圆 圈:连接符,表示不同页之间的流程连接。 各种几何图形符号如下图所示。
循环程序的结构:
(1)先循环处理,后循环控制(即先处理后控制)。如左下图所示。 (2)先循环控制,后循环处理(即先控制后处理)。如右下图所示。
循环程序按结构形式,有单重循环与多重循环。 1.单重循环程序 定义:循环体内部不包括其他循环的程序称为单重循环程序。 [例题4] 已知片内RAM 30H~3FH单元 中存放了16个二进制无符号数,编制程 序求它们的累加和,并将其和数存放在 R4, R5中。 解:每次求和的过程相同,可以用循环 程序实现。16个二进制无符号数求和, 循环程序的循环次数应为16次(存放在 R2中),它们的和放在R4, R5中(R4存 高8位,R5存低8位)。程序流程图如右 图所示。
(4)定义字节伪指令DB 格式:[标号:] DB x1, x2,…, xn 功能:将8位数据(或8位数据组)x1, x2,…, xn顺序存放在从当 前程序存储器地址开始的存储单元中。xi可以是8位数据、ASCII 码、表达式,也可以是括在单引号内的字符串。两个数据之间用 逗号‚,”分隔。 xi为数值常数时,取值范围为00H~FFH。xi为ASCII码时, 要使用单引号‘’,以示区别。xi为字符串常数时,其长度不应 超过80个字符。
控制信息,不产生可执行的目标代码,是CPU不能执行的指令。
(1)定位伪指令ORG
格式:ORG n 其中:n通常为绝对地址,可以是十六进制数、标号
或表达式。
功能:规定编译后的机器代码存放的起始位臵。在一 个汇编语言源程序中允许存在多条定位伪指令,但每一 个n值都应和前面生成的机器指令存放地址不重叠。 例如程序: ORG 1000H MOV MOV ┇ A,#20H B,#30H START:
第三章 51单片机指令系统
3.1 3.2 3.3 3.4 3.5 单片机指令系统简介 寻址方式 指令说明 汇编语言程序设计 单片机的C语言程序设计
3.4 汇编语言及程序设计
程序设计:就是编制计算机的程序,即应用计算机所能识别的、 接受的语言把要解决的问题的步骤有序地描述出来。
程序设计语言的种类:
(1)机器语言:机器语言是用二进制代码表示的计算机惟一能 识别和执行的最原始的程序设计语言。
程序如下:
ORG 1000H
START: MOV R0, #30H MOV DPTR, #2000H
MOV R2, #20H
LOOP: MOV A, @R0 MOVX @DPTR, A
; 设臵循环次数
; 将片内RAM数据区内容送A ; 将A的内容送片外RAM数据区
LOOP:
[例题5] 编制程序将片内RAM的30H~4FH单元中的内容传送至 片外RAM的2000H开始的单元中。 解:每次传送数据的的过程 相同,可以用循环程序实现。 30H~4FH共32个单元,循环 次数应为16次(保存在R2 中),为了方便每次传送数 据时地址的修改,送片内 RAM数据区首地址送R0,片 外RAM数据区首地址送 DPTR。程序流程图如右图所 示。
3.4.3 分支程序设计
特点:根据不同的条件,确 定程序的走向。它主要靠条 件转移指令、比较转移指令 和位转移指令来实现。分支 程序的结构如右图所示。 分支程序的设计要点如下: (1)先建立可供条件转移指令测试的条件。
(2)选用合适的条件转移指令。
(3)在转移的目的地址处设定标号。
[例题3] 求符号函数的值。已知片内RAM的 40H单元内有一自变 量X,编制程序按如下条件求函数Y的值,并将其存入片内RAM 的41H单元中。
程序如下:
START: ORG 1000H MOV R0, #30H MOV R2, #10H ; 设臵循环次数(16) MOV R4, #00H ; 和高位单元R4清0 MOV R5, #00H ; 和低位单元R5清0 MOV A, R5 ; 和低8位的内容送A ADD A, @R0; 将@R0与R5的内容相加并产生进位Cy MOV R5, A ; 低8位的结果送R5 CLR A ; A清0 ADDC A, R4 ; 将R4的内容和Cy相加 MOV R4, A ; 高8位的结果送R4 INC R0 ; 地址递增(加1) DJNZ R2, LOOP ;若循环次数减1不为0,则转到LOOP处循环; 否则,循环结束 SJMP $ END
功能:从标号指定地址单元开始,预留n个存储单元,n可以 是数据,也可以是表达式。 (7)定义位地址符号伪指令BIT
格式:字符名称x BIT 位地址n 功能:将位地址n的值赋予字符名称x。程序中凡出现该字符 名称x就代表该位地址。位地址n可以是绝对地址,也可以是符 号地址。
(8)数据地址赋值伪指令DATA
3.4.2 顺序程序设计
特点:顺序结构程序是最简单、最基本的程序。程序按编写的顺 序依次往下执行每一条指令,直到最后一条。它能够解决某些实 际问题,或成为复杂程序的子程序。 [例题1] 将片内RAM 30H单元中的两位压缩BCD码转换成二进制 数送到片内RAM 40H单元中。 解:两位压缩BCD码转换成二进 制数的算法为: (a1a 0)BCD=10×a1+a0 程序流程图如右 40H, A SJMP $ END
; 求和10×a1+ a0
; 结果送入40H保存 ; 程序执行完,‚原地踏步‛
[例题2]利用查表指令将内部RAM中20H单元的压缩BCD码拆开, 转换成相应的ASCII码,存入21H、22H中,高位存在22H。 解: BCD码的0~9对应的ASCII码为30H~39H,将30H~39H 按大小顺序排列放入表TABLE中,先将BCD码拆分,将拆分后 的BCD码送入A,表首址送入DPTR ,然后领用查表指令 MOVC A,@A+DPTR,查表即得结果,然后存入21H、22H 中。