新编-(大学课件)单片机原理与接口技术-80C51单片机汇编语言程序设计P74.ppt

上传人(卖家):三亚风情 文档编号:3321395 上传时间:2022-08-19 格式:PPT 页数:74 大小:914.01KB
下载 相关 举报
新编-(大学课件)单片机原理与接口技术-80C51单片机汇编语言程序设计P74.ppt_第1页
第1页 / 共74页
新编-(大学课件)单片机原理与接口技术-80C51单片机汇编语言程序设计P74.ppt_第2页
第2页 / 共74页
新编-(大学课件)单片机原理与接口技术-80C51单片机汇编语言程序设计P74.ppt_第3页
第3页 / 共74页
新编-(大学课件)单片机原理与接口技术-80C51单片机汇编语言程序设计P74.ppt_第4页
第4页 / 共74页
新编-(大学课件)单片机原理与接口技术-80C51单片机汇编语言程序设计P74.ppt_第5页
第5页 / 共74页
点击查看更多>>
资源描述

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

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

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

4、较长,导致应用程序运行速度较慢。序运行速度较慢。docin/sundae_meng4.1.3 80C51 单片机汇编语言的语句格式单片机汇编语言的语句格式80C5180C51汇编语言的语句格式如下:汇编语言的语句格式如下::;1.标号标号是语句地址的标志符号,标号的几点规定:是语句地址的标志符号,标号的几点规定:18个个ASCII字符组成,第一个字符必须是字母。字符组成,第一个字符必须是字母。不能使用本汇编语言已经定义的符号作为标号。不能使用本汇编语言已经定义的符号作为标号。标号后面必须跟以冒号标号后面必须跟以冒号“:”。同一标号在一个程序中只能定义一次。同一标号在一个程序中只能定义一次。标号

5、可有可无。标号可有可无。错误的标号错误的标号 正确的标号正确的标号1BT:BT11BT:BT1BEGIN BEGIN:BEGIN BEGIN:TA+TB:TATB:TA+TB:TATB:ADD:ADD1:ADD:ADD1:docin/sundae_meng2.2.操作码操作码用于规定语句执行的操作内容,用指令助记符表示。用于规定语句执行的操作内容,用指令助记符表示。不能空缺。不能空缺。3.3.操作数操作数操作数用于为指令操作提供数据。可以是空白,也可操作数用于为指令操作提供数据。可以是空白,也可能有能有1313个操作数,各操作数之间以逗号分隔。个操作数,各操作数之间以逗号分隔。4.4.注释注释

6、不属于语句的功能部分,只是对语句的解释说明,以不属于语句的功能部分,只是对语句的解释说明,以“;”开头。开头。5.5.分界符(分隔符)分界符(分隔符)用于把语句中的各部分隔开,以便于区分。分界符包用于把语句中的各部分隔开,以便于区分。分界符包括空格、冒号、分号或逗号等符号。括空格、冒号、分号或逗号等符号。docin/sundae_meng4.2 汇编语言程序的基本结构形式汇编语言程序的基本结构形式 三种基本结构形式:顺序程序结构,分支程序结构,三种基本结构形式:顺序程序结构,分支程序结构,循环程序结构。循环程序结构。4.2.1 顺序程序结构顺序程序结构顺序结构程序是最简单的程序结构。程序既无分

7、支、顺序结构程序是最简单的程序结构。程序既无分支、循环,也不调用子程序,程序执行时一条接一条地循环,也不调用子程序,程序执行时一条接一条地按顺序执行指令。按顺序执行指令。docin/sundae_meng(1)分析任务)分析任务(2)确定算法)确定算法(3)画流程图)画流程图(4)编写程序)编写程序(5)上机调试)上机调试 2、程序设计的一般步骤、程序设计的一般步骤 当接到程序设计的任务后,当接到程序设计的任务后,首先对任务进行详尽的分析,首先对任务进行详尽的分析,搞清楚已知的数据和想要得搞清楚已知的数据和想要得到的结果,程序应该完成何到的结果,程序应该完成何种的功能。明确在程序设计种的功能。

