-
        

Ergebnis 1 bis 2 von 2

Thema: PIC4520 ISR/Interrupt will nicht

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2010
    Beiträge
    10

    PIC4520 ISR/Interrupt will nicht

    Anzeige

    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 !!

    Code:
    #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)
    {
    }
    }

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2010
    Beiträge
    10
    Ok... ich habs.
    Hab den code nochmal neui geschrieben. Aber der Fehler liegt am Board selbst.
    An RB0 hängt noch ne LED. Der interne Pullup kann die nicht genug treiben, d.h. die Spannung fällt so drastisch ab, dass der PIC18f4520 die Flanke nicht mehr erkennt.
    Ein hoch auf die Entwickler die das Board entworfen haben

    erleichterte Grüße

    Code:
    #include <p18f4520.h>
    #include <portb.h>
    
    void main (void);
    void InterruptHandlerHigh (void);
    
    void
    main ()
    {
    INTCON2=0b0000000;
    TRISB=0b00000001;
    LATB=0b00000110;
    INTCON=0b00010000;
    INTCONbits.GIE=1;
    LATBbits.LATB1 =0;
    while (1)
        { 
        }
    }
    
    
    
    #pragma code InterruptVectorHigh = 0x08
    void InterruptVectorHigh (void)
    {
      _asm
        goto InterruptHandlerHigh 
      _endasm
    }
    
    #pragma code
    #pragma interrupt InterruptHandlerHigh
    void
    InterruptHandlerHigh ()
    {
          INTCONbits.INT0IF = 0;
          LATBbits.LATB1 = !LATBbits.LATB1; //toggle LED on RB1
    	   
       
    }

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •