第3章51系列单片机程序设计(汇编部分)_第1页
第3章51系列单片机程序设计(汇编部分)_第2页
第3章51系列单片机程序设计(汇编部分)_第3页
第3章51系列单片机程序设计(汇编部分)_第4页
第3章51系列单片机程序设计(汇编部分)_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章 51系列单片机程序设计内容提要:3-1 汇编语言与指令系统简介汇编语言与指令系统简介3-2 汇编语言的汇编过程汇编语言的汇编过程3-3 汇编语言的程序设计及应用汇编语言的程序设计及应用高级语言高级语言:3-1 汇编语言简介 一、汇编语言程序设计的意义一、汇编语言程序设计的意义什么是程序?什么是程序?完成某项特定任务的指令的集合。完成某项特定任务的指令的集合。计算机按程序一条一条地依次执行指令,从而完成指定任务。计算机按程序一条一条地依次执行指令,从而完成指定任务。要让计算机完成各项任务,就应设计各种程序。要让计算机完成各项任务,就应设计各种程序。 汇编语言汇编语言:机器语言机器语言:程

2、序设计语言:程序设计语言:用二进制代码表示指令和数据。用二进制代码表示指令和数据。用助记符表示指令操作功能,用标号表示操作对象。用助记符表示指令操作功能,用标号表示操作对象。独立于机器独立于机器,面向过程面向过程,接近自然语言和数学表达式接近自然语言和数学表达式.汇编语言程序的每一条语句都与计算机的某一条指令对应,所汇编语言程序的每一条语句都与计算机的某一条指令对应,所以必需熟悉指令系统。以必需熟悉指令系统。指令指令 = 操作码操作码 + 操作数操作数操作码操作码表示了该指令所能执行的操作功能表示了该指令所能执行的操作功能。操作数操作数表示参加操作的数的本身或操作数所在的地址。表示参加操作的数

3、的本身或操作数所在的地址。MCS-51指令格式:指令格式:标号:标号: 操作码助记符操作码助记符 第一操作数第一操作数 ,第二操作数,第二操作数 ;注释;注释例例4 4、试判断、试判断A A中的正负,若为正数,存入中的正负,若为正数,存入2020H H单元;若为负单元;若为负数则存入数则存入2121H H单元。单元。解:解: JB ACC7JB ACC7,LOOPLOOP MOV 20H MOV 20H,A A SJMP $ SJMP $ LOOP LOOP:MOV 21HMOV 21H,A A SJMP $ SJMP $ 3-3-2 2 汇编语言及汇编过程汇编语言及汇编过程二、汇编程序的汇编

4、过程二、汇编程序的汇编过程 汇编有两种方法:手工汇编、机器汇编。汇编有两种方法:手工汇编、机器汇编。 1 1、手工汇编:、手工汇编:第一次汇编:确定地址,翻译成各条机器码,字符标号第一次汇编:确定地址,翻译成各条机器码,字符标号原样写出;原样写出;第二次汇编:标号代真,将字符标号用所计算出的具体第二次汇编:标号代真,将字符标号用所计算出的具体地址值或偏移地址值或偏移量代换。量代换。 源程序源程序 目标程序目标程序 地址地址 ORG 1000HORG 1000H START START:MOV R0MOV R0,2FH 2FH MOV R2 MOV R2,#00H #00H MOV A MOV

5、A,R0 R0 MOV R3 MOV R3,A A INC R3 INC R3 SJMP SJMP NEXT NEXT LOOP LOOP:INC R0 INC R0 CJNE R0 CJNE R0,#44H#44H,NEXTNEXT INC R2 INC R2 NEXT NEXT:DJNZ R3DJNZ R3,LOOPLOOP MOV MOV 2AH2AH,R2 R2 SJMP $ SJMP $ END END 第一次汇编第一次汇编第二次汇编第二次汇编1000 A82F1002 7A001004 E61005 FB1006 0B1007 80NEXT1009 08100A B644NEXT1

