单片机指令系统与子程序调用的操作方法

嵌入式操作系统

57人已加入

描述

  MCS-51单片机有丰富的位操作指令,可以把大量的硬件组合逻辑用软件来代替,这样可以方便地应用于各种逻辑控制,主要用于控制线路通、断,继电器的吸合与释放等。位操作指令如表所示。

  单片机

  单片机

  (1)位修正指令

  位修正指令包括: 位清零指令CLR、位置1指令SETBJ 位取反指令CPL。

  (2) 位逻辑运算指令

  位逻辑运算指令与字节逻辑运算指令相似。其中“/b it”表示取反后在进行逻辑运算。

  (3) 位数据传送指令

  位数据传送指令与字节数据传送指令相似。

  (4)位条件转移类指令

  位条件转移类指令与字节条件转移类指令相似,地址偏移量re 1的计算方法相同。

  单片机

  (1) 短调用指令

  短调用指令ACALL指令的目标地址是11位。在调用子程序时,该指令与AJMP指令类似,要求调用子程序的入口地址与ACALL指令后面指令的第一个字节在同一个2 K页面的程序存储器区域中。

  (2)长调用指令

  长调用指令LCALL指令的目标地址是16位。可在64 K程序存储器区域范围内调用任何一个子程序。

  (3) 子程序返回指令

  子程序返回指令RET,功能是使CPU从子程序返回到主程序的断点处,使主程序继续执行。

  (4) 中断返回RETI

  中断返回指令RET I,功能是使CPU从中断服务子程序返回主程序的断点处,同时清除相应的中断状态寄存器,开发中断。

  (5) 空操作指令

  执行空操作指令NOP,除PC内容加1外,不影响任何标志位和其他寄存器。NOP指令常用来产生一个机器周期的延迟。

  调用及回过程:主程序调用了子程序,子程序执行完之后必须再回到主程序继续执行,不能“一去不回头”,那么回到什么地方呢?是回到调用子程序的下面一条指令继续执行

  单片机

  调用指令

  LCALL addr16 ;长调用指令

  ACALL addr11 ;短调用指令

  上面两条指令都是在主程序中调用子程序,两者有一定的区别,但在开始学习单片机的这些指令时,能不加以区别,而且能用LCALL 标号,ACALL 标号,来理解,即调用子程序。

  返回指令则说了,子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就能了,即执行 ret指令

  单片机在调用子程序时,进行了怎样的堆栈操作

  栈: 在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。

  当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。

  堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。

  单片机中如何调用写好的子程序?

  使用调用指令LCALL 可以去调用已经编写好了的子程序。

  使用格式:

  LCALL 子程序名字(即子程序的首地址 用符号表示 叫符号地址)

  例如:现有一个子程序

  YS1MS: MOV R7,# 4

  LL1: MOV R6,#200

  LL2: DJNZ R6,LL2

  DJNZ R7,LL1

  RET

  可以在主程序中 调用子程序

  LCALL YS1MS

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分