ImageVerifierCode 换一换
格式:PPT , 页数:99 ,大小:947.50KB ,
资源ID:13990868      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/13990868.html】到电脑端继续下载(重复下载【60天内】不扣币)。

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(单片机3-2.ppt)为本站上传会员【s4****5z】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

单片机3-2.ppt

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单片机原理与应用,MCS51,系列单片机指令系统分类,按寻址方式分为以下七种:按功能分为以下五种:,1、立即寻址 1、数据传送指令,2、直接寻址,2、算术运算指令,3、寄存器寻址 3、逻辑运算指令,4、寄存器间接寻址指令 4、控制转移类指令,5、相对寻址 5、位操作指令,6、变址寻址,7、位寻址,1,二、,算术运算指令,算术运算包括加、减、乘、除四则运算,共,24,条,助记符,8,种。,单片机原理与应用,2,单片机原理与应用,3,单片机原理与应用,说明,多数算术运算指令,会影响标志位,CPU,执行算术运算

2、指令后,根据数据操作情况,自动设置,PSW,中的,Cy,、,AC,、,OV,、,P,进位,(,借位,),标志,Cy,为无符号整数的多字节加法、减法、移位等操作提供了方便,溢出标志,OV,可方便的控制,补码运算,辅助进位标志,AC,则可用于,BCD,码运算,4,算术运算指令对标志位影响情况如下所示,注:,符号表示相应的指令影响该标志位,,0,表示相应的指令对该标志位清,0,,,x,表示相应的指令对该标志位没有影响。,单片机原理与应用,5,加,1,指令(,INC,)和减,1,指令(,DEC,)中只有对累加器的操作(,INC A,和,DEC A,)对,奇偶位,P,有影响,对其它标志没有影响,而其它的

3、加,1,指令和减,1,指令对标志位也没有影响。,注意:,没有指令 DEC DPTR,可用指令 DEC DPL 代替,6,关于,DA,指令需要说明的是:,DA,指令的功能是对累加器,A,中刚进行的两个,BCD,码加法的结果进行十进制调整,(,加,6,修正,),。该指只能,紧跟,在加法指令,(,ADD/ADDC,)后进行并且两个加数,必须,已经,是,BCD,码,,而且也只能对累加器,A,中结果进行调整。,当累加器,A,中的,低,4,位数,出现了,非,BCD,码,(,10101111,)或低,4,位产生进位(,AC=1,),则应在,低,4,位加,6,调整,,以产生低,4,位正确的,BCD,结果。,当

4、累加器,A,中的,高,4,位数,出现了,非,BCD,码,(,10101111,)或高,4,位产生进位(,CY=1,),则应在,高,4,位加,6,调整,,以产生高,4,位正确的,BCD,结果。,注意,,DA,指令,不能,对减法进行十进制调整。,单片机原理与应用,7,【,例,】,若(,A,),0101 0110B,,表示的,BCD,码为,(56),BCD,(,R2,),0110 0111B,,表示的,BCD,码为,(67),BCD,,(,CY,),0,。,执行以下指令:,ADD A,,,R2,DA A,请分析指令执行后的结果。,根据题意分析程序指令执行的过程如下图所示,:,由于:,(,A,),00

5、10 0011B,,,即(,23,),BCD,,,(,CY,),1,,即,(01)BCD,结果为,BCD,数,123,。,单片机原理与应用,8,4,位二进制数来表示,1,位十进制数中的,09,这,10,个数码,单片机原理与应用,例:,若,A=(25),BCD,而,R0=(39),BCD,则:,ADD A,R0;A=5EH,DA A;A=(64),BCD,执行的过程为:2 5,H,+3 9 H,5 E H,加法运算的结果,+0 6,H,调整,6 4,H,调整后的结果,9,【,例,】,编制,2,个十六进制数加法程序,假定和超过双字节,(,21H 20H,),+,(,31H 30H,),(42H 4

6、1H 40H),分析:先低字节作不带进位求和,再作带进位高字节求和。,程序如下:,MOV A,,,20H,ADD A,,,30H,MOV 40H,,,A,;,(20H)+(30H)40H,MOV A,,,21H,ADDC A,,,31H,MOV 41H,,,A,;,(21H)+(31H)+(C)41H,MOV A,,,#00H,;准备处理最高位,ADDC A,,,#00H,;记入最高位,MOV 42H,,,A,单片机原理与应用,10,思考一下这段程序中,A,的变化,(A)=#00H+#00H+(C),【,例,】,双字节无符号数相减(,31H 30H,),(41H 40H)(31H 30H).,

