单片机第三章课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(二)MCS—51单片机汇编语言语句格式 标号: 操作符 操作数 ;注释 START: MOV A, 30H ;A←(30H) 1.标号 标号用来标明语句地址,它代表该语句指令机器码的第一个 字节的存储单元地址。 标号一般规定由1~8个英文字母或数字组成,但第一个符号 必须是英文字母。 2.注释 注释只是对语句或程序段的含义进行解释说明,以方便程序 的编写、阅读和交流,简化软件的维护,一般只在关键处加 注释。
DATA伪指令功能和EQU相类似,它把右边“表达式”的值 赋给左边的”字符名称”。这里的表达式可以是一个数据或 地址,也可以是一个包含所定义字符名称在内的表达式。 DATA伪指令和EQU伪指令的主要区别是:EQU定义的字符 必须先定义后使用,而DATA伪指令没有这种限制,故 DATA伪指令可用于源程序的开头或结尾。
例3-9】 试编写程序,求片内RAM的30H~39H单元中数的和, 将结果存放在R2和R3中。
ORG 0000H NSUN:MOV R1,#10 ;数据块长度送R1,(计数器置初值) MOV R2,#00H ;R2清零 MOV R3,#00H ;R3清零 MOV R0,#30H ;数据块首地址送R0 LOOP:MOV A,R3 ADD A,@R0 MOV R3,A ;和数的低字节送R3 CLR A ADDC A,R2 MOV R2,A ;和数的高字节送R2 INC R0 ;修改地址指针 DJNZ R1,LOOP ;数据未加完继续执行 RET END
(五)汇编语言程序设计步骤和基本程序结构
1.汇编语言程序设计步骤 分析问题 确定算法 设计程序流程图
标准的流程图符号见下图:
流线 端点 符号 处理 符号
程序执行顺 序流向线 程序的开始和 结束符号 表示处理功 能
判断 符号 连接 符号
表示判断功能
用 来 实 现 流 程 图 之 间 的连接
【例3-10】 求一组单字节无符号数中最大值。设内部RAM 20H单元为数据块的起始地址,块长度为10,试编程求数据块 中的最大值并存入30H单元中。
相应的程序为: MOV R0,#20H ;数据块首地址送R0 MOV R6,#0AH ;数据块长度送R6 MOV 30H,#00H ;30H←00H LOOP::MOV A,@R0 ;数据块的数读入A中 CJNE A,30H,NEXT NEXT:JC LOOP1 ;(A)<(30H)转LOOP1 MOV 30H,A ;(A)>(30H)则大数送30H LOOP1:INC R0 ;修改数据块指针R0 DJNZ R6,LOOP ;未比较完,转LOOP(循环) SJMP $
6.定义字伪指令DW

其格式为 标号: DW 项或项表
DW伪指令的功能和DB伪指令相似,其区别在于DB定义的 是一个字节,而DW定义的是一个字(即两个字节),因此 DW伪指令主要用来定义16位地址(高8位在前,低8位在 后)。
7.定义存储空间伪指令DS
其格式为: 标号: DS 表达式
图3-4 找最大值程序流程图
0000H 022000
0023H 02XXXX
2000H 2003H 2006H 2009H
758920 758DF3 758BF3 D28E
2.汇编语言结束伪指令END END伪指令放在源程序的末尾,用来指示源程序到此全部结 束。 3.赋值伪指令EQU EQU用于给它左边的“字符名称”赋值,其格式为: 字符 EQU 操作数 操作数可以是8位或16位二进制数,也可以是事先定义的标 号或表达式。
5.定义字节伪指令DB 其格式为: 标号: DB 项或项表
项或项表:可以是一个8位二进制数或一串8位二进制数(用 逗号分开)。数据可以采用二、十、十六进制和ASCll码等 多种表示形式。 标号:表格的起始地址(表头地址)。 指令的功能是把“项或项表”的数据依次定义到程序存储器 的单元中,形成一张数据表(只是一张定义表,数据并未真 正存入这些单元)。
三、分支结构程序设计 在程序设计中,经常需要计算机对某情况进行判断,然后根 据判断的结果选择程序执行的流向,这就是分支程序。 在汇编语言程序中,通常利用条件转移指令形成不同的程序 分支。 1.单分支程序 【例3-7】 在片内RAM 30H单元中存有一个带符号数,试 判断该数的正负性,若为正数,将6EH位清0;若为负数, 将6EH位置1。
(4)分配内存单元:分配内存工作单元,确定程序和数据 区的起始地址。 (5)编写汇编语言程序 (6)调试程序:
1、基本程序结构 包括顺序结构、分支结构、循环结构。

图3—2 三种基本程序结构流程图
3 、程序质量的评判标准 (1)能可靠地实现系统所要求的各种功能 (2)本着节省存储单元,减少程序长度和加快运算时间的 原则 (3)程序结构清晰、简捷,流程合理,各功能程序模块化、 子程序化。 二、顺序结构程序设计 1、顺序结构程序 【例3-4】 编写运算程序。 设数a存放在R1中,数b存放在R2中,计算y=a2-b,并将 结果放入R4和R5中。
第三章 汇编语言程序设计
一、程序设计概述
(一)程序设计语言 1.机器语言 机器语言是用机器码编写程序。能被计算机直接识别 和执行。
2.汇编语言 汇编语言是用助记符编写程序。
汇编:计算机不能直接识别和执行汇编语言程序,而要通过“翻译”把 源程序译成机器语言程序(目标程序)才能执行,这一“翻译”工作称 为汇编。汇编有人工汇编和计算机汇编两种方法。
8.位地址赋值伪指令BIT 其格式为: 字符名称 BIT 位地址 将位地址赋值给指定的字符。

