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;
}
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í:
#define _XTAL_FREQ 8000000
le 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 OSCCON
en 0x70
(bits 6-4 todos '1').
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 GP0
alternancia 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
}
}
leon heller
AlanZ2223