打印

一个程序问题

[复制链接]
1565|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wenfen|  楼主 | 2010-7-29 19:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 这条指令什么时候执行
沙发
wenfen|  楼主 | 2010-7-29 19:57 | 只看该作者
随着那条指令执行?

使用特权

评论回复
板凳
zhuhuis| | 2010-7-29 20:00 | 只看该作者
是在产生了PORT口中断的时候执行

使用特权

评论回复
地板
wenfen|  楼主 | 2010-7-29 20:02 | 只看该作者
多谢,呵呵

使用特权

评论回复
5
zhuhuis| | 2010-7-29 20:02 | 只看该作者
:)

使用特权

评论回复
6
wenfen|  楼主 | 2010-7-29 20:07 | 只看该作者
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
上述程序中LDI IE,0001B;打开PORT中断是不是就响应中断程序了?

使用特权

评论回复
7
zhuhuis| | 2010-7-29 20:09 | 只看该作者
是的,打开IE后,在有中断产生时即会响应中断.

使用特权

评论回复
8
wenfen|  楼主 | 2010-7-29 20:10 | 只看该作者
多谢,其实还是不怎么明白……

使用特权

评论回复
9
zhuhuis| | 2010-7-29 20:23 | 只看该作者
RTNI
RTNI
RTNI
JMP PORT_ISP ORT 中断服务程序入口地址

以上这几条是中断入口地址,共有4个中断入口,没有用到的中断一般是用RTNI指令,JMP PORT_ISP ORT这条是口中断的入口地址;程序在主程序段执行时,当有口中断产生时,会保存现场,然后调用口中断的中断服务程序执行,执行完成后,再返回主程序,恢复现场,继续执行.

使用特权

评论回复
10
zhuhuis| | 2010-7-29 20:23 | 只看该作者
这个例子应该理解很好了吧

使用特权

评论回复
11
wenfen|  楼主 | 2010-7-29 20:26 | 只看该作者
差不多,我的理解能力有限,多谢了,结贴了

使用特权

评论回复
12
zhuhuis| | 2010-7-29 20:28 | 只看该作者
呵呵,慢慢来,多谢给的满分

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

737

主题

8940

帖子

8

粉丝