¿Por qué mi PIC16F877 se reinicia sólo?

Hola. Tengo un problema con dicho PIC, cada pocos segundos se reinicia sin ninguna razón real para ello que pueda ver.

En el esquemático muestro como lo tengo montado (siento que esté un poco chapucero pero creo que en todo caso se entiende y me salía más rápido ponerlo con el Paint, es el archivo contador7.jpg).

Por otra parte yo entiendo que el código está bien:


#include <p16F877.inc>
LIST p=16F877 ;Tipo de PIC

;**************************************************************
;Define la posición del resultado
CONTADOR EQU 0x22
;************************************************************
ORG 00 ;Comando que indica al Ensamblador
;la dirección de la memoria de programa
;donde situar la siguiente instrucción
;**************************************************************



BANKSEL ADCON1

MOVLW 0x06
MOVWF ADCON1
MOVLW 0x10
MOVWF TRISA
MOVLW 0x00
MOVWF TRISC

BANKSEL PORTA

CLRF PORTA

CLRF PORTC

MOVLW 0x3F

MOVWF PORTC

INICIO CLRF CONTADOR

P1 BTFSC PORTA,4

GOTO P1

P0 BTFSS PORTA,4

GOTO P0

INCF CONTADOR,F

MOVLW 0xA

SUBWF CONTADOR,W

BTFSC STATUS,C

CLRF CONTADOR

MOVF CONTADOR,W

CALL CD7SEG

MOVWF PORTC

GOTO P1

CD7SEG ADDWF PCL,F


RETLW B'00000110'
RETLW B'01011011'
RETLW B'01001111'
RETLW B'01100110'
RETLW B'01101101'
RETLW B'01111100'
RETLW B'00000111'
RETLW B'01111111'
RETLW B'01100111'
RETLW B'00111111'

END



Y los bits de configuración entiendo que también (se muestran en bitsconfig):


Sin embargo a los 5 segundos o así de la primera pulsación el "0" se vuelve a poner en el display 7 segmentos.

Lo peor es que no puedo poner el PIC en depuración.

¿Alguien ve dónde puede estar el fallo? ¿O quizás el PIC está estropeado?

Muchas gracias por la atención.
 

Adjuntos

  • contador7.jpg
    contador7.jpg
    63.1 KB · Visitas: 13
  • bitsconfig.JPG
    bitsconfig.JPG
    37.5 KB · Visitas: 8
Hola. Tengo un problema con dicho PIC, cada pocos segundos se reinicia sin ninguna razón real para ello que pueda ver.

En el esquemático muestro como lo tengo montado (siento que esté un poco chapucero pero creo que en todo caso se entiende y me salía más rápido ponerlo con el Paint, es el archivo contador7.jpg).

Por otra parte yo entiendo que el código está bien:


#include <p16F877.inc>
LIST p=16F877 ;Tipo de PIC

;**************************************************************
;Define la posición del resultado
CONTADOR EQU 0x22
;************************************************************
ORG 00 ;Comando que indica al Ensamblador
;la dirección de la memoria de programa
;donde situar la siguiente instrucción
;**************************************************************



BANKSEL ADCON1

MOVLW 0x06
MOVWF ADCON1
MOVLW 0x10
MOVWF TRISA
MOVLW 0x00
MOVWF TRISC

BANKSEL PORTA

CLRF PORTA

CLRF PORTC

MOVLW 0x3F

MOVWF PORTC

INICIO CLRF CONTADOR

P1 BTFSC PORTA,4

GOTO P1

P0 BTFSS PORTA,4

GOTO P0

INCF CONTADOR,F

MOVLW 0xA

SUBWF CONTADOR,W

BTFSC STATUS,C

CLRF CONTADOR

MOVF CONTADOR,W

CALL CD7SEG

MOVWF PORTC

GOTO P1

CD7SEG ADDWF PCL,F


RETLW B'00000110'
RETLW B'01011011'
RETLW B'01001111'
RETLW B'01100110'
RETLW B'01101101'
RETLW B'01111100'
RETLW B'00000111'
RETLW B'01111111'
RETLW B'01100111'
RETLW B'00111111'

END



Y los bits de configuración entiendo que también (se muestran en bitsconfig):


Sin embargo a los 5 segundos o así de la primera pulsación el "0" se vuelve a poner en el display 7 segmentos.

Lo peor es que no puedo poner el PIC en depuración.

¿Alguien ve dónde puede estar el fallo? ¿O quizás el PIC está estropeado?

Muchas gracias por la atención.

Hola....a vuelo de pájaro...raro la resistencia de 10K desde VCC a la entrada del Ocilador a Xtal que NO VA y el fusible habilitado del WachDog tampoco va.
Proba con agregarle e incluirle al archivo asm antes de compilarlo " __config 0x3D39" en una linea despues de la declaración del Micro controlador que es solamente el oscilador a XT habilitado y después si querés le habilitas el resto de las opciones una vez que funcione.
Te aclaro que no programo en asembler.
Saludos.

Ric.
 
Hola....a vuelo de pájaro...raro la resistencia de 10K desde VCC a la entrada del Ocilador a Xtal que NO VA y el fusible habilitado del WachDog tampoco va.
Proba con agregarle e incluirle al archivo asm antes de compilarlo " __config 0x3D39" en una linea despues de la declaración del Micro controlador que es solamente el oscilador a XT habilitado y después si querés le habilitas el resto de las opciones una vez que funcione.
Te aclaro que no programo en asembler.
Saludos.

Ric.

Muchas gracias por la respuesta, ahora va mejor pero todavía tiene un fallo que es que si no se pulsa lo bastante seguido del número que se esté vuelve a 0 (no se resetea sólo, si no al pulsar el botón tras dejarlo un tiempo sin pulsar).

He hecho lo de quitarle la resistencia y los 5V (antes de cambiarle el código sólo medio iba así), he cambiado lo del watchdog y puesto el __config indicado, pero ahora da ese fallo.

He probado también con esta config :__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _XT_OSC & _LVP_OFF, (se me hace muy lioso buscar el hex exacto) que entiendo debería de funcionar, pero sigue en las mismas.

Un saludo.
 
Atrás
Arriba