ImageVerifierCode 换一换
格式:PPT , 页数:74 ,大小:703.76KB ,
文档编号:3803404      下载积分:28 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-3803404.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(晟晟文业)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文((大学课件)80C51单片机汇编语言程序设计.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

(大学课件)80C51单片机汇编语言程序设计.ppt

1、第第4 4章章 80C5180C51单片机汇编语言程序设计单片机汇编语言程序设计4.1 单片机程序设计语言概述单片机程序设计语言概述4.2 汇编语言程序的基本结构形式汇编语言程序的基本结构形式4.3 80C51 单片机汇编语言程序设计举例单片机汇编语言程序设计举例4.4 单片机汇编语言源程序的编辑和汇编单片机汇编语言源程序的编辑和汇编4.5 80C51 单片机汇编语言伪指令单片机汇编语言伪指令4.1 单片机程序设计语言概述单片机程序设计语言概述4.1.1 机器语言和汇编语言机器语言和汇编语言1、机器语言、机器语言 用二进制代码用二进制代码“0”和和“1”表示指令和数据的程序设计表示指令和数据的

2、程序设计语言语言,是计算机能直接识别并执行的指令是计算机能直接识别并执行的指令。优点:执行速度快、占用内存少。优点:执行速度快、占用内存少。缺点:识别难、记忆难。缺点:识别难、记忆难。2、汇编语言、汇编语言 用助记符和专门的语言规则表示指令的功能和特征。用助记符和专门的语言规则表示指令的功能和特征。优点:助记符与机器指令一一对应。比机器语言直观、优点:助记符与机器指令一一对应。比机器语言直观、易懂、易记。非常适合于实时控制的需要。易懂、易记。非常适合于实时控制的需要。缺点:难以记忆和使用,程序设计的技巧性较高,编程缺点:难以记忆和使用,程序设计的技巧性较高,编程 难度较大。要求使用者必须精通单

3、片机的硬件系难度较大。要求使用者必须精通单片机的硬件系 统和指令系统。缺乏通用性,程序不易移植。统和指令系统。缺乏通用性,程序不易移植。4.1.2 单片机使用的高级语言单片机使用的高级语言n对于对于8051单片机,现有单片机,现有4种语言支持,即汇编、种语言支持,即汇编、PL/M、C和和BASIC。nC C语言最终得到广泛应用。语言最终得到广泛应用。可以大大提高单片机应用系统研制的开发效率。移可以大大提高单片机应用系统研制的开发效率。移植性好。植性好。高级语言的不足:生成的目标代码较长,导致应用程高级语言的不足:生成的目标代码较长,导致应用程序运行速度较慢。序运行速度较慢。4.1.3 80C5

4、1 单片机汇编语言的语句格式单片机汇编语言的语句格式80C5180C51汇编语言的语句格式如下:汇编语言的语句格式如下::;1.标号标号是语句地址的标志符号,标号的几点规定:是语句地址的标志符号,标号的几点规定:18个个ASCII字符组成,第一个字符必须是字母。字符组成,第一个字符必须是字母。不能使用本汇编语言已经定义的符号作为标号。不能使用本汇编语言已经定义的符号作为标号。标号后面必须跟以冒号标号后面必须跟以冒号“:”。同一标号在一个程序中只能定义一次。同一标号在一个程序中只能定义一次。标号可有可无。标号可有可无。错误的标号错误的标号 正确的标号正确的标号1BT:BT11BT:BT1BEGI

5、N BEGIN:BEGIN BEGIN:TA+TB:TATB:TA+TB:TATB:ADD:ADD1:ADD:ADD1:2.2.操作码操作码用于规定语句执行的操作内容,用指令助记符表示。用于规定语句执行的操作内容,用指令助记符表示。不能空缺。不能空缺。3.3.操作数操作数操作数用于为指令操作提供数据。可以是空白,也可操作数用于为指令操作提供数据。可以是空白,也可能有能有1313个操作数,各操作数之间以逗号分隔。个操作数,各操作数之间以逗号分隔。4.4.注释注释不属于语句的功能部分,只是对语句的解释说明,以不属于语句的功能部分,只是对语句的解释说明,以“;”开头。开头。5.5.分界符(分隔符)分

6、界符(分隔符)用于把语句中的各部分隔开,以便于区分。分界符包用于把语句中的各部分隔开,以便于区分。分界符包括空格、冒号、分号或逗号等符号。括空格、冒号、分号或逗号等符号。4.2 汇编语言程序的基本结构形式汇编语言程序的基本结构形式 三种基本结构形式:顺序程序结构,分支程序结构,三种基本结构形式:顺序程序结构,分支程序结构,循环程序结构。循环程序结构。4.2.1 顺序程序结构顺序程序结构顺序结构程序是最简单的程序结构。程序既无分支、顺序结构程序是最简单的程序结构。程序既无分支、循环,也不调用子程序,程序执行时一条接一条地循环,也不调用子程序,程序执行时一条接一条地按顺序执行指令。按顺序执行指令。

7、(1)分析任务)分析任务(2)确定算法)确定算法(3)画流程图)画流程图(4)编写程序)编写程序(5)上机调试)上机调试 2、程序设计的一般步骤、程序设计的一般步骤 当接到程序设计的任务后,当接到程序设计的任务后,首先对任务进行详尽的分析,首先对任务进行详尽的分析,搞清楚已知的数据和想要得搞清楚已知的数据和想要得到的结果,程序应该完成何到的结果,程序应该完成何种的功能。明确在程序设计种的功能。明确在程序设计时应该时应该“做什么做什么”。根据实际问题的要求和指令系根据实际问题的要求和指令系统的特点,确定解决问题的具统的特点,确定解决问题的具体步骤。根据任务要求,对不体步骤。根据任务要求,对不同的