7、程序如下:,MAIN,:,CLR C,;,CY,清零,MOV R0,,,#30H,;设被减数地址,MOV R1,,,#40H,;减数地址,MOV A,,,R0,;取被减数低字节,SUBB A,,,R1,;被减数低字节减去减数低字节,MOV R0,,,A,;存低字节差,在,30H,INC R0,;指向被减数高字节,31H,加一指令,INC R1,;指向被减数高字节,41H,MOV A,,,R0,;取被减数高字节,SUBB A,,,R1,;被减数高字节减去减数高字节并减,;去低字节相减时产生的借位,MOV R0,,,A,;存高字节差,在,31H,HERE,:,SJMP HERE,单片机原理与应用,

8、11,【,例,】,双字节乘法程序,要求:(,R0R1,),(,R2,)(,R3R4R5,),分析:,设(,R0,),=J,,,(,R1,),=K,,,(,R2,),=L,,,则:,程序如下:,MOV A,,,R1,MOV B,,,R2,MUL AB,;,K*L,MOV R5,,,A,;,KL,低,R5,MOV R4,,,B,;,KL,高暂存,R4,MOV A,,,R0,MOV B,,,R2,MUL AB,;,J*L,ADD A,,,R4,MOV R4,,,A,;,KL,高,+JL,低,R4,MOV A,,,B,ADDC A,,,#00H,MOV R3,,,A,;,JL,高,+(C)R3,单片机

9、原理与应用,12,【,例,】,利用除法指令进行代码转换。设一个,8,位无符号二进制数存放在内部,RAM,的,30H,单元中,将其转化为,10,进制数据。百位,十位,个位分别存放在,40H,,,41H,,,42H,中。,分析:,(,30H,),/100,商(百位)(,40H,),余数,/10,商(十位)(,41H,),余数(个位)(,42H,),程序如下:,MOV R0,,,#40H,;要存放的首地址,MOV A,,,30H,MOV B,,,#64H,;(,除数为,100,),DIV AB,MOV R0,,,A,;除以,100,后的商,MOV A,,,B,;余数送至,A,MOV B,,,#0AH

10、除数为,10,),DIV AB,INC R0,;指向,41H,MOV R0,,,A,INC R0,;指向,42H,MOV R0,,,B,单片机原理与应用,13,单片机原理与应用,MCS51,系列单片机指令系统分类,按寻址方式分为以下七种:按功能分为以下五种:,1、立即寻址 1、数据传送指令,2、直接寻址 2、算术运算指令,3、寄存器寻址,3、逻辑运算指令,4、寄存器间接寻址指令 4、控制转移类指令,5、相对寻址 5、位操作指令,6、变址寻址,7、位寻址,14,单片机原理与应用,三、逻辑操作类指令,逻辑运算类指令共有24条,包括与、或、异或、清零、求反及移位指令,当,目的操作数为累加器,

11、A,时会影响奇偶标志位,P,,带进位的移位指令会影响,C,除此之外,逻辑运算类指令不影响程序状态,PSW,15,单片机原理与应用,16,单片机原理与应用,17,注:,符号,“,”,表示两个数按位进行逻辑与,符号,“,”,表示两个数按位进行逻辑或,符号,“,”,表示两个数按位进行逻辑异或,,“,”,表示累加器,A,的内容按位取反。,逻辑,“,与,”,指令常常用于屏蔽字节中的某些位。,若清除某位,则用,“,0,”,与该位进行逻辑,“,与,”,,若保留某位,则用,“,1,”,与该位进行逻辑,“,与,”,。,例如,:,若(,P1,),=C5H=11000101B,,为屏蔽,P1,口的高,4,位,需执行

12、指令,:,ANL P1,#0FH,指令执行结果为:,(P1)=05H=00000101B,单片机原理与应用,18,注:,逻辑,“,或,”,指令常常用于使字节中的某些位置,“,1,”,。,若置,“,1,”,某位,则用,“,1,”,与该位进行逻辑,“,或,”,,若保留某位,则用,“,0,”,与该位进行逻辑,“,或,”,。,例如,:,将,P1,口的,4,0,位设置成累加器,A,的,4,0,位,而,P1,口高,3,位保持不变,需执行下列程序指令,:,ANL A,#00011111B,ANL P1,#11100000B,ORL P1,A,逻辑,“,异或,”,指令常用于使字节中的某些位取反。,若用,“,1

