
嘿嘿 你的两个程序都有问题 怎么还能算是完美呢?
第一个程序的问题是:
在中断时,压入一个程序状态字保存 但却恢复了两个数据一个送给了程序状态字一个送给了累加器,即把主程序的断点地址取走了, 很严重的错误啊 中断程序不能正确返回主程序了
PUSH PSW
PUSH ACC ;修改后 加的指令
MOV A,B
RL A
MOV P2,A
ACALL DELAY
MOV B,A
POP PSW
POP ACC
RETI
第二个程序问题:
进入中断服务程序后 执行了CLR EA 关闭了中断 在中断返回前
没有进行开中断 即 没有执行SETB EA
问题也是挺严重的 以后系统中断源 均都不能中断了
应该改为如下:
INT: CLR EA
MOV A,#00H
MOV P2,A
ACALL DELAY
MOV A,#0FFH
MOV P2,A
SETB EA ;修改后 加的指令
RETI
呵呵 满意就选满意回答
这个当然是能使用LJMP指令重主程序跳转到子程序,或从子程序跳回主程序,但一般是不允许这样使用LJMP指令的,很容易造成程序运行混乱。因为调用子程序保护现场要将当前的地址压入堆栈,子程序返回时,会d出该地址赋值给PC指针。如果使用,必须满足以下条件:
跳出跳入成对出现,也就是说,从主程序用LJMP跳转到子程序,那么在子程序中的RET前,必须是用LJMP指令跳回。不成对出现,但是如果子程序是LJMP跳转来的控制,那么在RET前,需要压入返回位置的地址。由于单片机的RAM是有限的,程序在进入子程序之前经常会使用RAM来临时存储一些数据,包括SP指针在执行完子程序之后需要跳回的地址信息。也就是堆栈的“压栈”(PUSH)。
子程序执行完后,要执行一个RET指令结束子程序,指针指向的堆栈单元读取堆栈数据,这个过程叫做“出栈”(pop),然后指针会正常的运行下去。假如在子程序内直接用LJMP指令跳出到主程序,就会把堆栈压入的数据没有读出,造成数据丢失,SP指针指向的地址没有正确返回,造成堆栈不断增加,直到不够用了就会溢出。
1.子程序的定义
在编制加工程序中,有时会遇到一组程序段在-个程序中多次出现,或者在几个程序中都要使用它。这个典型的加工程序可以做成固定程序,并单独加以命名,这组程序段就称为子程序。
2使用子程序的目的和作用
使用子程序可以减少不必要的编程重复,从而达到减化编程的目的。主程序可以调用子程序,一个子程序也可以调用下一级的子程序。子程序必须在主程序结束指令后建立,其作用相当于一个固定循环。
3.子程序的调用
在主程序中,调用子程序的指令是一个程序段,其格式随具体的数控系统而定,FANUC-6T系统子程序调用格式为
M98 P--L--
式中M98--子程序调用字;
p--子程序号;
L--子程序重复调用次数。
由此可见,子程序由程序调用字、子程序号和调用次数组成。
4.子程序的返回
子程序返回主程序用指令M99,它表示子程序运行结束,请返回到主程序。
5.子程序的嵌套子程序调用下一级子程序称为嵌套。上一级子程序与下一级于程序的关系,与主程序与第一层子程序的关系相同。子程序可以嵌套多少层由具体的数控系统决定,在FANUC-6T系统中,只能有两次嵌套。
while(IR==0);while(IR==1);中断里面这样用,如果等待不到反馈信号不就死在那里了么有点死循环的味道最好用一个全局布耳变量来在主程序调用子程序(内容就是中断里面的语句),而中断程序只是负责改写布耳变量的状态。可以的话考虑看门狗复位或者多线程机制编程。
子程序与主程序间的参数传递 用高级语言实现的程序,其主程序与子程序之间的参数传递方法是由编译系统来规定的。 一般是采用堆栈或者参数区(地址表)来进行参数的传递。 子程序总结: 1主程序用CALL指令调用子程序,子程序执行完后用RET指令返回到主程序的CALL指令的下一条指令; 2主程序有段内调用(NEAR)和段间调用(FAR),子程序返回对应有段内返回和段间返回; 3主程序可通过寄存器﹑堆栈﹑地址表以及约定的内存变量向子程序传递参数; 4凡在子程序中用到的寄存器必须先送堆栈,返回前按送栈相反的次序出栈; 5注意子程序调用时堆栈指针的变化; 84 系统服务子程序 除用户设计的子程序外, *** 作系统还提供大量的系统服务子程序,通常称为中断服务程序。 这类程序通常用于完成必要的输入/输出功能和一些必要的系统 *** 作。
以上就是关于8051单片机中断子程序如下,延时子程序是0.2秒的,中断触发时正常,中断返回时要等几十秒的样子,求解答。全部的内容,包括:8051单片机中断子程序如下,延时子程序是0.2秒的,中断触发时正常,中断返回时要等几十秒的样子,求解答。、安川机器人怎么从子程序跳转到主程序、plc如何在子程序中实现延时等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)