8、计算方法进行比较,选择同的计算方法进行比较,选择最适宜的算法。解决最适宜的算法。解决“怎样做怎样做”的问题。的问题。将解决问题的具体步骤用一种将解决问题的具体步骤用一种约定的几何图形、指向线和必约定的几何图形、指向线和必要的文字说明描述出来,要的文字说明描述出来,用图用图形的方法描绘解决问题的思路。形的方法描绘解决问题的思路。用用指令指令的形式的形式将程序流程图将程序流程图实现出来。实现出来。查错、改错,查错、改错,对程序进行对程序进行优化。优化。50H 51H 52H53H54H55HN1高字节高字节N1中字节中字节N1低字节低字节N2高字节高字节N2中字节中字节N2低字节低字节(1)分析任

9、务)分析任务(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 ;低字

10、节相加低字节相加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 分支结构也称为选择结构。为分支需要,程序设计时分支结构也称为选择结构。为分支需要,程序设计时应

11、给程序段的起始地址赋予一个地址标号,以供选择分支应给程序段的起始地址赋予一个地址标号,以供选择分支使用。分支结构又可分为单分支结构和多分支结构。使用。分支结构又可分为单分支结构和多分支结构。1.单分支程序结构单分支程序结构 单分支程序结构即二中选一,是通过条件判断实现单分支程序结构即二中选一,是通过条件判断实现的。一般都的。一般都使用条件转移指令使用条件转移指令对程序的执行结果进行判对程序的执行结果进行判断。断。可实现单分支转移的指令有:可实现单分支转移的指令有:JZ、JNZ、CJNE和和DJNZ。位状态转移指令:。位状态转移指令:JC、JNC、JB、JNB和和JBC等。等。4.2.2 分支程

12、序结构分支程序结构(1)单分支结构举例)单分支结构举例 假定在外部假定在外部RAM中有中有ST1、ST2和和ST3共共3个连续个连续单元,其中单元,其中ST1和和ST2单元中存放着两个无符号二进制单元中存放着两个无符号二进制数,要求找出其中的大数并存入数,要求找出其中的大数并存入ST3单元中。单元中。解解:(:(1 1)分析任务:比较两个数的大小)分析任务:比较两个数的大小 (2 2)算法:算术运算、控制转移)算法:算术运算、控制转移 (3 3)程序结构:单分支)程序结构:单分支 (4 4)数据类型:单字节、二进制、无符号数)数据类型:单字节、二进制、无符号数 (5 5)数据结构:单元地址升序