13、与某位进行逻辑,“,异或,”,则,该位取反,,若,保留某位,,则用,“,0,”,与该位进行逻辑,“,异或,”,。,可以利用异或指令对某个单元进行,自身异或,以实现清零,操作。,例如,:,若,(A)=B5H=10110101B,,执行下列程序指令,:,XRL A,#0F0H,;,A,的高,4,位取反,低,4,位保持不变,(A)=45H,MOV 30H,A,;,(30H)=(A)=45H,XRL A,30H,;,A,清零,单片机原理与应用,19,注:,“,RL A,”,使累加器,A,的各位循环左移,1,位相当于原内容,乘,2,为左移,“,RR A,”,使累加器,A,的各位循环右移,1,位相当

14、于原内容,除,2,为右移,预先清零,CY,,采用带进位位的左移和右移,能够,保留乘除产生的进位和余数,。,例,:,设,(A)=00000111B=07H,,(,CY,),=0,,则执行指令,:,RL A,;(,A,),=00001110B=0EH,,(,CY,),=0,RRC A,;(,A,),=00000111B=07H,,(,CY,),=0,CLR C,;,RRC A,;(,A,),=00000011B=03H,,(,CY,),=1,单片机原理与应用,20,单片机原理与应用,例:设(,C)=0CLR C;,清零,MOV A,#5CH;01011100B,RL A;10111000B,RLC

15、 A;01110000B,(c)=?,RR A;00111000B,RRC A;10011100B,(c)=?,SWAP A;11001001B,例:,设,A=11000101,Cy=0,,分别执行,下列单条指令:,CPL A,求:,A=,Cy=,00111010 0,10001011 0,10001010 1,RL A,A=,Cy=,RLC A,A=,Cy=,21,【,例,3-14,】,设,40H,单元中存放的是一个,16,位二进制数的低,8,位,,41H,单元中存放的是这个,16,位二进制数的高,8,位(假设这个数小于,128,),请将这个,16,位二进制数进行左移,1,位。,分析:实现所

16、要求的功能应该按如下图所示的设计思路进行设计,程序指令如下,:,CLR C,;,CY,清零,MOV R1,#40H,;设低字节地址,MOV A,R1,;取低,8,位,为什么用,A,?,RLC A,;低,8,位左移,MOV R1,A,;保存移位后的低,8,位字节,INC R1,;指向高,8,位地址,MOV A,R1,;取高,8,位,为什么用,A,?,RLC A,;高,8,位左移,并带进低,8,位左移产生的进位位,MOV R1,A,;保存移位后的高,8,位字节,单片机原理与应用,22,注意:只能对累加器,A,进行移位,单片机原理与应用,MCS51,系列单片机指令系统分类,按寻址方式分为以下七种:按

17、功能分为以下五种:,1、立即寻址 1、数据传送指令,2、直接寻址 2、算术运算指令,3、寄存器寻址 3、逻辑运算指令,4、寄存器间接寻址指令,4、控制转移类指令,5、相对寻址 5、位操作指令,6、变址寻址,7、位寻址,23,单片机原理与应用,四、控制转移类指令,转移指令通过改写,PC,的当前值,从而改变,CPU,执行程序的顺序,使程序发生跳转。,转移指令分类:,1),无条件转移,:,执行无条件转移指令,程序无条件转移到指定处。,2),条件转移,:,指令中给出转移条件,执行指令时,先测试条件,若满足条件,则程序发生转移,否则,仍顺序执行程序。,24,单片机原理与应用,3),子程序调用和返回指令,

18、控制程序从主程序转移到子程序入口地址,子程序执行完后,返回主程序继续执行。,4),中断,:,中断是与接口硬件密切相关的技术,当中断发生时,也会改变程序的执行顺序,使程序转到中断服务子程序执行,执行完后返回主程序。,这类指令共,17,条,如下表所列:,25,单片机原理与应用,26,单片机原理与应用,27,长转,LJMP,:,提供的是,16,位地址,,因此程序可以转向,64KB,的程序存储器地址空间的任何单元。该指令,不影响,psw,短转,AJMP,:,指令的转移范围为,AJMP,下面一条指令的存储地址相同的,2KB,区间,内,可以向前也可以向后。,相对转,SJMP,:,我们往往并不是直接把要

19、转移(或调用)到的目标指令的地址给出,而是通过,标号,给出,该标号对应的地址由编译器自动计算出。,SJMP,rel,单片机原理与应用,28,单片机原理与应用,SJMP NEXT,NEXT:,HERE:SJMP HERE,,或:,SJMP$,,表示程序“原地踏步”,造成程序的无限循环,一般用于主程序结束的位置,等待中断信号的到来。有时候也用有,NOP,的无限循环实现这一功能,如:,WAITINT:NOP,NOP,NOP,SJMP WAITINT,29,散转,指令,JMP A+DPTR,的转移地址由数据指针,DPTR,的,16,位数和累加器,A,的,8,位数进行无符号数相加形成,并直接送入,PC,

