Autor Tema: 16f877 solo funciona en debug desde mplab  (Leído 1987 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado danilog79

  • PIC10
  • *
  • Mensajes: 2
16f877 solo funciona en debug desde mplab
« en: 21 de Agosto de 2013, 01:36:51 »
Hola compañeros, espero me puedan ayudar con la siguiente consulta; tengo un programa en asm básico solo para probar las salidas de un 16f877, solo tiene un led conectado en cada salida
En proteus funciona bien, a través del debug del mplab (8.83) también funciona bien pero cuando tiene que funcionar "solo" no lo hace.
El cristal es de 4Mhz y los condensadores asociados de 22p.

Muchas gracias u abrazo

A continuación el código;


CONTADOR_A   EQU   0X20      ; DEFINE DIRECCIÿÓN DE MEMORIA RAM
CONTADOR_B   EQU   0X21      ; DONDE SE UBICAN LOS REGISTROS DEL
CONTADOR_C   EQU   0X22      ; CONTADOR PARA EL RETARDO
CONTADOR_D   EQU   0X23

    list p=16F877
    include "p16f877.inc"

   __CONFIG b'11111110110001'

    CONF_ADCON1 equ b'00000110'   ; Configuracion PORTA E/S digital
 
   org   0x000    ; Origen del codigo
    nop    ; No operacion
    nop    ; No operacion

;=========================================
;-----CONFIGURACION DE PUERTOS------------
    bsf   STATUS,RP0   ; Ir banco 1
    bcf   STATUS,RP1   ; Ir banco 1
 
    movlw   CONF_ADCON1   ; Configurar el PORTA como digital
    movwf   ADCON1      ; Configurar el PORTA como digital
 
      clrf   TRISA      ; PORTA como salida

    clrf   TRISB    ; PORTB como salida

   clrf   TRISC      ; PORTC como salida

   clrf   TRISD   ;   PORTD como salida

   CLRF    TRISE   ;   PORTR como salida
 
    bcf   STATUS,RP0   ; Ir banco 0
    bcf   STATUS,RP1
;-----FIN DE CONFIGURACION DE PUERTOS------
;==========================================
 


;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;-----INICIO DE PROGRAMA PRINCIPAL------------

   clrf   PORTA
   CLRF   PORTB
   CLRF   PORTC
   CLRF   PORTD
   CLRF   PORTE

START
   MOVLW   B'11111111'
   MOVWF   PORTA
   MOVLW   B'11111111'
   MOVWF   PORTB
   MOVLW   B'11111111'
   MOVWF   PORTC
   MOVLW   B'11111111'
   MOVWF   PORTD
   MOVLW   B'11111111'
   MOVWF   PORTE
   
   CALL   RET01
   
   clrf   PORTA
   CLRF   PORTB
   CLRF   PORTC
   CLRF   PORTD
   CLRF   PORTE

   CALL   RET01

GOTO START

;-----FIN DE PROGRAMA PRINCIPAL---------------
;/////////////////////////////////////////////



;=============================================================
;----------RUTINAS DE RETARDO---------------------------------

RET01;PIC Time Delay = 0.25000200 s with Osc = 4000000 Hz
      movlw   D'2'
      movwf   CONTADOR_B
      movlw   D'69'
      movwf   CONTADOR_C
      movlw   D'169'
      movwf   CONTADOR_D
loop      decfsz   CONTADOR_D,1
      goto   loop
      decfsz   CONTADOR_C,1
      goto   loop
      decfsz   CONTADOR_B,1
      goto   loop

      RETURN



;-----------FIN RUTINAS DE RETARDO----------------------------
;=============================================================


;===============================================================================================;
;      ORG       0x2007      ; DIR. DE MEM. ROM DE LA PALABRA DE CONFIGURACION
;      DATA   H'3FB1'      ; VALOR PARA LA PALABRA DE CONFIGURACION
;===============================================================================================;

 
END    ; Fin del programa

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: 16f877 solo funciona en debug desde mplab
« Respuesta #1 en: 21 de Agosto de 2013, 04:21:48 »
Lo primero que noto, antes de irme a dormir, es que tiene el bit LVP activado (bit 7 de la palabra de configuracion), cuando este bit este activado debe asegurarse de poner una resistencia a tierra en el pin RB3.

Otra cosa es que se asegure que el pin de reset este bien conectado.

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: 16f877 solo funciona en debug desde mplab
« Respuesta #2 en: 21 de Agosto de 2013, 07:57:35 »

Cuando un programa funciona en debug, y no lo hace sin debug, suele ser porque están mal definidos los fuses, normalmente el relacionado con el modo de funcionamiento del oscilador.

Yo hace "mil años" que no uso el ensamblador, un lenguaje inhumano y de muy díficil lectura, que no recomendaría ni al peor de mis enemigos, pero es que tú aún lo haces más ilegible, al definir los fuses en binario, cuando podrías usar las definiciones que tienes en el .INC, y poner algo del estilo:

__CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

(Ojo, que no digo que esta sea la traducción de tu binario, es solo un ejemplo para hacer el código más legible)


En el p16f877.inc tienes todas las deficiones para los fuses

;==========================================================================
;
;       Configuration Bits
;
;==========================================================================

_CP_ALL                      EQU     H'0FCF'
_CP_HALF                     EQU     H'1FDF'
_CP_UPPER_256                EQU     H'2FEF'
_CP_OFF                      EQU     H'3FFF'
_DEBUG_ON                    EQU     H'37FF'
_DEBUG_OFF                   EQU     H'3FFF'
_WRT_ENABLE_ON               EQU     H'3FFF'
_WRT_ENABLE_OFF              EQU     H'3DFF'
_CPD_ON                      EQU     H'3EFF'
_CPD_OFF                     EQU     H'3FFF'
_LVP_ON                      EQU     H'3FFF'
_LVP_OFF                     EQU     H'3F7F'
_BODEN_ON                    EQU     H'3FFF'
_BODEN_OFF                   EQU     H'3FBF'
_PWRTE_OFF                   EQU     H'3FFF'
_PWRTE_ON                    EQU     H'3FF7'
_WDT_ON                      EQU     H'3FFF'
_WDT_OFF                     EQU     H'3FFB'
_LP_OSC                      EQU     H'3FFC'
_XT_OSC                      EQU     H'3FFD'
_HS_OSC                      EQU     H'3FFE'
_RC_OSC                      EQU     H'3FFF'


« Última modificación: 21 de Agosto de 2013, 08:25:18 por planeta9999 »

Desconectado danilog79

  • PIC10
  • *
  • Mensajes: 2
Re: 16f877 solo funciona en debug desde mplab
« Respuesta #3 en: 22 de Agosto de 2013, 01:38:26 »
Estimados compañeros, muchas gracias por las respuestas.
Finalmente fue solucionado siguiendo el primer consejo de Sander, cambiando el valor del config a 3F31.
Saludos