13、排列)数据结构:单元地址升序排列 (6 6)RAMRAM单元安排单元安排:外部:外部RAMRAM单元单元 (7 7)采用寄存器间接寻址方式()采用寄存器间接寻址方式(R0R0、R1R1或或DPTRDPTR)(8 8)程序设计流程框图程序设计流程框图;(9 9)程序清单程序清单;开开 始始设设 置置 数数 据据 指指 针针取取 数数 据据 N N2 2取取 数数 据据 N N1 1并并 暂暂 存存结结 束束N N1 1保保 存存 于于 A A中中N N2 2 N N1 1修修 改改 数数 据据 指指 针针保保 存存 大大 数数N N2 2保保 存存 于于 A A中中Y YN NSTARTSTAR

14、T:CLR CCLR C;进位位清进位位清0 0 MOV DPTR MOV DPTR,#ST1#ST1;设置数据指针设置数据指针 MOVX AMOVX A,DPTRDPTR;取第取第1 1个数个数 MOV R2,AMOV R2,A;第第1 1个数存于个数存于R2R2 INC DPTR INC DPTR;数据指针加数据指针加1 1 MOVX A,DPTR MOVX A,DPTR;取第取第2 2个数个数 SUBB A,R2SUBB A,R2;两数比较两数比较 JNC BIG1JNC BIG1;若第若第2 2个数大,则转向个数大,则转向BIG1BIG1 XCH A,R2 XCH A,R2;若第若第1

15、 1个数大,则整字节交换个数大,则整字节交换BIG0:BIG0:INC DPTR INC DPTR MOVX DPTR,A MOVX DPTR,A;存大数存大数 RETRETBIG1:BIG1:MOVX A,DPTR MOVX A,DPTR SJMP BIG0 SJMP BIG0上例中,如果采用上例中,如果采用CJNE A,direct,rel指令,应如何修改程序?指令,应如何修改程序?(2)多重单分支结构举例)多重单分支结构举例 多重单分支结构中,通过一系列条件判断,进多重单分支结构中,通过一系列条件判断,进行逐级分支。为此可使用比较转移指令行逐级分支。为此可使用比较转移指令CJNE实现。实

16、现。CJNE A,55H,LOOP1CJNE A,55H,LOOP1;若若TaT55,TaT55,则转向则转向LOOP1LOOP1AJMP FHAJMP FH ;若若TaTaT55,T55,则返回则返回LOOP1:LOOP1:JNC JW ;JNC JW ;若若(CY)(CY)0,0,表明表明TaTaT55,T55,转降温处理程序转降温处理程序CJNE A,54H,LOOP2 ;CJNE A,54H,LOOP2 ;若若TaT54,TaT54,则转向则转向LOOP2LOOP2AJMP FHAJMP FH ;若若TaTaT54,T54,则返回则返回LOOP2:LOOP2:JC SWJC SW;若若

17、(CY)(CY)1,1,表明表明TaTaT54,T54,转升温处理程序转升温处理程序 FH:FH:RETRET;若若T55TaT54,T55TaT54,则返回主程序则返回主程序例:假定采集的温度值例:假定采集的温度值Ta放在累加器放在累加器A中。此外,在内部中。此外,在内部RAM 54H单元存放温度下限值单元存放温度下限值T54,在,在55H单元存放温度单元存放温度上限值上限值T55。若。若TaT55,程序转向程序转向JW(降温处理程序降温处理程序);若若TaT54,则程序转向,则程序转向SW(升温处理程序升温处理程序);若;若T55TaT54,则程序转向,则程序转向FH(返回主程序返回主程序

18、)。解解:(:(1 1)分析任务:解方程)分析任务:解方程 (2 2)算法:控制转移)算法:控制转移 (3 3)程序结构:多分支)程序结构:多分支 (4 4)数据类型:单字节、二进制、有符号数)数据类型:单字节、二进制、有符号数 (5 5)RAMRAM单元安排单元安排:外部:外部RAMRAM单元单元 (6 6)采用寄存器间接寻址方式()采用寄存器间接寻址方式(R0R0、R1R1或或DPTRDPTR)(7 7)程序设计流程框图程序设计流程框图 (8 8)程序清单程序清单;011y000 xxx例:已知:例:已知:127X-128,求,求Y。设。设X,Y分别存放在外部分别存放在外部RAM 1000

