我想使用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
~~~~~~~~~
答案 0 :(得分:0)
您在0800
上使用了错误的中断向量。
高中断向量:0008h
中断向量低:0018h
ORG 0x0008
BTFSC intcon,int0if
CALL int0_isr
RETFIE