本帖最后由 mugangzhu 于 2009-9-8 12:26 编辑
太感谢了!我还有个问题想咨询一下
;************************************************
; 程序
;************************************************
ORG 0000H
JMP RESET
RTNI
RTNI
RTNI
JMP PORT_ISP ;PORT 中断服务程序入口地址
;*******************************************
; 子程序: PORT 中断服务程序
;*******************************************
PORT_ISP:
STA AC_BAK,00H ;备份AC 值
LDI IRQ,00H ;清中断请求标志
PORT_ISP_END:
LDA AC_BAK,00H ;取出AC 值
RTNI ;返回
;*******************************************
; 上电程序
;*******************************************
RESET:
NOP
;--------------------------------------
; 清用户寄存器
POWER_RESET:
LDI DPL,00H
LDI DPM,02H
LDI DPH,00H ;从$20 开始
POWER_RESET_1:
LDI INX,00H
ADIM DPL,01H
LDI TMP,00H
ADCM DPM,00H
BA3 POWER_RESET_2
JMP POWER_RESET_3
POWER_RESET_2:
ADIM DPH,01H
POWER_RESET_3:
SBI DPH,02H ;到$16F 结束
BNZ POWER_RESET_1
SBI DPM,07H
BNZ POWER_RESET_1
;--------------------------------------
; 初始化系统寄存器
SYSTEM_INITIAL:
;初始化I/O 口
78
LDI PORTB,00H
LDI PBCR,00H ;设置PORTB 口作为输入口
LDI PORTD,00H
LDI PDCR,0FH ;设置PORTD 口作为输出口, 输出低电平
;************************************************
; 主程序
MAIN:
;**************************************
; 模块: PORT 中断设置
;**************************************
PORT_INT_SET:
LDI SETTING,1100B ;端口上拉电阻使能, PORT 中断设置为下降沿中断
LDI PORTB,0FH ;打开PORTB 口上拉电阻
LDI PORTC,0FH ;打开PORTC 口上拉电阻
NOP ;等待稳定
NOP
NOP
LDI IRQ,00H ;清中断请求标志
LDI IE,0001B ;打开PORT 中断
HALT ;进入HALT 模式
NOP ;单片机从HALT 模式被PORT 中断唤醒
NOP
;**************************************
; 检测按键状态
KEY_CK:
LDA PORTB,00H ;读PORTB 口状态
STA TMP,00H ;暂存于临时寄存器
SBI TMP,0FH
BAZ PORT_INT_SET ;全为高电平, 则为干扰, 回到HALT 模式
CALL DELAY ;调用延时子程序延时40ms 以去抖动
LDA PORTB,00H ;再读PORTB 口
SUB TMP,00H ;比较前后两次电平状态
BNZ PORT_INT_SET ;不相等则为按键抖动, 回到HALT 模式
;确认有按键按下
EORIM TMP,0FH ;将读到的值取反, 得到正逻辑的键值
STA KEY_ST,00H ;把键值送给按键状态寄存器
KEY_CK_END:
;---------------------------------
; 显示按键状态
DISP:
LDA KEY_ST,00H
STA PORTD,00H ;将按键状态送到PORTD 口, 通过LED 进行显示
DISP_END:
;**************************************
JMP MAIN ;返回主程序
;**************************************
; 子程序: 延时大约40ms
;**************************************
DELAY:
LDI CT1,09H
LDI CT0,0EH
SBIM CT0,01H
BC $-1
SBIM CT1,01H
BC $-4
RTNI
79
;************************************************
END
上面那个程序中JMP PORT_ISP 这条指令什么时候执行,随着那条指令执行? |