Hallo, versuche mich gerade in MC einzuarbeiten und wollte mit Hilfe des Interrupts ne LED zum blinken bringen! Will lernen wie man den Interrupt benutzt. Leider gibt der Compiler nur Fehler zurück? "bool" nicht erkannt / TOV0 nicht erkannt (obwohl dies das Interruptregister sein soll) etc.... ? Was mache ich falsch ? Programm liegt in der Textdatei
TOV0 ist das Bit, nicht das Register. Um den Wert auf 0 zu setzen musst du das ganze Register schreiben.
1 | TIFR &= ~(1 << TOV0)) |
Laut anderer Beschreibung ist TOV0 das Überlaufflag vom Zählerregister Timer0? Wieso erkennt er das Format "bool" nicht?
Vielleicht weil es boole heißt, denn der namensgebende Mathematiker hieß Boole (mit e am Ende)
Wie wäre es mit ein Bissel "sei ();" auf deinem Wege. Ob Du die zugehörigen Register richtig initialisiert hast weiß ich aber nicht.
Mir fällt gerade auf, dass Du die Interruptroutine innerhalb main deklariert hast... Dat mag schon der Conpilerich nit.
Bernd H. schrieb: > Wieso erkennt er das Format "bool" nicht? Weil 'bool' im ursprünglichen C nicht enthalten war. Um 'bool' benutzen zu können musst du den Header stdbool.h includieren. Aber das löst dein Problem nicht, dass du dir unter TOV0 etwas anderes vorstellst, als es tatsächlich ist. TOV0, CS00, ... das alles sind einfach nur Zahlenwerte, die die Bitposition bezeichnen, an denen das jeweilige Bit in einem bestimmten Register zu finden ist.
Bernd H. schrieb: > Wieso erkennt er das Format "bool" nicht? Weil es das im C-Standard nicht gibt. Peter
Wenn Du den Kram geändert hast, häng' mal den neuen Source, mit neuem Namen an. Damit alle über das Gleiche reden können.
Komisch daran ist, AVR Studio erkannt "bool" an! Macht aber nachher ein Fehler aus beim Kompilieren?? Das ist nicht alles wirklich hilfreich! Hab noch nicht viel Erfahrung, was MC angeht. Ziel ist es ein Programm zuschreiben: Timer0 soll hoch zählen Interrupt auslösen und im HP ein Bit toggeln
Ok. ich les mir nochmal das was zu timer0 steht durch und werd stdbool.h noch einbinden
Wenn Du stdbool nicht einbinden möchtest, hilft vielleicht ein: #define bool unsigned char gefolgt von #define false 0 und #define true 1 am Programmanfang.
Karl Heinz Buchegger schrieb: > Bernd H. schrieb: > >> Wieso erkennt er das Format "bool" nicht? > > > Weil 'bool' im ursprünglichen C nicht enthalten war. Um 'bool' benutzen > zu können musst du den Header stdbool.h includieren. > > Aber das löst dein Problem nicht, dass du dir unter TOV0 etwas anderes > vorstellst, als es tatsächlich ist. > > TOV0, CS00, ... das alles sind einfach nur Zahlenwerte, die die > Bitposition bezeichnen, an denen das jeweilige Bit in einem bestimmten > Register zu finden ist. Ich lese gerade in http://www.tschallener.net/AVR/timer0.pdf Hier steht, das TOV0 im Reg TIFR nur ein Flag ist Kann man den die Bit in den Registern nicht direkt mit ihrem Namenansprechen? Also TOV0 = 1;
Bernd H. schrieb: > Ich lese gerade in http://www.tschallener.net/AVR/timer0.pdf > Hier steht, das TOV0 im Reg TIFR nur ein Flag ist Das ist ja auch grundsätzlich richtig. > Kann man den die Bit in den Registern nicht direkt mit ihrem > Namenansprechen? > Also TOV0 = 1; Nein. Wie setzt du denn ein Portbit an einem Port auf 1? PORTB |= ( 1 << PB0 ); Auch PB0 ist so gesehen nur ein Bit in einem Register, nämlich das Bit 0 im Register PORTB. AVR-Gcc-Tutorial Tu dir einen Gefallen und fang dort zu lesen an.
Manche C-Compiler fressen auch Konstrukte wie: cbi (DDRA,PA0); Dabei wird das Bit 0 vom "Port A Data Direction Register" direkt gelöscht.
Karl Heinz Buchegger schrieb: > Nein. > > Wie setzt du denn ein Portbit an einem Port auf 1? > > PORTB |= ( 1 << PB0 ); > > Auch PB0 ist so gesehen nur ein Bit in einem Register, nämlich das Bit 0 > im Register PORTB. > > AVR-Gcc-Tutorial > > Tu dir einen Gefallen und fang dort zu lesen an. Das Tutorial kann ich nicht öffenen Oh gott, oh gott wie kann man bloß einfache Dinge bloß so komplizieren! Es gibt keine dirkete Bit adriessung ? Ist das ein Problem den AVR oder Atmega oder kann der kein C++? Also PIGS habe ich immer so adressiert
Bernd H. schrieb: > Karl Heinz Buchegger schrieb: >> Nein. >> >> Wie setzt du denn ein Portbit an einem Port auf 1? >> >> PORTB |= ( 1 << PB0 ); >> >> Auch PB0 ist so gesehen nur ein Bit in einem Register, nämlich das Bit 0 >> im Register PORTB. >> >> AVR-Gcc-Tutorial >> >> Tu dir einen Gefallen und fang dort zu lesen an. > > Das Tutorial kann ich nicht öffenen > AVR-GCC-Tutorial > Oh gott, oh gott wie kann man bloß einfache Dinge bloß so komplizieren! > Es gibt keine dirkete Bit adriessung ? Gegenfrage: Hast du schon mal C gelernt oder ratest du einfach nur drauflos?
Auch wenn es von verschiedener Seite bereits, mehr oder weniger freundlich, angesprochen wurde: Es lohnt sich mal ins "AVR-GCC-Tutorial" zu schauen. Den Eingang findest du hier auf der Homepage. Bitte verstehe: Die Meisten hier helfen gerne, wenn aber zu viel an Grundlagen fehlt, so werden sie leicht unwirsch. Viele haben das Motto: Helfen: Ja; Tipps geben: Gerne; Lehren: Nein!
amateur schrieb: > Auch wenn es von verschiedener Seite bereits, mehr oder weniger > freundlich, angesprochen wurde: Es lohnt sich mal ins "AVR-GCC-Tutorial" > zu schauen. Den Eingang findest du hier auf der Homepage. > Bitte verstehe: Die Meisten hier helfen gerne, wenn aber zu viel an > Grundlagen fehlt, so werden sie leicht unwirsch. > Viele haben das Motto: Helfen: Ja; Tipps geben: Gerne; Lehren: Nein! Nein ist schon ok. Hab leider dieses Projekt aufs Auge drückt bekommen und Zeit drängt halt was :( hab früher mal PIC in C++ programmiert (vor 10 Jahren+ und es war auch nicht viel) und diese wurden halt genau so Bit adressiert. Jetzt ist das komplettes Neuland quasi und nichts läuft.... die Synthax ist mir vollkommen fremd. Problem mein kleines Wissen von damals deckt sich wohl mit dem von heute nicht. Das macht die Sache noch schwieriger weil ich nochmal komplett umdenken muss. Dachte das wäre das schöne an Compilern, das eben nicht neue Synthax lernen müste. Komisch ist das es wieder komplett anders ist. Ich wälze mal das Tutorial
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.