19、H和和2000H单元中。单元中。开开 始始取取 数数 据据 X X结结 束束X X=0 0Y Y=0 0Y YN NX X 0 0Y Y=-1 1Y Y=1 1N NY Y保保 存存 数数 据据 Y Y返回 XAD EQU 1000HXAD EQU 1000H;BUF EQU 2000HBUF EQU 2000H;ORG 1000HORG 1000HSTARTSTART:MOV DPTRMOV DPTR,#XAD#XAD;数据;数据X X的地址送数据指针的地址送数据指针DPTRDPTR MOVX A MOVX A,DPTRDPTR;AA取取数据数据X X JZ SAVJZ SAV;X X0 0

20、转转SAVSAV JB ACC.7 JB ACC.7,NEGNEG;X X0 0转转NEGNEG,否则,否则,X X0 0 MOV A MOV A,#01H#01H;SJMP SAVSJMP SAV;NEG:MOV ANEG:MOV A,#0FFH#0FFH;(0FFH(0FFH为为-1-1补码补码)SAV:MOV DPTR SAV:MOV DPTR,#BUF#BUF;数据数据Y Y的地址送数据指针的地址送数据指针DPTRDPTR MOVX DPTR MOVX DPTR,A A;保存保存Y Y值值 ENDEND上例中,如果采用上例中,如果采用CJNE指令,应如何修改程序?指令,应如何修改程序?

21、XAD EQU 1000HXAD EQU 1000H;BUF EQU 2000HBUF EQU 2000H;ORG 1000HORG 1000HSTARTSTART:MOV DPTRMOV DPTR,#XAD#XAD;数据;数据X X的地址送数据指针的地址送数据指针DPTR DPTR MOVX A MOVX A,DPTRDPTR;AA取取数据数据X X CJNE A,#0,ANZ CJNE A,#0,ANZ ;X X0 0转转ANZANZ SJMP SAV SJMP SAV;ANZANZ:JCJC NEGNEG;X0X0X0 MOV A MOV A,#01H#01H;SJMP SAVSJMP

22、SAV;NEG:MOV ANEG:MOV A,#0FFH#0FFH;(0FFH(0FFH为为-1-1补码补码)SAV:MOV DPTR SAV:MOV DPTR,#BUF#BUF;数据数据Y Y的地址送数据指针的地址送数据指针DPTRDPTR MOVX DPTR MOVX DPTR,A A;保存保存Y Y值值 ENDEND2.多分支程序结构多分支程序结构多分支程序结构流程中具有两个以上条件可供选择。可多分支程序结构流程中具有两个以上条件可供选择。可供使用的是变址寻址转移指令供使用的是变址寻址转移指令“JMP A+DPTR”,但,但使使用该指令实现多分支转移时,需要有数据表格配合。用该指令实现多

23、分支转移时,需要有数据表格配合。多分支程序结构多分支程序结构(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:(2)通过转移指令表实现程序多分支)通过转移指令表实现程序多分支MOV A,nRL A ;分支序号值乘以分支序号值乘以2MOV DPTR,#BRTAB;转移指令表首址转移指令表首

24、址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;取高位地址取高位

25、地址PUSH ACC;高位地址入栈高位地址入栈RET;分支入口地址装入分支入口地址装入PCBRTAB:DW BR0;分支程序入口地址表分支程序入口地址表 DW BR1 DW BR127例:假设键盘上有例:假设键盘上有4 4个按键,功能说明如下表:个按键,功能说明如下表:分析任务分析任务 确定算法确定算法 程序流程框图程序流程框图键键功能功能键值(分支程序序号)键值(分支程序序号)键处理程序(分支程序)键处理程序(分支程序)删除删除00H00HERER读数据读数据01H01HDSDS写数据写数据02H02HXSXS插入插入03H03HCRCRJ JM MP P A A+D DP PT TR RE

26、 ER R分分支支程程序序C CR R分分支支程程序序X XS S分分支支程程序序D DS S分分支支程程序序序序号号=0 00 0H HD DP PT TR R表表首首地地址址A A分分支支序序号号2 2序序号号=0 03 3H H序序号号=0 02 2H H序序号号=0 01 1H H 假设转移指令表名称为假设转移指令表名称为BRTABBRTAB,分支程序序号已在分支程序序号已在A A 中。中。MOV DPTRMOV DPTR,#BRTAB#BRTAB CLR C CLR C RLC A RLC A JMP A+DPTR JMP A+DPTR;ORG 3000HORG 3000H3000H

