嵌入式操作系统
MCS-51单片机有丰富的位操作指令,可以把大量的硬件组合逻辑用软件来代替,这样可以方便地应用于各种逻辑控制,主要用于控制线路通、断,继电器的吸合与释放等。位操作指令如表所示。
位修正指令包括: 位清零指令CLR、位置1指令SETBJ 位取反指令CPL。
位逻辑运算指令与字节逻辑运算指令相似。其中“/b it”表示取反后在进行逻辑运算。
位数据传送指令与字节数据传送指令相似。
位条件转移类指令与字节条件转移类指令相似,地址偏移量re 1的计算方法相同。
短调用指令ACALL指令的目标地址是11位。在调用子程序时,该指令与AJMP指令类似,要求调用子程序的入口地址与ACALL指令后面指令的第一个字节在同一个2 K页面的程序存储器区域中。
长调用指令LCALL指令的目标地址是16位。可在64 K程序存储器区域范围内调用任何一个子程序。
子程序返回指令RET,功能是使CPU从子程序返回到主程序的断点处,使主程序继续执行。
中断返回指令RET I,功能是使CPU从中断服务子程序返回主程序的断点处,同时清除相应的中断状态寄存器,开发中断。
执行空操作指令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
全部0条评论
快来发表一下你的评论吧 !