8、明确在程序设计时应该时应该“做什么做什么”。根据实际问题的要求和指令系根据实际问题的要求和指令系统的特点,确定解决问题的具统的特点,确定解决问题的具体步骤。根据任务要求,对不体步骤。根据任务要求,对不同的计算方法进行比较,选择同的计算方法进行比较,选择最适宜的算法。解决最适宜的算法。解决“怎样做怎样做”的问题。的问题。将解决问题的具体步骤用一种将解决问题的具体步骤用一种约定的几何图形、指向线和必约定的几何图形、指向线和必要的文字说明描述出来,要的文字说明描述出来,用图用图形的方法描绘解决问题的思路。形的方法描绘解决问题的思路。用用指令指令的形式的形式将程序流程图将程序流程图实现出来。实现出来。

9、查错、改错,查错、改错,对程序进行对程序进行优化。优化。docin/sundae_meng 50H 51H 52H53H54H55HN1高字节高字节N1中字节中字节N1低字节低字节N2高字节高字节N2中字节中字节N2低字节低字节(1)分析任务)分析任务(2)确定算法)确定算法(3)画流程图)画流程图(4)编写程序)编写程序(5)上机调试)上机调试例:例:3字节无符号数相加:其中被加数在内部字节无符号数相加:其中被加数在内部RAM的的50H、51H和和52H单元中;加数在内部单元中;加数在内部RAM的的53H、54H和和55H单元单元中;要求把相加之和存放在中;要求把相加之和存放在50H、51H

10、和和52H单元中,进位存单元中,进位存放在位寻址区的放在位寻址区的20H位中。位中。docin/sundae_mengMOV 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,

11、A ;存高字节相加结果存高字节相加结果CLR AADDC A,#00H;进位送进位送00H位保存位保存MOV R0,#20H;存放进位的单元地址存放进位的单元地址MOV R0,Adocin/sundae_meng 分支结构也称为选择结构。为分支需要,程序设计时分支结构也称为选择结构。为分支需要,程序设计时应给程序段的起始地址赋予一个地址标号,以供选择分支应给程序段的起始地址赋予一个地址标号,以供选择分支使用。分支结构又可分为单分支结构和多分支结构。使用。分支结构又可分为单分支结构和多分支结构。1.单分支程序结构单分支程序结构 单分支程序结构即二中选一,是通过条件判断实现单分支程序结构即二中选一

12、,是通过条件判断实现的。一般都的。一般都使用条件转移指令使用条件转移指令对程序的执行结果进行判对程序的执行结果进行判断。断。可实现单分支转移的指令有:可实现单分支转移的指令有:JZ、JNZ、CJNE和和DJNZ。位状态转移指令:。位状态转移指令:JC、JNC、JB、JNB和和JBC等。等。4.2.2 分支程序结构分支程序结构docin/sundae_meng(1)单分支结构举例)单分支结构举例 假定在外部假定在外部RAM中有中有ST1、ST2和和ST3共共3个连续个连续单元,其中单元,其中ST1和和ST2单元中存放着两个无符号二进制单元中存放着两个无符号二进制数,要求找出其中的大数并存入数,要

13、求找出其中的大数并存入ST3单元中。单元中。解解:(:(1 1)分析任务:比较两个数的大小)分析任务:比较两个数的大小 (2 2)算法:算术运算、控制转移)算法:算术运算、控制转移 (3 3)程序结构:单分支)程序结构:单分支 (4 4)数据类型:单字节、二进制、无符号数)数据类型:单字节、二进制、无符号数 (5 5)数据结构:单元地址升序排列)数据结构:单元地址升序排列 (6 6)RAMRAM单元安排单元安排:外部:外部RAMRAM单元单元 (7 7)采用寄存器间接寻址方式()采用寄存器间接寻址方式(R0R0、R1R1或或DPTRDPTR)(8 8)程序设计流程框图程序设计流程框图;(9 9

14、)程序清单程序清单;docin/sundae_meng开开 始始设设 置置 数数 据据 指指 针针取取 数数 据据 N N2 2取取 数数 据据 N N1 1并并 暂暂 存存结结 束束N N1 1保保 存存 于于 A A中中N N2 2 N N1 1修修 改改 数数 据据 指指 针针保保 存存 大大 数数N N2 2保保 存存 于于 A A中中Y YN Ndocin/sundae_mengSTARTSTART:CLR CCLR C;进位位清进位位清0 0 MOV DPTR MOV DPTR,#ST1#ST1;设置数据指针设置数据指针 MOVX AMOVX A,DPTRDPTR;取第取第1 1个