27、 BRTAB3000H BRTAB:AJMP ERAJMP ER;转删除分支程序转删除分支程序3001H 3001H 3002H AJMP DS3002H AJMP DS;转读数据分支程序转读数据分支程序3003H3003H3004H AJMP XS3004H AJMP XS;转写数据分支程序转写数据分支程序3005H3005H3006H AJMP CR3006H AJMP CR;转插入分支程序转插入分支程序 ORG 3100HORG 3100H3100H ER3100H ER:;删除分支程序删除分支程序 ORG 3200HORG 3200H3200H DS3200H DS:;读数据分支程序读

28、数据分支程序 ORG 3300HORG 3300H3300H XS3300H XS:;写数据分支程序写数据分支程序 ORG 3400HORG 3400H3400H CR3400H CR:;插入分支程序插入分支程序 ENDEND(4)使用比较转移指令)使用比较转移指令CJNE实现。实现。(A A)=0 0?转转向向0 0分分支支(A A)=1 1?(A A)=2 2?转转向向2 2分分支支转转向向1 1分分支支Y YY YY YN NN NN N4.2.3 循环程序结构循环程序结构循环结构是重复执行某个程序段。使用循环结构是重复执行某个程序段。使用条件转移指令条件转移指令通通过条件判断来实现和控

29、制循环。过条件判断来实现和控制循环。循环程序一般由循环程序一般由四四个主要部分组成个主要部分组成:(1 1)初始化部分:初始化部分:为循环程序做准备,如规定循环次数、为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。给各变量和地址指针预置初值。(2 2)处理部分处理部分:为反复执行的程序段,是循环程序的实体,为反复执行的程序段,是循环程序的实体,也是循环程序的主体。也是循环程序的主体。(3 3)循环控制部分循环控制部分:其作用是修改循环变量和控制变量,其作用是修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。并判断循环是否结束,直到符合结束条件时,跳出循

30、环为止。(4 4)结束部分结束部分:这部分主要是对循环程序的结果进行分析、这部分主要是对循环程序的结果进行分析、处理和存放。处理和存放。MOV R2,#0FFH;MOV R2,#0FFH;设置长度计数器初值设置长度计数器初值 MOV R0,#3FH;MOV R0,#3FH;设置字符串指针初值设置字符串指针初值LOOP:LOOP:INC R2INC R2INC R0INC R0CJNE R0,#0DH,LOOPCJNE R0,#0DH,LOOPRETRET举例:通过查找结束标志举例:通过查找结束标志(回车符回车符)以统计字符串长度的循环以统计字符串长度的循环 程序。程序。假定字符串存放在内部假定

31、字符串存放在内部RAM从从40H单元开始的连续存单元开始的连续存储单元中。为找到结束标志,应采用逐个字符依次与回车储单元中。为找到结束标志,应采用逐个字符依次与回车符符(ASCII码码0DH)比较的方法。同时在程序中还应设置一)比较的方法。同时在程序中还应设置一个字符串指针以顺序定位字符,设置一个字符长度计数器以个字符串指针以顺序定位字符,设置一个字符长度计数器以累计字符个数。累计字符个数。单循环程序一般有以下两种典型结构:单循环程序一般有以下两种典型结构:双重循环程序的结构:双重循环程序的结构:开开始始外外循循环环初初始始化化结结束束外外循循环环结结束束否否N NY Y内内循循环环初初始始化

32、化内内循循环环处处理理内内循循环环变变量量修修改改外外循循环环处处理理外外循循环环变变量量修修改改结结束束处处理理内内循循环环结结束束否否N NY Y解解:(:(1 1)分析任务:数据传送;()分析任务:数据传送;(2 2)算法:比较、控制转移)算法:比较、控制转移 (3 3)程序结构:分支、循环()程序结构:分支、循环(4 4)数据类型:多字节字符串)数据类型:多字节字符串 (5 5)RAMRAM单元安排单元安排:内部:内部RAMRAM单元、单元、外部外部RAMRAM单元单元 (6 6)采用寄存器间接寻址方式()采用寄存器间接寻址方式(R0R0、R1R1或或DPTRDPTR)外外部部R RA

