㈠ 子程序的末尾有什么指令
子程序的末尾一定要有RETI指令,子程序的调用是LCALL和ACALL。
RETI是中断返回指令,这条指令的功能和RET指令相似,2条指令的不同之处是:本指令清除了中断响应时,被置1的MCS-51内部不可寻址的 “优先级生效”触发器清零。
执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。中断指令“RETI”作为中断跳出指令,除了将堆栈中保存着的地址取出,送回PC,使程序从主程序的中断处继凳培续往下执行的作橡搏用外,还有将“优先级梁粗祥生效”触发器清零的功能。
(1)如何判别是否为子程序单片机扩展阅读
单片机汇编指令中RETI和RET的区别
通常情况下,在普通的汇编子程序中用RET做返回,在中断服务子程序中用RETI起中断返回作用。两条指令都能从堆栈中弹出断点地址并装入PC中,使CPU回到原来主程序的断点处继续运行。
然而,RET和RETI有本质的区别:当某一中断源响应后,单片机中的标志寄存器flag H和flag L其中的一个将会自动置位,用于阻止比它低级或同级的中断触发。RETI可以清除“优先级激活触发器”(即flag寄存器),以保证后续中断源的及时响应。
所以,当把RETI替换为RET后,该程序在第一次运行时可能不会出错,但在第二次运行时就会出错了。
㈡ 单片机的循环程序和子程序有什么区别与联系
呵呵 俺来帮你分析吧
单片机的循环程序和子程序有什么区别与联系
1 区别:
循环程序就是一段要反复执行的代码 只能在该处执行一次
即(执行一次要循环多次这一段代码)
子程序是一个相对独立的代码 单片机可以多次使用它 只要需要 就可以多次调用它
调用子程序要用到堆栈
每次运行只执行一次该段代码 但可以多次执行(没有次数上的限制)。
2 联系:
二者都是单片机的一种程序形式,一个子程序内部可以包含一个循环程序(如延时子程序)。
呵呵 满意就给加分喽