Hola amigos, soy nuevo en el foro. Se que hay temas para encender leds y mas cosas. Mi problema no radica en no saber hacerlo, sino en que no entiendo que parte del codigo esta mal por la cual no funciona un programa tan simple. Por mas vueltas que le doy no llego a la solucion. El compilador es XC8 , programado en MPLAB. el pic es el 12f683.
#include <stdio.h>
#include <stdlib.h>
#include <xc.h> // Librería XC8
#include <pic12f683.h>
#define _XTAL_FREQ 4000000 // Indicamos a que frecuencia de reloj esta funcionando el micro
// CONFIG
#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown Out Detect (BOR enabled)
#pragma config IESO = ON // Internal External Switchover bit (Internal External Switchover mode is enabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)
void led3(int arg);
void main() {
TRISIObits.TRISIO0 = 0x00;// Configurado como Salida
TRISIObits.TRISIO1 = 0x00;// Configurado como Salida
TRISIObits.TRISIO2 = 0x00;// Configurado como Salida
TRISIObits.TRISIO4 = 0x00;// Configurado como Salida
TRISIObits.TRISIO5 = 0x01;// Configurado como Entrada
GPIObits.GP0 = 0x00;//Pin desactivado
GPIObits.GP1 = 0x00;//Pin desactivado
GPIObits.GP2 = 0x00;//Pin desactivado
GPIObits.GP4 = 0x00;//Pin desactivado
GPIObits.GP5 = 0x00;//Pin desactivado
while (1) {
int sw = GPIObits.GP5; //declaro la varia "sw" con el valor de GP5
led3(sw); //llamo a la funcion led3()
}
}
void led3(int arg) {
int A;
switch (arg) { //cuando arg=sw
case 0x01: // Sea 0x01
GPIObits.GP0 = 0x01; // Activo el GP0 (enciende un led2)
for(A=1;A<10;A++){ //Creo un bucle de 1 a 10
GPIObits.GP1 =! GPIObits.GP1; //Enciendo y apago GP1 (led1)
__delay_ms(1000);
}
break;
case 0x00: // Sea 0x00
GPIObits.GP1 = 0x01; // Enciendo GP1 (led1)
break;
}
}