Hallo leute ich versuche ein klein programm test zu schreiben. das programm soll das 5. bit des Port D jede 70s Toggle in meinem Programm fehlt wahrscheinlich jegen etwas. Bitte ich brauche Ihre Hilfe Leute. Danke #include <avr/io.h> #include <stdint.h> #include <avr/interrupt.h> #include <avr/wdt.h> #define isr(vector) #define sleep // Die Routine Function schaltet das 5.bit des Ports D jede 71 ms um. ISR(TIMER1_COMPA_vect) { TIFR=0x10; /*Aufruf des Interrupt um das bit zu Toggle*/ TCNT1= 0x000; // Counter wieder auf null setzen um die //Prozess zu wiederholen; } // Hauptprogramm: Innitialisierung der benötigten Registern und Aufruft der //Routine Function int main(void){ DDRD=0x0FFFF; //Daten Richtung zu Port D PORTD=0x20; /*pin 5 des Ports D setzen*/ TCCR1B=0x4; //Prescaler = 256: signalstakt=clk/256 TCNT1=0x00; /*Counter auf null initialisieren*/ OCR1A=0x03EA; /*es wird bis zu 1000 dez. gezählt um 71 ms zu erreichen hier Prescaler = 256*/ sei(); TIFR=0x10; /*Aufruf des Interrupt um das bit zu Toggle*/ TIMSK=0x10; /*output Compare A Match Interrupt Enable*/ while(1) { } }
ich will nur sagen dass, meine Platine ist die Atmega16 und ich benutze WinAVR um meinem Programm zu schreiben.
klick mal da oben links auf "avr-gcc-tutorial", vl. hilfts schneller als ich/wir das können: - Hex-Zahlen(0xnn...) haben meistens 2, 4, oder 8 Stellen( sind 8, 16, 32Bit) - die "REG |=(1<<NAME)"oder "REG &= ~(1<<NAME)" Schreibweise erleichtert die Fehlersuche enorm! (ich werde nicht nachschauen, was deine Zahlen bedeuten, aber vl. jemand anders) - wenn du sowieso den "Output-compare-Interrupt" benutzt, kannst du auch gleich den CTC (-> steht im Datenblatt) Mode benutzen - was soll "#define sleep" und "#define isr(vector)" heißen?
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.