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

优惠套餐
 

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

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

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

版权提示 | 免责声明

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

单片机原理及其接口技术第3章-汇编语言程序设计课件.ppt

1、3.1 汇编语言源程序设计和汇编汇编语言源程序设计和汇编3.1.1 指令和助记符指令和助记符指令指令 =操作码操作码 +操作数操作数例如8051做10加20的加法,在程序存储器中需要预先存储2条机器码指令 0111 0100 ;指令;指令1操作码,把操作码,把10送入累加器送入累加器A 0000 1010 ;指令;指令1操作数,操作数,10=00001010B=0AH0010 0100 ;指令;指令2操作码,累加器操作码,累加器A内容加内容加20,结果存于,结果存于A 0001 0100 ;指令;指令2操作数,操作数,20=00010100B=14HMOV A,0AH ;操作码助记符;操作码助

2、记符MOV,操作数助记符累加器,操作数助记符累加器A和立即数和立即数10ADD A,14H ;操作码助记符;操作码助记符ADD,操作数助记符累加器,操作数助记符累加器A和立即数和立即数20机器语言汇编语言手工汇编机器汇编3.1.2 伪指令伪指令 伪指令虽然具有类似指令的形式,但不是真正的指令,不会产生任何可供机器直接伪指令虽然具有类似指令的形式,但不是真正的指令,不会产生任何可供机器直接执行的机器码。伪指令用来对汇编过程进行控制,是编程员发给汇编程序的命令,也称执行的机器码。伪指令用来对汇编过程进行控制,是编程员发给汇编程序的命令,也称为汇编命令或汇编程序控制命令。为汇编命令或汇编程序控制命令

3、。1 1、起始汇编伪指令、起始汇编伪指令ORGORG(OriginOrigin)ORG 16位地址位地址用来规定源程序或者数据块在程序存储器的起始地址。注意地址从小到大排列,不同的用来规定源程序或者数据块在程序存储器的起始地址。注意地址从小到大排列,不同的程序段不可彼此覆盖。程序段不可彼此覆盖。2 2、结束汇编伪指令、结束汇编伪指令ENDEND END 表示源程序到此结束。在一个源程序中只允许出现一条表示源程序到此结束。在一个源程序中只允许出现一条END语句,而且必须安排在源程语句,而且必须安排在源程序的末尾,汇编器对序的末尾,汇编器对END语句后的所有语句都不进行汇编。语句后的所有语句都不进

4、行汇编。3 3、赋值伪指令、赋值伪指令EQUEQU(EquateEquate)字符名称字符名称EQU赋值项赋值项其中赋值项可以是常数、地址、标号或者是表达式,以其中赋值项可以是常数、地址、标号或者是表达式,以8位或位或16位二进制数存放。汇编位二进制数存放。汇编程序自动把程序自动把EQU右边的赋值项赋给左边的字符名称。一旦字符名称被赋值它就可以在程右边的赋值项赋给左边的字符名称。一旦字符名称被赋值它就可以在程序中作为数据或地址来多次使用。必须先赋值再使用,故该语句常放在程序开头。序中作为数据或地址来多次使用。必须先赋值再使用,故该语句常放在程序开头。3.1.2 伪指令伪指令4 4、位地址赋值伪

5、指令、位地址赋值伪指令BITBIT 字符名称字符名称 BIT 位地址位地址把把BIT右边的位地址或位名称赋给左边的字符名称。因此右边的位地址或位名称赋给左边的字符名称。因此BIT语句定义的字符名称是此位语句定义的字符名称是此位地址的别称。地址的别称。5 5、定义空间伪指令、定义空间伪指令DSDS(Define StorageDefine Storage)标号:标号:DS 表达式表达式DS从指定的地址单元开始,保留由表达式指定的若干字节空间作为备用空间,空间大小从指定的地址单元开始,保留由表达式指定的若干字节空间作为备用空间,空间大小由由DS语句中表达式决定。同语句中表达式决定。同DB一样,一样

6、,DS伪指令只能用于程序存储器。伪指令只能用于程序存储器。ORG1000HDS 08H;从;从1000H开始保留开始保留8字节的存储空间备用字节的存储空间备用DB 71H,13H,11H ;数据表从;数据表从1008H开始存放开始存放经汇编后从经汇编后从1000H单元开始保留单元开始保留8个字节的存储单元,而从个字节的存储单元,而从1008H单元开始连续单元开始连续存放存放71H、13H和和11H等数据。等数据。3.1.3 汇编语句格式汇编语句格式标号:操作码标号:操作码 操作数操作数1,操作数,操作数2,操作数,操作数3;注释;注释 1 1、标号标号标号是语句地址的标志符号,它由标号是语句地