6、00D 0A100E DBLOOP1010 8A2A1012 80FEA82F7A00E6FB0B800508B644010ADBF98A2A80FE2 2、机器汇编、机器汇编两次扫描过程。两次扫描过程。第一次扫描:第一次扫描:检查语法错误,确定符号名字;检查语法错误,确定符号名字; 建立使用的全部符号名字表;建立使用的全部符号名字表; 每一符号名字后跟一对应值(地址或数)。每一符号名字后跟一对应值(地址或数)。第二次扫描:第二次扫描:是在第一次扫描基础上,将符号地址转换成是在第一次扫描基础上,将符号地址转换成 地址(代真);地址(代真); 利用操作码表将助记符转换成相应的目标码。利用操作码表

7、将助记符转换成相应的目标码。 三、伪指令三、伪指令 伪指令是告诉汇编程序,如何汇编源程序的指令。伪指令是告诉汇编程序,如何汇编源程序的指令。 伪指令既不控制机器的操作,也不能被汇编成机器代码,伪指令既不控制机器的操作,也不能被汇编成机器代码, 故称为伪指令。故称为伪指令。 1 1、起始地址伪指令、起始地址伪指令 ORGORG ORG addr16ORG addr16 用于规定目标程序段或数据块的起始地址,用于规定目标程序段或数据块的起始地址, 设置在程序开始处。设置在程序开始处。 2 2、汇编结束伪指令、汇编结束伪指令 ENDEND 告诉汇编程序,对源程序的汇编到此结束。告诉汇编程序,对源程序

8、的汇编到此结束。 一个程序中只出现一一个程序中只出现一 次,在末尾。次,在末尾。 3 3、赋值伪指令、赋值伪指令 EQUEQU 告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。 格式:格式: 标号名称标号名称 EQU EQU 数值或汇编符号数值或汇编符号 “ “标号名称标号名称”在源程序中可以作数值使用,也可以作数据地址、在源程序中可以作数值使用,也可以作数据地址、 位地址使用。位地址使用。 先定义后使用,放在程序开头。先定义后使用,放在程序开头。4 4、定义字节伪指令、定义字节伪指令 DBDB 告诉汇编程序从指定的地址单元开始,定义若干

9、字节存储单告诉汇编程序从指定的地址单元开始,定义若干字节存储单 元并赋初值。元并赋初值。 格式:格式: 标号:标号: DB DB 字节数据或字节数据表字节数据或字节数据表5 5、定义字伪指令、定义字伪指令 DWDW 从指定地址开始,定义若干个从指定地址开始,定义若干个1616个位数据,高八位存入低地址;个位数据,高八位存入低地址; 低八位存入高地址。低八位存入高地址。 例、例、 ORG 1000HORG 1000H PIOI PIOI:DW 7654HDW 7654H,40H40H、1212、ABAB 6 6、数据地址赋值伪指令、数据地址赋值伪指令 DATADATA 将表达式指定的数据地址赋予

10、规定的字符名称将表达式指定的数据地址赋予规定的字符名称 格式:格式: 字符名称字符名称 DATA DATA 表达式表达式注:该指令与注:该指令与EQUEQU指令相似,只是,可先使用后定义,指令相似,只是,可先使用后定义, 放于程序开头、结尾均可。放于程序开头、结尾均可。7 7、定义空间伪指令、定义空间伪指令 DSDS 从指定地址开始,保留由表达式指定的若干字节空间作从指定地址开始,保留由表达式指定的若干字节空间作 为备用空间。为备用空间。 格式:格式: 标号:标号: DS DS 表达式表达式例例2 2、 ORG 1000HORG 1000H DS 0AH DS 0AH DB 71H DB 71

11、H,11H11H,11H 11H ;从从100100BHBH开始存放开始存放 ;7171H11HH11H、11H11H。 注:注:DBDB、DWDW、DS DS 只能用于程序存储器;只能用于程序存储器; 而不能用于数据存储器。而不能用于数据存储器。 8 8、位地址赋值伪指令、位地址赋值伪指令 BITBIT将位地址赋予规定的字符名称。将位地址赋予规定的字符名称。格式:格式: 字符名称字符名称 BIT BIT 位地址位地址 例例3 3、 X1 BIT P12X1 BIT P12 相当于相当于 X1 EQU 92HX1 EQU 92H 小结:小结:1 1、为什么要对汇编程序进行汇编?、为什么要对汇编

