PicNewbie
08.04.2010, 20:51
Hi Leute,
ich hab gestern angefangen auf einem PICDEM 2 PLUS mit Pickit2, MPLAB und C18 zu programmieren. ( ich komme vom AVR )
Hab meine ersten "Hello World" Programme hinter mir und wollte jetzt über den Taster S3 ( INT0 ) einen Interrupt auslösen und ne LED toggeln..
Ich hab mich dumm und dusselig durch Datenblatt und Foren gegoogelt aber nichts wollte so richtig.
Mit nem Timeroverflow funktioniert die ISR.
Was muss ich denn alles beachten. ICh hab das gefühl ich configuriere vll was in ner falschen reihenfolge oder vergesse eine kleinigkeit.
Könnt Ihr mir weiterhelfen? Ein Beispiel wäre sehr hilfreich da ich wie gesagt blutiger PIC Anfänger bin.
hier mein Versuch, bin mir grad nicht mehr so sicher ob es die letzte VErsion ist, hab soo viel ausprobiert...
Danke !!
#include <p18f4520.h>
#include <delays.h>
#include <portb.h>
void change(void);
#pragma config WDT = OFF
#pragma code HIGH_INTERRUPT_VECTOR = 0x08
void high_ISR (void){
_asm
goto change
_endasm
}
#pragma code
#pragma interrupt change
void change(void)
{
LATBbits.LATB1= !LATBbits.LATB1;
INTCONbits.INT0IF = 0;
}
void main(void)
{
TRISB=0x00;
LATB =0b00000010;
RCONbits.IPEN = 1;
//INTCONbits.INT0IE = 1;
//INTCON2bits.INTEDG0=1;
INTCONbits.GIE = 1;
OpenRB0INT (PORTB_CHANGE_INT_ON &
PORTB_PULLUPS_ON &
FALLING_EDGE_INT);
LATBbits.LATB1=1;
while(1)
{
}
}
ich hab gestern angefangen auf einem PICDEM 2 PLUS mit Pickit2, MPLAB und C18 zu programmieren. ( ich komme vom AVR )
Hab meine ersten "Hello World" Programme hinter mir und wollte jetzt über den Taster S3 ( INT0 ) einen Interrupt auslösen und ne LED toggeln..
Ich hab mich dumm und dusselig durch Datenblatt und Foren gegoogelt aber nichts wollte so richtig.
Mit nem Timeroverflow funktioniert die ISR.
Was muss ich denn alles beachten. ICh hab das gefühl ich configuriere vll was in ner falschen reihenfolge oder vergesse eine kleinigkeit.
Könnt Ihr mir weiterhelfen? Ein Beispiel wäre sehr hilfreich da ich wie gesagt blutiger PIC Anfänger bin.
hier mein Versuch, bin mir grad nicht mehr so sicher ob es die letzte VErsion ist, hab soo viel ausprobiert...
Danke !!
#include <p18f4520.h>
#include <delays.h>
#include <portb.h>
void change(void);
#pragma config WDT = OFF
#pragma code HIGH_INTERRUPT_VECTOR = 0x08
void high_ISR (void){
_asm
goto change
_endasm
}
#pragma code
#pragma interrupt change
void change(void)
{
LATBbits.LATB1= !LATBbits.LATB1;
INTCONbits.INT0IF = 0;
}
void main(void)
{
TRISB=0x00;
LATB =0b00000010;
RCONbits.IPEN = 1;
//INTCONbits.INT0IE = 1;
//INTCON2bits.INTEDG0=1;
INTCONbits.GIE = 1;
OpenRB0INT (PORTB_CHANGE_INT_ON &
PORTB_PULLUPS_ON &
FALLING_EDGE_INT);
LATBbits.LATB1=1;
while(1)
{
}
}