20、指令执行过程对,DPTR,、,A,和标志位均无影响。该条指令具有散转功能其转移地址不是在汇编或编程时确定的,而是在程序运行过程中,动态决定,的。,例:根据累加器,A,中键值的不同跳转到相应的程序。,MOV DPTR,,,#TABLE,RL A,;将,A,值乘,2,,因为,AJMP,指令为双字节指令,JMP A+DPTR,TABLE,:,AJMP TAB0,AJMP TAB1,单片机原理与应用,30,单片机原理与应用,例:,处理功能键。,要求不同功能键执行不同程序段。设每个功能键对应一个键值,X(0XFH)。,设,X,已存入片内,RAM,的40,H,单元中。,若,X=0,,则执行程序段,FUN

21、C0,若,X=1,,则执行程序段,FUNC1,。,KEY:MOV DPTR,#KTAB,MOV A,40H,ADD A,A,JMP A+DPTR,KTAB:AJMP FUNC0,AJMP FUNC1,FUNC0:,FUNC1:,31,比较不相等转移指令,(CJNE),,不等则转移,CJNE A,#data,rel,CJNE Rn,#data,rel,CJNE Ri,#data,rel,CJNE A,direct,rel,例,:编写指令序列:当,P1,口内容为80,H,时程序才向下执行,否则处于等待状态。程序如下:,MOV A,#80H,LOOP:CJNE A,P1,LOOP,;比较不相等,单片

22、机原理与应用,32,单片机原理与应用,例,:设,P1,口,P1.0,P1.3,为准备就绪信号输入端,当该4位输入全为1时说明各项工作已准备好,单片机可顺序执行程序,否则循环等待,程序如下:,LO:MOVA,P1,ANLA,#0FH,;,取低四位,CJNE A,#0FH,LO,;,比较不相等,MAIN:,33,单片机原理与应用,例,:三分支程序,设(,R7)=56H,CJNER7,#60H,K1,K1:JCK3,K3:,34,减1不为,0,条件转移指令(循环转移指令),DJNZ Rn,rel;,PCPC+2,,Rn(Rn)-1,若,R20,PCPC+rel,若,R2=0,PC,不变,相当于不转移

23、DJNZ direct,rel;,PCPC+3,,direct(direct)-1,若(,direct)0,PCPC+rel,若(,direct)=0,PC,不变,用于控制循环操作,单片机原理与应用,35,单片机原理与应用,例:用于循环结构程序。设要求程序循环执行100次,MOV R2,#100;,设循环计数器初值,LOOP:,;,多次循环程序段,DJNZ R2,LOOP;,循环控制,;循环结束,思考:,当循环计数器初值为0,循环次数有多少?,36,单片机原理与应用,例:,从,P1.7,引脚输出5个周期的方波的指令序列如下:,MOV R2,#10;,设定输出方波数,LOOP:CPL P1.7

24、P1.7,引脚信号取反,DJNZ R2,LOOP;,若,R2-10,则继续输出,CONT:,问:该方波的周期为多少?如何修改?,P1.7,引脚上的输出波形如下图:,37,单片机原理与应用,例:在程序初始化时经常遇到这种情况,假定数,据区地址为30,H,,长度为10,要把它们全部清0,ZZZ:MOVR0,#30H,MOVR7,#0AH,MOVA,#00H,LOOP:MOVR0,A,INCR0,DJNZR7,LOOP,38,【,例,3-15,】,利用,DJNZ,指令设计循环延时程序,已知,f,osc,=12MHz,1,)单循环延时,DELAY,:,MOV R7,,,#10,;单周期指令,DJNZ

25、 R7,,;双周期指令,延时长度,:t=1,s210+1,s=21,s,2,)双重循环延时,DELAY,:,MOV R7,,,#0AH,;单周期指令,DL,:,MOV R6,,,#64H,;单周期指令,DJNZ R6,,;双周期指令,DJNZ R7,,,DL,;双周期指令,延时长度,:t=,(,1,s2100+2,s+1,s,),10+1,s=2031,s,3,)三重循环延时,DELAY,:,MOV R7,,,#10,;单周期指令,DL2,:,MOV R6,,,#200,;单周期指令,DL1,:,MOV R5,,,#250,;单周期指令,DJNZ R5,,;双周期指令,DJNZ R6,,,DL