12、程序进行汇编? 2 2、机器汇编的过程是怎样的?、机器汇编的过程是怎样的? 3 3、常用伪指令的功能各是什么?、常用伪指令的功能各是什么? 3-3-3 3 汇编语言程序的基本结构及应用举例汇编语言程序的基本结构及应用举例程序编写做到:程序编写做到:占用存储空间少;占用存储空间少;运行时间短;运行时间短;程序的编制、调试及排错所需时间短;结构清晰,易读、易于移植。程序的编制、调试及排错所需时间短;结构清晰,易读、易于移植。 按结构化程序设计思想,任何复杂程序都可由按结构化程序设计思想,任何复杂程序都可由顺序结构、顺序结构、分支结构、分支结构、循环结构循环结构 等构成。等构成。 语句 3语句 2顺

13、序结构顺序结构 入口入口语句 1 出口出口分支结构分支结构入口入口条件满足否? 分支 1 出口出口YN 分支 2循环结构循环结构入口入口 处理 修改条件条件满足否?Y 出口出口N一、顺序程序举例一、顺序程序举例例例1 1、设在外、设在外RAMRAM的的6060H H单元存有单元存有1 1个字节代码,要求将其分解成两个个字节代码,要求将其分解成两个4 4位字段,高位字段,高4 4位存入原单元的低位存入原单元的低4 4位,其低位,其低4 4位存入位存入6161H H单元的低单元的低4 4位,位,且要求这两个单元的高且要求这两个单元的高4 4位均为位均为0 0,试编制完整程序。,试编制完整程序。 分

14、析:# # # # ¥ ¥解:核心指令解:核心指令 ANLANL ORL 1000H ORL 1000H MODE MODE:MOV R0MOV R0,#60H#60H MOVX A MOVX A,R0R0 MOV B MOV B,A A ANL A ANL A,#0F0H#0F0H SWAP A SWAP A MOVX R0 MOVX R0,A A ANL B ANL B,#0FH#0FH MOV A MOV A,B B INC R0 INC R0 MOVX R0 MOVX R0,A A END END二、分支结构与分支程序设计二、分支结构与分支程序设计结构:根据不同的条件,进行相应的处理。

