Estoy tratando de manejar un registro de desplazamiento usando un PIC12F683 , así que escribí esto código para una prueba simple:
#include <pic.h>
#include <pic12f683.h>
#define _XTAL_FREQ 4000000
// GP0 -> data
// GP1 -> latch
// GP2 -> clock
void clear_shift_register() {
GPIObits.GP1 = 0;
GPIObits.GP0 = 0;
GPIObits.GP2 = 1;
GPIObits.GP2 = 0;
GPIObits.GP2 = 1;
GPIObits.GP2 = 0;
GPIObits.GP2 = 1;
GPIObits.GP2 = 0;
GPIObits.GP2 = 1;
GPIObits.GP2 = 0;
GPIObits.GP2 = 1;
GPIObits.GP2 = 0;
GPIObits.GP2 = 1;
GPIObits.GP2 = 0;
GPIObits.GP2 = 1;
GPIObits.GP2 = 0;
GPIObits.GP2 = 1;
GPIObits.GP2 = 0;
GPIObits.GP1 = 1;
}
void main(void) {
TRISIO = 0x00;
clear_shift_register();
while(1) {
GPIObits.GP1 = 0;
GPIObits.GP0 = 1;
GPIObits.GP2 = 0;
GPIObits.GP2 = 1;
GPIObits.GP0 = 0;
//GPIObits.GP0 = 1;
GPIObits.GP2 = 0;
GPIObits.GP2 = 1;
GPIObits.GP0 = 0;
GPIObits.GP0 = 1;
GPIObits.GP2 = 0;
GPIObits.GP2 = 1;
GPIObits.GP0 = 0;
//GPIObits.GP0 = 1;
GPIObits.GP2 = 0;
GPIObits.GP2 = 1;
GPIObits.GP0 = 0;
GPIObits.GP1 = 1;
__delay_ms(500);
}
}
Cuando programé el PIC y lo encendí, no pasó nada. Así que decidí conectar algunos LED directamente a los pines del PIC para saber qué estaba haciendo:
- GP0 está APAGADO todo el tiempo
- GP1 está ENCENDIDO todo el tiempo, pero periódicamente hace un parpadeo de una sola vez muy rápido
- GP2 está APAGADO todo el tiempo
¿Por qué obtengo estos resultados extraños y cómo corregirlos?