一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

搜索
楼主: 老弹弓

[其他综合] 请教,中断程序都要用RETI 返回,以清除中断标志,和出栈, 但我的不需要返回,

  [复制链接]
 楼主| 发表于 2013-1-16 19:47 | 显示全部楼层
用了pop就不能用reti了啊~

直接取消 LCALL BACK1 试试
chjj0 发表于 2013-1-16 19:15 https://www.yleee.com.cn/images/common/back.gif



  试过,那样就没法再次进入中断了,
回复

使用道具 举报

 楼主| 发表于 2013-1-16 19:54 | 显示全部楼层
用状态标识吧,进入中断后设置好相应的标识数。

然后在主程序里根据相应的标识号去执行相关程序。

进 ...
huchuan987 发表于 2013-1-16 19:23 https://www.yleee.com.cn/images/common/back.gif



    你说的方法不错,准备实验一下,其实现在有好几种方法避免堆栈溢出了,只是心理上过不去这个坎,想找出症结在哪。

程序现在 长长短短,七七八八,大小写混杂,是在没法看 我正在整理中。
回复

使用道具 举报

 楼主| 发表于 2013-1-16 19:58 | 显示全部楼层
刚才实验了,在中断程序中用 RETI , 让它自己返回, 是没有堆栈溢出问题的,  

现在是我不想让它返回断点,而是中断完后返回我想去的地方。

回复

使用道具 举报

发表于 2013-1-16 20:27 | 显示全部楼层
回复 22# 老弹弓

因为每次响应中断后,程序指针就会入栈,然后在RETI之前程序无法再次响应同级或低级的中断请求。
回复

使用道具 举报

 楼主| 发表于 2013-1-16 20:34 | 显示全部楼层
现在问题解决了,加了 一句,就可以解决堆栈的问题,而且可以在中断完成后,跳到任意想去了地方 ,藕叶    





方法就是,中断完后,sp 再指定一遍就是了  ------MOV       SP , #0E0H      

这样屏蔽了在中断子程序中产生的堆栈混乱。 在板上实验结果,进菜单五十次后再跳会没有问题。

还想到一个问题:不知道sp指针能不能读取,要是能读取的话就能一步步找到是在哪里混乱了。
回复

使用道具 举报

发表于 2013-1-16 21:14 | 显示全部楼层
现在问题解决了,加了 一句,就可以解决堆栈的问题,而且可以在中断完成后,跳到任意想去了地方 ,藕叶 :5 ...
老弹弓 发表于 2013-1-16 20:34 https://www.yleee.com.cn/images/common/back.gif



    请把程序以省略的形式放到这里,可以让大家见识见识
回复

使用道具 举报

 楼主| 发表于 2013-1-16 21:42 | 显示全部楼层
BACK:         

               SETB       EA                               ; 开中断

               LCALL      BACK1                        ;
               MOV        SP , #0E0H                 ;     添加的                                            
               JMP        MAIN

添加的
回复

使用道具 举报

发表于 2013-1-16 23:19 | 显示全部楼层
是不是成了:
   BACK:    SETB       EA                                  ; 开中断              
                 LCALL      BACK1                            ; 为了得到一reti   
                 MOV        SP , #0E0H ;    只是添加这一句是不  ?                                                   
                 JMP          MAIN2
BACK1:       RETI                                              ; 清除中断标志//这一句还要不要?
回复

使用道具 举报

发表于 2013-1-17 00:05 | 显示全部楼层
MOV   SP , #0E0H
栈顶设置为0E0H,已经是指向特殊寄存器区中的ACC(累加器A)
入栈时候,一定把累加器A数据给篡改了。
回复

使用道具 举报

发表于 2013-1-17 00:22 | 显示全部楼层
由于中断的产生,使得正在处理的事情,‘半途而废’(因为没有后续)。
这样CPU效率就没有了,
如果楼主一定要这样,现在很多单片机都有软件复位,
干脆在中断处理程序里面,把单片机复位好了,
反正‘半途而废’的事情由于不完整也没有用了。
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-19 01:18 , Processed in 0.033998 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表