Hola a todos espero me puedan ayudar con un problema como yo lo puedo ayudar a uds. El proyecto es un dispositivo de control de tiempos para una linea de producción. Estoy trabajando con un PIC16F873 en un programa que utiliza interrupción INT y desborde de TMR2. Mi problema radica en que cuando desactivo la interrupción por TMR2 el micro funciona correctamente ejecutandose correctamente la interrupcion por INT, pero cuando activo la interrupcion por TMR2 el micro se resetea aleatoriamente. Les paso el código a ver si alguien me puede orientar si las rutinas de atención de interrupción estan bien declaradas. Gracias!
org 0x00
goto inicio
;------------------------------------
org 0x04
;------------------------------------
bcf intcon,7
btfsc intcon,1
goto rb0int
btfsc pir1,1
goto tmr2out
retfie
;------------------------------------
tmr2int incf contmr2,1
movf contmr2,0
xorlw .25
btfss status,2
goto tmr2out
clrf contmr2
bcf status,2
;------------------------------------
incf unidta,1
movf unidta,0
xorlw .10
btfss status,2
goto tmr2out
bcf status,2
clrf unidta
incf deceta,1
movf deceta,0
xorlw .10
btfss status,2
goto tmr2out
bcf status,2
clrf deceta
incf centta,1
movf centta,0
xorlw .10
btfss status,2
goto tmr2out
bcf status,2
clrf centta
incf milta,1
movf milta,0
xorlw .10
btfss status,2
goto tmr2out
bcf status,2
clrf milta
tmr2out
bcf pir1,1
retfie
;------------------------------------
rb0int movlw b'01010111'
movwf t2con
movf unidta,0
movwf unidt
movf deceta,0
movwf decet
movf centta,0
movwf centt
movf milta,0
movwf milt
clrf unidta
clrf deceta
clrf centta
clrf milta
;------------------------------------
incf unidad,1
movf unidad,0
xorlw .10
btfss status,2
goto outrb0
bcf status,2
clrf unidad
incf decena,1
movf decena,0
xorlw .10
btfss status,2
goto outrb0
bcf status,2
clrf decena
incf centena,1
movf centena,0
xorlw .10
btfss status,2
goto outrb0
bcf status,2
clrf centena
incf miles,1
movf miles,0
xorlw .10
btfss status,2
goto outrb0
bcf status,2
clrf miles
outrb0 bcf intcon,1
retfie
;------------------------------------
;------------------------------------
ret1ms movlw .249
movwf reg1
uno nop
decfsz reg1,1
goto uno
return
;------------------------------------
tabla addwf pc,1
retlw b'00111111'
retlw b'00000110'
retlw b'01011011'
retlw b'01001111'
retlw b'01100110'
retlw b'01101101'
retlw b'01111101'
retlw b'00000111'
retlw b'01111111'
retlw b'01101111'
;------------------------------------
;------------------------------------
;------------------------------------
inicio bsf status,5
movlw b'00110000'
movwf trisa
movlw b'00000001'
movwf trisb
movlw b'00000000'
movwf trisc
movlw 0x07 ;todos los pines del PTOA digitales
movwf adcon1
movlw b'00000010' ;activacion de interrupcion por TMR2
movwf pie1
bcf pir1,7
clrf pie2
movlw .250
movwf pr2
bcf status,5
;-------------------------------------
movlw b'11010000' ;activacion de interrupcion por INTF, GIE y PEIE
movwf intcon
;-------------------------------------
clrf tmr2
clrf contmr2
clrf ptoa
clrf ptob
clrf ptoc
clrf unidad
clrf decena
clrf centena
clrf miles
clrf unidt
clrf decet
clrf centt
clrf milt
clrf unidta
clrf deceta
clrf centta
clrf milta
clrf puntaf
clrf puntap
bsf ptob,5 ;led cuenta encendido
bsf ptob,2 ;led 5 min encendido
;----------------------------
progra btfss ptoa,4
incf puntaf,1
movf puntaf,0
xorlw .3
btfss status,2
goto selec
clrf puntaf
selec btfsc puntaf,0
goto prom
btfsc puntaf,1
goto time
;----------------------------
;----------------------------
conta bsf ptob,5
bcf ptob,6
bcf ptob,7
movf unidad,0
call tabla
movwf ptoc
bsf ptoa,3
call ret1ms
bcf ptoa,3
movf decena,0
call tabla
movwf ptoc
bsf ptoa,2
call ret1ms
bcf ptoa,2
movf centena,0
call tabla
movwf ptoc
bsf ptoa,1
call ret1ms
bcf ptoa,1
movf miles,0
call tabla
movwf ptoc
bsf ptoa,0
call ret1ms
bcf ptoa,0
incf giro,1
movf giro,0
xorlw .50
btfss status,2
goto conta
clrf giro
goto progra
;-----------------------------
;-----------------------------
time bsf ptob,6
bcf ptob,5
bcf ptob,7
movf unidt,0
call tabla
movwf ptoc
bsf ptoa,3
call ret1ms
bcf ptoa,3
movf decet,0
call tabla
movwf ptoc
bsf ptoa,2
call ret1ms
bcf ptoa,2
movf centt,0
call tabla
movwf ptoc
bsf ptoa,1
call ret1ms
bcf ptoa,1
movf milt,0
call tabla
movwf ptoc
bsf ptoa,0
call ret1ms
bcf ptoa,0
incf giro,1
movf giro,0
xorlw .50
btfss status,2
goto time
clrf giro
goto progra
;--------------------------------
;--------------------------------
prom call ret1ms
call ret1ms
call ret1ms
call ret1ms
bsf ptob,7
bcf ptob,6
bcf ptob,5
incf giro,1
movf giro,0
xorlw .50
btfss status,2
goto prom
clrf giro
goto progra
;------------------------------------
end
Desde ya muchas gracias! Saludos!