【大学课件】80c51单片机汇编语言程序设计ppt_第1页
【大学课件】80c51单片机汇编语言程序设计ppt_第2页
【大学课件】80c51单片机汇编语言程序设计ppt_第3页
【大学课件】80c51单片机汇编语言程序设计ppt_第4页
【大学课件】80c51单片机汇编语言程序设计ppt_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

第 4章 80C51单片机汇编语言程序设计4.1 单片机程序设计语言概述4.2 汇编语言程序的基本结构形式4.3 80C51 单片机汇编语言程序设计举例4.4 单片机汇编语言源程序的编辑和汇编4.5 80C51 单片机汇编语言伪指令4.1 单片机程序设计语言概述4.1.1 机器语言和汇编语言1、机器语言用二进制代码 “0”和 “1”表示指令和数据的程序设计语言 ,是计算机能直接识别并执行的指令 。 优点:执行速度快、占用内存少。缺点:识别难、记忆难。2、汇编语言用助记符和专门的语言规则表示指令的功能和特征。优点:助记符与机器指令一一对应。比机器语言直观、易懂、易记。非常适合于实时控制的需要。缺点:难以记忆和使用,程序设计的技巧性较高,编程难度较大。要求使用者必须精通单片机的硬件系统和指令系统。缺乏通用性,程序不易移植。4.1.2 单片机使用的高级语言n 对于 8051单片机,现有 4种语言支持,即汇编、PL/M、 C和 BASIC。n C语言最终得到广泛应用。可以大大提高单片机应用系统研制的开发效率。移植性好。高级语言的不足:生成的目标代码较长,导致应用程序运行速度较慢。4.1.3 80C51 单片机汇编语言的语句格式80C51汇编语言的语句格式如下: : ; 1. 标号是语句地址的标志符号,标号的几点规定: 1 8个 ASCII字符组成,第一个字符必须是字母。 不能使用本汇编语言已经定义的符号作为标号。 标号后面必须跟以冒号 “: ”。 同一标号在一个程序中只能定义一次。 标号可有可无。错误的标号 正确的标号1BT : BT1BEGIN BEGIN : TA+TB: TATB:ADD: ADD1:2. 操作码用于规定语句执行的操作内容,用指令助记符表示。不能空缺。3. 操作数操作数用于为指令操作提供数据。可以是空白,也可能有 13个操作数,各操作数之间以逗号分隔。4. 注释不属于语句的功能部分,只是对语句的解释说明,以“ ; ” 开头。5. 分界符(分隔符)用于把语句中的各部分隔开,以便于区分。分界符包括空格、冒号、分号或逗号等符号。4.2 汇编语言程序的基本结构形式三种基本结构形式:顺序程序结构,分支程序结构,循环程序结构。4.2.1 顺序程序结构顺序结构程序是最简单的程序结构。程序既无分支、循环,也不调用子程序,程序执行时一条接一条地按顺序执行指令。( 1)分析任务( 2)确定算法( 3)画流程图( 4)编写程序( 5)上机调试2、程序设计的一般步骤当接到程序设计的任务后,首先对任务进行详尽的分析,搞清楚已知的数据和想要得到的结果,程序应该完成何种的功能。明确在程序设计时应该 “做什么 ” 。根据实际问题的要求和指令系统的特点,确定解决问题的具体步骤。根据任务要求,对不同的计算方法进行比较,选择最适宜的算法。解决 “怎样做 ”的问题。将解决问题的具体步骤用一种约定的几何图形、指向线和必要的文字说明描述出来, 用图形的方法描绘解决问题的思路。用 指令 的形式将程序流程图实现出来。查错、改错,对程序进行优化。50H51H52H53H54H55HN1高字 节N1中字 节N1低字 节N2高字 节N2中字 节N2低字 节( 1)分析任务( 2)确定算法( 3)画流程图( 4)编写程序( 5)上机调试例: 3字节无符号数相加:其中被加数在内部 RAM的 50H、51H和 52H单元中;加数在内部 RAM的 53H、 54H和 55H单元中;要求把相加之和存放在 50H、 51H和 52H单元中,进位存放在位寻址区的 20H位中。MOV R0, #52H;被加数的低字节地址MOV R1, #55H;加数的低字节地址MOV A, R0ADD A, R1 ;低字节相加MOV R0, A ;存低字节相加结果DEC R0DEC R1MOV A, R0ADDC A, R1;中间字节带进位相加MOV R0, A ;存中间字节相加结果DEC R0DEC R1MOV A, R0ADDC A, R1;高字节带进位相加MOV R0, A ;存高字节相加结果CLR AADDC A, #00H;进位送 00H位保存MOV R0, #20H;存放进位的单元地址MOV R0, A分支结构也称为选择结构。为分支需要,程序设计时应给程序段的起始地址赋予一个地址标号,以供选择分支使用。分支结构又可分为单分支结构和多分支结构。1. 单分支程序结构单分支程序结构即二中选一,是通过条件判断实现的。一般都 使用条件转移指令 对程序的执行结果进行判断。可实现单分支转移的指令有: JZ、 JNZ、 CJNE和DJNZ。位状态转移指令: JC、 JNC、 JB、 JNB和 JBC等。4.2.2 分支程序结构( 1)单分支结构举例假定在外部 RAM中有 ST1、 ST2和 ST3共 3个连续单元,其中 ST1和 ST2单元中存放着两个无符号二进制数,要求找出其中的大数并存入 ST3单元中。解 :( 1)分析任务:比较两个数的大小( 2)算法:算术运算、控制转移( 3)程序结构:单分支( 4)数据类型:单字节、二进制、无符号数( 5)数据结构:单元地址升序排列 ( 6) RAM单元安排 :外部 RAM单元( 7)采用寄存器间接寻址方式( R0、 R1或 DPTR)( 8) 程序设计流程框图 ;( 9) 程序清单 ;START: CLR C ;进位位清 0MOV DPTR, #ST1 ;设置数据指针MOVX A, DPTR ;取第 1个数MOV R2, A;第 1个数存于 R2INC DPTR ;数据指针加 1MOVX A, DPTR ;取第 2个数SUBB A, R2 ;两数比较JNC BIG1 ;若第 2个数大,则转向 BIG1XCH A, R2;若第 1个数大,则整字节交换BIG0: INC DPTRMOVX DPTR, A ;存大数RETBIG1: MOVX A, DPTRSJMP BIG0上例中,如果采用 CJNE A, direct, rel指令,应如何修改程序?( 2)多重单分支结构举例多重单分支结构中,通过一系列条件判断,进行逐级分支。为此可使用比较转移指令 CJNE实现。CJNE A, 55H, LOOP1 ;若 TaT55, 则转向 LOOP1AJMP FH ;若 Ta T55,则返回LOOP1: JNC JW ;若 (CY) 0,表明 Ta T55,转降温处理程序CJNE A, 54H, LOOP2 ;若 TaT54, 则转向 LOOP2AJMP FH ;若 Ta T54,则返回LOOP2: JC SW ;若 (CY) 1,表明 Ta T54,转升温处理程序FH: RET ;若 T55TaT54, 则返回主程序例:假定采集的温度值 Ta放在累加器 A中。此外,在内部RAM 54H单元存放温度下限值 T54,在 55H单元存放温度上限值 T55。若 Ta T55,程序转向 JW(降温处理程序 );若Ta T54,则程序转向 SW(升温处理程序 );若T55TaT54,则程序转向 FH(返回主程序 )。解 :( 1)分析任务:解方程( 2)算法:控制转移( 3)程序结构:多分支( 4)数据类型:单字节、二进制、有符号数( 5) RAM单元安排 :外部 RAM单元( 6)采用寄存器间接寻址方式( R0、 R1或 DPTR)( 7) 程序设计流程框图( 8) 程序清单 ;例:已知: 127X-128,求 Y。设 X, Y分别存放在外部RAM 1000H和 2000H单元中。返回XAD EQU 1000H;BUF EQU 2000H;ORG 1000HSTART: MOV DPTR, #XAD ;数据 X的地址送数据指针 DPTRMOVX A, DPTR; A 取 数据 XJZ SAV; X 0转 SAVJB ACC.7, NEG; X 0转 NEG, 否则, X 0MOV A, #01H;SJMP SAV;NEG: MOV A, #0FFH; (0FFH为 -1补码 )SAV: MOV DPTR, #BUF; 数据 Y的地址送数据指针 DPTRMOVX DPTR, A; 保存 Y值 END上例中,如果采用 CJNE指令,应如何修改程序?XAD EQU 1000H;BUF EQU 2000H;ORG 1000HSTART: MOV DPTR, #XAD ;数据 X的地址送数据指针 DPTR MOVX A, DPTR; A 取 数据 XCJNE A, #0, ANZ ; X 0转 ANZSJMP SAV;ANZ: JC NEG ; X0MOV A, #01H; SJMP SAV;NEG: MOV A, #0FFH; (0FFH为 -1补码 )SAV: MOV DPTR, #BUF; 数据 Y的地址送数据指针 DPTRMOVX DPTR, A; 保存 Y值 END2. 多分支程序结构多分支程序结构流程中具有两个以上条件可供选择。可供使用的是变址寻址转移指令 “JMP A+DPTR”,但使用该指令实现多分支转移时,需要有数据表格配合。多分支程序结构( 1)通过数据表实现程序多分支MOV A, n ;分支序号送 AMOV DPTR, #BRTAB ;地址表首址MOVC A, A+DPTR ;查表JMP A+DPTR ;转移BRTAB:DB BR0-BRTAB ;地址表DB BR1-BRTABDB BRn-BRTABBR0: 分支程序BR1: BRn: ( 2)通过转移指令表实现程序多分支MOV A, nRL A ;分支序号值乘以 2MOV DPTR, #BRTAB;转移指令表首址JMP A+DPTRBRTAB: AJMP BR0 ;转分支程序 0AJMP BR1 ;转分支程序 1 AJMP BR127 ;转分支程序 127BR0: ;分支程序BR1: BRn: ( 3)其他实现程序多分支的方法MOV DPTR, #BRTAB ;分支入口地址表首址MOV A, R0RL A ;分支转移值乘以 2MOV R1, A ;暂存 A值INC AMOVC A, A+DPTR ;取低位地址PUSH ACC ;低位地址入栈MOV A, R1 ;恢复 A值MOVC A, A+DPTR ;取高位地址PUSH ACC ;高位地址入栈RET ;分支入口地址装入 PCBRTAB:DW BR0 ;分支程序入口地址表DW BR1 DW BR127例:假设键盘上有 4个按键,功能说明如下表:分析任务确定算法程序流程框图键 功能 键值 (分支程序序号) 键处 理程序(分支程序)删 除 00H ER读 数据 01H DS写数据 02H XS插入 03H CR假设转移指令表名称为 BRTAB, 分支程序序号已在 A 中。MOV DPTR, #BRTABCLR CRLC AJMP A+DPTR;ORG 3000H3000H BRTAB: AJMP ER; 转删除分支程序3001H 3002H AJMP DS; 转读数据分支程序3003H3004H AJMP XS; 转写数据分支程序3005H3006H AJMP CR; 转插入分支程序ORG 3100H3100H ER: ; 删除分支程序ORG 3200H3200H DS: ; 读数据分支程序ORG 3300H3300H XS: ; 写数据分支程序ORG 3400H3400H CR: ; 插入分支程序END( 4)使用比较转移指令 CJNE实现。4.2.3 循环程序结构循环结构是重复执行某个程序段。使用 条件转移指令 通过条件判断来实现和控制循环。循环程序一般由 四 个主要部分组成 : ( 1) 初始化部分: 为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。 ( 2) 处理部分 : 为反复执行的程序段,是循环程序的实体, 也是循环程序的主体。 ( 3) 循环控制部分 : 其作用是修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。 ( 4) 结束部分 : 这部分主要是对循环程序的结

温馨提示

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

评论

0/150

提交评论