【例3-3】 K1 BIT P1.0 A2 BIT 20H
(四)机器汇编
试对如下源程序进行机器汇编: ORG 1000H SUM DATA 1FH BLOCK DATA 20H START: MOV R0,#BLOCK MOV A,@R0 CJNE A,#00H,LOOP HERE: SJMP HERE LOOP: CLR A NEXT: INC R0 ADD A,@R0 DJNZ BLOCK,NEXT MOV SUM,A SJMP HERE END ;教师演示
(三)伪指令 伪指令:伪指令只用于汇编语言源程序中,对汇编过程起控 制和指导的作用,不生成机器码。汇编结束,自动消失。 MCS—51单片机主要有8条伪指令。 1.定义起始地址伪指令ORG ORG 16位地址或标号 功能:定义以下程序段的起始地址。
【 例3-1】 地址 指令代码 源程序 ORG 0000H LJMP MAIN ;上电转向主程序 ORG 0023H ;串行口中断入口地址 LJMP SERVE1 ;转中断服务程序 ORG 2000H ;主程序 MAIN:MOV TMOD,#20H ;设T1作方式2 MOV TH1,#0F3H ;赋计数初值 MOV TL1,#0F3H SETB TR1 ;启动T1
SUB:MOV A,50H CJNE A,51H,LOOP SETB 70H RET LOOP: JC LOOP1 MOV 60H,A RET LOOP1: MOV 60H,51H RET
四、循环结构程序设计 循环程序设计不仅可以大大缩短所编程序的长度,使程序所 占内存单元数最少,也能使程序结构紧凑和可读性变好。 (一)循环程序的基本结构 1.循环初始化 2.循环工作部分(是循环程序的主体, 需要重复执行的程序段) 3.循环控制部分(完成对变量的修改) 4.循环终止判定部分 图3-3循环程序结构 (二)循环结构程序设计
反汇编:有时需要根据已有的机器语言程序,将其转化为相 应的汇编语言程序,这个过程称为反汇编。
汇编语言是面向机器的,每一类计算机分别有自己的汇编语 言。汇编语言占用的内存单元少,执行效率高,广泛应用于 工业过程控制与检测等场合。
本章将介绍MCS-51系列单片机的汇编语言程序设计。 3.高级语言 高级语言是一种面向算法和过程并独立于机器的通用程序设 计语言。如BASIC、C语言等。 在MCS—51系列单片机开发应用中,单片机C语言,C51正 得到越来越广泛的应用。
课堂练习: 1.编写拼字程序。将8051片内RAM50H单元中的高半字节和 51H单元的低半字节拼成一个数,送52H单元。
【例3-6】编写查表程序。 将十六进制数转换为ASCII码。设1位十六进制数存在R0寄 存器的低4位,转换后的ASCII码仍送回R0中。 解: 待转换的十六进制数为0~F。根据ASCII码表可知,0~9 的ASCII码为30H~39H,A~F的ASCII码为41H~46H。将 以上ASCII码值列成表格。
Baidu Nhomakorabea
【例3-2】 ORG 0500H AA EQU R1 A10 EQU 10H MOV R0,A10 MOV A,AA
;R0←(10H) ; A←(R1)
注意:EQU伪指令中的字符必须先赋值后使用,故 该语句通常放在源程序的开头。
4.数据地址赋值伪指令DATA 其格式为: 字符名称 DATA 表达式

SUB1:MOV A, 30H ;30H单元中的数送A JB ACC.7,LOOP ;符号位等于1,是负数,转移 CLR 6EH ;符号位等于0,是正数,清标志位 RET ;返回 LOOP::SETB 6EH ;标志位置1 RET ;返回 2.多分支程序 【例3-8】 比较片内RAM的50H和51H单元中两个8位无符 号数的大小,把大数存入60H单元,若两数相等则把标志位 70H置1。

ORG 0000H MOV A,R1 MOV B,A MUL AB CLR C SUBB A,R2 MOV R4,A MOV A,B SUBB A,#00H MOV R5,A SJMP $ END
【例3-5】编写拆字程序。 将MCS—51片内RAM中20H单元中的高半字节送21H单元 的低半字节,低半字节送22H单元的低半字节,两个单元的 高半字节为0。 程序如下: MOV A,20H SWAP A ANL A,#0FH MOV 21H,A MOV A,20H ANL A,#0FH MOV 22H, A
ORG 0000H MOV DPTR,# ASCTAB MOV A, R0 ANL A,# 0FH MOVC A,@A+DPTR ;A中为表格中数据的序号,DPTR中放表头地址 MOV R0, A SJMP $ ASCTAB:DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H END
相关文档
最新文档