第3章mcs-51单片机汇编语音程序设计_第1页
第3章mcs-51单片机汇编语音程序设计_第2页
第3章mcs-51单片机汇编语音程序设计_第3页
第3章mcs-51单片机汇编语音程序设计_第4页
第3章mcs-51单片机汇编语音程序设计_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 3章 MCS-51单片机汇编语言程序设计 第一部分第一部分第 3章 MCS-51单片机汇编语言程序设计 内 容 提 要v 概述v 伪 指令v 汇编语言程序设计步骤v 顺序程序设计v 分支程序设计v 循环程序设计v 位操作程序设计v 子程序v 小结第 3章 MCS-51单片机汇编语言程序设计 3.1 概述MCS-51单片机的编程语言可以是汇编语言也可以是高级语言(如 C语言),高级语言编程快捷,但程序长,占用存储空间大,执行慢;汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能。无论是高级语言还是汇编语言,源程序都要转换成目标程序(机器语言)单片机才能执行。 第 3章 MCS-51单片机汇编语言程序设计 连接 /定位器L51汇编语言源程序汇编器 A51符号转换程序OHS51绝对地址目标程序.BINC语言程序 浮动地址目标程序编译器 C51HEX图 3-1 两种语言源程序转换成目标程序第 3章 MCS-51单片机汇编语言程序设计 目前很多公司将编辑器、汇编器、编译器、连接 /定位器、符号转换程序做成集成软件包,用户进入该集成环境,编辑好程序后,只需点击相应菜单就可以完成上述的各步。 汇编: 将汇编语言 源程序 转换成机器语言 目标 程序的过程称为汇编。汇编程序: 能将汇编语言 源程序 转换成机器语言 目标 程序的系统软件称为汇编程序。第 3章 MCS-51单片机汇编语言程序设计 汇编的方法: 汇编的方法有两种1.手工汇编:人工查指令表,查出程序中每条指令对应的机器代码。早期的计算机使用。2.机器汇编:用计算机中的汇编程序对用户源程序进行汇编。用机器汇编时要提供给汇编程序一些信息,并遵循汇编程序的一些约定。这些功能由 伪指令 完成。第 3章 MCS-51单片机汇编语言程序设计 v 汇编的作用与结果:1)将程序中每条汇编语言指令翻译成相应的机器码;2)确定每条指令在存储器中的存放地址;3)提供错误信息; 4)提供目标执行文件 (*.OBJ/*.HEX)和列表文件(*.LST)。地址 机器码 源程序 ORG 2000H 2000H 78 30 MAIN: MOV R0, #30H2002H E6 MOV A, R0第 3章 MCS-51单片机汇编语言程序设计 1. 机器指令 : 指令系统中的全部指令。每条机器指令都有对应的机器代码,可以被 CPU执行。2. 伪指令: 汇编控制指令,没有指令代码,只用于汇编过程,为汇编程序提供汇编信息。v一、汇编语言指令类型宏汇编功能 : 将需要反复多次执行的程序段定义成一个宏指令名(宏定义)。编程时,可在程序中使用宏指令名来替代被定义的程序段(宏调用)。3.2伪指令第 3章 MCS-51单片机汇编语言程序设计 v宏定义过程 :v宏调用过程:v v 宏指令名 实际参数v v 宏指令名 实际参数v 宏指令名 MACRO 形式参数v ;被定义的程序段v ENDM第 3章 MCS-51单片机汇编语言程序设计 二常用伪指令及功能:v 1.目标程序地址起始指令 ORG nnnnv 功能:定义程序或数据块的起始地址。 指示此语句后面的程序或数据块以 nnnn为起始地址,连续存放在程序存储器中。v v 指令地址 机器码 源程序 v ORG 1800Hv 1800H 23 TAB: DB 23H, 100, A v 1801H 64v 1802H 41v 1803H 78 30 MAIN: MOV R0, #30H第 3章 MCS-51单片机汇编语言程序设计 v 2.字节定义 标号: DB(字节常数,或字符或表达式)v 功能: 指示在程序存储器中以标号为起始地址的单元里存放的数为字节数据(八位二进制数)。v 例如 LN: DB 32, C, 25H, -1; LN LN+3 地址单元依次存放 20H , 43H , 25H , FFH地址 数据LN 20LN+1 43LN+2 25LN+3 FFv 3. 字定义 标号: DW ( 字常数或表式)v 作用: 指示在程序存储器中以标号为起始地址的单元里存放的数为字数据(即 16位的二进制数),例如:v GH : DW 1234H, 5678H, 08GH 1234GH+2 5678GH+4 0008第 3章 MCS-51单片机汇编语言程序设计 5. 等值指令 标号 EQU(数值表达式)表示 EQU两边的量等值,用于为标号或标识符赋值。例如: X1 EQU 2000HX2 EQU 0FH MAIN: MOV DPTR, #X1 ; DPTR=2000H ADD A, #X2 ; A=A+0FH4保留字节 标号: DS ( 数值表达式)作用: 指示在程序存储器中保留以标号为起始地址的若干字节单元,其单元个数由数值表达式指定。例如 L1: DS 32 ; 从 L1地址开始保留 32个存储单元。第 3章 MCS-51单片机汇编语言程序设计 6. 位地址赋值伪指令 标号 BIT 位地址 作用: 同 EQU指令,但定义的是位地址值。例如 AIC BIT P1.1。7.汇编结束 END作用: 指示源程序段结束。汇编程序在 END伪指令处 停止汇编。END指令放在程序的最后。第 3章 MCS-51单片机汇编语言程序设计 位地址赋值举例v格式:标号 BIT 位地址v该伪指令的功能是将位地址赋予特定位的标号,经赋值后就可以用指令中 BIT左边的标号来代替 BIT右边所指出的位。v例如: FLG: BIT F0v LED: BIT P1.0v经以上伪指令赋值以后,在编程中就可以用 FIG、 LED当相应的位地址来使用了。第 3章 MCS-51单片机汇编语言程序设计 3.3 汇编语言程序设计方法与步骤一 .确定方案(程序结构与流程)及相关算法;二 .了解应用系统的硬件配置及性能, 合理分配存储器单元 ;三 .根据需要建立算法模型,并确定算法的实现方法与步骤四 .编制源程序:1. 设计程序结构及程序流程;2.按程序结构与流程设计主程序;3.按功能设计相关子程序并明确各程序之间的相互关系;开始1YN?4.给程序中加适当的注释说明,方便阅读、调试和修改。第 3章 MCS-51单片机汇编语言程序设计 3.3.1 程序的基本结构 程序的基本结构有三种1 顺序结构 :程序按顺序依次执行。2 分支(选择)结构 :根据给定的条件判断并选择执行。3 循环结构 :在给定的条件下反复执行某一部分的操作的程序。循环结构又分为 当型( While) 和 直到型 (Until)。 当型:是先判断,当条件成立则这些循环体。 直到型:是先执行循环体一次,再判断条件,条件不成立再执行循环体。由以上 3种基本结构顺序组成的算法结构,可以解决任何复杂的问题。但在基本结构中可能还嵌套另一种结构。用汇编语言编程时一定要注意与用高级语言编程的差别,用汇编语言编程时,对于数据的存放位置及工作单元的安排是由编程者安排的。第 3章 MCS-51单片机汇编语言程序设计 3.3.2 编程举例例 1 编程序将外部数据存储器的 000EH和 000FH单元的内容交换。000EH000FH000EH000FH000EH000FH000EH000FH分析 : 外部数据存储器的数据操作只能用 MOVX指令,且只能和 A之间传送,因此必须用一个中间环节作暂存,设用 20H单元。用 R0、 R1指示两单元的低八位地址,高八位地址由 P2指示。编程过程如下:000EH000FH000EH000FH000EH000FH第 3章 MCS-51单片机汇编语言程序设计 ORG 0100HMOV P2, #00H ;送地址高八位至 P2口MOV R0, #0EH ;R0= 0EH MOV R1, #0FH ;R1= 0FHMOVX A, R0 ;A=(000EH)MOV 20H, A ;(20H)=(000EH)MOVX A, R1 ;A=(000FH)MOVX R0,A ;(000EH)=原 (000FH)XCH A, 20H ; A=原 (000EH),(20H)=原 (000FH) MOVX R1, A ;(000FH)=(A)=原 (000EH) SJMP $END第 3章 MCS-51单片机汇编语言程序设计 3.4 顺序程序设计顺序程序 (简单程序 ),程序走向只有一条路径例 3.4.1:将 R4、 R5双字节符号(负)数求补程序。ORG 0100HMOV A, R5 ;取低字节CPL A ;( A)取反ADD A, #1 ;低字节变补MOV R5, AMOV A, R4 ;取高字节CPL AADDC A, #0 ;高字节变补ORL A, #80H ; 恢复负号MOV R4, AEND第 3章 MCS-51单片机汇编语言程序设计 例 3.4.2 分解压缩式 BCD码(存于 40H) ,使其成为非压缩式 BCD码(依次存于 41H/42H单元)。ORG 0000HMOV R0, #40H ;设指针MOV A, R0 ; (A)=65HMOV R2, A ; (R2)=65H(暂存)ANL A, #0FH ; (A)=05HINC R0 ; (R0)=41HMOV R0, A ; (41H)=05H片内 RAM42H41H40H 65MOV A, R2 ;( A) =65SWAP A ;十位换到低半字节 (A)=56ANL A, #0FH ;(A)=06INC R0 ;(R0)=42HMOV R0, A ;保存数据十位 (42H)=06HENDv 05v 06第 3章 MCS-51单片机汇编语言程序设计 地址 数据TAB 0TAB+1 1TAB+2 4TAB+3 9TAB+4 16TAB+5 25例 3.4.3 设变量放在片内 RAM的 20H单元 ,其值为 00H05H之间,编查表程序 ,将变量的平方值放入片内 RAM的 21H单元。ORG 0000HMOV DPTR,#TAB MOV A,20HMOVC A,A+DPTR ;查表MOV 21H,ASJMP $TAB: DB 00H,01H,04H,09H,16H,25H END分析 :在程序存储器安排一张平方表,首地址为TAB,以 DPTR指向表首址, A存放变量值,利用查表指令 MOVC A, A+DPTR,即可求得。表中数据用 BCD码存放合乎人们的习惯 . 如果平方值为两个字节,程序应如何编?DPTR A第 3章 MCS-51单片机汇编语言程序设计 ORG 0080HMOV A, R2JNB ACC.7, N ;为正数?CPL A ;负数变补INC AMOV R2, AN: SJMP $ ;结束3.5 分支程序的设计由条件转移指令构成程序判断部分,根据条件分支执行3.5.1 单分支程序一个判断决策框,两种分支结构图。条件满足 ?N影响条件Y处理段条件满足 ?N影响条件Y处理 1 处理 2例 1 求 8位有符号数 (R2)的绝对值。方法:正数不变,负数变补第 3章 MCS-51单片机汇编语言程序设计 例 2 用单片机加重力传感器作磅秤,秤出重量后算出行李运费价格,其秤出的重量以 10kg为 1个计价单位 G , G已存入 40H单元。计价方法为 50kg以内按 3元 , 50kg以上分段计价 : 50kg按 3元计价,超过部分按 1单元加 2元计价。 由此列出算式: G3 + (G-5)2 ; 当 G 5M=G3 ;当 G5 3G因重复使用,先暂存在 R2。流程见左 , 程序如下:第 3章 MCS-51单片机汇编语言程序设计 v ORG 0100Hv FRT: MOV A, 40H ;取行李重量计价单位 Gv MOV R3, A v MOV B, #03H ;运费 M=G3v MUL ABv MOV R2, A ;暂存 3Gv MOV A, R3 ;取回 Gv CJNE A, #05H, L1 ; G 5 转 L1v SJMP WEIT ; G=5 转 WEITv L1: JC WEIT ; G5(C=1)转 WETCv SUBB A, #05H ;否则 M=3G+2(G-5) v RLC A ; (A)=AX2v ADD A, R2v MOV R2 , Av WEIT: MOV 41H, R2 ;存运费 Mv RET第 3章 MCS-51单片机汇编语言程序设计 3.6 多分支散转程序的设计 有一类分支程序 ,它根据不同的输入条件或不同的运算结果 ,转向多个不同的处理程序 ,称之为散转程序。这类程序通常利用 JMPA+DPTR间接转移指令实现转移。有如下两种方法:1. 查转移地址表 :将 转移地址 列成表格,将表格的内容作转移的目标地址。2. 查转移指令表 :将转移到不同程序的 转移指令 列成表格,判断条件后查表,转到表中指令执行 ,下面用两个例子说明。第 3章 MCS-51单片机汇编语言程序设计 v 1. 利用 转移地址表 实现转移: JMP A+DPTRv 例 3-7 根据 R3的内容转向对应的程序, R3的内容为 0 n,处理程序的入口符号地址分别为 PR0 PRn (n128)。v 分析:将 PR0 PRn入口地址列在表格中构成 转移地址表 ,每一项地址占两个单元, PRn在表中的偏移量为 2n,因此将 R3的内容乘 2即得 PRn在表中的偏移地址,从偏移地址 2n和 2n+1两个单元分别取出 PRn的高八位地址和低八位地址送 DPTR寄存器,用 JMP A+DPTR指令( A先清零)即转移到PRn入口执行。第 3章 MCS-51单片机汇编语言程序设计 v ORG 0200Hv MOV A,R3 ;R3Av ADD A,ACC ;A*2v MOV DPTR,#TABv PUSH ACCv MOVC A,A+DPTR ;取地址表中高字节v MOV B,A ;暂存于 Bv INC DPLv POP ACCv MOVC A,A+DPTR ;取地址表中低字节v MOV DPL,Av MOV DPH,B ;DPTR为表中地址v CLR A ;A=0v JMP A+DPTR ;转移v TAB: DW PR0,PR1,PR2, PRn ;转移地v 址表 v END01100220TABTAB+2DPH DPL例如 R3=1的操作02 20第 3章 MCS-51单片机汇编语言程序设计 v 2. 利用转移指令表实现转移v 例 3-8 设有五个按键 0、 1、 2、 3、 4其编码分别为 3AH、 47H、 65H、 70H、 8BH,要求根据按下的键转向不同的处理程序: PR0 、 PR1 、 PR2、 PR3、PR4,设按键的编码已存于 B寄存器中,设计此程序。其思路是利用以下两条转移指令来实现:v JMP A+DPTR AJMP addr11分析 : 将键码排成表,将键码表中的值和 B中的键编码比对,记下在键码表中和 B中的键编码相等的序号,另安排一个转移表 ,安排 AJMP指令 (机器码 ),因每条AJMP指令占二字节,将刚才记下的序号乘 2即为转移表的偏移地址,利用 J

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论