15、数个数 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 1个数大,则整字节交换个数大,则整字节交换BIG0:BIG0:INC DPTR INC DPTR MOVX DPTR,A MOVX DPTR,A;存大数存大数 RETRETBIG1:BIG

16、1:MOVX A,DPTR MOVX A,DPTR SJMP BIG0 SJMP BIG0上例中,如果采用上例中,如果采用CJNE A,direct,rel指令,应如何修改程序?指令,应如何修改程序?docin/sundae_meng(2)多重单分支结构举例)多重单分支结构举例 多重单分支结构中,通过一系列条件判断,进多重单分支结构中,通过一系列条件判断,进行逐级分支。为此可使用比较转移指令行逐级分支。为此可使用比较转移指令CJNE实现。实现。docin/sundae_mengCJNE A,55H,LOOP1CJNE A,55H,LOOP1;若若TaT55,TaT55,则转向则转向LOOP1L

17、OOP1AJMP 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;若若(CY)(CY)1,1,表明表明TaTaT54,T54,转升温处理程序转升温处理程序 FH:FH:RETRET;若若T55

18、TaT54,T55TaT54,则返回主程序则返回主程序例:假定采集的温度值例:假定采集的温度值Ta放在累加器放在累加器A中。此外,在内部中。此外,在内部RAM 54H单元存放温度下限值单元存放温度下限值T54,在,在55H单元存放温度单元存放温度上限值上限值T55。若。若TaT55,程序转向程序转向JW(降温处理程序降温处理程序);若;若TaT54,则程序转向,则程序转向SW(升温处理程序升温处理程序);若;若T55TaT54,则程序转向,则程序转向FH(返回主程序返回主程序)。docin/sundae_meng解解:(:(1 1)分析任务:解方程)分析任务:解方程 (2 2)算法:控制转移)

19、算法:控制转移 (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 1000H和和2000H单元中。单元中。docin/sundae_meng开开 始始取取 数数

20、 据据 X X结结 束束X X=0 0Y Y=0 0Y YN NX X 0 0Y Y=-1 1Y Y=1 1N NY Y保保 存存 数数 据据 Y Ydocin/sundae_meng XAD EQU 1000H XAD 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转转SAVSAV J

21、B 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指令,应如何修改程序?指令,应如何修改程序?docin/sund

22、ae_meng XAD EQU 1000H XAD 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

23、 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值值 ENDENDdocin/sundae_meng2.多分支程序结构多分支程序结构多分支程序结构流程中具有两个以上条件可供选择。可多分支程序结构流程中具有两个以上条件可供选择。可供使用的是变址寻址转移指令供使用的是变址寻址转移指令“JMP A+DPTR”,但使,但使用该指令

24、实现多分支转移时,需要有数据表格配合。用该指令实现多分支转移时,需要有数据表格配合。多分支程序结构多分支程序结构docin/sundae_meng(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:docin/sundae_meng(2)通过转移指令表实现程序多分支)通过转移指令表实现程序

25、多分支MOV A,nRL A ;分支序号值乘以分支序号值乘以2MOV DPTR,#BRTAB;转移指令表首址转移指令表首址JMP A+DPTRBRTAB:AJMP BR0 ;转分支程序转分支程序0AJMP BR1 ;转分支程序转分支程序1 AJMP BR127 ;转分支程序转分支程序127BR0:;分支程序分支程序BR1:BRn:docin/sundae_meng(3)其他实现程序多分支的方法)其他实现程序多分支的方法MOV DPTR,#BRTAB;分支入口地址表首址分支入口地址表首址MOV A,R0RL A;分支转移值乘以分支转移值乘以2MOV R1,A;暂存暂存A值值INC AMOVC A

26、,A+DPTR;取低位地址取低位地址PUSH ACC;低位地址入栈低位地址入栈MOV A,R1;恢复恢复A值值MOVC A,A+DPTR;取高位地址取高位地址PUSH ACC;高位地址入栈高位地址入栈RET;分支入口地址装入分支入口地址装入PCBRTAB:DW BR0;分支程序入口地址表分支程序入口地址表 DW BR1 DW BR127docin/sundae_meng例:假设键盘上有例:假设键盘上有4 4个按键,功能说明如下表:个按键,功能说明如下表:分析任务分析任务 确定算法确定算法 程序流程框图程序流程框图键功能键功能键值(分支程序序号)键值(分支程序序号)键处理程序(分支程序)键处理程

27、序(分支程序)删除删除00H00HERER读数据读数据01H01HDSDS写数据写数据02H02HXSXS插入插入03H03HCRCRdocin/sundae_mengJ JM MP P A A+D DP PT TR RE 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 Hdocin/sundae_meng 假设转移指令表名称为假设转移指令表名称为BRTABB

28、RTAB,分支程序序号已在,分支程序序号已在A A 中。中。MOV DPTRMOV DPTR,#BRTAB#BRTAB CLR C CLR C RLC A RLC A JMP A+DPTR JMP A+DPTR;ORG 3000HORG 3000H3000H BRTAB3000H BRTAB:AJMP ERAJMP ER;转删除分支程序转删除分支程序3001H 3001H 3002H AJMP DS3002H AJMP DS;转读数据分支程序转读数据分支程序3003H3003H3004H AJMP XS3004H AJMP XS;转写数据分支程序转写数据分支程序3005H3005H3006H

29、AJMP CR3006H AJMP CR;转插入分支程序转插入分支程序 ORG 3100H ORG 3100H3100H ER3100H ER:;删除分支程序删除分支程序 ORG 3200HORG 3200H3200H DS3200H DS:;读数据分支程序读数据分支程序 ORG 3300HORG 3300H3300H XS3300H XS:;写数据分支程序写数据分支程序 ORG 3400HORG 3400H3400H CR3400H CR:;插入分支程序插入分支程序 ENDENDdocin/sundae_meng(4)使用比较转移指令)使用比较转移指令CJNE实现。实现。(A A)=0 0?

30、转转向向0 0分分支支(A A)=1 1?(A A)=2 2?转转向向2 2分分支支转转向向1 1分分支支Y YY YY YN NN NN Ndocin/sundae_meng4.2.3 循环程序结构循环程序结构循环结构是重复执行某个程序段。使用循环结构是重复执行某个程序段。使用条件转移指令条件转移指令通通过条件判断来实现和控制循环。过条件判断来实现和控制循环。循环程序一般由循环程序一般由四四个主要部分组成个主要部分组成:(1 1)初始化部分:初始化部分:为循环程序做准备,如规定循环次数、为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。给各变量和地址指针预置初值。(2 2)处理部

31、分处理部分:为反复执行的程序段,是循环程序的实体,为反复执行的程序段,是循环程序的实体,也是循环程序的主体。也是循环程序的主体。(3 3)循环控制部分循环控制部分:其作用是修改循环变量和控制变量,其作用是修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。并判断循环是否结束,直到符合结束条件时,跳出循环为止。(4 4)结束部分结束部分:这部分主要是对循环程序的结果进行分析、这部分主要是对循环程序的结果进行分析、处理和存放。处理和存放。docin/sundae_mengMOV R2,#0FFH;MOV R2,#0FFH;设置长度计数器初值设置长度计数器初值 MOV R0