33、 AM MX XX X内内部部R RA AM MD DA AT TA A单单元元A AB BU UF FF FE ER R单单元元Y YY Y(A A)$(A A)=$结结束束例:把内部例:把内部RAM中起始地址为中起始地址为DATA的数据串传送到外部的数据串传送到外部 RAM以以BUFFER为首地址的区域,直到发现为首地址的区域,直到发现“$”字符字符 的的ASC码为止,同时规定数据串最大长度为码为止,同时规定数据串最大长度为32个字节。个字节。(7 7)程序流程框图;)程序流程框图;开开始始初初始始化化数数据据指指针针结结束束数数传传送送完完否否N NY Y初初始始化化控控制制变变量量取取

34、数数数数据据传传送送修修改改指指针针变变量量是是$吗吗?Y YN N ORG 0030H ORG 0030H DATACSDATACS:MOV R0MOV R0,#DATA#DATA;DATADATA数据区首地址数据区首地址 MOV DPTRMOV DPTR,#BUFFER#BUFFER;BUFFERBUFFER数据区首地址数据区首地址 MOV R1MOV R1,#20H#20H;最大数据串长最大数据串长 LOOPLOOP:MOV AMOV A,R0R0;取数据取数据 SUBB ASUBB A,#24H#24H;判是否为判是否为“$”$”字符字符 JZ LOOP1JZ LOOP1;是是“$”$

35、”字符,转结束字符,转结束 MOVX A MOVX A,R0 R0;MOVX DPTRMOVX DPTR,A A;数据传送数据传送 INC R0INC R0;INC DPTRINC DPTR;DJNZ R1DJNZ R1,LOOPLOOP;循环控制循环控制 LOOP1LOOP1:RETRET;结束结束 ENDEND【补充程序补充程序】存储器清零程序。假设在内部存储器清零程序。假设在内部RAM区,开辟区,开辟96个工作单元,工作单元首地址为个工作单元,工作单元首地址为20H,则工作单元清零,则工作单元清零程序子程序如下程序子程序如下:思考题:如采用思考题:如采用CJNE指令,应如何修改程序?指令

36、,应如何修改程序?解:解:ORG 1000HORG 1000H CLR0 CLR0:MOV R0MOV R0,#20H#20H;循环初始化部分;循环初始化部分 MOV R7MOV R7,#96#96;CLR ACLR A LOOP LOOP:MOV R0MOV R0,A A;循环体部分循环体部分 INC R0INC R0;修改变量修改变量 DJNZ R7DJNZ R7,LOOPLOOP;循环控制部分;循环控制部分 RETRET END ENDDEC R7DEC R7CJNE R7,#00H,LOOP;CJNE R7,#00H,LOOP;例:两个三字节二进制无符号数相加,被加数放在内部例:两个三

