PIC16f877A: Trabajar en modo de depuración no funciona en modo de lanzamiento

0

Estoy enfrentando un problema con mi controlador PIC16f877A.

Está funcionando en modo de depuración con PicKit3 conectado. Pero cuando programo el dispositivo para el modo de liberación, no da señales de funcionar.

Estoy usando MPLAB X con el compilador XC8

También he conectado una resistencia de 10k entre MCLR y amp; VDD.

Pero sigue sin poder resolver el problema.

Aquí está mi main.c

#include "lib/System/config.h"
#include <xc.h>
#include <pic16f877a.h>
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <stdbool.h>
#include "lib/UART/UARTLib.h"
#include "lib/I2C/I2CInterface.h"
#include "lib/I2C/idmodule.h"

// CONFIG
#pragma config FOSC = HS       // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)


static unsigned char data_Pkt_1[ MAX_BUF_SIZE ] = { NULL } ;                                // this is the buffer to accept incoming data
static unsigned char data_Pkt_2[ MAX_PKT_SIZE - MAX_BUF_SIZE ] = { NULL } ;             // this is the buffer to accept incoming data

bool isDataPktReceived = false;                         // Flag to check the incoming Data Pkt
bool opStatus = WRITE;

char start_byte_addr[] = { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70 } ;
int maxBytes;
int Error = 0;

void receiveDataPkt();                                  // Function to receive Data from the PC
void transmitDataPkt();                                 // Function to transmit Data to the PC

void initIDComm();                                      // Function to Initialize ID Module Communication
void initBuffers();                                     // Initialize buffers with 0x00
void write_IDM( void );                                 // Function to Write ID Module
void read_IDM( void );                                  // Function to Read ID Module

bool validateData( void );                              // Function to Validate Data
void createResponsePkt( bool opStatus );                // Function to Create Response Pkt 
void createErrorPkt( void );                            // Function to create Error Pkt
void interrupt ISR(void);                               // Interrupt Service Routine

/**********************************************************
 Function : Main Function to Initialize the Operation
 Parameter : None
 Return   : None
***********************************************************/
int main()
{
    UARTInit();
    idmInitI2C();

    while (1)
    {    
        while ( idmCheckConnection() ) {
            if ( UART_GetRecvByteStatus() ) {
                UART_SetRecvByteStatus(false);              // Set Received flag False
                receiveDataPkt();                           // Receive Incoming data
            }

            if ( isDataPktReceived ) {
                initIDComm();
                isDataPktReceived = false;
            }
        }
    }
    return 0;
}

Por favor, ayúdame a solucionar el problema.

    
pregunta skg

2 respuestas

1

Fue un problema en el microcontrolador. Cambié el microcontrolador y amp; el problema se resolvió.

Pero aún es necesario obtener respuesta. ¿Cómo funciona un microcontrolador defectuoso en el modo de depuración? Bueno, eso sería un nuevo hilo.

    
respondido por el skg
2

De acuerdo con este enlace y enlace

MPLABX tiene procesos de compilación independientes dependiendo de si desea depurar su destino o ejecutarlo de forma independiente. Parece que para ejecutar su destino (independiente) simplemente presione Ejecutar proyecto . Según Microchip esto:

Genera (hace) el proyecto en modo de lanzamiento, programa el objetivo y libera el dispositivo para que se reinicie, de modo que el programa comience a ejecutarse. La herramienta de depuración no tiene control sobre la ejecución del programa en este modo.

    
respondido por el Steve G

Lea otras preguntas en las etiquetas