pic_12f629_led_blinken

Dies ist eine alte Version des Dokuments!


Zum Erstellen von Programmen für den PIC12F629 (und auch diverse andere Mikroprozessoren) verwendet man am besten die MPLAB X IDE (http://www.microchip.com/). Für die C Programmiersprache muss man noch den XC8 (für 8 bit prozessoren) Compiler installieren.

Mit der MPLAB X IDE installiert sich auch die MPLAB X IPE Applikation, mit der man fertige HEX Dateien auch ohne IDE auf den Mikroprozessor brennen kann.

PIC12F629 LED blinken

Im folgenden ein ganz einfaches Beispiel für die Verwendung eines PIC12F629. Am PIN 7 (GP0) wird eine LED angehängt. PIN 8 (GND) wird mit Masse (= minuspol des Netzgerätes) verbunden und an PIN 1 (VDD) werden die 3V Gleichspannung angelegt.

#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
 
#define _XTAL_FREQ 4000000 // Oscillator frequency for _delay()
#define __delay_ms(x) _delay((unsigned long) ((x)*(_XTAL_FREQ/4000.0)))
 
//Config: int reset, no code protect, no brownout detect, no watchdog,
//        power-up timer enabled, 4MHz internal clock
 
#pragma config WDTE = OFF, PWRTE = ON, CP = OFF, BOREN = OFF, MCLRE = OFF, CPD = OFF, FOSC = INTRCCLK
 
void main()
{
   GPIO =   0;
   CMCON =  0b11111111;
   TRISIO = 0b11111110; //output to GP0
 
   GPIObits.GP0 = 1;
 
   for(;;)
   {
      GPIObits.GP0 = 1;
      __delay_ms(200);
      GPIObits.GP0 = 0;
      __delay_ms(200);
   }
}

Bei der Programmierung in Assembler gibt es zwei Möglichkeiten:

Dies bedeutet, dass man beim Codieren die Speicheraddressen selber festlegt. Dies sieht etwa so aus:

   myVar equ 0x20 ; myVar zeigt auf Speicheraddresse 0x20
 
   org 0x0000 ; ab hier code
 
main
  ; machwas
end

Bei Verwendung der MPLAB X IDE allerdings sieht man im Debug-Modus diese Variablen nicht, das dürfte auch daran liegen, dass MLINK für die Erstellung des Maschinencodes verwendet wird.

In diesem Fall übernimmt die Arbeit der Speicherzuordnung von Variablen etc. der Linker.

   UDATA_SHR   ; UDATA alleine führt zu einem Linker error
   myVar res 1 ; reserviere 1 Byte für myVar
 
   RESET CODE 0x000 ; ab hier code
 
main
  ;machwas
end   

Vorteil dieser Methode ist, dass sich dieser Code dann besser in der MPLAB X IDE debuggen lässt, da man jetzt alle Variablen sieht.

LED blinken, interner Timer

Einer der Vorteile des C Programmiersprache sind die vielen fertigen Libraries die Funktionen wie zb. _delay_ms() zur Verfügung stellen. Für das Abwarten des Zeitraumes X in Assembler muss man selber geeignete Routinen implementieren. Dies kann im einfachsten Fall eine Schleife sein, die x-mal NOP (= no operation) ausführt.

  • pic_12f629_led_blinken.1421046146.txt.gz
  • Zuletzt geändert: 2015/01/12 08:02
  • von dokuwikiadmin