Ejemplo de PIC12F683 o PIC16F688 o C con parpadeo de LED con compilador XC8, MPASM o gputils

1

Hola, soy nuevo en la programación de PIC y, finalmente, conseguí que funcionara mi entorno dev, descargué el compilador XC8 desde el microchip y también como copia de seguridad descargué el ensamblador gputils. No he podido compilar / ejecutar nada y agradecería un ejemplo. Si alguien pudiera escribir un pequeño programa que muestre 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, lo apreciaría. Tengo un PIC12F683 y un PIC16F688, aunque para este ejemplo no creo que muchas cosas específicas de la plataforma sean importantes. De todos modos, le di una oportunidad y aquí está lo que tengo, pero no está funcionando. 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;

    }
    
pregunta AlanZ2223

1 respuesta

4

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

  1. #define _XTAL_FREQ 8000000 le dice al compilador a qué frecuencia debe estar ejecutando el PIC , pero en realidad no lo configura. En el arranque, el 12F683 funciona a 4MHz. Para cambiarlo a 8MHz, debe configurar OSCCON a 0x70 (bits 6-4 todos '1').

  2. Sin un retraso después de cambiar el estado del pin de E / S, cambiará muy rápido (con una relación de subida / bajada desigual). XC8 tiene las funciones integradas __delay_us () y __delay_ms () para crear largos retrasos.

Aquí se modificó su código para ejecutar el 12F683 a 8MHz con GP0 alternando 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
    }
}
    
respondido por el Bruce Abbott

Lea otras preguntas en las etiquetas