【大学课件】单片机原理与接口技术 80C51单片机汇编语言程序设计P74.ppt
《【大学课件】单片机原理与接口技术 80C51单片机汇编语言程序设计P74.ppt》由会员分享,可在线阅读,更多相关《【大学课件】单片机原理与接口技术 80C51单片机汇编语言程序设计P74.ppt(74页珍藏版)》请在三一办公上搜索。
1、第4章 80C51单片机汇编语言程序设计,4.1 单片机程序设计语言概述4.2 汇编语言程序的基本结构形式4.3 80C51 单片机汇编语言程序设计举例4.4 单片机汇编语言源程序的编辑和汇编4.5 80C51 单片机汇编语言伪指令,http:/,4.1 单片机程序设计语言概述,4.1.1 机器语言和汇编语言1、机器语言 用二进制代码“0”和“1”表示指令和数据的程序设计语言,是计算机能直接识别并执行的指令。优点:执行速度快、占用内存少。缺点:识别难、记忆难。2、汇编语言 用助记符和专门的语言规则表示指令的功能和特征。优点:助记符与机器指令一一对应。比机器语言直观、易懂、易记。非常适合于实时控
2、制的需要。缺点:难以记忆和使用,程序设计的技巧性较高,编程 难度较大。要求使用者必须精通单片机的硬件系 统和指令系统。缺乏通用性,程序不易移植。,http:/,4.1.2 单片机使用的高级语言,对于8051单片机,现有4种语言支持,即汇编、PL/M、C和BASIC。C语言最终得到广泛应用。可以大大提高单片机应用系统研制的开发效率。移植性好。高级语言的不足:生成的目标代码较长,导致应用程序运行速度较慢。,http:/,4.1.3 80C51 单片机汇编语言的语句格式,80C51汇编语言的语句格式如下::;1.标号是语句地址的标志符号,标号的几点规定:18个ASCII字符组成,第一个字符必须是字母
3、。不能使用本汇编语言已经定义的符号作为标号。标号后面必须跟以冒号“:”。同一标号在一个程序中只能定义一次。标号可有可无。,错误的标号 正确的标号1BT:BT1BEGIN BEGIN:TA+TB:TATB:ADD:ADD1:,http:/,2.操作码用于规定语句执行的操作内容,用指令助记符表示。不能空缺。3.操作数操作数用于为指令操作提供数据。可以是空白,也可能有13个操作数,各操作数之间以逗号分隔。4.注释不属于语句的功能部分,只是对语句的解释说明,以“;”开头。5.分界符(分隔符)用于把语句中的各部分隔开,以便于区分。分界符包括空格、冒号、分号或逗号等符号。,http:/,4.2 汇编语言程
4、序的基本结构形式,三种基本结构形式:顺序程序结构,分支程序结构,循环程序结构。4.2.1 顺序程序结构顺序结构程序是最简单的程序结构。程序既无分支、循环,也不调用子程序,程序执行时一条接一条地按顺序执行指令。,http:/,(1)分析任务(2)确定算法(3)画流程图(4)编写程序(5)上机调试,2、程序设计的一般步骤,当接到程序设计的任务后,首先对任务进行详尽的分析,搞清楚已知的数据和想要得到的结果,程序应该完成何种的功能。明确在程序设计时应该“做什么”。,根据实际问题的要求和指令系统的特点,确定解决问题的具体步骤。根据任务要求,对不同的计算方法进行比较,选择最适宜的算法。解决“怎样做”的问题
5、。,将解决问题的具体步骤用一种约定的几何图形、指向线和必要的文字说明描述出来,用图形的方法描绘解决问题的思路。,用指令的形式将程序流程图实现出来。,查错、改错,对程序进行优化。,http:/,(1)分析任务(2)确定算法(3)画流程图(4)编写程序(5)上机调试,例:3字节无符号数相加:其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、54H和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的20H位中。,http:/,MOV R0,#52H;被加数的低字节地址MOV R1,#55H;加数的低字节地址MOV A,R0ADD A,R
6、1;低字节相加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,http:/,分支结构也称为选择结构。为分支需要,程序设计时应给程序段的起始地址赋予一个地址标号,以供选择分支使用。分支结构又可分为单分支结构和多分支结构。1.单分支程序结构 单分支程序结构即二中选一,是通过条件判断
7、实现的。一般都使用条件转移指令对程序的执行结果进行判断。可实现单分支转移的指令有:JZ、JNZ、CJNE和DJNZ。位状态转移指令:JC、JNC、JB、JNB和JBC等。,4.2.2 分支程序结构,http:/,(1)单分支结构举例 假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1和ST2单元中存放着两个无符号二进制数,要求找出其中的大数并存入ST3单元中。,解:(1)分析任务:比较两个数的大小(2)算法:算术运算、控制转移(3)程序结构:单分支(4)数据类型:单字节、二进制、无符号数(5)数据结构:单元地址升序排列(6)RAM单元安排:外部RAM单元(7)采用寄存器间接寻
8、址方式(R0、R1或DPTR)(8)程序设计流程框图;(9)程序清单;,http:/,http:/,START:CLR C;进位位清0 MOV DPTR,#ST1;设置数据指针 MOVX A,DPTR;取第1个数 MOV R2,A;第1个数存于R2 INC DPTR;数据指针加1 MOVX A,DPTR;取第2个数 SUBB A,R2;两数比较 JNC BIG1;若第2个数大,则转向BIG1 XCH A,R2;若第1个数大,则整字节交换BIG0:INC DPTR MOVX DPTR,A;存大数 RETBIG1:MOVX A,DPTR SJMP BIG0,上例中,如果采用CJNE A,direc
9、t,rel指令,应如何修改程序?,http:/,(2)多重单分支结构举例 多重单分支结构中,通过一系列条件判断,进行逐级分支。为此可使用比较转移指令CJNE实现。,http:/,CJNE A,55H,LOOP1;若TaT55,则转向LOOP1AJMP FH;若TaT55,则返回LOOP1:JNC JW;若(CY)0,表明TaT55,转降温处理程序CJNE A,54H,LOOP2;若TaT54,则转向LOOP2AJMP FH;若TaT54,则返回LOOP2:JC SW;若(CY)1,表明TaT54,转升温处理程序 FH:RET;若T55TaT54,则返回主程序,例:假定采集的温度值Ta放在累加器
10、A中。此外,在内部RAM 54H单元存放温度下限值T54,在55H单元存放温度上限值T55。若TaT55,程序转向JW(降温处理程序);若TaT54,则程序转向SW(升温处理程序);若T55TaT54,则程序转向FH(返回主程序)。,http:/,解:(1)分析任务:解方程(2)算法:控制转移(3)程序结构:多分支(4)数据类型:单字节、二进制、有符号数(5)RAM单元安排:外部RAM单元(6)采用寄存器间接寻址方式(R0、R1或DPTR)(7)程序设计流程框图(8)程序清单;,例:已知:127X-128,求Y。设X,Y分别存放在外部RAM 1000H和2000H单元中。,http:/,返回,
11、http:/,XAD EQU 1000H;BUF EQU 2000H;ORG 1000HSTART:MOV DPTR,#XAD;数据X的地址送数据指针DPTR MOVX A,DPTR;A取数据X JZ SAV;X0转SAV JB ACC.7,NEG;X0转NEG,否则,X0 MOV A,#01H;SJMP SAV;NEG:MOV A,#0FFH;(0FFH为-1补码)SAV:MOV DPTR,#BUF;数据Y的地址送数据指针DPTR MOVX DPTR,A;保存Y值 END,上例中,如果采用CJNE指令,应如何修改程序?,http:/,XAD EQU 1000H;BUF EQU 2000H;O
12、RG 1000HSTART:MOV DPTR,#XAD;数据X的地址送数据指针DPTR MOVX A,DPTR;A取数据X CJNE A,#0,ANZ;X0转ANZ SJMP SAV;ANZ:JC NEG;X0 MOV A,#01H;SJMP SAV;NEG:MOV A,#0FFH;(0FFH为-1补码)SAV:MOV DPTR,#BUF;数据Y的地址送数据指针DPTR MOVX DPTR,A;保存Y值 END,http:/,2.多分支程序结构多分支程序结构流程中具有两个以上条件可供选择。可供使用的是变址寻址转移指令“JMP A+DPTR”,但使用该指令实现多分支转移时,需要有数据表格配合。多
13、分支程序结构,http:/,(1)通过数据表实现程序多分支,MOV A,n;分支序号送A MOV DPTR,#BRTAB;地址表首址 MOVC A,A+DPTR;查表 JMP A+DPTR;转移BRTAB:DB BR0-BRTAB;地址表 DB BR1-BRTAB DB BRn-BRTABBR0:分支程序BR1:BRn:,http:/,(2)通过转移指令表实现程序多分支,MOV A,nRL A;分支序号值乘以2MOV DPTR,#BRTAB;转移指令表首址JMP A+DPTRBRTAB:AJMP BR0;转分支程序0AJMP BR1;转分支程序1 AJMP BR127;转分支程序127BR0:
14、;分支程序BR1:BRn:,http:/,(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,http:/,例:假设键盘上有4个按键,功能说明如下表:分析任务 确定算法 程序流程框图,http:/,http:/,假设转移指令
15、表名称为BRTAB,分支程序序号已在A 中。MOV DPTR,#BRTAB CLR C RLC A JMP 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,http:/,(4)使
16、用比较转移指令CJNE实现。,http:/,4.2.3 循环程序结构,循环结构是重复执行某个程序段。使用条件转移指令通过条件判断来实现和控制循环。,循环程序一般由四个主要部分组成:(1)初始化部分:为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。(2)处理部分:为反复执行的程序段,是循环程序的实体,也是循环程序的主体。(3)循环控制部分:其作用是修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。(4)结束部分:这部分主要是对循环程序的结果进行分析、处理和存放。,http:/,MOV R2,#0FFH;设置长度计数器初值 MOV R0,#3FH;设置字符
17、串指针初值LOOP:INC R2INC R0CJNE R0,#0DH,LOOPRET,举例:通过查找结束标志(回车符)以统计字符串长度的循环 程序。假定字符串存放在内部RAM从40H单元开始的连续存储单元中。为找到结束标志,应采用逐个字符依次与回车符(ASCII码0DH)比较的方法。同时在程序中还应设置一个字符串指针以顺序定位字符,设置一个字符长度计数器以累计字符个数。,http:/,单循环程序一般有以下两种典型结构:,http:/,双重循环程序的结构:,http:/,解:(1)分析任务:数据传送;(2)算法:比较、控制转移(3)程序结构:分支、循环(4)数据类型:多字节字符串(5)RAM单元
18、安排:内部RAM单元、外部RAM单元(6)采用寄存器间接寻址方式(R0、R1或DPTR),例:把内部RAM中起始地址为DATA的数据串传送到外部 RAM以BUFFER为首地址的区域,直到发现“$”字符 的ASC码为止,同时规定数据串最大长度为32个字节。,http:/,(7)程序流程框图;,http:/,ORG 0030H DATACS:MOV R0,#DATA;DATA数据区首地址 MOV DPTR,#BUFFER;BUFFER数据区首地址 MOV R1,#20H;最大数据串长 LOOP:MOV A,R0;取数据 SUBB A,#24H;判是否为“$”字符 JZ LOOP1;是“$”字符,转
19、结束 MOVX A,R0;MOVX DPTR,A;数据传送 INC R0;INC DPTR;DJNZ R1,LOOP;循环控制 LOOP1:RET;结束 END,http:/,【补充程序】存储器清零程序。假设在内部RAM区,开辟96个工作单元,工作单元首地址为20H,则工作单元清零程序子程序如下:,思考题:如采用CJNE指令,应如何修改程序?,解:ORG 1000H CLR0:MOV R0,#20H;循环初始化部分 MOV R7,#96;CLR A LOOP:MOV R0,A;循环体部分 INC R0;修改变量 DJNZ R7,LOOP;循环控制部分 RET END,DEC R7CJNE R7
20、,#00H,LOOP;,http:/,例:两个三字节二进制无符号数相加,被加数放在内部RAM 50H52H单元(低字节存放在高地址单元,高字节存放在低地址单元,即低位在前,高位在后),加数放在53H55H单元,和放在50H52H单元,最高位如有进位,则放在23H单元中。,被加数 N1 高字节(8位)中字节(8位)低字节(8位)加数 N2 高字节(8位)中字节(8位)低字节(8位)+)进位位(CY)进位位(CY)进位位(CY)和 N3 进位 高字节(8位)中字节(8位)低字节(8位),http:/,返回,程序流程框图,http:/,ORG 0030H ADDUDO:MOV R0,#52H;循环初
21、始化部分 MOV R1,#55H;MOV R7,#03H;循环次数 CLR C;LOOP:MOV A,R0;循环体部分 ADDC A,R1;MOV R0,A;DEC R0;修改指针变量 DEC R1;DJNZ R7,LOOP;循环控制部分 CLR A;循环结束处理部分 ADDC A,#00H;MOV R0,#23H;MOV R0,A;RET;END,程序清单,http:/,4.3 80C51单片机汇编语言程序设计举例,4.3.2 定时程序 在单片机的控制应用中,常有定时的需要,如定时中断、定时检测和定时扫描等。定时功能除可以使用纯硬件电路、可编程定时/计数器实现外,还可以使用软件程序(定时程序
22、)完成。定时程序是典型的循环程序,它是通过执行一个具有固定延迟时间的循环体来实现定时的。,http:/,(1)单循环定时程序 MOV R5,#TIME;LOOP:NOP;NOP;DJNZ R5,LOOP;,假设单片机晶振频率fosc=6MHz,则一个机器周期为2s,NOP、DJNZ指令分别是单、双机器周期指令。定时程序的总延迟时间是循环程序段延时时间的整数倍,由于R5是8位寄存器,因此,这个定时程序的最长定时时间为:256(28)8=2048(s),http:/,(2)较长时间的定时程序(多重循环定时子程序)TIME:MOV R5,#TTME1;LOOP2:MOV R4,#TEME2;LOOP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学课件 【大学课件】单片机原理与接口技术 80C51单片机汇编语言程序设计P74 大学 课件 单片机 原理 接口 技术 80 C51 汇编语言 程序设计 P74
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6097460.html