Overflow-Routine

Gast #76166
Hallo,

ich habe bei einen 8515 den 8-bit Counter realisiert. Er zählt auch,
doch nun möchte ich, wenn er überläuft, das die Overflowroutine
aufgerufen wird. Dies macht er auch, so wie mir das das AVR Studio
anzeigt. Doch den Coder darin steht wird nicht ausgeführt.

Kurzbeschreibung: Counter läuft über => Overflow Routine soll eine
Variable um 1 nach oben zählen und den Wert auf den LEDs des STK500
ausgeben!

Code:

#include <io.h>
#include <sig-avr.h>
#include <interrupt.h>
#include <math.h>

unsigned char wert_r, wert_l, wert_h, overflow_r=0x00;
   /*8-bit Variablenn*/
long double  faktor = 0.44753086, schlupf_r;
/*16-bit Gleitkomma Variablen*/


SIGNAL(SIG_INTERRUPT0)                  /*Switch 2: Start 8-bit
Counter*/
{

wert_r=inp(TCNT0);                        /*Wert des Counter
auslesen*/
outp(~wert_r, PORTB);                     /*Den Wert auf den LEDs
ausgeben*/

outp(0x00, TCNT0);                      /*8-bit Counter
zurücksetzen/nullen*/
cbi(TIFR, TOV0);                        /*Overflow-Bit zurücksetzen*/
outp((1<<CS00), TCCR0);                 /*Counter-Start mit CLK*/
/*overflow_r=2;*/
}

SIGNAL (SIG_OVERFLOW0)                  /*Wenn das Overflowbit gesetzt
wird
                                        startet diese Routine und zählt
die
                                        Variable overflow_r um 1
hoch*/
{
overflow_r++;                           /*Overflow um 1 hochzählen*/
outp(~overflow_r, PORTB);               /*Wert auf den LEDs ausgeben*/
}

SIGNAL(SIG_INTERRUPT1)                  /*Switch 3: Start 16-bit
Counter*/
{
wert_h=inp(TCNT1L);                     /*Wert des Counters auslesen*/
outp(~wert_h, PORTB);                   /*Den Wert auf den LEDs
ausgeben*/

outp(0x00, TCNT1H);                     /*High-Counter
zurücksetzen/nullen*/
outp(0x00, TCNT1L);                     /*Low-Counter
zurückstellen/nullen*/
cbi(TIFR, TOV1);                        /*Overflow-Bit zurücksetzen*/
outp((1<<CS10),TCCR1B);                 /*Counter-Start mit CLK*/
}

int main(void)
{
outp(0x00, DDRD);                       /*Port D als Eingänge
schalten*/
outp(0xFF, DDRB);                       /*Port B als Ausgabe
(LEDs)schalten*/

outp(0x02, TIMSK);                      /*8-bit: Overflow Interrupt
aktivieren*/
outp((1<<INT0)|(1<<INT1), GIMSK);       /*Interrupteinstellungen*/
sei();                                  /*Interrupts einschalten*/

/*schlupf_r = 1-faktor*wert_r/wert_h;*/

for(;;)                                 /*Endlosschleife*/
{
}
}


Vielleicht kann mir jemand nen Tipp geben!

Vielen Dank schon mal im Voraus!


MfG Patrick Weber
Gast #76168
ok, ich hatte das Programm nicht installiert und deshalb auch nicht
diese FAQ... Aber nun gut, nun habe ich die Variable folgendermassen
deklariert: volatile unsigned char overflow_r=0;
Aber es passiert dennoch nichts, also keine LED leuchten auf, auch wenn
ich die Variable zB mit dem Wert 3 belege...

Hat jemand ne Idee?

regards patrick

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 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.