7、址的标志符号,它由18个个ASCII字符组成,可以是字母、数字和一些特字符组成,可以是字母、数字和一些特定字符,英文字母开头,冒号结束。为了避免把标号中字符当作指令来汇编,用户在编定字符,英文字母开头,冒号结束。为了避免把标号中字符当作指令来汇编,用户在编写自己的程序时绝对不应采用指令、寄存器名以及伪指令等作为语句的标号,而且同一写自己的程序时绝对不应采用指令、寄存器名以及伪指令等作为语句的标号,而且同一标号在一个程序中只能定义一次。对每一条语句而言,标号不是必选的,标号的有无取标号在一个程序中只能定义一次。对每一条语句而言,标号不是必选的,标号的有无取决于程序中有无其它语句访问该语句,一般用

8、于转移程序的首地址。决于程序中有无其它语句访问该语句,一般用于转移程序的首地址。2、操作码、操作码操作码是汇编指令格式中唯一不能空缺的部分,可分为指令性语句和指示性语句两类。操作码是汇编指令格式中唯一不能空缺的部分,可分为指令性语句和指示性语句两类。(1)指令性语句)指令性语句指令性语句是指采用指令助记符构成的汇编语言语句,指令性语句是指采用指令助记符构成的汇编语言语句,8051单片机中的指令性语句是指单片机中的指令性语句是指111条指令的助记符语句。因此,指令性语句是汇编语言语句的主体。每条指令性语句都条指令的助记符语句。因此,指令性语句是汇编语言语句的主体。每条指令性语句都有与之对应的机器

9、码供有与之对应的机器码供CPU识别和执行。如前述及的识别和执行。如前述及的MOV、ADD、SETB、CLR等。等。(2)指示性语句)指示性语句指示性语句又称为伪指令语句,不会产生任何可供指示性语句又称为伪指令语句,不会产生任何可供CPU识别和执行的机器码,只是用来识别和执行的机器码,只是用来对汇编过程进行某种控制。对汇编过程进行某种控制。3.1.3 汇编语句格式汇编语句格式标号:操作码标号:操作码 操作数操作数1,操作数,操作数2,操作数,操作数3;注释;注释 3、操作数、操作数指令执行时涉及到的数据或者数据的地址。它与操作码以空格分界,两操作数或三操作指令执行时涉及到的数据或者数据的地址。它

10、与操作码以空格分界,两操作数或三操作数时以逗号分开,可以是十进制数、二进制数(数时以逗号分开,可以是十进制数、二进制数(B)、十六制数()、十六制数(H)、)、ASCII码码()、寄存器名、存储器地址、位地址以及变量标识符等。)、寄存器名、存储器地址、位地址以及变量标识符等。4、注释、注释对语句在程序中完成的功能加以解释,对语句在程序中完成的功能加以解释,“;”分号开头,不会被汇编程序理解为指令。分号开头,不会被汇编程序理解为指令。例3-1 ORG 0100H ;下面源程序从程序存储器的0100H单元开始存放MAIN:MOV A,#00H ;标号MAIN0100H MOV R2,#23H MO

11、V R3,#24H MOV R4,#25H MOV R5,#26H ADD A,R2 ADD A,R3 ADD A,R4 ADD A,R5HERE:SJMP HERE;标号HERE010EH END;源程序到此结束 3.2 程序计数器程序计数器PCPC和程序运行和程序运行3.2.1 3.2.1 程序计数器程序计数器PC PC(Program CounterProgram Counter)PC(Program Counter):程序计数器。):程序计数器。16位的寄存器,存放的是位的寄存器,存放的是ROM地址地址起始地址:起始地址:0000H 形成形成下一条要下一条要执行指令执行指令的地址:的地

12、址:自动加自动加1:读指令的:读指令的1个字节加一个字节加一 新地址直接替换:转移类指令新地址直接替换:转移类指令PC由计算机自动管理,程序员由计算机自动管理,程序员不可以访问不可以访问3.2.2 3.2.2 简单程序运行简单程序运行3.2.3 3.2.3 循环程序运行循环程序运行 0000H存放长转移指令,转移到主程序地址0100H执行主程序。循环初始化阶段,对变量A赋初值00H,对地址指针R0赋初值30H,对循环控制变量R2赋初值10H。然后进入循环体。首先对第一个单元送00H,然后调整变量A值为01H,调整地址指针R0值为31H,循环控制变量R2减1为0FH,不为0程序继续循环而PC=0

