如何从数据手册中使PIC18F4520启动RTC中断

时间:2019-04-02 10:14:20

标签: assembly interrupt pic microchip mplab

我想使用timer1模块作为RTC构建一个二进制时钟,并带有数据表中的代码示例,但是尽管我在其周围编写了必要的代码,但中断不会触发。我错过了寄存器设置或内存地址吗?我是PIC编程的新手,但是有一些汇编方面的经验。

        UDATA_ACS
secs    RES 1
mins    RES 1
hours   RES 1

ORG 0x0000            ; processor reset vector
    GOTO    MAIN                   ; go to beginning of program
ORG 0x0800
    BTFSC   intcon,int0if
    CALL int0_isr
    RETFIE

MAIN_PROG CODE                      ; let linker place main program
ORG 0x0100
MAIN
    MOVLW  080h        ; Preload TMR1 register pair
    MOVWF  TMR1H       ; for 1 second overflow
    CLRF   TMR1L
    MOVLW  b'00001101' ; Configure for external clock,
    MOVWF  T1CON       ; Asynchronous operation, external oscillator
    CLRF   secs        ; Initialize timekeeping registers
    CLRF   mins        ;
    MOVLW  .12
    MOVWF  hours
    BCF    intcon,int0if
    BSF    INTCON,INT0IE
    BCF    INTCON2,INTEDG0
;    BSF  rcon,ipen
;    BSF  intcon,peie
    BSF    PIE1, TMR1IE ; Enable Timer1 interrupt
    BSF    intcon,gie

    clrf    lata
    movlw   0x0f
    movwf   adcon1
    movwf   0x07
    movwf   cmcon
    movlw   0x00
    movwf   trisa
    clrf    portb
    movlw   0x00
    movwf   trisb
    clrf    latd
    movlw   0x00
    movwf   trisd

    movlw   secs
    movwf   lata
    movlw   mins
    movwf   latb
    movlw   hours
    movwf   latd
here
    goto    here

    RETURN

int0_isr 
    ;from datasheet p.133
    RETFIE
~~~~~~~~~

1 个答案:

答案 0 :(得分:0)

您在0800上使用了错误的中断向量。
高中断向量:0008h
中断向量低:0018h

ORG 0x0008
    BTFSC   intcon,int0if
    CALL int0_isr
    RETFIE