15、结构:根据不同的条件,进行相应的处理。通常用条件转移指令形成简单分支结构。通常用条件转移指令形成简单分支结构。如:如: 判(判(A A) = Z = Z 或或 NZ NZ ,转移转移 判(判(CYCY)= 1 = 1 或或 0 0 ,转移,转移 判(判(bitbit)=1 =1 或或 0 0 ,转移,转移 CJNE CJNE 比较不相等转移比较不相等转移 例例3 3、设、设a a存放在累加器存放在累加器A A中,中,b b存放在寄存器存放在寄存器B B中,要求按下式中,要求按下式 计算计算Y Y值,并将结果值,并将结果Y Y存于累加器存于累加器A A中,试编写程序。中,试编写程序。 a-b a

16、-b (a0a0) Y = Y = a+b a+b (a 0a NBNA NB时,将内部时,将内部RAMRAM的的4242H H单元清单元清0 0;否则,将该单元置成全;否则,将该单元置成全1 1,试编程。,试编程。解法解法I I:因为无因为无1616位数的比较指令,所以,只能用位数的比较指令,所以,只能用8 8位数的比较位数的比较 指令。指令。 (画出流程框图)(画出流程框图)解:解:ORG 2000HORG 2000H CMP CMP:MOV AMOV A,50H50H CJNE A CJNE A,40H40H,CMP1CMP1 MOV A MOV A,51H51H CJNE A CJNE

17、 A,41H41H,CMP1CMP1 SJMP NHIGHE SJMP NHIGHE CMP1 CMP1:JC HIGHEJC HIGHE NHIGHE NHIGHE:MOV 42HMOV 42H,#0FFH#0FFH SJMP DONE SJMP DONE HIGHE HIGHE:MOV 42HMOV 42H,#00H#00H DONE DONE:SJMP SJMP END END解法解法IIII:先假设先假设NA NBNA NB,再来判断是否再来判断是否NA NBNA NB ORG 3000H ORG 3000H CMP2 CMP2:MOV R0MOV R0,#00H#00H MOV A

18、MOV A,50H50H CJNE A CJNE A,40H40H,CMP3CMP3 MOV A MOV A,51H51H CJNE A CJNE A,41H41H,CMP3CMP3 SJMP NHIGHE SJMP NHIGHE CMP3 CMP3:JC HIGHEJC HIGHE NHIGHE NHIGHE:MOV R0MOV R0,#0FFH #0FFH ;不大于标志不大于标志 HIGHEHIGHE:MOV 42HMOV 42H,R0R0 SJMP SJMP ENDEND 小结:小结: 1 1、汇编程序有哪三种基本结构?、汇编程序有哪三种基本结构? 2 2、构成分支程序,常用到哪些判断语

19、句?、构成分支程序,常用到哪些判断语句? 顺序程序顺序程序 每条指令只执行一次;每条指令只执行一次;分支程序分支程序 根据不同条件,会跳过一些指令,而转去根据不同条件,会跳过一些指令,而转去 执行另一些指令执行另一些指令共同点:每条指令至多执行一次。但是,实际中有时要求某程共同点:每条指令至多执行一次。但是,实际中有时要求某程序段多次重复执行,需要采用循环结构。序段多次重复执行,需要采用循环结构。 循环结构不但使程序简练,而且大大节省存储空间。循环结构不但使程序简练,而且大大节省存储空间。循环程序包含四部分:循环程序包含四部分:、初始化部分(循环计数器、变量置初值)初始化部分(循环计数器、变量

20、置初值)、循环处理部分(主体,需要重复执行的部分)循环处理部分(主体,需要重复执行的部分) 、循环控制部分(修改地址指针、修改变量、检测循环控制部分(修改地址指针、修改变量、检测循环结束条件)循环结束条件)、循环结束部分(对结果分析、处理,存放结果)循环结束部分(对结果分析、处理,存放结果)先修理,后判断:先修理,后判断: 开始初始化部分处理部分修改变量循环结束?结束部分结束先判断,后处理:先判断,后处理: 开始初始化部分修改变量循环结束?结束部分结束处理部分循环有:单循环、多重循环。循环有:单循环、多重循环。循环次数已知,可用计数器控制循环次数;循环次数已知,可用计数器控制循环次数;循环次数

21、未知,按问题条件控制循环是否结束。循环次数未知,按问题条件控制循环是否结束。 1 1、单循环程序、单循环程序(1 1)循环次数是已知的程序)循环次数是已知的程序例例1 1、已知片外、已知片外RAMRAM的的1010H H单元存放单元存放8 8位二进制数,要求将其转移成相位二进制数,要求将其转移成相应的应的ASCIIASCII码,并以高位在前,低位在后的顺序,依次存放到片外码,并以高位在前,低位在后的顺序,依次存放到片外RAMRAM以以1111H H为首地址的连续单元中,试编程。为首地址的连续单元中,试编程。解:先将中间单元置成解:先将中间单元置成3030H H,然后判欲转换位是否为然后判欲转换

22、位是否为1 1, 若是,则将中间单元内容加若是,则将中间单元内容加1 1;否则,中间单元内容保持不变。;否则,中间单元内容保持不变。 通过左移指令实现由高到低的顺序进行转换。通过左移指令实现由高到低的顺序进行转换。 START START:MOV R2MOV R2,#08H #08H ;循环计数初值(循环次数已知)循环计数初值(循环次数已知) MOV R0MOV R0,#10H #10H ;地址指针初值地址指针初值 MOVX AMOVX A,R0 R0 ;取数取数 MOV BMOV B,A A ;暂存暂存B B中中 LOOPLOOP:MOV AMOV A,#30H #30H ;将中间单元(将中

23、间单元(A A)置成置成3030H H JNB B.7 JNB B.7,NA NA ;判断转换的二进制位为判断转换的二进制位为0 0否?否? INC A INC A ;若为若为1 1,则变成,则变成1 1的的ASCIIASCII码码“31“31H”H” NA NA:INC R0 INC R0 ;修改地址指针修改地址指针 MOVX R0MOVX R0,A A ;存放转换的结果存放转换的结果 MOV AMOV A,B B RL A RL A,B B ;作好准备,判断下一位作好准备,判断下一位 MOV BMOV B,A A ;暂存暂存 DJNZ R2DJNZ R2,LOOP LOOP ;判断转换结束

24、否?未完继续判断转换结束否?未完继续 SJMP SJMP (2 2)循环次数未知的程序)循环次数未知的程序例例2 2、设用户用键盘输入长度不超过、设用户用键盘输入长度不超过100100字节的字符串放在字节的字符串放在80318031单片单片机外部机外部RAMRAM以以2020H H为首地址的连续单元,该字符串用回车符为首地址的连续单元,该字符串用回车符CRCR(CR= 0DHCR= 0DH)作为结束标志,要求统计此字符串的长度并存入作为结束标志,要求统计此字符串的长度并存入内部内部RAMRAM的的1 1FHFH单元中。单元中。解:从首单元开始取数,每取一数判断其是否为解:从首单元开始取数,每取

25、一数判断其是否为CRCR,是则结束。是则结束。 ORG 1000HORG 1000HSTADA DATA 20HSTADA DATA 20HSLANG DATA 1FHSLANG DATA 1FHCMCR2CMCR2:MOV R0MOV R0,#STADA-1#STADA-1 MOV B MOV B,#0FFH#0FFH CRLOPCRLOP:INC R0INC R0 INC B INC B MOVX A MOVX A,R0R0 CJNE A CJNE A,#0DH#0DH,CRLOPCRLOP MOV SLANG MOV SLANG,B B SJMP SJMP END END 2 2、多重循

26、环设计、多重循环设计循环体中还包含着一个或多个循环结构,即双重或多重循环。循环体中还包含着一个或多个循环结构,即双重或多重循环。例例3 3、设、设80318031使用使用1212MHzMHz晶振,试设计延迟晶振,试设计延迟100100msms的延时程序。的延时程序。内循环内循环外循环外循环解:延时程序的延迟时间就是该程序的执行时间,通常采用解:延时程序的延迟时间就是该程序的执行时间,通常采用MOV MOV 和和DJNZDJNZ二指令。二指令。 T = 12 / T = 12 / foscfosc = 12 / = 12 / (121210106 6)= 1us= 1us ORG 1000H O

27、RG 1000H DELAYDELAY:MOV R2MOV R2,#CTS #CTS ;T = 1usT = 1us LOOPS LOOPS:MOV BMOV B,#CTR #CTR ;T = 1us T = 1us LOOPRLOOPR:DJNZ BDJNZ B,LOOPR LOOPR ;2T = 2us 2T = 2us DJNZ R2DJNZ R2,LOOPS LOOPS ;2T = 2us 2T = 2us ENDEND 内循环延时:内循环延时:(1 + 2 1 + 2 CTRCTR)T = 500usT = 500us(假设)假设)则则CTR = 250CTR = 250 实际延时:

28、实际延时:1 + 2 1 + 2 250 250 1 1us = 501usus = 501us外循环延时:外循环延时:T +T +(501 + 2T501 + 2T) CTS = 100ms = 100 000us CTS = 100ms = 100 000us 所以所以 , CTS = 198.8 CTS = 198.8 取取 199 199 实际延时:实际延时:1 + 1 + (501 + 2501 + 2)199 = 1000.98199 = 1000.98msms 例例4 4、设在、设在80318031内部内部RAMRAM中存一无符号数的数组,其长度为中存一无符号数的数组,其长度为1

29、00100,起,起始地址是始地址是3030H H,要求将它们从大到小排序,排序后仍存放在原区域要求将它们从大到小排序,排序后仍存放在原区域中,试编者按程。中,试编者按程。 解:先举四个数排序的例子解:先举四个数排序的例子内内RAM RAM 第一次外循环第一次外循环 第二次外循环第二次外循环 第三次外循环第三次外循环 30 30H 0 0 0 3 0 3 0 6H 0 0 0 3 0 3 0 6 31H 0 3 0 2 0 6 0 3 31H 0 3 0 2 0 6 0 3 3232H 0 2 0 6 0 2 0 2H 0 2 0 6 0 2 0 2 3333H 0 6 H 0 6 0 0 0 0 0 00 0 0 0 0 0共共4 1 = 3 次外循环次外循环这就是所谓的这就是所谓的“冒泡法冒泡法”。4 4个数排序最多经过个数排序最多经过 3 3 次外循环就可排出次外循环就可排出, ,每次外循环都包含每次外循环都包含3 3次次内循环。实际上大多情况不用内循环。实际上大多情况不用 3 3 次外循环就可排完。次外循环就可排完。对于对于100100个数

温馨提示

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

评论

0/150

提交评论