hier der c-code wie ich ihn im PICC (HI-TECH C Compiler) benutze.
#include <pic.h>
void Init();
//void delayMS(int);
// 1 2 3 4 5 6 7
8
__CONFIG(INTIO & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & BORDIS &
IESOEN & FCMDIS);
// 1: INTERNAL OSC
// 2: EnABLE WATCH DOG TIMER
// 3: TIME UP DELAY Disabled
// 4: DISABLE MCLR
// 5: DISABLE CODE PROTECTION
// 6: BROWN OUT DETECT DISABLED
// 7: INTERNAL EXTERNAL SWITCHOVER MODE ENABLED wichtig für switchen
des taktes
// 8: FAIL-SAFE CLOCK disable
//______________________________________________________________________
___
void Init()
{ //OSSCON REGISTER
IRCF2=0; //FOSC=31kHz
IRCF1=0;
IRCF0=0;
OSTS=0; // Time out status bit bestimmt durch internen Takt
HTS=1; // Stable HFintosc 125khz-8MHz
LTS=1; // Stable LFintosc 31khz
SCS=1;
//PCON = 0b00100000; // Ultra-low-power wake up enabled würde nur
was bringen wenn man es mit rc-network einen sleep takten würde
OPTION = 0b11001000; // disable weak pullups, 1:1 prescaler on WDT
INTCON = 0b10011000; // disable all interrupts bis auf Interuppt on
change GPIO 0:5 und INT GP2, und das notwendige GIE Bit hierfür, clear
all flags
IOC=0b00000100; // Enable GPIO on Change für GPIO 2 für interrupt
der den wake up aus dem sleep ausführt
// Interrupt global freischalten
GPIO = 0; // clear all I/O pins
TRISIO = 0b00001000; // make all I/O pins outputs
return;
}
//char x;
void main()
{
Init();
while(1)
{
SLEEP();
GPIO=0x03;
SLEEP();
GPIO=0x02;
}
}
// Interrupt on change konfigurieren
//IOC2 = 1; // GP3 kann Interrupt on change
auslösen
//GPIE = 1; // Interrupt on change freischalten
//GPIO = GPIO; // eventuell vorhandenen "Mismatch"
beenden
//GPIF = 0; // Interrupt Flag löschen
//GIE = 1; // Interrupt global freischalten