中断进不了

[复制链接]
 楼主| llia 发表于 2011-1-13 15:31 | 显示全部楼层 |阅读模式
IRQ        EQU    01H

TM0        EQU    02H

TM1        EQU    03H
TL0        EQU    04H
TH0        EQU    05H
PROGRAMME:
         ORG    0000H
         JMP RESET
         RTNI   
         JMP TIMER0_INT              ;T1 INT THEN GO TO T1_INT
         RTNI      
         RTNI
RESET:
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
CLEARRAM:                      ;CLEAR RAM 020H-3AFH,
    LDI    DPH        ,07H
    LDI    DPM        ,02H
   LDI    DPL        ,0FH
   LDI    WDT        ,1100B         ;CLR  WDT     WDT=64ms   
?CLinx:
   LDI    INX        ,00H
   CALL   DataPointDec
   LDA    DPH        ,BANK0
   OR     DPM        ,BANK0
   BNZ    ?CLinx
;--------------------------------------------------------         
    LDI    WDT          ,1100B         ;CLR  WDT     WDT=64ms
;--------------------------------------------------------

    LDI    PAOUT        ,1111B         ;set PA output
    LDI    PORTA        ,1111B   
    LDI    PFOUT        ,1111B         ;set PF output
    LDI    PORTF        ,1111B   
    LDI    TMP01        ,1111B
    STA    PIOUT        ,BANK7         ;set PI output
    LDI    TMP01        ,1111B
    STA    PORTI        ,BANK7   
   
    ;-----------------------------
    LDI    TM1           ,1111B
    LDI    TM0          ,0111B          ;T1RM=1111B--; 1/1       ;T1RM=1110B--;1/2 ;CLOCK/4
    LDI    TL0          ,06H            ;T1RL=06H   
    LDI    TH0          ,00H            ;T1RH=00H----; /250      ;T1RH=08H----;/125
    LDI    IRQ          ,0000B
    LDI    IE           ,1000B          ; T1 INTERRUPT ENABLE
    LDI    PA_BUF       ,0FH
    LDI    PF_BUF       ,0FH
    LDI    PI_BUF       ,0FH
;========================================================
;                  main  programme
;========================================================
MAIN:
    LDI    WDT          ,1100B         ;CLR  WDT     WDT=64ms
    JMP    TIME_CLOCK
RE_TIME_CLOCK:
JMP     KEY_SCAN  
RE_KEY_SCAN:
    JMP   KEY_PROCESS   
RE_KEY_PROCESS:

    JMP    DISPLAY
RE_LED_DISP:
    NOP
    NOP
    NOP
    NOP
    JMP    MAIN   
;========================================================
;数据指针减一子程序
;========================================================
DataPointDec:
   SBIM    DPL        ,01H
    EOR     DPL        ,BANK0
    SBCM    DPM        ,BANK0
    EOR     DPM        ,BANK0
    SBCM    DPH        ,BANK0
   RTNI
;=================================================
;timer0中断服务子程序
;=================================================TIMER0_INT:
    STA    ACC_BUF      ,BANK0  ;备份ACC的值
    LDI    IRQ  ,00H         ;清TIMER0中断请求标志
    ;-----------------------------   
COUNT_1MS:
    ADIM   CT0_1MS      ,01H
    SBI    CT0_1MS      ,04H
    BNZ    COUNT_5MS
    LDI    CT0_1MS       ,00H
    ORIM   TIME_FLAG    ,0001B         ;设置“1ms到”标志
COUNT_5MS:   
    ADIM   CT0_5MS      ,01H         ;5ms计数
    LDI    TMP_T0       ,00H
    ADCM   CT1_5MS      ,BANK0         ;5ms计数
    SBI    CT0_5MS      ,04H
    BNZ    TIMER1_INT_END
    SBI    CT1_5MS      ,01H
    BNZ    TIMER1_INT_END
    ORIM   TIME_FLAG    ,0010B         ;设置“5ms到”标志
    ORIM   CLOCK_FLAG   ,0001B         ;设置时钟计时的5ms标志位   
    LDI    CT0_5MS      ,00H         ;重置5ms计数器
    LDI    CT1_5MS      ,00H         ;重置5ms计数器
    ;-----------------------------
    ADIM   CT0_200MS    ,01H
    LDI    TMP_T0       ,00H
    ADCM   CT1_200MS    ,BANK0
    SBI    CT0_200MS    ,08H
    BNZ    TIMER1_INT_END
    SBI    CT1_200MS    ,02H
    BNZ    TIMER1_INT_END
    ORIM   TIME_FLAG    ,0100B         ;设置“0.2s到”标志   
    LDI    CT0_200MS    ,00H         ;重置0.2S计数器
    LDI    CT1_200MS    ,00H         ;重置0.2S计数器
    ;-----------------------------
TIMER1_INT_END:
    LDI    IE           ,1000B          ;打开timer0中断
    LDA    ACC_BUF      ,BANK0         ;返回ACC的值
    RTNI
wangpe 发表于 2011-1-13 18:22 | 显示全部楼层
LDI    IE           ,1000B          ; T1 INTERRUPT ENABLE
这样打开的不是TIMER0中断,是最高位的中断,即入口地址的RTNI.
 楼主| llia 发表于 2011-1-13 19:58 | 显示全部楼层
那我该怎么办呢?
yinxc 发表于 2011-1-13 20:06 | 显示全部楼层
1# llia 哦  那就上啦
wangzsa 发表于 2011-1-13 20:10 | 显示全部楼层
打开TIMER0中断啊
zhanglli 发表于 2011-1-13 20:25 | 显示全部楼层
改为  LDI   IE,0100B    就行了
 楼主| llia 发表于 2011-1-13 20:27 | 显示全部楼层
那我要time1和time0同时打开 IE应该怎么设置?
zhanglli 发表于 2011-1-13 20:40 | 显示全部楼层
改为  LDI   IE,1100B    ;这样才是打开TIMER1,TIMER0中断.
 楼主| llia 发表于 2011-1-13 20:45 | 显示全部楼层
IE  的第二位是time1的控制位
 楼主| llia 发表于 2011-1-13 21:02 | 显示全部楼层
我用的是69p55的单片机,它定义IE为第一位是time0第二位是time1第三位是time2
zhanglli 发表于 2011-1-13 21:04 | 显示全部楼层
就是要打开哪个中断就把IE的相应位置成1即可.
lium 发表于 2011-1-13 21:17 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
lium 发表于 2011-1-13 21:21 | 显示全部楼层
IE寄存器的bit3是定时器0允许标志,bit2是定时器1允许标志,bit1是定时器2的允许标志,bit0是端口中断,AD中断,按键中断允许标志。
guoyt 发表于 2011-1-13 21:38 | 显示全部楼层
楼上说得对,如果要开启定时器0中断,只要将IE设置为1000b就可以了。
guoyt 发表于 2011-1-13 21:38 | 显示全部楼层
如果要开启定时器0和定时器1中断,只要将IE设置为1100b就可以了。要开启对应的中断,只要将IE寄存器对应位置1就可以。
 楼主| llia 发表于 2011-1-13 21:52 | 显示全部楼层
多谢楼上几位
 楼主| llia 发表于 2011-1-13 22:57 | 显示全部楼层
分数都给13楼和14楼了
qichedianzhi 发表于 2011-1-14 02:36 | 显示全部楼层
c126 发表于 2011-1-14 08:12 | 显示全部楼层
学习
A2000wps 发表于 2011-1-14 14:56 | 显示全部楼层
好累[quote][/quote]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

961

主题

8893

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部