PIC16F628A LED parpadeante

4

Estaba configurando un PIC16F628A para un simple programa Hello World (LED parpadeante) y en algún lugar del proceso, he fallado. El LED permanece encendido en el pin especificado y no "parpadea". Estoy usando el oscilador interno (que resuena a 4 MHz). Este es mi código (usando el compilador XC8):

#include <xc.h>

__CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & BOREN_ON & LVP_ON & CPD_OFF & CP_OFF);

#define _XTAL_FREQ 4000000

int main() {
    TRISB0 = 0;
    while(0) {
        RB0 = 1;
        __delay_ms(1000);
        RB0 = 0;
        __delay_ms(1000);
    }
    return (0);
}

Y mi esquema:

He leído que esto podría ser un problema de MCLR, pero he configurado los fusibles para establecer MCLR como un pin de entrada como se muestra en el código.

    
pregunta Seif Shawkat

1 respuesta

5

Tienes un par de problemas con tu código y circuito.

  1. Un bucle while con una condición falsa nunca se repetirá. ¿Quieres poner "while (0)" o es un error tipográfico? De cualquier manera, ese bucle nunca está en bucle. Cambia el 0 a un 1.

  2. El PIC16F628A tiene un pin PGM que usa en el modo LVP (Programación de baja tensión). Comparte el mismo pin que RB4. El pin PGM debe estar conectado a tierra en operación normal y elevado durante la programación (su programador debe hacerlo alto durante una secuencia de programación). Si el pin PGM se deja flotando, el chip se reiniciará aleatoriamente sin ninguna razón explicable. O simplemente no se ejecuta en absoluto.

  3. Los sistemas basados en microcontroladores suelen ser hardware de un solo propósito. No hay un sistema operativo, por lo que el código que programa en la MCU no tiene una entidad de nivel superior a la que volver. Por esa razón, la función main () debería ser void y no debería haber una declaración de retorno al final. Definir main () para devolver un int probablemente no rompa nada, pero se considera una mala práctica de codificación.

respondido por el Dan Laks

Lea otras preguntas en las etiquetas