《片机课件》PPT课件.ppt_第1页
《片机课件》PPT课件.ppt_第2页
《片机课件》PPT课件.ppt_第3页
《片机课件》PPT课件.ppt_第4页
《片机课件》PPT课件.ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

单片机原理及其应用 主讲 孟庆申河北师范大学物理学院电子信息工程系 第四章MCS 51指令系统 8控制转移指令 1 无条件转移指令 A短跳转指令 AJMPaddr11 例KWR AJMPaddr11如果addr11 00100000000B 标号KWR地址为1030H 则执行该条指令后 程序转移到 0001000100000000B 即转移到1100H 当KWR为3030H时 执行该条指令后 程序转移到3100H 本指令可实现2K字节范围内的无条件跳转 该指令在运行时先将PC 2 得到当前PC值 然后将其高5位和指令第一字节的高三位以及指令第二字节相结合得到 PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0 送入PC形成转跳目的地址 本指令可实现256字节范围内的无条件跳转 该指令在运行时先将PC 2 得到当前PC值 然后将指令中的有符号的位移量rel加到当前PC上 送入PC形成转跳目的地址 转向的目标地址可以在这条指令前128字节到后127字节之间 B相对转移指令 SJMPrel 例KRD SJMPPKRD 如果KRD标号值为0100H 即SJMP这条指令的机器码存放于0100H和0101H这两个单元中 标号PKRD值为0123H 即转跳的目标地址为0123H 则指令的第二字节 相对偏移量 应为rel 0123H 0102H 21H 例执行指令 LJMP8100H执行结果是使程序转移到8100H C长跳转指令 LJMPaddr16 这条指令执行时把指令的第二和第三字节分别装入PC的高位字节和低位字节中 即无条件地转向指定地址 D基寄存器加变址寄存器间接转移指令 JMP A DPTR 这条指令的功能是把累加器中8位无符号数与数据指针DPTR中的16位数据相加 模216 结果作为下一条指令地址送入PC 不改变累加器和数据指针内容 也不影响标志位 PM MOVR1 ARLAADDA R1MOVDPTR PTMBJMP A DPTRPTMB LJMPPM0LJMPPM1LJMPPM2LJMPPM3LJMPPM4LJMPPM5LJMPPM6LJMPPM7 例 如果累加器A中存放等处理命令编号 0 7 程序存贮器中存放着标号为PMTB的转移表 则执行下面的程序 将根据A内命令编号转向相应的命令处理程序 2 条件转移指令 条件转移指令是依据某种特定条件而转移的指令 条件满足才转移 条件不满足时则顺序执行下面的指令 当满足条件时 把当前PC值与有符号的相对偏移量相加得到转向地址 A测试条件符合转移指令 JZrel 如果累加器ACC为0 则执行转移 JNZrel 如果累加器ACC不为0 则执行转移 JCrel 如果进位标志CY为1 则执行转移 JNCrel 如果进位标志CY为0 则执行转移 JBbit rel 如果直接寻址的位值为1 bit 1 则执行转移 JNBbit rel 如果直接寻址的位值为0 bit 0 则执行转移 JBCbit rel 如果直接寻址的位值为1 bit 1 则执行转移并清 0 直接寻址位 B比较不相等转移指令 CJNEA direct rel CJNEA data rel CJNERn data rel CJNE Ri data rel 这组指令的功能是比较两个操作数的大小 如果值不相等 则转移 转移地址为 当前PC值加相对偏移量 注意 如果第一操作数 无符号整数 小于第二操作数 则置位进位标志位于CY 否则 清 0 CY 不影响任何一个操作数的内容 例执行下面程序后将根据A的内容大于60H 等于60H 小于60H三种情况做不同处理 CJNEA 60H NEQ A 不等于60H转移 EQ A 等于60H处理程序 NEQ JCLOW A 小于60H转移 A 大于60H处理程序 LOW A 小于60H处理程序 这组指令把源操作数减1 结果回送到源操作数中去 如果结果不为 0 则转移 源操作数有寄存器寻址和直接寻址方式 这组指令允许把内部RAM单元用作程序计数器 C减1不为0转移指令 DJNZRn rel DJNZdirect rel 例 延时程序 START SETBP1 1DL MOV30H 03HDL0 MOV31H 0F0HDL1 DJNZ31H DL1DJNZ30H DL0CPLP1 1AJMPDL 本程序的功能是 从P1 1输出一个方波 3 调用和返回指令 子程序 具有一定功能的公用程序段 子程序的特点 参数传递和子程序返回 子程序调用执行过程 调用子程序时 把下一条指令地址 当前PC值 保留到堆栈中 堆栈指针SP加2 子程序的起始地址送PC CPU转向并执行子程序 当遇到返回指令时 从堆栈中取出中断处的地址并送回到PC 于是CPU又回到主程序继续执行下去 子程序可以被主程序多次调用 也可以在子程序中再调用别的子程序 即子程序嵌套 A短调用指令 ACALLaddr11 执行这条指令时 把当前PC值 下一条指令的地址 压进堆栈 先进PCL 后进PCH 堆栈指针SP加2 并把当前PC值的高5位和指令第一字节的高三位以及指令第二字节相结合得到 PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0 即为子程序的起始地址 并送入PC转向执行子程序 结果 SP 62H 内部RAM中堆栈区内 61H 25H 62H 01H PC 0345H 例若 SP 60H 标号MA值为0123H 子程序SUB位于0345H 则执行指令 MA ACALLSUB B长调用指令 LCALLaddr16 执行本指令时 把当前PC值 下一条指令的地址 压进堆栈 先进PCL 后进PCH 堆栈指针SP加2 接着把指令的第二字节和第三字节 a15a14a13a12a11a10a9a8 a7a6a5a4a3a2a1a0 分别装入PC的高位字节和低位字节 从而转向执行子程序 例 若 SP 60H 标号START值为0100H 标号DIR值为8100H 则执行指令 START LCALLDIR 结果为 SP 62H 61H 03H 62H 01H PC 8100H 本指令必须放在子程序的结尾 C返回指令 从子程序返回指令 RET 这条指令的功能是从堆栈中退出被压入的PC值的高字节和低字节 把堆栈指针SP减2 即重新得到子程序调用指令后面的指令地址 继续程序的运行 例若 SP 62H 62H 07H 61H 30H 则执行指令 RET 结果 SP 60H PC 0730H CPU从0730H开始执行程序 MAIN MOVA 03HML MOVP1 AACALLDLMXCH CPLAJMPMLDL MOVR7 64HDL1 MOVR6 00HDL6 DJNZR6 DL6DJNZR7 DL1RET 例 如图所示 在P1 0 P1 3分别装有两个红灯和两个绿灯 则下面就是一种红绿灯定时切换的程序 D空操作指令NOP该指令延时CPU一个

温馨提示

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

评论

0/150

提交评论