Ensamblaje PIC12F683 o PIC16F688 o ejemplo de LED parpadeante C con compilador XC8, MPASM o gputils

Hola, soy nuevo en la programación de PIC y finalmente tengo mi entorno de desarrollo funcionando, descargué el compilador XC8 de microchip y también como respaldo descargué el ensamblador gputils. No he podido compilar/ejecutar nada y agradecería un ejemplo. Si alguien pudiera escribir un pequeño programa que demuestre cómo configurar los bits de configuración y la frecuencia del cristal en cualquier ensamblaje para ensamblarlo con MPASM o gputils o C para compilar con XC8, se lo agradecería. Tengo un PIC12F683 y un PIC16F688, aunque para este ejemplo no creo que importen mucho las cosas específicas de la plataforma. De todos modos, le di una oportunidad y esto es lo que obtuve, pero no funciona. Gracias

#pragma config FOSC = INTOSCCLK // Oscillator Selection bits (INTOSC oscillator: 

CLKOUT 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 = OFF      // Brown Out Detect (BOR disabled)
#pragma config IESO = OFF       // Internal External Switchover bit (Internal External Switchover mode is disabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)


#define _XTAL_FREQ 8000000
//INCLUDES
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>


void main(void) {
 GPIO = 0x00;
 ANSEL = 0x00;
 TRISIO = 0x00;
 ADCON0 = 0x00;
 CMCON0 = 7;
    while(1)
    {
        GP0 = 1;
//dont know which delay function to use
        GP0 = 0;

    }
¿Dónde está tu programa?
publiqué mi programa

Respuestas (1)

Además de faltar el corchete final (¿copiar/pegar omitió el último carácter?), su código funciona para mí. Sin embargo, hay un par de omisiones que pueden hacerte pensar que no es así:

  1. #define _XTAL_FREQ 8000000le dice al compilador a qué frecuencia debe ejecutarse el PIC , pero en realidad no lo establece. Al arrancar, el 12F683 funciona a 4 MHz. Para cambiarlo a 8 MHz, debe establecerlo OSCCONen 0x70(bits 6-4 todos '1').

  2. Sin demora después de cambiar el estado del pin de E/S, se alternará muy rápido (con una relación arriba/abajo desigual). XC8 tiene funciones integradas __delay_us() y __delay_ms() para crear retrasos prolongados.

Aquí está su código modificado para ejecutar el 12F683 a 8MHz con GP0alternancia a 1Hz.

void main(void) {
  OSCCON = 0x70; // switch to 8MHz system clock
  GPIO = 0x00;
  ANSEL = 0x00;
  TRISIO = 0x00;
  ADCON0 = 0x00;
  CMCON0 = 7;
    while(1)
    {
        GP0 = 1;
        __delay_ms(500); // wait 500 milliseconds
        GP0 = 0;
        __delay_ms(500); // wait 500 milliseconds
    }
}
Genial, eso realmente funciona. El problema es que soy un poco escéptico con mi programador (un K150 chino barato). Gracias por su respuesta.