一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

搜索
楼主: 老弹弓

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

  [复制链接]
发表于 2013-1-16 01:02 | 显示全部楼层
本帖最后由 snoopy8008 于 2013-1-16 01:07 编辑

中断就是放下手里正在忙的活,先干急活,干完急活回来接着干原来的活。
不用返回,就说明你的程序根本没事可干,只是在等着这个中断的到来,反正程序闲着也是闲着,让它查询你要处理的这个事件就行了,就不用中断了。
回复

使用道具 举报

发表于 2013-1-16 08:24 | 显示全部楼层
程序结构很重要
回复

使用道具 举报

发表于 2013-1-16 08:40 | 显示全部楼层
唉~~~~~~~~~
回复

使用道具 举报

发表于 2013-1-16 16:55 | 显示全部楼层
你这个需求不需要中断的啊,查询即可。很简单的,检测按键接口即可。按键用10K电阻上拉,按键按下后IO口短接到地。查询该口是否为“0”,用“JB”语句即可。为“1”则跳过,为“0”则调用延时程序,延时后再检测,如果还是为“0”则执行你的程序,反之跳出查询程序。
回复

使用道具 举报

 楼主| 发表于 2013-1-16 17:34 | 显示全部楼层
你这个需求不需要中断的啊,查询即可。很简单的,检测按键接口即可。按键用10K电阻上拉,按键按下后IO口短接 ...
快活丞 发表于 2013-1-16 16:55 https://www.yleee.com.cn/images/common/back.gif



    明白您的意思, 但我得在正常程序中进入菜单啊,单片机的正事是  AD转换,驱动tft , 当需要设置系数或改变字体颜色时,通过中断进入设置菜单, 设置完毕后,再跳到干正事的程序。 我进入菜单后的按键处理就是用您说的办法。

好像也有不开中断,在程序中不断查询某个按键,按键按下时,就跳到按键处理程序的, 以前没用过这种方法,感觉不如中断来的直接。
回复

使用道具 举报

 楼主| 发表于 2013-1-16 18:47 | 显示全部楼层
本帖最后由 老弹弓 于 2013-1-16 18:51 编辑

无聊,写一些底层的驱动玩,没打算做什么。

1.jpg
2.jpg
3.jpg
回复

使用道具 举报

 楼主| 发表于 2013-1-16 18:54 | 显示全部楼层
本帖最后由 老弹弓 于 2013-1-16 18:57 编辑

把程序贴上来,有空的帮忙看两眼,现在问题是,进中断后 堆栈溢出, 在中断后,用了两个POP  和一个reti  来代替RETI 的功能。

               ORG         0000H
               JMP         MAIN
               ORG         0003H                       ; 中断0 中断人口  
               JMP         CAI_DAN      
               ORG         0058H
MAIN:
               MOV       SP , #0E0H                       ; 堆栈设置的比较靠后,               
               SETB      EA                                   ; 开总中断
               SETB      EX0                                 ; 中断0 允许
MAIN1:     LCALL    PLAY_AN_NIU                    ;  写最下方 四个按钮提示字         
MAIN2:                       
               LCALL    PLAY_BAT                         ; 画电池图标
               LCALL    PLAY_BT_V                       ; 电压显示。
                     
               jmp        MAIN2
;************************************************主程序***************************************************
CAI_DAN:   
               POP          ACC
               POP          ACC                             ;----------这两句能平衡中断后的压栈吗?
               CLR          EA  
               LCALL       DELAY400MS
KEY:        LCALL       KEY_prepare                ; 键盘准备 按键口置1 准备读取状态      
               
KEY1:       JNB         KEY_UP   ,UP1               ; 向上按键
               JNB         KEY_DW   ,DW1            ; 向下按键
               JNB         KEY_RUN  , BACK
               JMP         KEY1
DW1:           
               DEC         CCAP1H  
               DEC         CCAP1H  
               JMP          PLAY_LIGHT      
UP1:         INC         CCAP1H
               INC          CCAP1H                           ; 这里加两次 每次增加约1 %
PLAY_LIGHT:  
               LCALL       DELAY200ms
               LCALL       PLAY_light_NUMBER        ; 数字
               LCALL       PLAY_light_DISE             ; 底色
               LCALL       PLAY_light_TIAO             ; 亮条
               JMP           KEY1
;------------------------------------------------------------------------------------------
BACK:         
               SETB       EA                                  ; 开中断
               LCALL      BACK1                            ; 为了得到一个reti                                                     
               JMP          MAIN2
BACK1:    nop
               RETI                                              ; 清除中断标志
回复

使用道具 举报

发表于 2013-1-16 19:15 | 显示全部楼层
用了pop就不能用reti了啊~

直接取消 LCALL BACK1 试试
回复

使用道具 举报

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

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

进了中断而不返回,很容易把人搞晕的,以后程序维护很不方便。
回复

使用道具 举报

发表于 2013-1-16 19:25 | 显示全部楼层
回复 17# 老弹弓


   能不能上个完整的程序???
回复

使用道具 举报

本版积分规则

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

GMT+8, 2025-8-19 01:15 , Processed in 0.030175 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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