37、字节二进制无符号数相加,被加数放在内部RAM 50H52H单元(低字节存放在高地址单元,高字节存放在低地单元(低字节存放在高地址单元,高字节存放在低地址单元,即低位在前,高位在后),加数放在址单元,即低位在前,高位在后),加数放在53H55H单元,单元,和放在和放在50H52H单元,最高位如有进位,则放在单元,最高位如有进位,则放在23H单元中。单元中。被加数(被加数(N1N1)加数(加数(N2N2)和(和(N3N3)50H50H单元单元高字节高字节53H53H单元单元高字节高字节50H50H单元单元高字节高字节51H51H单元单元中字节中字节54H54H单元单元中字节中字节51H51H单元单

38、元中字节中字节52H52H单元单元低字节低字节55H55H单元单元低字节低字节52H52H单元单元低字节低字节23H23H单元单元进位位进位位 被加数被加数 N1 N1 高字节(高字节(8 8位)位)中字节(中字节(8 8位)位)低字节(低字节(8 8位)位)加数加数 N2 N2 高字节(高字节(8 8位)位)中字节(中字节(8 8位)位)低字节(低字节(8 8位)位)+)进位位()进位位(CYCY)进位位(进位位(CYCY)进位位(进位位(CYCY)和和 N3 N3 进位进位 高字节(高字节(8 8位)位)中字节(中字节(8 8位)位)低字节(低字节(8 8位)位)开开始始初初始始化化数数据

39、据指指针针结结束束两两数数加加完完否否N NY Y初初始始化化控控制制变变量量取取加加数数N N1 1取取加加数数N N2 2两两数数相相加加并并保保存存修修改改指指针针变变量量数数据据处处理理返回返回程序流程框图程序流程框图 ORG 0030HORG 0030H ADDUDO ADDUDO:MOV R0MOV R0,#52H#52H;循环初始化部分循环初始化部分 MOV R1MOV R1,#55H#55H;MOV R7MOV R7,#03H#03H;循环次数循环次数 CLR CCLR C;LOOPLOOP:MOV AMOV A,R0R0;循环体部分循环体部分 ADDC AADDC A,R1R

40、1;MOV R0MOV R0,A A;DEC R0DEC R0;修改指针变量修改指针变量 DEC R1DEC R1;DJNZ R7DJNZ R7,LOOPLOOP;循环控制部分循环控制部分 CLR ACLR A;循环结束处理部分循环结束处理部分 ADDC AADDC A,#00H#00H;MOV R0MOV R0,#23H#23H;MOV R0MOV R0,A A;RETRET;END END 程序清单程序清单4.3 80C514.3 80C51单片机单片机汇编语言程序设计举例汇编语言程序设计举例4.3.2 4.3.2 定时程序定时程序 在单片机的控制应用中,常有定时的需要,如定时中断、定在单

41、片机的控制应用中,常有定时的需要,如定时中断、定时检测和定时扫描等。定时功能除可以使用纯硬件电路、可编程时检测和定时扫描等。定时功能除可以使用纯硬件电路、可编程定时定时/计数器实现外,还可以使用软件程序(计数器实现外,还可以使用软件程序(定时程序定时程序)完成。)完成。定时程序是典型的循环程序,它是通过定时程序是典型的循环程序,它是通过执行一个具有固定延执行一个具有固定延迟时间的循环体迟时间的循环体来实现定时的。来实现定时的。开开始始初初始始化化部部分分结结束束循循环环控控制制部部分分N NY Y循循环环体体(1 1)单循环定时程序)单循环定时程序 MOV R5MOV R5,#TIME#TIM

42、E;LOOP:NOPLOOP:NOP;NOPNOP;DJNZ R5DJNZ R5,LOOPLOOP;假设假设单片机晶振频单片机晶振频率率f foscosc=6MHz=6MHz,则一个机器周期为则一个机器周期为2s2s,NOPNOP、DJNZDJNZ指令分别是单、双机器周期指令。指令分别是单、双机器周期指令。定时程序的总延迟定时程序的总延迟时间是循环程序段延时时间的整数倍时间是循环程序段延时时间的整数倍,由于,由于R5R5是是8 8位寄存器,因位寄存器,因此,这个定时程序的最长定时时间为:此,这个定时程序的最长定时时间为:256256(2 28 8)8=20488=2048(ss)(2 2)较长

43、时间的定时程序较长时间的定时程序 (多重循环定时子程序)(多重循环定时子程序)TIMETIME:MOV R5MOV R5,#TTME1#TTME1;LOOP2LOOP2:MOV R4MOV R4,#TEME2#TEME2;LOOP1LOOP1:NOPNOP;NOPNOP;DJNZ R4DJNZ R4,LOOP1LOOP1;DJNZ R5DJNZ R5,LOOP2LOOP2;RETRET;这个定时子程序的最长定时时间为:这个定时子程序的最长定时时间为:256256(2828)4+2+14+2+1256256(2828)2+4=5258282+4=525828(ss)开开始始外外循循环环初初始始化

44、化结结束束内内循循环环控控制制N NY Y内内循循环环初初始始化化外外循循环环控控制制内内循循环环体体N NY Y(3 3)调整定时时间调整定时时间 在定时程序中可通过在定时程序中可通过在循环程序段中增减指令在循环程序段中增减指令的方法对定的方法对定时时间进行微调。时时间进行微调。例:例:MOV R0MOV R0,#TTME#TTME;LOOPLOOP:ADD AADD A,R1R1;INC DPTRINC DPTR;DJNZ R0DJNZ R0,LOOPLOOP;由于由于ADDADD、INCINC、DJNZDJNZ指令的机器周期分别为指令的机器周期分别为1 1、2 2、2 2,所以,所以,该

45、程序定时时间为该程序定时时间为=(1+2+21+2+2)2s2sTimeTime(ss)。假定要求定时时间为假定要求定时时间为24us24us。对于这个定时程序,只须增加一条对于这个定时程序,只须增加一条NOPNOP指令即可实现。指令即可实现。MOV R0MOV R0,#TIME#TIME;LOOPLOOP:ADD AADD A,R1R1;INC DPTRINC DPTR;NOPNOP;DJNZ R0DJNZ R0,LOOPLOOP;只须只须TIMETIME取取2 2,即可得到精确的,即可得到精确的24s24s定时。定时。(4 4)以一个基本的延时程序满足不同的定时要求以一个基本的延时程序满足

46、不同的定时要求 如果一个系统有多个定时需要,我们就可以设计一个基如果一个系统有多个定时需要,我们就可以设计一个基本延时程序,使其延时时间为各定时时间的最大公约数,然本延时程序,使其延时时间为各定时时间的最大公约数,然后可以以此基本程序作为子程序,通过调用的方法实现所需后可以以此基本程序作为子程序,通过调用的方法实现所需不同定时。不同定时。MOV R0MOV R0,#05H#05H;5S5S定时定时LOOP:LCALL DELAYLOOP:LCALL DELAY;DJNZ R0DJNZ R0,LOOP1LOOP1;MOV R0MOV R0,#0AH#0AH;10S10S定时定时LOOP2:LCA

47、LL DELAYLOOP2:LCALL DELAY;DJNZ R0DJNZ R0,LOOP2LOOP2;MOV R0MOV R0,#14H#14H;20S20S定时定时LOOP3:LCALL DELAYLOOP3:LCALL DELAY;DJNZ R0DJNZ R0,LOOP3LOOP3;例:在单片机应用系统中,假设需要的定时时间分别为例:在单片机应用系统中,假设需要的定时时间分别为5S、10S、20S,可设计一个,可设计一个1S延时子程序延时子程序DELAY,则,则5S、10S、20S的定时时间可通过调用的定时时间可通过调用DELAY实现。实现。4.3.3 4.3.3 查表程序查表程序 所谓

48、所谓查表程序,就是指预先把数据以表格形式存放在程查表程序,就是指预先把数据以表格形式存放在程序存储器中,然后使用程序读出,这种能读出表格数据的程序存储器中,然后使用程序读出,这种能读出表格数据的程序序就称之为查表程序。就称之为查表程序。查表操作对单片机的控制应用十分重要,查表程序查表操作对单片机的控制应用十分重要,查表程序常用常用于实现于实现非线性修正,非线性函数转换以及代码转换非线性修正,非线性函数转换以及代码转换等等场合。场合。MCS-51MCS-51单片机单片机指令系统中指令系统中有有两条两条专用查表指令专用查表指令:(1 1)MOVC AMOVC A,A+A+DPTRDPTR;AA(A

49、 A)+(DPTRDPTR)(2 2)MOVC AMOVC A,A+A+PCPC;AA(A A)+(PCPC)这这两条两条查表指令查表指令的功能是完全相同的,其的功能是完全相同的,其共同优点共同优点是:能在是:能在不改变不改变PCPC和和DPTRDPTR的状态下,只根据的状态下,只根据A A的内容就可以取出表格中的的内容就可以取出表格中的数据。注意:数据。注意:A A的内容均为的内容均为8 8位无符号数。位无符号数。适用于适用于64KB ROM64KB ROM范围内范围内查表,一个数据表格可以查表,一个数据表格可以被被多个多个程序块使用。程序块使用。编写查表程序时,首先把表的首地址送入编写查表

50、程序时,首先把表的首地址送入DPTRDPTR中,再将中,再将要查表的数据序号(或下标值)送入要查表的数据序号(或下标值)送入A A中,然后就可以使中,然后就可以使用该指令进行查表操作,并把结果送用该指令进行查表操作,并把结果送A A中。中。常用于常用于“本地本地”范围范围查表(数据表格只能放在该指令后查表(数据表格只能放在该指令后面面256256个地址单元之内,而且表格只能被本程序使用)。个地址单元之内,而且表格只能被本程序使用)。编写查表程序时,首先把查表数据的序号送入编写查表程序时,首先把查表数据的序号送入A A中,再中,再把从查表指令的下一条指令的首地址到表的首地址间的把从查表指令的下一

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|