13、106H,而不会增大为010BH,从而程序转移至0106H继续执行直至R2为0退出循环,则PC=010BH程序顺序执行。3.2.4 3.2.4 子程序运行子程序运行 子程序从010BH开始存放,是一个延时子程序。当主程序执行到调用子程序的命令ACALL时PC=0106H,ACALL指令把断点地址0106H压入堆栈,并将010BH放进PC中,程序转移到010BH处执行延时子程序。子程序执行到返回命令RET后,将堆栈中的0106H弹出到PC中,返回主程序继续执行。3.3 顺序程序设计顺序程序设计 顺序程序的特点是程序执行时,每一条指令都被执行一次(有别于分支程序)且仅顺序程序的特点是程序执行时,每

14、一条指令都被执行一次(有别于分支程序)且仅一次(有别于循环程序)。计算机在执行这类程序时只需按照指令排列的先后顺序依一次(有别于循环程序)。计算机在执行这类程序时只需按照指令排列的先后顺序依次执行,中间不会产生任何分支,故又称为无分支程序或简单程序。次执行,中间不会产生任何分支,故又称为无分支程序或简单程序。例3-2 设有16位二进制数存放在R0、R1中,其中R0存放高8位,R1存放低8位。欲将其变为负数存放,编程实现其补码运算,结果送原址。ORG 0030HMOVA,R1;取低字节入;取低字节入ACPLA ;对低字节求反;对低字节求反ADDA,01H;加;加1MOVR1,A;存结果到原址;存

15、结果到原址MOVA,R0;取高字节入;取高字节入ACPLA ;对高字节求反;对高字节求反ADDCA,00H;加可能产生的低字节对高字节的进位;加可能产生的低字节对高字节的进位MOVR0,A;存结果到原址;存结果到原址SJMP$;原地踏步;原地踏步 END3.3 顺序程序设计顺序程序设计 指令说明:指令说明:不带进位加:不带进位加:ADDA,s3;A=A+s3 带进位加:带进位加:ADDCA,s3;A=A+s3+CYs3表示表示#data、direct、Rn、Ri中的任意一个。例中的任意一个。例3-1中第一次加法是对数据的低字中第一次加法是对数据的低字节做出的,因此不需考虑相邻低位可能产生的进位

16、,使用节做出的,因此不需考虑相邻低位可能产生的进位,使用ADD。而第二次加法是对数。而第二次加法是对数据的高字节做出的,需要考虑相邻低位可能产生的进位,使用据的高字节做出的,需要考虑相邻低位可能产生的进位,使用ADDC。减法指令:减法指令:SUBB(Subtract with Borrow),是带借位减,),是带借位减,CPU将减数求补后采用补将减数求补后采用补码加法进行,其结果影响标志位,注意码加法进行,其结果影响标志位,注意CPU将进位位求反后存入将进位位求反后存入CY。指令格式如下:。指令格式如下:SUBBA,s3;A=As3CY带借位减指令用来处理带借位减指令用来处理16位数据的高字节

17、减法,低字节或位数据的高字节减法,低字节或8位数据的减法可预先清位数据的减法可预先清0进进位位位位CY,再使用带借位减法指令进行运算,如下所示:,再使用带借位减法指令进行运算,如下所示:CLRC SUBBA,s33.3 顺序程序设计顺序程序设计例3-3 在实际压力测量系统中,通过A/D转换器得到8位二进制数测量值,存于A中。利用除法指令把累加器A中的二进制数测量值转换为3位BCD码,并以压缩BCD码形式存放在地址M1、M2单元中。M1 EQU 30HM2 EQU 31H ORG 0030HMOVB,64H;除数;除数100送送BDIVAB;得;得BCD百位数于百位数于AMOVM1,A;BCD百

18、位数存于百位数存于M1中中MOVA,0AH;取除数;取除数10XCHA,B;第一次余数与第二次除数交换;第一次余数与第二次除数交换DIVAB ;得存;得存A的的BCD十位数和存十位数和存B的的BCD个位数个位数SWAPA;十位数存于;十位数存于A的高的高4位位ADDA,B;组成压缩;组成压缩BCD码码MOVM2,A;压缩;压缩BCD码存码存M2 END 3.3 顺序程序设计顺序程序设计例3-4 多字节加法程序。设被加数存放在:40H(高字节),41H,42H(低字节)。加数存放在:43H(高字节),44H,45H(低字节)。运算结果仍存在被加数单元中。ORG 0030HMOVR0,#42H;地

