Frequenz erzeugung mit timer0 Interrupt

Gast #75562
Hallo, ich versuche einen Ausgang beim Auslösen eines Interrupts
umzuschalten, sofern eine Variable gesetzt ist.
Wenn sende = 255, so müsste sich PORTB bei jedem Interupt von H nach L
und umgekehrt ändern. ist sende <> 255, so müsste an PORTB Null
anliegen. Die sende Variable wird durch das Hauptprogram gesetzt.
Allerdings ist PORTB immer null. Was mache ich falsch?

u08 sende,zust;

SIGNAL(SIG_OVERFLOW0) {
if (sende == 0xff) {
zust = 255 - zust;
}else {
zust = 0;
}
outp(zust,PORTB);//nur zur Kontroll
outp(0,TCNT0); //setzt den Timer0 auf 0 (reset timer)
}

Eigentlich müsste es doch auch mit
outp((!inp(PORTB))& sende,PORTB);
gehen, tut es jedoch auch nicht.
Der Dateianhang enthält das komplette Program.
Angehängte Dateien:
Gast #75563
Ich hab es jetzt selber mit der Frequenz  Erzeugung geschafft. War wohl
ein vergessenes volatile.
Das Program erzeugt ein 38Khz Signal für eine IR Sendediode. Als
Empfänger dient ein TSOP1738.
Angehängte Dateien:

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.