PIC16F877A globale variablen übergabe interrupt

Gast #3532622
Hallo,
ich möchte gerne einen Wert aus einem Interrupt an meine "main()" 
übergeben,
also habe ich eine globale Variable angelegt "unsigned int coutn=0;". In 
dem interrupt wird einfach "++count;" ausgeführt aber wenn ich count 
dann im main benutzen will ist sie immer 0. ich habs auch schon mit 
"volatile unsigned int count=0;" versucht aber hat sich auch nichts 
geändert.

Ich hoffe ihr könnt mir Helfen!

1
volatile unsigned int count=0;
2

3
int interrupt ISR (void)
4
{
5
    if(TMR1IF==1)
6
    {
7
      count++;
8

9
      TMR1IF= 0;        
10
      TMR1H = 0x00;
11
      TMR1L = 0x00;
12
      return;
13
    }
14
}
15

16

17
//-------------------------------------------------------------------------
18
//Main
19
//-------------------------------------------------------------------------
20
main()
21
{
22
    init();
23
    lcd_init();
24
    ADCON0=0;
25
    GIE=1;
26
    TMR1IE=1;
27
    TMR1IF=0;
28
    TMR1H=0;
29
    TMR1L=0;
30
    T1CON=0x01;
31
    INTCON=0xC0;
32
    int x;
33
    char text[]="";
34
    while(1)
35
    {
36
        x=keyscan();
37
        
38
        if(x!=0)
39
        {
40
            lcd_clear();
41
        }
42
        sprintf(text,"%i",count);
43
        lcd_goto(0);
44
        lcd_puts(text);
45
    }
46
}
Gast #3533082
Hallo Marcel,
kommst du in die interrupt Routine rein um das count++; auszuführen?
Ich glaube nein. Der Timer1 Interrupt hat 3 Enable Bits.
TMRIE, PEIE, GIE

Carsten
Gast #3533858
Also eine LED blinken zu lassen ist kein probelm.
Ich habe festgestellt das ich die Variable nur in der main() nicht 
benutzen kann. hab mir jetzt einfach mit na kleinen Funktion beholfen.

unsigned int test(void)
{
    char ret;
    ret=count;
    return ret;
}

und in der main() dann einfach

unsigned int y;
y=test();
sprintf(text,"%i",y);

über diesen Umweg ist es halt echt nervig.

aber mit:
unsigned int test(unsigned int ret)
{
    return ret;
}

und im main():

y=test(count);

geht es auch nicht.
Gast #3538076
Hmm das kann ich nicht so genau sagen.. also ich benutze MPLAB X IDE 
v1.90
und den MPLAB XC 8 Compiler v1.30 Free Version.. vielleicht helfen die 
Angaben ja weite
Gast #3539043
Ich hab mal nachgeguckt und kann mit "bank0-3 volatile unsigned int 
count=0;" die Bank wechseln. Aber es ist egal auf welche Bank ich die 
Variable erstelle der Fehler ist immer der Gleiche.
Gast #3539113
Ah ok ich glaub ich weiss was du meinst.. wenn ich z.B.
"char text[8]="";" schreibe vergibt er direkt den passenden Speicher und 
kommt nicht durcheinander?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.