19、址指针;地址指针0指向被加数指向被加数MOVR1,#45H;地址指针;地址指针1指向加数指向加数MOVA,R0;取被加数低字节;取被加数低字节ADDA,R1;与加数低字节相加;与加数低字节相加MOVR0,A;结果回存入被加数单元;结果回存入被加数单元DECR0;地址指针;地址指针0指向被加数中字节指向被加数中字节DECR1;地址指针;地址指针1指向加数中字节指向加数中字节MOVA,R0;取被加数中字节;取被加数中字节ADDCA,R1;与加数中字节及进位位相加;与加数中字节及进位位相加MOVR0,A;结果回存入被加数单元;结果回存入被加数单元DECR0;地址指针;地址指针0指向被加数高字节指向被

20、加数高字节DECR1;地址指针;地址指针1指向加数高字节指向加数高字节MOVA,R0;取被加数高字节;取被加数高字节ADDCA,R1;与加数高字节及进位位相加;与加数高字节及进位位相加MOVR0,A;结果回存入被加数单元;结果回存入被加数单元 END 3.4 分支程序设计分支程序设计程序要求改变执行顺序,特点是含有控制转移类指令(转移目的地址替换程序要求改变执行顺序,特点是含有控制转移类指令(转移目的地址替换PCPC当前值)当前值)I.I.无条件转移指令无条件转移指令1 1、长转移指令、长转移指令LJMPLJMP:Long JumpLong JumpLJMP addr16;PCPC+3 PC当

21、前值PCaddr16 程序实现转移转移范围:任意转移范围:任意1616位地址,即位地址,即64KB64KB空间。空间。ORG 0030HMAIN:ORG 0000HLJMP 0030HORG 0000HLJMP MAIN0030H0032H0034HROMR ROOMM地地址址E 9F 42 40 1F 9E 80031H0035H0000H0002H0 20 03 00001H0003H转转移移常用标号代替常用标号代替addr16addr16,程序员只需在要跳转到的,程序员只需在要跳转到的汇编语句前加标号,由汇编器负责计算。汇编语句前加标号,由汇编器负责计算。LJMP LJMP 3.4 分支

22、程序设计分支程序设计程序要求改变执行顺序,特点是含有控制转移类指令(转移目的地址替换程序要求改变执行顺序,特点是含有控制转移类指令(转移目的地址替换PCPC当前值)当前值)3.4.1 3.4.1 无条件转移指令无条件转移指令2 2、短转移指令和相对寻址方式、短转移指令和相对寻址方式SJMPSJMP:Short JumpShort JumpSJMP relSJMP rel或或SJMP SJMP 机器码机器码PCPCPC+2 ,PCPC+2 ,PC当前值当前值PCPCPCPC当前值当前值+rel+rel转移范围:转移范围:转移目的地址转移目的地址PCPC当前值当前值+rel+relrelrel是是

