钻石会员
主题
回帖0
积分26473
阅读权限50
注册时间2009-2-7
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 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 ; 清除中断标志 |
|