版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-3-71第第4 4章章 89S5189S51的汇编语言程序设计的汇编语言程序设计 程序编制的程序编制的方法方法和和技巧技巧4.1 源程序的源程序的编辑编辑和和汇编汇编4.2 基本基本程序结构程序结构4.3 子程序子程序及其调用及其调用4.42022-3-72v 单片机应用系统由单片机应用系统由硬件系统硬件系统和和应用程序应用程序构成。构成。v 汇编语言汇编语言v 高级语言高级语言 ( (例如,例如,C C语言语言) )v 应用程序设计方法应用程序设计方法 汇编语言汇编语言,生成的目标程序占内存空间少、运行速,生成的目标程序占内存空间少、运行速度快,具有效率高、实时性强的特点。度快,具
2、有效率高、实时性强的特点。 高级语言高级语言,对系统的描述与实现与人的思维相似,程序,对系统的描述与实现与人的思维相似,程序阅读、修改和移植方便,适合于编写复杂的程序。阅读、修改和移植方便,适合于编写复杂的程序。 2022-3-734.1 程序编制的方法和技巧程序编制的方法和技巧4.1.1 4.1.1 程序编制的步骤程序编制的步骤v 明确任务:功能要求、技术指标明确任务:功能要求、技术指标v 运行环境调研运行环境调研v 任务分析任务分析v 将实际问题转化为计算机处理的程序算法。将实际问题转化为计算机处理的程序算法。v 算法比较与优化(内存需求、运行速度、效率)。算法比较与优化(内存需求、运行速
3、度、效率)。v 算法设计算法设计2022-3-74v 强化模块观念强化模块观念v 使程序结构清晰。使程序结构清晰。v 简化代码。简化代码。v 程序模块(主程序模块、各种子程序模块)程序模块(主程序模块、各种子程序模块)v 模块化优点:分块设计、层次清晰、便于接口。模块化优点:分块设计、层次清晰、便于接口。4.1.2 4.1.2 程序编制的方法和技巧程序编制的方法和技巧v 采用循环和子程序的优点采用循环和子程序的优点注意:注意:1 1、循环初值和结束条件,避免、循环初值和结束条件,避免“死循环死循环”现象。现象。 2 2、子程序的现场保护。、子程序的现场保护。2022-3-754.1.3 4.1
4、.3 汇编语言的语句格式汇编语言的语句格式v 标号代表本行程序所在的地址。标号代表本行程序所在的地址。v 标号由标号由18个个ASCII码字符组成,第一个字符必须是字母。码字符组成,第一个字符必须是字母。v 不能用已定义的关键字(指令助记符、伪指令等)。不能用已定义的关键字(指令助记符、伪指令等)。v 同一标号在一个程序中只能定义一次,不能重复定义。同一标号在一个程序中只能定义一次,不能重复定义。v 标号后跟英文冒号标号后跟英文冒号“:”:”。v 标号(即符号地址)标号(即符号地址)标号: 指令助记符指令助记符 操作数1, 操作数2, 操作数3, ;注释2022-3-76v 数据:二进制(数据
5、:二进制(B B)v 十进制(十进制(D D或省略或省略D D) 十六进制(十六进制(H H)。)。 注意:若十六进制操作数以字符AF开头,需在它前面加一个 “0”,以便汇编时把它和标号区分开。v 符号:符号名、标号或符号:符号名、标号或“$”$”。v 表达式:由运算符和数据构成。表达式:由运算符和数据构成。v 操作数操作数2022-3-77v 注释注释英文分号英文分号“;”;”开头。开头。汇编时,遇到汇编时,遇到“;” ” 就停止就停止“翻译翻译”。因此,注释字。因此,注释字段不会产生机器代码。段不会产生机器代码。2022-3-784.2.1 4.2.1 伪指令伪指令4.2 源程序的编辑源程
6、序的编辑4.2.2 4.2.2 源程序的编辑源程序的编辑2022-3-794.2.1 4.2.1 伪指令伪指令v 伪指令:用于指导汇编工作。伪指令:用于指导汇编工作。v 汇编后,伪指令没有与之对应的机器代码。汇编后,伪指令没有与之对应的机器代码。v 起始地址设定伪指令起始地址设定伪指令ORGORGORG ORG 表达式表达式表达式通常为十六进制地址,例:表达式通常为十六进制地址,例: ORG 8000HSTART:MOV A,#30H ORG ORG可多次使用,但地址值的顺序要由小到大。可多次使用,但地址值的顺序要由小到大。2022-3-710v 结束汇编伪指令结束汇编伪指令ENDENDEND
7、该伪指令位于源程序的最后一行,表示汇编到此结束。该伪指令位于源程序的最后一行,表示汇编到此结束。整个源程序中只能有一条整个源程序中只能有一条ENDEND命令,且位于程序的最后。命令,且位于程序的最后。对于对于ENDEND之后的程序,将不进行汇编处理。之后的程序,将不进行汇编处理。2022-3-711v 定义字节数据表伪指令定义字节数据表伪指令DBDBv定义字数据表伪指令定义字数据表伪指令DWDW1000H 标号:标号: DB DB 字节数据表字节数据表ORG 1000HORG 1000HDB -2,-4,-6,8,10,18DB -2,-4,-6,8,10,18FEH FCHFAH08H0AH
8、12H1001H 标号:标号: DW DW 字数据表字数据表 ORG 1400H ORG 1400HDATA1:DW 32DATA1:DW 324A4AH,3CH H,3CH 1400H32H 4AH00H3CH1401H1402H1403H注意:字母按注意:字母按ASCIIASCII码存储。码存储。2022-3-712v 预留空间伪指令预留空间伪指令DSDS 标号:标号: DS DS 预留空间字节数预留空间字节数 ORG 2000H ORG 2000HTAB1TAB1:DB 12HDB 12H,34H34H DS 4H DS 4H DB 5 DB 512H34H-35H3000H3001H3
9、002H3003H3004H3005H3006H2022-3-713v 定义常量值的伪指令定义常量值的伪指令EQUEQU符号名符号名 EQU EQU 常值表达式常值表达式 LENLEN EQUEQU 10 10 SUMSUM EQUEQU 21H 21HBLOCKBLOCK EQU EQU 22H 22H MOV R7, MOV R7,LENLEN MOV R0, MOV R0,BLOCKBLOCK MOV MOV SUMSUM,A ,A 2022-3-714v 位定义命令位定义命令 BITBIT用于给字符名称赋予位地址,位地址可以是绝对位地址,用于给字符名称赋予位地址,位地址可以是绝对位地址
10、,也可是符号地址。也可是符号地址。例如:例如:LEDLEDBIT P1.6BIT P1.6功能是把功能是把P1.6P1.6的位地址赋给变量的位地址赋给变量LEDLED。2022-3-7154.2.2 4.2.2 源程序的编辑源程序的编辑v 源程序的编辑源程序的编辑 ORG ORG 0000H LJMP MAIN ORG ORG 0040HMAIN:MOV R7,#16 MOV R0,#60H MOV A,#55HLOOP:MOV R0,A INC R0 DJNZ R7,LOOP SJMP $ ENDENDv 依据汇编语言规则依据汇编语言规则v 用好用好伪指令伪指令v 符号符号不用中文不用中文v
11、 汇编程序以汇编程序以.ASM.ASM存盘存盘2022-3-7164.3.1 4.3.1 顺序程序顺序程序(无分支、无循环)(无分支、无循环)4.3 基本程序结构基本程序结构 ORG 0040HORG 0040HSTART:MOV A,21H ;START:MOV A,21H ;取取21H21H的内容的内容 ANL A,#0FH ; ANL A,#0FH ;保留低半字节保留低半字节 SWAP A ; SWAP A ;移至高半字节移至高半字节 MOV 20H,A ; MOV 20H,A ;存于存于20H20H单元单元 MOV A,22H ; MOV A,22H ;取取22H22H的内容的内容 A
12、NL A,#0FH ; ANL A,#0FH ;保留低半字节保留低半字节 ORL 20H,A ; ORL 20H,A ;合并到结果单元合并到结果单元 SJMP $ SJMP $ ;等待;等待 END END2022-3-7174.3.2 4.3.2 分支程序分支程序(双分支)(双分支)【例例】实现两个实现两个8 8位无符号数求和的子程序。位无符号数求和的子程序。SADD:MOV A,R3 ;SADD:MOV A,R3 ;取加数(在取加数(在R3R3中)中) CLR CCLR C ADD A,R4 ; ADD A,R4 ;被加数(在被加数(在R4R4中)加中)加A A JC PP1 JC PP1
13、 MOV R3,#00H ; MOV R3,#00H ;结果小于结果小于255255时,高字节时,高字节R3R3内容为内容为00H00H SJMP PP2 SJMP PP2 PP1:MOV R3,#01H ; PP1:MOV R3,#01H ;结果大于结果大于255255时,高字节时,高字节R3R3内容为内容为01H01H PP2:MOV R4,A ; PP2:MOV R4,A ;结果的低字节在结果的低字节在R4R4中中 RETRET入口入口: :(R3R3)= =加数;加数; (R4R4)= =被加数。被加数。出口出口: :(R3R3)= =和的高字节;和的高字节; (R4R4)= =和的低
14、字节。和的低字节。2022-3-718【例例】求单字节有符号数的二进制补码。求单字节有符号数的二进制补码。 正数补码是其本身,负数补码是其反码加正数补码是其本身,负数补码是其反码加1。因此,应首先判被转换数。因此,应首先判被转换数的符号,负数进行转换,正数本身即为补码。的符号,负数进行转换,正数本身即为补码。设二进制数放在设二进制数放在A中,其补码放回到中,其补码放回到A中。参考程序如下:中。参考程序如下: CMPT: JNB Acc.7,RETURN ;(A)0,不需转换,不需转换 MOV C,Acc.7 ;符号位保存;符号位保存 CPL A ;(A)求反,加求反,加1 ADD A,#1 M
15、OV Acc.7,C ;符号位存在;符号位存在A的最高位的最高位RETURN:RET2022-3-7194.3.2 4.3.2 分支程序分支程序(多分支)(多分支) 多分支结构是程序中常见的结构,在多分支结多分支结构是程序中常见的结构,在多分支结构的程序中,能够按调用号执行相应的功能,完成构的程序中,能够按调用号执行相应的功能,完成指定操作。指定操作。 若给出若给出调用号调用号来调用子程序,一般用查表方法,来调用子程序,一般用查表方法,查到查到子程序的地址子程序的地址,转到相应,转到相应子程序子程序。2022-3-720指令系统提供了非常有用的两种多分支选择指令:间接转移指令间接转移指令 JM
16、P A+DPTR比较转移指令 CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE Ri,#data,rel 间接转移指令“JMP A+DPTR”由数据指针DPTR决定决定多分支转移程序的首地址,由A的内容选择对应分支。 4条比较转移指令CJNE能对两个欲比较的单元内容进行比较,当不相等时,程序实现相对转移;若两者相等,则顺序往下执行。2022-3-721【例例】设变量设变量x x存放在片内存放在片内RAMRAM的的30H30H单元,变量单元,变量y y与与x x的关系的关系是是: : 当当x x大于大于0 0时时,y=x;,y=x
17、; 当当x=0 x=0时时,y=20H;,y=20H; 当当x x小于小于0 0时时,y=x+5,y=x+5。编制程序编制程序, ,根据根据x x的大小求的大小求y y,并送回原单元。并送回原单元。2022-3-722 ORG 0040HORG 0040HSTART:MOV A,30H ;START:MOV A,30H ;取取x x至累加器至累加器 JZ NEXTJZ NEXT ;x = 0, ;x = 0,转转NEXTNEXT ANL A,#80H ; ANL A,#80H ;否,保留符号位否,保留符号位 JZ DONEJZ DONE ;x 0, ;x 0,转结束转结束 MOV A,#05H
18、 ;x 0MOV A,#05H ;x 0X 0X = 00-12022-3-724程序如下:程序如下:SIGNFUC:MOV A,40H CJNE A,#00H,NZEAR AJMP NEGTNZEAR: JB Acc.7, POSI MOV A,#01H AJMP NEGTPOSI: MOV A,#81HNEGT: MOV 41H, A END2022-3-725【例例】根据根据R7R7的内容的内容x x(转移序号)转向相应的处理程序。(转移序号)转向相应的处理程序。设设R7R7内容为内容为0 04 4,对应的处理程序入口地址分别为,对应的处理程序入口地址分别为PP0PP0PP4PP4。 2
19、022-3-726 START:MOV R7,#3 ; START:MOV R7,#3 ;转移序号为转移序号为3 3,欲转向,欲转向PP3PP3 ACALL JPNUM ;ACALL JPNUM ;子程序调用子程序调用 AJMP START AJMP START JPNUM:MOV DPTR,#TAB ;DPTR JPNUM:MOV DPTR,#TAB ;DPTR指向分支入口的表首地址指向分支入口的表首地址 MOV A,R7MOV A,R7 ADD A,R7ADD A,R7 ;R7 ;R7乘乘2 2,调整偏移量(,调整偏移量(3x2=63x2=6) MOV R3,A ;A=R3=6MOV R3
20、,A ;A=R3=6 MOVC A,A+DPTR ; MOVC A,A+DPTR ;先取先取PP3PP3的高字节(的高字节(PP3PP3是是DWDW) XCH A,R3 ; XCH A,R3 ;高字节暂存于高字节暂存于R3R3 INC A ; INC A ;增增1 1后,后,A=7A=7,指向下一个,指向下一个 MOVC A,A+DPTR ; MOVC A,A+DPTR ;再取再取PP3PP3的低字节的低字节 MOV DPL,A ;MOV DPL,A ;处理程序入口地址低处理程序入口地址低8 8位送位送DPLDPL MOV DPH,R3 ; MOV DPH,R3 ;处理程序入口地址高处理程序入
21、口地址高8 8位送位送DPHDPH CLR A ;DPTR CLR A ;DPTR指向指向PP3PP3地址地址 JMP A+DPTRJMP A+DPTR ; ;跳转向跳转向PP3PP3服务程序服务程序2022-3-727 TAB:DW PP0 ; TAB TAB:DW PP0 ; TAB是转移地址表是转移地址表 DW PP1 DW PP1 DW PP2 DW PP2 DW PP3DW PP3 DW PP4 DW PP4 PP0:MOV 30H,#0 ; PP0:MOV 30H,#0 ;转移序号为转移序号为0 0时时, ,置功能号置功能号“0”0”于于30H30H单单元元 RETRET PP1:
22、MOV 30H,#1 ; PP1:MOV 30H,#1 ;转移序号为转移序号为1 1时时, ,置功能号置功能号“1”1”于于30H30H单单元元 RETRET PP2:MOV 30H,#2 ; PP2:MOV 30H,#2 ;转移序号为转移序号为2 2时时, ,置功能号置功能号“2”2”于于30H30H单单元元 RETRET PP3:MOV 30H,#3PP3:MOV 30H,#3 ; ;转移序号为转移序号为3 3时时, ,置功能号置功能号“3”3”于于30H30H单单元元 RETRET PP4:MOV 30H,#4 ; PP4:MOV 30H,#4 ;转移序号为转移序号为4 4时时, ,置功
23、能号置功能号“4”4”于于30H30H单单元元 RETRET 2022-3-7284.3.3 4.3.3 查表程序查表程序【例4-3】 设计一子程序,功能是根据累加器设计一子程序,功能是根据累加器A中的数中的数x(09之间)查之间)查x的平方表的平方表y,根据,根据x的值查出相应的平方的值查出相应的平方y。本例中的。本例中的x和和y均为单字节数。均为单字节数。 ADD A,#01HMOVC A,A+PCRET DB 00H,01H,04H,09H,10H DB 19H,24H,31H,40H,51H ;数;数09的平方表的平方表2022-3-729 指令指令“ADD A,#01H”的作用是的作
24、用是A中的内容加上中的内容加上 “01H”, “01H”即为查表指令与平方表之间的即为查表指令与平方表之间的“RET”指令所占的字节数。指令所占的字节数。加上加上 “01H”后,可保证后,可保证PC指向表首,累加器指向表首,累加器A中原来的内容仅是从中原来的内容仅是从表首开始向下查找多少个单元。表首开始向下查找多少个单元。 在进入程序前,在进入程序前,A的内容在的内容在0009H之间,如之间,如A中的内容为中的内容为02H,它的平方为它的平方为04H,可根据,可根据A的内容查出的内容查出x的平方。的平方。 指令指令“MOVC A,A+DPTR” 应用范围较广,使用该指令时应用范围较广,使用该指
25、令时不必计算偏移量,优点是表格可以设在不必计算偏移量,优点是表格可以设在64KB程序存储器空间内的任程序存储器空间内的任何地方,而不像何地方,而不像“MOVC A,A+PC”那样只设在那样只设在PC下面的下面的256个个单元中,所以使用较方便。单元中,所以使用较方便。2022-3-730 如果如果DPTR已被使用,则在查表前必须保护已被使用,则在查表前必须保护DPTR,且结束后恢复,且结束后恢复DPTR,例,例4-3可改成如下形式:可改成如下形式: PUSH DPH ;保存;保存DPH PUSH DPL ;保存;保存DPL MOV DPTR,#TAB1MOVC A,A+DPTRPOP DPL
26、;恢复;恢复DPLPOP DPH ;恢复;恢复DPHRETTAB1: DB 00H,01H,04H,09H,10H;平方表;平方表 DB 19H,24H,31H,40H,51H2022-3-731 【例4-4】有一巡回检测报警装置,需对有一巡回检测报警装置,需对16路(路(x)输入)输入进行检测,每路有一个最大允许值(进行检测,每路有一个最大允许值(y),为双字节数。需),为双字节数。需根据测量的路数(根据测量的路数(x),查表找出对应该路的最大允许值),查表找出对应该路的最大允许值(y),看输入值是否大于最大允许值,如果大于就报警。),看输入值是否大于最大允许值,如果大于就报警。 取路数为取
27、路数为x(0 x15),),y为最大允许值,放在表格为最大允许值,放在表格中。设进入查表程序前,假设路数中。设进入查表程序前,假设路数x已放于已放于R2中,查表后该中,查表后该路的最大允许值路的最大允许值y放于放于R3R4中。查表的程序如下:中。查表的程序如下: 理解:根据路数理解:根据路数x,查最大允许值,查最大允许值y。2022-3-732 TB3: MOV A,R2ADDA,R2 ;(R2)*2(A)MOV R3,A ;保存指针;保存指针 ADDA,#6 ;加偏移量;加偏移量MOVC A,A+PC ;查第一字节;查第一字节XCH A,R3 ADD A,#3 MOVC A,A+PC ;查第
28、二字节;查第二字节 MOVR4,ARETTAB3: DW 1520,3721,42645,7580 ;最大值表;最大值表 DW 3483,32657,883,9943DW 10000,40511,6758,8931DW 4468,5871,13284,278082022-3-733 表格长度不能超过表格长度不能超过256B256B,且表格只能存放于,且表格只能存放于“MOVC AMOVC A,A+PCA+PC”指令以下的指令以下的256256个单元中,如需把表格放在程序存储器个单元中,如需把表格放在程序存储器空间的任何地方,应使用指令空间的任何地方,应使用指令“MOVC AMOVC A,A+D
29、PTRA+DPTR”。【例例4-54-5】 以以AT89S51AT89S51为核心的温度控制器,温度传感器输为核心的温度控制器,温度传感器输出的电压与温度为非线性关系,传感器输出的电压已由出的电压与温度为非线性关系,传感器输出的电压已由A/DA/D转转换为换为1010位二进制数。测得的不同温度下的电压值数据构成一个位二进制数。测得的不同温度下的电压值数据构成一个表,表中温度值为表,表中温度值为y y(双字节无符号数),(双字节无符号数),x x(双字节无符号数)(双字节无符号数)为电压值数据。设测得电压值为电压值数据。设测得电压值x x放入放入R2R3R2R3中,根据电压值中,根据电压值x x
30、,查,查找对应的温度值找对应的温度值y y,仍放入,仍放入R2R3R2R3中。参考程序:中。参考程序:理解:根据电压值理解:根据电压值x,查温度值,查温度值y。2022-3-734 LTB2: MOVDPTR,#TAB2 MOVA,R3 CLRC RLCA MOVR3,A XCHA,R2 RLCA XCHR2,A ADDA,DPL ;(R2R3)+(DPTR)(DPTR) MOVDPL,A MOVA,DPH ADDC A,R2 MOVDPH,A CLRA2022-3-735MOVC A,A+DPTR ;查第一字节;查第一字节MOVR2,A ;第一字节存入;第一字节存入R2中中CLRAINCDP
31、TRMOVC A,A+DPTR ;查第二字节;查第二字节MOVR3,A ;第二字节存入;第二字节存入R3中中RETTAB2: DW, , ;温度值表;温度值表 由于使用了指令由于使用了指令“MOVC A,A+DPTR”,表,表TAB2可放入可放入64KB程序存储器空间任何位置,表格的长度可大于程序存储器空间任何位置,表格的长度可大于256B。2022-3-7364.3.4 4.3.4 查找关键字查找关键字在表中查找关键字的操作,也称为数据检索。在表中查找关键字的操作,也称为数据检索。【例4-6】 从从50个字节的表中查找一个关键字个字节的表中查找一个关键字“xxH”。ORG1000HMOV30
32、H,#xxH ;关键字;关键字xxH送送30H单元单元MOVR1,#50 ;查找次数送;查找次数送R1MOVA,#14;修正值送;修正值送AMOV DPTR,#TAB4;表首地址送;表首地址送DPTR2022-3-737LOOP:PUSH AccMOVC A, A+PC;查表结果送;查表结果送A CJNE A,40H,LOOP1;(40H)不等于关键字则转不等于关键字则转LOOP1 MOV R2,DPH;查到关键字,把地址送;查到关键字,把地址送R2,R3MOV R3,DPLDONE: RETLOOP1:POP Acc;修正值弹出;修正值弹出INC A;A+1AINC DPTR;修改数据指针;
33、修改数据指针DPTRDJNZ R1,LOOP;R10,未查完,继续查找,未查完,继续查找MOVR2,#00H;R1=0,R2和和R3清清0MOVR3,#00H;表中;表中50个数已查完个数已查完AJMPDONE;从子程序返回;从子程序返回 TAB4: DB ,;50个数据表个数据表2022-3-7384.3.5 4.3.5 查找最值查找最值 【例例4-7】片内片内RAM中存放一批数据,查找出最大值并存放中存放一批数据,查找出最大值并存放于首地址中。设于首地址中。设R0中存放首地址,中存放首地址,R2中存放字节数。中存放字节数。 程序如下:程序如下: MOV R2,n ;n为要比较的数据字节数为
34、要比较的数据字节数 MOV A, R0 ;存首地址指针;存首地址指针 MOV R1,A DEC R2 MOV A,R12022-3-739LOOP: MOV R3, ADEC R1CLR CSUBB A,R1 ;两个数比较;两个数比较JNC LOOP1 ;C=0,A中数大,跳中数大,跳LOOP1MOV A,R1 ;C=1,则大数送,则大数送ASJMP LOOP2LOOP1:MOV A,R3 LOOP2:DJNZ R2, LOOP ;是否比较结束?;是否比较结束?MOV R0, A ;存最大数;存最大数 RET2022-3-740【例例】将内部将内部RAMRAM的的30H30H至至3FH3FH单
35、元初始化为单元初始化为00H00H。MOV 30H,#00H ;MOV 30H,#00H ;MOV 31H,#00H ;MOV 31H,#00H ;MOV 3EH,#00H ;MOV 3EH,#00H ;MOV 3FH,#00H ;MOV 3FH,#00H ;2022-3-7414.3.6 4.3.6 循环程序循环程序1 1循环程序的结构:循环程序的结构:主要由以下四部分组成。主要由以下四部分组成。(1 1)循环初始化)循环初始化完成循环前的准备工作。例如,设置循环控制计数初值、完成循环前的准备工作。例如,设置循环控制计数初值、起始地址、变量初值等。起始地址、变量初值等。(2 2)循环体)循环
36、体完成实际的处理工作,反复执行循环体。完成实际的处理工作,反复执行循环体。(3 3)循环控制)循环控制在重复执行循环体的过程中,不断修改循环控制变量,在重复执行循环体的过程中,不断修改循环控制变量,直到符合结束条件,就结束循环体的执行。直到符合结束条件,就结束循环体的执行。循环结束的控制方法有循环结束的控制方法有计数控制法计数控制法和和条件控制法条件控制法。(4 4)循环结束)循环结束对循环程序执行的结果进行分析、处理和存放。对循环程序执行的结果进行分析、处理和存放。2022-3-742(1 1)计数控制法)计数控制法 依据计数器的值来决定循环次数,一般为减依据计数器的值来决定循环次数,一般为
37、减1 1计数器,计数计数器,计数器减到器减到“0 0”时,结束循环。计数器初值在初始化设定。时,结束循环。计数器初值在初始化设定。 MCS-51 MCS-51指令系统提供了功能极强的循环控制指令:指令系统提供了功能极强的循环控制指令: DJNZ R DJNZ Rn n,relrel ;以工作寄存器作控制计数器;以工作寄存器作控制计数器 DJNZ direct DJNZ direct,relrel ;以直接寻址单元作控制计数器;以直接寻址单元作控制计数器 2022-3-743【例例】将内部将内部RAMRAM的的30H30H至至3FH3FH单元初始化为单元初始化为00H00H。MAIN:MOV R
38、0,#30H ;R0MAIN:MOV R0,#30H ;R0用作地址指针,置地址初值用作地址指针,置地址初值 MOV R7,#16 ; MOV R7,#16 ;计数值,计数值,1616个单元个单元 MOV A,#00H ; MOV A,#00H ;LOOP:MOV R0,A ;LOOP:MOV R0,A ;循环处理循环处理 INC R0 ;INC R0 ;指向下一个单元指向下一个单元 DJNZ R7,LOOP ; DJNZ R7,LOOP ;循环循环 SJMP $ ;SJMP $ ;等待等待2022-3-744v 例:对例:对RAMRAM中中22H22H开始的开始的1010个单元的数据求和,个
39、单元的数据求和,v 并将求和的结果放在并将求和的结果放在21H21H单元中。单元中。 CLR A CLR A MOV R7, MOV R7,10 10 ;计数初值;计数初值 MOV R0, MOV R0,22H 22H ;R0R0作为数据单元指针作为数据单元指针 LOOP:ADD A,R0 LOOP:ADD A,R0 INC R0 INC R0 DJNZ R7,LOOP DJNZ R7,LOOP MOV MOV 21H21H,A ,A 2022-3-745(2 2)条件控制法)条件控制法 计数控制法只有在计数控制法只有在循环次数已知循环次数已知的情况下才适用。循环次的情况下才适用。循环次数未知
40、,不能用循环次数来控制,往往需要根据某种条件来判数未知,不能用循环次数来控制,往往需要根据某种条件来判断是否应该结束循环。断是否应该结束循环。 条件控制法:设置一个条件,判断是否满足该条件。如满条件控制法:设置一个条件,判断是否满足该条件。如满足,则循环结束;如不满足该条件,则循环继续。足,则循环结束;如不满足该条件,则循环继续。 2022-3-746【例例】将内部将内部RAMRAM起始地址为起始地址为60H60H的数据串传送到外部的数据串传送到外部RAMRAM中起始中起始地址为地址为1000H1000H的存储区域,直到发现的存储区域,直到发现$字符停止传送。字符停止传送。 MAIN:MOV
41、R0,#60H ; MAIN:MOV R0,#60H ;置初值置初值 MOV DPTR,#1000HMOV DPTR,#1000HLOOP0:MOV A,R0 ;LOOP0:MOV A,R0 ;取数据取数据 CJNE A,#24H,LOOP1 ; CJNE A,#24H,LOOP1 ;循环结束?循环结束? SJMP DONE ; SJMP DONE ;是是LOOP1:MOVX DPTR,A ;LOOP1:MOVX DPTR,A ;把把A A的内容传到片外的内容传到片外 INC R0 ;INC R0 ;片内:指向下一个单元片内:指向下一个单元 INC DPTR ;INC DPTR ;片外:指向下
42、一个单元片外:指向下一个单元 SJMP LOOP0 ; SJMP LOOP0 ;继续循环继续循环 DONE:SJMP DONE ; DONE:SJMP DONE ;等待等待2022-3-747【例例4-13】 一串字符,依次存放在内部一串字符,依次存放在内部RAM从从30H单元开单元开始的单元中,字符串以始的单元中,字符串以0AH为结束标志,测试字符串的长度。为结束标志,测试字符串的长度。 采用逐个字符依次与采用逐个字符依次与“0AH”比较(设置的条件)的方法。比较(设置的条件)的方法。设置一个累计字符串长度的计数器和一个指向字符串的指针。设置一个累计字符串长度的计数器和一个指向字符串的指针。
43、 如果字符与如果字符与“0AH”不等,则长度计数器和字符串指针都加不等,则长度计数器和字符串指针都加1;如果比较相等,则表示该字符为;如果比较相等,则表示该字符为“0AH”,字符串结束,计,字符串结束,计数器值就是字符串的长度。程序如下:数器值就是字符串的长度。程序如下:2022-3-748MOVR4,#0FFH;长度计数器初值送;长度计数器初值送R4MOV R1,#2FH;字符串指针初值送;字符串指针初值送R1NEXT: INC R4INC R1CJNE R1,#0AH,NEXT;比较,不等则进行下一;比较,不等则进行下一 ;字符比较;字符比较END 上面两例都是在一个循环程序中不再包含其他
44、循环程序,则称该循上面两例都是在一个循环程序中不再包含其他循环程序,则称该循环程序为环程序为单重循环单重循环。如果一个循环程序中包含了其他循环程序,则称为。如果一个循环程序中包含了其他循环程序,则称为多重循环多重循环。 常见的多重循环是由常见的多重循环是由DJNZ指令构成的软件延时程序,是常用程序指令构成的软件延时程序,是常用程序之一。之一。2022-3-749【例例4-14】 50ms的延时程序。的延时程序。 在使用在使用12MHz晶振时,一个机器周期为晶振时,一个机器周期为1s,执行一条,执行一条DJNZ指令的指令的时间为时间为2s。可用。可用多重循环的方法的延时的延时50ms程序:程序:
45、 DEL: MOV R7,#200 ;本指令执行时间;本指令执行时间1s DEL1:MOV R6,#125;本指令执行时间;本指令执行时间1s DEL2:DJNZ R6,DEL2 ;指令执行;指令执行1次为次为2s,共,共 ; 1252 s=250s DJNZ R7,DEL1 ;指令执行时间;指令执行时间2s,本循环体执行,本循环体执行125次次 RET ;指令执行时间;指令执行时间2s2022-3-750 以上延时程序以上延时程序不是太精确,把所有指令的执行时间计,把所有指令的执行时间计算在内,其延时时间为算在内,其延时时间为1+(1+250+2) 200+2s=50.603ms, 如要求比较精确的延时,应对上述
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 病毒消杀团日活动方案
- 面膜公司销售策划方案
- 科技生活宣传月活动方案
- 篮球特色教育活动方案
- 疫情营区演练活动方案
- 计时餐饮活动方案
- 篮球社团自主活动方案
- 新零售渠道扩展战略方案
- 高校教师业务理论考试试题
- 社区便民活动活动方案
- 2025年水利系统职称考试水利专业技术人员职称考试题库及答案
- 新生儿早产儿个案护理
- 农药安全评价体系-深度研究
- 全国青少年文化遗产知识大赛(小学组)参考试题库(含答案)
- 河南省信阳市2024-2025学年普通高中高三第二次教学质量检测生物模拟试题(含答案)
- 2024年砌筑工(高级技师)技能鉴定理论考试题库(含答案)
- 2024年初级招标采购从业人员《招标采购法律法规》考前必刷必练题库500题(含真题、必会题)
- 2024年北京某中学初一(上)期中语文试题及答案
- 道路改造施工方案
- 劳务费结算协议书
- 中西医协同发展多学科诊疗制度
评论
0/150
提交评论