32、,#3FH;MOV R0,#3FH;设置字符串指针初值设置字符串指针初值LOOP:LOOP:INC R2INC R2INC R0INC R0CJNE R0,#0DH,LOOPCJNE R0,#0DH,LOOPRETRET举例:通过查找结束标志举例:通过查找结束标志(回车符回车符)以统计字符串长度的循环以统计字符串长度的循环 程序。程序。假定字符串存放在内部假定字符串存放在内部RAM从从40H单元开始的连续存单元开始的连续存储单元中。为找到结束标志,应采用逐个字符依次与回车储单元中。为找到结束标志,应采用逐个字符依次与回车符符(ASCII码码0DH)比较的方法。同时在程序中还应设置一)比较的方法

33、。同时在程序中还应设置一个字符串指针以顺序定位字符,设置一个字符长度计数器以个字符串指针以顺序定位字符,设置一个字符长度计数器以累计字符个数。累计字符个数。docin/sundae_meng 单循环程序一般有以下两种典型结构:单循环程序一般有以下两种典型结构:docin/sundae_meng 双重循环程序的结构:双重循环程序的结构:开开始始外外循循环环初初始始化化结结束束外外循循环环结结束束否否N NY Y内内循循环环初初始始化化内内循循环环处处理理内内循循环环变变量量修修改改外外循循环环处处理理外外循循环环变变量量修修改改结结束束处处理理内内循循环环结结束束否否N NY Ydocin/su

34、ndae_meng解解:(:(1 1)分析任务:数据传送;()分析任务:数据传送;(2 2)算法:比较、控制转移)算法:比较、控制转移 (3 3)程序结构:分支、循环()程序结构:分支、循环(4 4)数据类型:多字节字符串)数据类型:多字节字符串 (5 5)RAMRAM单元安排单元安排:内部:内部RAMRAM单元、单元、外部外部RAMRAM单元单元 (6 6)采用寄存器间接寻址方式()采用寄存器间接寻址方式(R0R0、R1R1或或DPTRDPTR)外外部部R RA AM MX XX X内内部部R RA AM MD DA AT TA A单单元元A AB BU UF FF FE ER R单单元元Y

35、 YY Y(A A)$(A A)=$结结束束例:把内部例:把内部RAM中起始地址为中起始地址为DATA的数据串传送到外部的数据串传送到外部 RAM以以BUFFER为首地址的区域,直到发现为首地址的区域,直到发现“$”字符字符 的的ASC码为止,同时规定数据串最大长度为码为止,同时规定数据串最大长度为32个字节。个字节。docin/sundae_meng (7 7)程序流程框图;)程序流程框图;开开始始初初始始化化数数据据指指针针结结束束数数传传送送完完否否N NY Y初初始始化化控控制制变变量量取取数数数数据据传传送送修修改改指指针针变变量量是是$吗吗?Y YN Ndocin/sundae_m

36、eng 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;是是“$”$”字符,转结束字符,转结束 MOVX A MOVX A,R0

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

38、RG 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;docin/sundae_meng 例:两个三字节二进制无符号数相加,被加数放在内部例

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

40、H单元单元中字节中字节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位)位)docin/sun

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

42、 A,R0R0;循环体部分循环体部分 ADDC AADDC A,R1R1;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 程序清单程序清单docin/sundae_meng4.3 80C514.3 80C51单片机汇编语言程序设计举例单片机汇编语言程序设

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

44、Y Y循循环环体体docin/sundae_meng(1 1)单循环定时程序)单循环定时程序 MOV R5MOV R5,#TIME#TIME;LOOP:NOPLOOP:NOP;NOPNOP;DJNZ R5DJNZ R5,LOOPLOOP;假设假设单片机晶振频单片机晶振频率率f foscosc=6MHz=6MHz,则一个机器周期为则一个机器周期为2s2s,NOPNOP、DJNZDJNZ指令分别是单、双机器周期指令。指令分别是单、双机器周期指令。定时程序的总延迟定时程序的总延迟时间是循环程序段延时时间的整数倍时间是循环程序段延时时间的整数倍,由于,由于R5R5是是8 8位寄存器,因位寄存器,因此,