23、8 8位符号数(补码),因此转移范围位符号数(补码),因此转移范围(PC(PC当前值当前值128)128)(PC(PC当前值当前值+127)+127)relrel 转移目的地址转移目的地址PCPC当前值当前值 补补 =转移目的地址转移目的地址(PC+(PC+指令字节数指令字节数)补补 PCPC是转移指令首字节地址是转移指令首字节地址;80rel rel80rel rel是是8 8位符号数(补码位符号数(补码)相对寻址方式相对寻址方式机器汇编只需在指令写出要转移到语句的标号,由汇编器自动计算相对偏移量。机器汇编只需在指令写出要转移到语句的标号,由汇编器自动计算相对偏移量。原地踏转指令原地踏转指令

24、 SJMP$原地踏转指令一般用于程序结束处,实现原地踏步效果,原地踏转指令一般用于程序结束处,实现原地踏步效果,原地踏转指令原地踏转指令relrel计算:计算:relrel$($+2)($+2)补补 22补补0FEH0FEH$表示所在指令的表示所在指令的ROMROM地址。地址。HERE:SJMP HERE 这类指令在执行过程中需要判断某种条件是否满足而决定要不要转移的指令。若这类指令在执行过程中需要判断某种条件是否满足而决定要不要转移的指令。若满足条件就转移,否则程序顺序执行。这类指令无一例外的都是相对寻址方式。满足条件就转移,否则程序顺序执行。这类指令无一例外的都是相对寻址方式。3.4.2

25、3.4.2 条件转移指令条件转移指令1 1、累加器、累加器A A状态转移指令状态转移指令JZ JZ JNZ JNZ JZJZ:J Jump if A is ump if A is Z ZeroeroJNZJNZ:J Jump if A is ump if A is N Not ot Z Zeroero2 2、累加位、累加位C C状态转移指令状态转移指令 JCJC:J Jump if ump if C C is set is setJNCJNC:J Jump if ump if C C is is N Not setot setJC JC JNC JNC 3.4.2 3.4.2 条件转移指令条件

26、转移指令3 3、bitbit位状态转移指令位状态转移指令JBJB:J Jump if ump if B Bit is set it is set JNBJNB:J Jump if ump if B Bit is it is N Not set ot set JBCJBC:J Jump if ump if B Bit is set and it is set and C Clear bit lear bit JB bit JB bit,JNB bit JNB bit,JBC bit JBC bit,4 4、比较不等转移指令、比较不等转移指令 CJNECJNE:Compare and Jump i

27、f is not EqualCompare and Jump if is not Equal CJNE A CJNE A,#data#data,CJNE RnCJNE Rn ,#data#data,CJNE RiCJNE Ri ,#data#data,CJNE A CJNE A,directdirect,例例3-5 3-5 判断判断2 2个个1616位无符号数位无符号数A A、B B的大小。的大小。A A存放在片内存放在片内RAMRAM的的40H40H、41H41H单元,单元,B B存放在存放在50H50H、51H51H单元中。当单元中。当ABAB时,将内部时,将内部RAMRAM的的42H42

28、H单元内容清单元内容清0 0;否则,将该单元内容置;否则,将该单元内容置1 1。试编写实现此功能的程序。试编写实现此功能的程序。ORG0030HLOOP1:MOV R0,00H ;建立;建立AB标志标志 MOV A,40H ;取;取A高字节高字节 CJNE A,50H,LOOP2;与;与B高字节比较高字节比较 ;若若AB,转移至,转移至LOOP2 MOV A,41H ;取;取A低字节低字节 CJNE A,51H,LOOP2;与;与B低字节比较低字节比较 ;若;若AB,转移至,转移至LOOP2 SJMP LOOP3 ;若;若A=B,转移至,转移至LOOP3LOOP2:JNCLOOP4 ;若;若A

29、B,转移至,转移至LOOP4LOOP3:MOVR0,0FFH ;建立;建立AB标志标志LOOP4:MOV42H,R0 ;存标志;存标志SJMP$END 3.5 循环程序设计循环程序设计特殊的分支结构,含有重复执行多遍的指令。特殊的分支结构,含有重复执行多遍的指令。在一个循环程序结构包含在一个循环程序结构包含4 4个部分:个部分:循环变量设置。在循环开始时,往往需要定义一个循环变量(例如循环次数计数循环变量设置。在循环开始时,往往需要定义一个循环变量(例如循环次数计数器,地址指针等),并且给它设置一个初始值。器,地址指针等),并且给它设置一个初始值。循环体。要求重复执行的程序段,即循环程序的主体

30、部分。循环体。要求重复执行的程序段,即循环程序的主体部分。循环变量修改。修改循环变量的值,为下一次循环准备条件。循环变量修改。修改循环变量的值,为下一次循环准备条件。循环控制。根据循环结束的条件,判断是否跳出循环。循环控制。根据循环结束的条件,判断是否跳出循环。3.5 循环程序设计循环程序设计计数控制循环(循环次数已知),常用先执行后判断结构。计数控制循环(循环次数已知),常用先执行后判断结构。减一非零转移指令减一非零转移指令DJNZ DJNZ:D Decrement and ecrement and J Jump if is ump if is N Not ot Z Zero.ero.DJN

31、Z RnDJNZ Rn,DJNZ directDJNZ direct,Rn=Rn-1Rn!=0?PC=PC+2程序顺序执行PC=PC+2+rel程序转移YNdirect=direct-1direct!=0?PC=PC+3程序顺序执行PC=PC+3+rel程序转移YN此指令专用于计数控制循环,此指令专用于计数控制循环,RnRn和和directdirect作为减一计数的循环计数器。作为减一计数的循环计数器。例例3-6 编写一个程序,清空编写一个程序,清空16个数据存储单元,数据存储单元的开始地址是个数据存储单元,数据存储单元的开始地址是60H。ORG0030H CLR A ;A=0 MOV R1,

32、#60H;建立地址指针;建立地址指针R1=60H MOV R2,#16;计数器赋初值;计数器赋初值R7=16AGAIN:MOVR1,A;通过指针将各单元清;通过指针将各单元清0 INC R1 ;指针调整;指针调整 DJNZR2,AGAIN SJMP$;停机;停机 END3.5 循环程序设计循环程序设计例例3-7 计算从片内计算从片内RAM的的50H单元开始的单元开始的10个个BCD数的累加和。数的累加和。ORG 0030HMAIN:MOVR3,00H;清累加和的高位;清累加和的高位 MOVR4,00H;清累加和的低位;清累加和的低位 MOVR2,10;循环计数器初值;循环计数器初值 MOVR0

33、,50H;指针指向;指针指向50H单元单元 MOVA,R4;取累加和低字节;取累加和低字节LOOP:ADDA,R0;累加和低字节相加;累加和低字节相加 DAA;BCD数调整数调整 JNCNEXT;如果无进位,则转移到;如果无进位,则转移到NEXT INCR3;如有进位,高字节加;如有进位,高字节加1NEXT:INCR0;修改指针,指向新的单元;修改指针,指向新的单元 DJNZR2,LOOP;判断是否累加完毕;判断是否累加完毕 MOVR4,A;存累加和低位;存累加和低位 SJMP$;停机;停机 ENDBCD数调整指令数调整指令DA(Decimal Adjust for Addition)DAA功

34、能:只对功能:只对A中一次加法运算的结果进行中一次加法运算的结果进行BCD数调整。当需要进行十进制数加数调整。当需要进行十进制数加法运算时,在加法指令法运算时,在加法指令ADD或或ADDC后紧跟一条后紧跟一条BCD数调整指令数调整指令DA即可。即可。3.5 循环程序设计循环程序设计例例3-8 将片内将片内RAM 20H单元数据中的单元数据中的 1的个数统计出来。结果存的个数统计出来。结果存20H单元。单元。ORG 0030HMAIN:MOVR2,08H;循环计数器置初值;循环计数器置初值 MOVR1,00H;1的计数单元清的计数单元清0 MOVA,20H;取数据;取数据LOOP:RLCA;左移

35、一位;左移一位 JNCNEXT ;如果进位位为;如果进位位为0,则转移到,则转移到NEXT INCR1;如进位位为;如进位位为1,计数单元加,计数单元加1NEXT:DJNZR2,LOOP;判断是否判断完毕;判断是否判断完毕 MOV20H,R1;存计数结果;存计数结果 SJMP$;停机;停机 END 循环左移循环左移RLRL:Rotate LeftRotate Left带进位的循环左移带进位的循环左移RLCRLC:Rotate Left through CarryRotate Left through Carry循环右移循环右移RRRR:Rotate LeftRotate Left带进位的循环左

36、移带进位的循环左移RLCRLC:Rotate Left through CarryRotate Left through CarryRL ARLC ARR ARRC A累加器累加器A移位指令:依次将移位指令:依次将A中的数据循环左移或右移一个二进制位中的数据循环左移或右移一个二进制位 3.5 循环程序设计循环程序设计单重循环和多重循环单重循环和多重循环 循环体中仅包含顺序及分支程序时,为单重循环;若循环体中除顺序及分支程序外,循环体中仅包含顺序及分支程序时,为单重循环;若循环体中除顺序及分支程序外,还包含循环程序时,称多重循环,或循环嵌套。常利用多重循环实现软件定时。还包含循环程序时,称多重循

37、环,或循环嵌套。常利用多重循环实现软件定时。利用计算机定时可分软件和硬件两类。软件定时的方法是对计算机时钟源产生的、利用计算机定时可分软件和硬件两类。软件定时的方法是对计算机时钟源产生的、频率精确的脉冲计数而获得。脉冲的频率与单片机外接的晶体振荡器的频率有关,其频率精确的脉冲计数而获得。脉冲的频率与单片机外接的晶体振荡器的频率有关,其范围可以从范围可以从4MHz30MHz。一般用。一般用6MHz或或12MHz。常用定时单位:常用定时单位:时钟周期时钟周期:时钟脉冲的周期,最小定时单位。:时钟脉冲的周期,最小定时单位。1/1/f f OSCOSC 机器周期机器周期:CPUCPU完成一次基本操作的

38、时间,完成一次基本操作的时间,1212个时钟周期。个时钟周期。指令周期指令周期:执行一条指令需要的时间。:执行一条指令需要的时间。1 1机器周期机器周期 12 12 1/1/f f OSCOSC3.5 循环程序设计循环程序设计单重循环和多重循环单重循环和多重循环 软件定时是典型的多重循环结构,通过执行一个具有固定运行时间的循环体实现延时。软件定时是典型的多重循环结构,通过执行一个具有固定运行时间的循环体实现延时。空操作指令空操作指令NOPNOP:No OperationNo OperationNOPNOP;PC=PC+1PC=PC+1等待一个机器周期等待一个机器周期DELAY:MOV R2,#

39、250;循环次数计数器赋初值;循环次数计数器赋初值 NOP;指令执行一次;指令执行一次1个机器周期个机器周期 NOP;指令执行一次;指令执行一次1个机器周期个机器周期 L1:DJNZ R2,L1;指令执行一次;指令执行一次2个机器周期个机器周期此多重循环延时时间此多重循环延时时间=42s250=2000s=2ms。更长的延时要用多重循环实。更长的延时要用多重循环实现。现。例例3-11 编写一个延时约编写一个延时约1s的子程序,设晶振频率的子程序,设晶振频率6MHz解:采用解:采用3条条NOP指令和指令和1条条DJNZ指令共指令共5个机器周期,执行时间为个机器周期,执行时间为52s=10s,构成

40、内层循环。经过三重循环,各重循环次数分别执行构成内层循环。经过三重循环,各重循环次数分别执行200、100、5次次此公式没有考虑外层循环控制指令消耗的时间。需精确延时时还应将其计入。此公式没有考虑外层循环控制指令消耗的时间。需精确延时时还应将其计入。定时时间内循环体机器周期执行时间定时时间内循环体机器周期执行时间每机器周期时间每机器周期时间循环次数循环次数3.6 子程序设计子程序设计 子程序是指完成确定任务并能为其它程序反复调用的程序段。调用子程序的程序子程序是指完成确定任务并能为其它程序反复调用的程序段。调用子程序的程序叫做主程序或称调用程序。叫做主程序或称调用程序。一、长调用指令(一、长调

41、用指令(Long Subroutine CALL)LCALL 功能:功能:16位断点地址压入堆栈保存,程序转到标号及子程序入口地址执行子程序。位断点地址压入堆栈保存,程序转到标号及子程序入口地址执行子程序。说明:长调用指令能调用存放在程序存储器全部说明:长调用指令能调用存放在程序存储器全部64KB范围内的子程序。断点地址是从范围内的子程序。断点地址是从ROM中取出的长调用指令后的下一指令的地址。那么当执行完子程序返回后,从长调用中取出的长调用指令后的下一指令的地址。那么当执行完子程序返回后,从长调用指令的下一指令开始继续执行程序。长调用指令是指令的下一指令开始继续执行程序。长调用指令是3字节指

42、令,字节指令,1字节操作码,字节操作码,2字节子字节子程序入口地址。程序入口地址。二、子程序返回指令(二、子程序返回指令(RETURN from Subroutine)RET功能:从子程序返回至主程序。功能:从子程序返回至主程序。说明:把压入堆栈的断点地址恢复到说明:把压入堆栈的断点地址恢复到PC,使得程序回到断点地址处继续执行,使得程序回到断点地址处继续执行 3.6.2 参数传递参数传递主程序主程序子程序子程序入口参数入口参数主程序主程序子程序子程序出口参数出口参数 双方共同约定的寄存器或某存储单元双方共同约定的寄存器或某存储单元 堆栈堆栈3.6.3 现场保护和现场恢复现场保护和现场恢复子程

43、序被不同用户调用时,有可能破坏存储单元或者寄存器中主程序存放的有子程序被不同用户调用时,有可能破坏存储单元或者寄存器中主程序存放的有用信息。为了不使主程序有用数据被破坏,进入子程序后,应首先把在子程序中将用信息。为了不使主程序有用数据被破坏,进入子程序后,应首先把在子程序中将会使用的存储单元或者寄存器的有用信息保存到工作寄存器或堆栈内,这种操作称会使用的存储单元或者寄存器的有用信息保存到工作寄存器或堆栈内,这种操作称为现场保护;同理,在子程序返回之前把有用数据恢复到原有单元以便主程序继续为现场保护;同理,在子程序返回之前把有用数据恢复到原有单元以便主程序继续使用,这种操作称为现场恢复。使用,这

44、种操作称为现场恢复。综上所述,子程序的执行应该由现场保护、取入口参数、子程序处理、送出口综上所述,子程序的执行应该由现场保护、取入口参数、子程序处理、送出口参数、恢复现场和返回主程序几个过程组成。参数、恢复现场和返回主程序几个过程组成。3.7 常用子程序设计常用子程序设计一、查表程序设计一、查表程序设计例例3-12 用子程序调用的方法实现用子程序调用的方法实现 ,其中,其中a、b均小于均小于10,a、b、c存放在片存放在片内内RAM的的30H、31H和和32H单元中。单元中。入口参数:入口参数:A(项数)(项数)出口参数:出口参数:A(结果)(结果)VAL1 EQU30H VAL2 EQU32

45、HRESULT EQU33H ORG 0040HMAIN:MOVA,VAL1LCALLSQR MOVB,AMOVA,VAL2LCALLSQRADDA,BMOVRESULT,ASJMP$ORG 0100HSQR:MOVDPTR,TABLEMOVCA,A+DPTR RET ORG 0200HTABLE:DB0,1,4,9,16,25 DB 36,48,64,81 END 22bac3.7 常用子程序设计常用子程序设计一、查表程序设计一、查表程序设计例例3-13 已知已知R0低低4位有位有1位位16进制数(进制数(0F中的一个),请将其转换成相应的中的一个),请将其转换成相应的ASCII码。码。入口

46、参数:入口参数:R0(所查数据在数据表的项数)。(所查数据在数据表的项数)。出口参数:出口参数:R0(转换后的(转换后的ASCII值)。值)。ORG 0100HHEX2A:MOVA,R0 ;读入口参数;读入口参数 ANLA,0FH ;屏蔽高;屏蔽高4位位 ADDA,02H ;地址调整;地址调整 MOVC A,A+PC ;近程查表指令;近程查表指令 MOVR0,A ;送出口参数;送出口参数 1字节指令字节指令 RET ;子程序返回;子程序返回 1字节指令字节指令ASTAB:DB 0,1,2,3,4,5,6,7 DB 8,9,A,B,C,D,E,F3.7 常用子程序设计常用子程序设计二、散转程序设

47、计二、散转程序设计并行多分支程序,根据某个值,分别转向各个不同处理程序并行多分支程序,根据某个值,分别转向各个不同处理程序功能:实现程序散转功能:实现程序散转说明:散转指令是一条无条件转移指令。采用变址寻址方式,基址为说明:散转指令是一条无条件转移指令。采用变址寻址方式,基址为DPTR,相当于,相当于指令转移的基地址,由于指令转移的基地址,由于A中的内容不同,使程序转移到相对于中的内容不同,使程序转移到相对于DPTR偏移量为偏移量为A中中内容的地址处。内容的地址处。散转指令散转指令JMPJMP A+DPTR 由于各个分支处理程序长度不一,把各个分支处理程序的转移指令按序编制成转由于各个分支处理

48、程序长度不一,把各个分支处理程序的转移指令按序编制成转移指令表(转移指令必须相同),用类似查表方式获得转移指令的地址,使程序先移指令表(转移指令必须相同),用类似查表方式获得转移指令的地址,使程序先转向转移指令,然后再由不同的转移指令实现向各个分支处理程序的散转。如能实转向转移指令,然后再由不同的转移指令实现向各个分支处理程序的散转。如能实现现128个分支的转移指令表:个分支的转移指令表:BRTAB:AJMP ROUT0 AJMPROUT1 AJMPROUT127转移指令地址转移指令表首地址转移指令地址转移指令表首地址+分支数分支数 字节数字节数3.7 常用子程序设计常用子程序设计二、散转程序

49、设计二、散转程序设计例例3-14 设设R0中为转移分支数(项数),实现程序散转。中为转移分支数(项数),实现程序散转。FPRO:MOVDPTR,BRTAB;送转移指令表首地址;送转移指令表首地址 MOVA,R0;送项数;送项数 RLA;项数乘;项数乘2 JMPA+DPTR;散转指令;散转指令BRTAB:AJMP ROUT0 ;转移指令表(标号;转移指令表(标号BRTAB转移指令表转移指令表 ;首地址)转向分支;首地址)转向分支0 AJMPROUT1;转向分支;转向分支1 AJMP ROUT127;转向分支;转向分支127 ROUT0:;分支;分支0处理程序处理程序ROUT1:;分支;分支1处理

50、程序处理程序ROUT127:;分支;分支127处理程序处理程序 3.7 常用子程序设计常用子程序设计二、散转程序设计二、散转程序设计例例3-15 一个一个16键的行列式键处理程序中,每按下一个键后会得到相应的键号存放在键的行列式键处理程序中,每按下一个键后会得到相应的键号存放在累加器累加器A中,设中,设16个键键号为个键键号为00H0FH,每键的处理程序不同。试编制相应的键盘,每键的处理程序不同。试编制相应的键盘散转程序。散转程序。FKEY:MOVDPTR,KPRG;送转移指令表首地址;送转移指令表首地址 MOVB,03H MULAB;项数乘字节数(;项数乘字节数(LJMP是是3字节指令)字节

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

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


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