26、1,;双周期指令,DJNZ R7,,,DL2,;双周期指令,延时长度,:t=,(,1,s2250+2,s+1,s,),200,),+2,s+1,s,),10+1,s=1006031,s 1,秒,单片机原理与应用,39,NOP,这条指令不产生任何控制操作,只是将程序计数器,PC,的内容加,1,。该指令在执行时间上要消耗,1,个机器周期,在存储空间上占用一个字节。常用来实现较短时间的延时或用于在延时子程序中用来拼凑精确延时。,【,例,】,已知,fosc=12MHz,,设计循环延时,2ms,的子程序程序,DELAY,:,MOV R7,,,#0AH,;单周期指令,0AH=10,DL,:,MOV R6,

27、62H,;单周期指令,62H=98,DJNZ R6,,;双周期指令,NOP,;单周期指令,DJNZ R7,,,DL,;双周期指令,延时长度,:t=,(,1,s298+2,s+1,s+1,s,),10+1,s,=2001,s,单片机原理与应用,40,子程序调用和返回指令,程序转移与子程序调用指令的区别:,转移指令不需考虑返回问题,,而调用指令不但要保证程序正确转到子程序入口地址,还要保证子程序执行完后能正确返回主程序调用处。,这就需要在调用前正确地,保护现场,,调用完正确地,恢复现场,。,现场的保护和恢复是利用,堆栈,完成的,堆栈是内部,RAM,中一片存储区,采用先进后出的原则存取数据,调

28、用前保护现场的工作由调用指令完成,调用后恢复现场的工作由返回指令完成。,单片机原理与应用,41,单片机原理与应用,子程序调用和返回指令也使程序发生转移。,子程序调用过程,为,避免重复,,,节省存储空间,常把一些相同内容的处理程,序段从主程序中独立出来,,这独立的程序段,称为子程序,子程序的用法并不复杂,主,程序中采用调用指令,它是一条无条件转移指令,使程序转到子程序的入口地址处。但调用指令与转移指令不同:,42,单片机原理与应用,绝对地址 机器码,010DH 758150MOVSP,#50H,0110H312D ACALLDIMS,0112H,012DH7F64DIMS:MOVR7,#64H,

29、012FH00 DLAY:NOP,0130H00 NOP,0131H00 NOP,0132HDFFBDJNZR7,DLAY,0134H22RET,43,单片机原理与应用,返回指令,RET,每个子程序,的,最后一条指令,,在执行返回指令时,将原先压栈的断点出栈,从而实现返回主程序,并从原断点处重新执行主程序。,指令执行的操作为:,PC158(SP),SPSP-1,PC70(SP),SPSP-1,指令机器码:,22,H,RET,指令从堆栈弹出保存的,PC,地址,实现子程序返回。,44,单片机原理与应用,55,H54H53H,SP,03,20,执行前 执行后,例,(,SP)=55H,(54H)=03

30、H,(55H)=20H,执行完,RET,后:,(,SP)=53H,(PC)=2003H,子程序调用中应注意的问题,允许,子程序嵌套调用,在子程序的调用中,又调用别的子程序称作子程序嵌套,45,单片机原理与应用,例:子程序嵌套,MAIN:MOV SP,#30H;,设置栈底,LCALL SUB1 ;,调用子程序,SUB1:,;,子程序段,1,LCALL SUB2 ;,调用子程序,RET ;,返回主程序,SUB2:,;,子程序段,2,RET ;,返回,子,程序,1,46,单片机原理与应用,不要忘记给栈指针设初始值,调用时有时用到压栈出栈指令,两者要配对使用,堆栈区设置要合理,子程序起始指令要使用标号

31、用作子程序名。,执行返回指令,RET,之前,保证栈顶内容为主程序返回地址,以便正确返回主程序。,47,单片机原理与应用,(,10,),中断返回指令,RETI;,32H,CPU,响应中断后执行的中断服务程序也存在返回主程序的问题,在中断服务程序中用,RETI,返回主程序。,RETI,也具有恢复断点的功能,与,RET,类似,除此之外,它还会清除,“,优先级激活,”,触发器,以重新开放同级或低级的中断申请。,注意:,在调用子程序和执行中断服务程序时都需要用到堆栈,单片机上电复位后,,SP=07H,,,堆栈区域与工作寄存器区重叠,应注意修改堆栈指针。,48,单片机原理与应用,MCS51,系列单片机指