45、这个定时程序的最长定时时间为:此,这个定时程序的最长定时时间为:256256(2 28 8)8=20488=2048(ss)docin/sundae_meng(2 2)较长时间的定时程序)较长时间的定时程序 (多重循环定时子程序)(多重循环定时子程序)TIMETIME:MOV R5MOV R5,#TTME1#TTME1;LOOP2LOOP2:MOV R4MOV R4,#TEME2#TEME2;LOOP1LOOP1:NOPNOP;NOPNOP;DJNZ R4DJNZ R4,LOOP1LOOP1;DJNZ R5DJNZ R5,LOOP2LOOP2;RETRET;这个定时子程序的最长定时时间为:这个

46、定时子程序的最长定时时间为:256256(2828)4+2+14+2+1256256(2828)2+4=5258282+4=525828(ss)开开始始外外循循环环初初始始化化结结束束内内循循环环控控制制N NY Y内内循循环环初初始始化化外外循循环环控控制制内内循循环环体体N NY Ydocin/sundae_meng(3 3)调整定时时间)调整定时时间 在定时程序中可通过在定时程序中可通过在循环程序段中增减指令在循环程序段中增减指令的方法对定的方法对定时时间进行微调。时时间进行微调。例:例:MOV R0MOV R0,#TTME#TTME;LOOPLOOP:ADD AADD A,R1R1;I

47、NC DPTRINC DPTR;DJNZ R0DJNZ R0,LOOPLOOP;由于由于ADDADD、INCINC、DJNZDJNZ指令的机器周期分别为指令的机器周期分别为1 1、2 2、2 2,所以,所以,该程序定时时间为该程序定时时间为=(1+2+21+2+2)2s2sTimeTime(ss)。docin/sundae_meng假定要求定时时间为假定要求定时时间为24us24us。对于这个定时程序,只须增加一条。对于这个定时程序,只须增加一条NOPNOP指令即可实现。指令即可实现。MOV R0MOV R0,#TIME#TIME;LOOPLOOP:ADD AADD A,R1R1;INC DP

48、TRINC DPTR;NOPNOP;DJNZ R0DJNZ R0,LOOPLOOP;只须只须TIMETIME取取2 2,即可得到精确的,即可得到精确的24s24s定时。定时。docin/sundae_meng(4 4)以一个基本的延时程序满足不同的定时要求以一个基本的延时程序满足不同的定时要求 如果一个系统有多个定时需要,我们就可以设计一个基如果一个系统有多个定时需要,我们就可以设计一个基本延时程序,使其延时时间为各定时时间的最大公约数,然本延时程序,使其延时时间为各定时时间的最大公约数,然后可以以此基本程序作为子程序,通过调用的方法实现所需后可以以此基本程序作为子程序,通过调用的方法实现所需

49、不同定时。不同定时。docin/sundae_meng MOV R0 MOV R0,#05H#05H;5S5S定时定时LOOP:LCALL DELAYLOOP:LCALL DELAY;DJNZ R0DJNZ R0,LOOP1LOOP1;MOV R0MOV R0,#0AH#0AH;10S10S定时定时LOOP2:LCALL DELAYLOOP2:LCALL DELAY;DJNZ R0DJNZ R0,LOOP2LOOP2;MOV R0MOV R0,#14H#14H;20S20S定时定时LOOP3:LCALL DELAYLOOP3:LCALL DELAY;DJNZ R0DJNZ R0,LOOP3LO

50、OP3;例:在单片机应用系统中,假设需要的定时时间分别为例:在单片机应用系统中,假设需要的定时时间分别为5S、10S、20S,可设计一个,可设计一个1S延时子程序延时子程序DELAY,则,则5S、10S、20S的定时时间可通过调用的定时时间可通过调用DELAY实现。实现。docin/sundae_meng 4.3.3 4.3.3 查表程序查表程序 所谓所谓查表程序,就是指预先把数据以表格形式存放在程查表程序,就是指预先把数据以表格形式存放在程序存储器中,然后使用程序读出,这种能读出表格数据的程序存储器中,然后使用程序读出,这种能读出表格数据的程序序就称之为查表程序。就称之为查表程序。查表操作对

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

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


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

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


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