PIC12F683- oder PIC16F688-Assembly oder C-Blink-LED-Beispiel mit XC8-Compiler, MPASM oder gputils

Hallo, ich bin neu in der PIC-Programmierung und habe endlich meine Entwicklungsumgebung zum Laufen gebracht. Ich habe den XC8-Compiler von Microchip heruntergeladen und als Backup auch den gputils-Assembler heruntergeladen. Ich konnte nichts kompilieren/laufen lassen und würde mich über ein Beispiel freuen. Wenn jemand ein kleines Programm schreiben könnte, das demonstriert, wie man die Konfigurationsbits und die Quarzfrequenz in einer der beiden Baugruppen einstellt, um sie mit MPASM oder gputils oder C zum Kompilieren mit XC8 zusammenzusetzen, würde ich es begrüßen. Ich habe einen PIC12F683 und einen PIC16F688, obwohl ich für dieses Beispiel nicht denke, dass viele plattformspezifische Dinge wichtig sind. Wie auch immer, ich habe es versucht und hier ist, was ich bekommen habe, aber es funktioniert nicht. Danke

#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;

    }
Wo ist Ihr Programm?
habe mein Programm gepostet

Antworten (1)

Abgesehen davon, dass die Endklammer fehlt (Kopieren/Einfügen hat das letzte Zeichen verpasst?), Funktioniert Ihr Code für mich. Es gibt jedoch ein paar Auslassungen, die Sie denken lassen könnten, dass dies nicht der Fall ist: -

  1. #define _XTAL_FREQ 8000000teilt dem Compiler mit, mit welcher Frequenz der PIC laufen soll , setzt ihn aber nicht wirklich. Beim Start läuft der 12F683 mit 4MHz. Um es auf 8 MHz zu ändern, müssen Sie OSCCONauf 0x70(Bits 6-4 alle '1') setzen.

  2. Ohne Verzögerung nach dem Ändern des Zustands des I / O-Pins wird es sehr schnell umgeschaltet (mit einem ungleichen Auf- / Ab-Verhältnis). XC8 hat eingebaute Funktionen __delay_us() und __delay_ms() zum Erzeugen langer Verzögerungen.

Hier ist Ihr Code, der geändert wurde, um den 12F683 bei 8 MHz mit Umschalten bei 1 Hz auszuführen GP0.

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
    }
}
Super, das funktioniert tatsächlich. Das Problem ist, dass ich meinem Programmierer (einem billigen chinesischen K150) etwas skeptisch gegenüberstehe. Vielen Dank für Ihre Antwort.