32、令系统分类,按寻址方式分为以下七种:按功能分为以下五种:,1、立即寻址 1、数据传送指令,2、直接寻址 2、算术运算指令,3、寄存器寻址 3、逻辑运算指令,4、寄存器间接寻址指令 4、控制转移类指令,5、相对寻址,5、位操作指令,6、变址寻址,7、位寻址,49,单片机原理与应用,六、布尔操作类指令(位操作),51单片机的硬件结构中有1个位处理机(又称,布尔处理机,),并设有一个执行位操作的指令集,包括,位传送、位逻辑运算、位转移,等几类指令,使单片机很适宜于位处理任务重、逻辑运算多的场合。,位操作指令,是以位地址与进位位,C,为操作数。单片机中可进行寻址的有片内,RAM20H2FH,中连续的1

33、28位及,SFR,中的可寻址位。位操作指令共,17,条,如下表所示:,50,单片机原理与应用,51,单片机原理与应用,52,位操作指令中的位地址有,四,种,表示形式,假设表示的都是,PSW,中的位,5,,则这四种表示方式如下:,直接地址方式(如,,0D5H,);,点操作符方式(如,,0D0H.5,、,PSW.5,等);,位名称方式(如,,F0,);,伪指令定义方式(如,,MYFLAG BIT F0,)。,单片机原理与应用,53,伪指令定义方式应用举例:,在交通灯控制程序中,我们把,P1.0,定义为,LEFT,,把,P1.1,定义位,RIGHT,,分别代表左转和右转信号灯,编程如下:,LEFT

34、BIT P1.0,RIGHT BIT P1.1,ORG 0100H,SETB LEFT,;左转,LCALL WAIT30S,;等待,30,秒,CLR LEFT,SETB RIGHT,;右转,可见这种方法编写的程序可读性较强。,单片机原理与应用,54,【,例,3-17】,编程统计片内,RAM 30H,开始的,20,个带符号数中负数的个数,结果存入,50H,单元。,程序如下:,MOV R2,,,#20,;置循环次数放,R2,MOV R3,,,#0,;计数初值,MOV R0,,,#30H,;首单元地址放,R0,LOOP,:,MOV A,,,R0,;取数至,A,JNB ACC.7,L1,;最高位为,0

35、表示是非负数则转,L1,,不统计,;注意这里判别累加器,A,的最高位使用的是,ACC.7,INC R3,;否则,最高位为,1,表示是负数,则统计,R3R3+1,L1,:,INC R0,DJNZ R2,,,LOOP,;,R2R2-1,若,R20,继续循环,MOV 50H,,,R3,RET,单片机原理与应用,55,【,例,3-18,】,利用位逻辑指令,模拟下图所示的逻辑电路功能。,程序如下:,PR2,:,MOV C,,,P1.1,;,(CY)(P1.1),ORL C,P1.2,;,(CY)(P1.1)V(P1.2),,得出,A,点逻辑状态,ANL C,P1.0,;,(CY)(P1.0)A,点状态

36、CPL C,;取反,得出,B,点逻辑状态,MOV F0,C,;,F0,内暂存,B,点状态,MOV C,,,P1.3,;,(CY)(P1.3),ANL C,P1.4,;,(CY)(P1.3)(P1.4),CPL C,;取反,得出,C,点逻辑状态,ORL C,F0,;,B,点状态与,C,点状态进行逻辑或,MOV P1.5,C,;运算结果送入,P1.5,RET,单片机原理与应用,56,补 码,正数的补码,:与原码相同。,例:,+9,的补码是,00001001,。(备注:这个,+9,的补码说的是用,8,位的,2,进制来表示补码的。,),负数的补码:,负数的补码等于其绝对值的原码各位取反,然后整个数加

37、1,的数值。,例:,-7,的补码。,因为给定数是负数,则符号位为,“,1,”,。,后七位:,-7,的原码(,10000111,)按位取反(,11111000,)(负数符号位不变)加,1(11111001),所以,-7,的补码是,11111001,。,数,0,的补码:,表示是唯一的,+0,的补码,=+0,的反码,=+0,的原码,=00000000,-0,的补码,=11111111+1=00000000,57,补码,已知一个数的补码,求原码的操作分两种情况,:,如果补码的,符号位为,“,0,”,,表示是一个正数,其原码就是补码。,如果补码的,符号位为,“,1,”,,表示是一个负数,那么求给定的这

38、个补码的补码就是要求的原码。,例:已知一个补码为,11111001,,则原码是,10000111,(,-7,)。,因为符号位为,“,1,”,,表示是一个负数,所以该位不变,仍为,“,1,”,。,其余七位,1111001,取反后为,0000110,;,再加,1,,所以是,10000111,。,58,【,例,3-19,】,设,X,存在,30H,单元中并以补码形式表示,根据下式,X+2,,,X0,Y=100,,,X=0,;求出,Y,值,将,Y,值存入,31H,单元。,X,,,X0,SGN(X)=0,当,X=0,SGN(X)=-1,当,X0,82,单片机原理与应用,b,按分支号转移,如:分支号=0,程

39、序转移到,ADDR0,处;当分支号=1,程序转移到,ADDR1,处;。,(1)用地址表法。设分支号已存入,A。,MTJS:MOV DPTR,#TAB ;,取表首地址,CLR C,RLC A ;,分支号2,MOV R2,A,MOVC A,A+DPTR;,取分支地址低位,PUSH ACC ;,入栈保存,MOV A,R2,INC A,MOVC A,A+DPTR;,取分支地址高位,PUSH ACC ;,入栈保存,RET ;,分支地址,PC,,转移,TAB:DW ADDR0 ;,分支地址表,DW ADDR1,ADDR0:;,程序段0,A=?,0,处理一,处理二,处理,1,n,83,(2)转移表法。用分支

40、转移指令,JMP A+DPTR,【,例,】,根据,R0,的值转向,7,个分支程序。,R010,,转向,SUB0,;,R020,,转向,SUB1,;,R0=60,,转向,SUB6,;,分析:这里应该利用,JMP A+DPTR,指令直接给,PC,赋值,使程序实现转移,程序流程如下图所示。,单片机原理与应用,84,参考程序如下:,ORG 2000H,MOV,DPTR,,,#TAB,;取转移指令表首地址,MOV A,,,R0,;取数,MOV B,,,#10,DIVAB,;,A,10,,商在,A,中,CLR C,RLC A,;,A2A,JMP A+DPTR,;,PC A+DPTR,TAB:AJMPSUB

41、0,;转移指令表,AJMP SUB1,AJMPSUB2,AJMPSUB6,单片机原理与应用,85,、循环结构,循环程序结构是汇编语言程序中常见的一种程序结构。,所谓循环,就是让计算机反复执行某一段程序。使用循环程序可以省略很多类似的代码,提高程序的代码密度。,循环程序主要包含以下三个方面:,(,1,)循环初始化。,设置循环的初始状态,如工作单元的清零,循环次数的设置等。在设置初始条件时要小心,否则很容易让程序多执行(或少执行)一次。,()循环体,,即循环程序的主体,是要求计算机重复执行的部分。这部分程序应该特别注意精简,因为要重复多次,所以这部分的精简程度决定了整个循环程序的执行效率。,()循

42、环控制。,包括对循环计数器的修改和循环结束条件的判断等内容。,单片机原理与应用,86,循环程序按结构形式,有,单重循环,与,多重循环,,所谓的,多重循环是指循环体内又有循环,。在多重循环中,只允许外重循环嵌套内重循环。不允许循环相互交叉,也不允许从循环程序的外部跳入循环程序的内部,如下图所示:,单片机原理与应用,87,【,例,】,把内部,RAM,中从,ST1,地址开始存放的数据传送到以,ST2,开始的存储区中,数据块长度未知,但已知数据块的最后一个字节内容为,00H,,而其它字节均不为,0,。并设源地址与目的地址空间不重叠。,分析:显然,我们可以利用判断每次传送的内容是否为,0,这一条件来控制

43、循环。,利用判,A,转移控制的循环流程图如下图所示。,参考程序如下:,START,:,MOVR0,,,#ST1,MOV R1,,,#ST2,LOOP,:,MOV A,,,R0,JZ ENT,MOV R1,,,A,INC R0,INC R1,SJMP LOOP,ENT,:,RET,单片机原理与应用,88,4,、子程序,能完成某项特定功能的独立程序段,可被反复调用。,子程序设计,一子程序入口用标号作为子程序名。,二调用子程序之前设置好堆栈。,三用返回指令,RET,结束子程序,并保 证堆栈栈顶为调用程序的返回地址。,四.子程序嵌套须考虑堆栈容量。,五.提供足够的调用信息:,如:子程序名、子程序功能、

44、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。,单片机原理与应用,89,MCS-51,汇编语言的程序综合性设计实例,【,例,】,利用,MCS-51,仿真实验板,外部扩展四个双色发光二极管,HL1,、,HL2,、,HL3,和,HL4,分别模拟北(,HL1,)、西(,HL2,)、东(,HL3,)、南(,HL4,)四个方向交通灯,连接电路如下图所示:,单片机原理与应用,90,分析:,双色发光二极管有一个阴极,两个阳极,G,和,R,,当,G,极为高电平时,发光二极管呈现绿色,当,R,极为高电平时,发光二极管呈现红色,当,G,和,R,极都为高电平时,发光二极管呈现黄色,根据题意要

45、求和图,3.19,的电路连接情况可以知道,P1,口的控制状态如下表所示:,单片机原理与应用,91,结合原理图可以得出相应的真值表如下表所示:,单片机原理与应用,92,单片机原理与应用,93,参考程序如下:,ORG 1000H,START,:,MOV R0,,,#0,MOV R1,,,#0,;,南北绿灯亮,5,秒钟,东西红灯亮,MOV P1,,,#10010110B,;,南北绿灯亮红灯灭,东西红灯亮绿灯灭,为状态,1,SNDL5:MOV R1,#10,ACALL DL500ms,;调用延时,500ms,程序,10,次,实现延时,5,秒,DJNZ R1,SNDL5,;,南北绿灯闪烁,3,次,每次,

46、1,秒(亮,0.5,秒,灭,0.5,秒),SS1,:,MOV P1,,,#10011111B,;,南北绿灯和红灯都灭,东西红灯亮绿灯灭,为状态,2,ACALL DL500ms,;延时,500ms,MOV P1,,,#10010110B,;,南北绿灯亮红灯灭,东西红灯亮绿灯灭,为状态,1,ACALL DL500ms,;延时,500ms,INC R0,CJNE R0,,,#03H,,,SS1,;闪烁,3,次,南北黄灯亮,2,秒,MOV P1,,,#00000110B,;,南北黄灯亮,东西红灯亮绿灯灭,为状态,3,单片机原理与应用,94,(续上),SNDL2:MOV R1,#4,ACALL DL50

47、0ms,;调用延时,500ms,程序,4,次,实现延时,2,秒,DJNZ R1,SNDL2,;东西绿灯亮,5,秒钟,南北红灯亮,MOV P1,,,#01101001B,;,东西绿灯亮红灯灭,南北红灯亮绿灯灭,为状态,4,EWDL5:MOV R1,#10,ACALL DL500ms,;调用延时,500ms,程序,10,次,实现延时,5,秒,DJNZ R1,EWDL5,;,东西绿灯闪烁,3,次,每次,1,秒(亮,0.5,秒,灭,0.5,秒),SS2,:,MOV P1,,,#01101111B,;,东西绿灯和红灯都灭,南北红灯亮绿灯灭,为状态,5,ACALL DL500ms,;延时,500ms,MO

48、V P1,,,#01101001B,;,东西绿灯亮红灯灭,南北红灯亮绿灯灭,为状态,4,ACALL DL500ms,;延时,500ms,INC R0,CJNE R0,,,#03H,,,SS2,;闪烁,3,次,东西黄灯亮,2,秒,MOV P1,,,#00001001B,;,东西黄灯亮,南北红灯亮绿灯灭,为状态,6,单片机原理与应用,95,(续上),SNDL2:MOV R1,#4,ACALL DL500ms,;调用延时,500ms,子程序,4,次,实现延时,2,秒,DJNZ R1,SNDL2,SJMP START,;,500ms,秒延时子程序,DL1500mS,:,MOV R7,,,#5,;,50

49、0ms,秒延时子程序,假定为,6MHz,晶振,DL2,:,MOV R6,,,#200,DL1,:,MOV R5,,,#250,DJNZ R5,,,DJNZ R6,,,DL1,DJNZ R7,,,DL2,RET,END,单片机原理与应用,96,MCS-51,汇编语言的程序设计经验总结,(,1,)汇编语言最大的特点就是和硬件紧密结合。,所以在使用汇编语言编写程序时首先需要弄明白自己的硬件电路,分清楚哪些是输入量,哪是输出量,对于输入输出所需的精度是多少,所需的运算速度是多快,并确定相应的算法等。,(,2,)画流程图。,使用汇编语言编写程序比使用高级语言要复杂得多,因此在编写汇编语言时要充分考虑资源

50、的问题。在画流程图时最好把所需的资源,对资源的保护都包涵进去。好的程序流程图是编程的开始。,(,3,)按照所画流程图编写程序,然后调试运行。,在编写程序时,最好加上注释,便于别人理解,也便于自己查阅。还需要注意指令后的分号一定要在英文输入法状态输入,否则在编译时会报错。,单片机原理与应用,97,汇编语言程序设计技巧:,模块化设计:,是指把一个具体的功能分解成多个小的模块,各个模块之间相互独立,而又可以相互传递参数。,分解成的小模块程序功能单一,易于调试和修改,同时使用模块化程序设计还可以使多个程序员同时进行程序的编写和调试工作,加快软件研制速度。而在模块内部要注意多使用子程序调用,一个子程序可

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服