Hallo, will mit einem µC (An2131) eine Uhr programmieren und am 7 Segment ausgeben. Sie soll fürn Anfang nur von 0-9 sekunden anzeigen. Problem: Zählt nicht. es wird nur die 0 ausgegeben. Sicher weil sie als Startwert gilt und somit nichts mit dem Timer zu tun hat. Meine vermutung ist das der Timer nicht richtig läuft. Den Startwert habe ich auf 64536 gesetzt damit der Counter nur noch 1ms läuft bis zum interrupt. ( Ein Takt vom Timer dauert 1µS--> 1000µs = 1ms, 65536-1000 = 64536 :) ) Ich hoffe ihr könnt mir helfen.. Danke im Vorhinein Hier mein Code dazu: #define ALLOCATE_EXTERN #include "ezusb.h" #include "EZregs.h" #define ZERO 0x18 #define ONE 0x7B #define TWO 0x2C #define THREE 0x29 #define FOUR 0x4B #define FIVE 0x89 #define SIX 0x88 #define SEVEN 0x3B #define EIGHT 0x08 #define NINE 0x09 #define DOT 0xF7 int milli=0,sek=0; //Globale Variable void main (void) { EA=1; // Timer Aktivieren ET0=1; //Timer0 Aktivieren TMOD=0x01; //Modus von Timer 0 auf 16 BIT einstellen TR0=1; //Timer0 Einschalten TH0=0xFC; // 16 Bit Modus (2 Byte) Höheres Byte TL0=0x18; // Unteres Byte PORTCCFG=0x00; PORTBCFG=0x00; OEC=0xFF; OEB=0x03; while(1) { OUTB=0x03; // für common Anode müssen immer auf HIGH sein switch(sek) { case 0: OUTC=ZERO; break; case 1: OUTC=ONE; break; case 2: OUTC=TWO; break; case 3: OUTC=THREE; break; case 4: OUTC=FOUR; break; case 5: OUTC=FIVE; break; case 6: OUTC=SIX; break; case 7: OUTC=SEVEN; break; case 8: OUTC=EIGHT; break; case 9: OUTC=NINE; break; } } } void einemillisekunde (void) interrupt 2 { milli=milli+1; if(milli==1000) { milli=0; sek=1; } }
Den genauen Fehler kann ich nicht entdecken, aber auf jeden Fall soltest du in der Interrupt Funktion sek++ schreiben.
Hallo, Danke für den guten Hinweis, leider war das auch nicht der Fehler :(
Ich kenne mich mit diesem IC zwar nicht so aus, aber bist du dir sicher, dass es
1 | interrupt 2 |
heißt?
Hi Muss man bei dem Teil Interrupts explizit erlauben oder geht das automatisch? MfG Spess
Vielleicht findet sich auch hier die Lösung. Da geht es auch um so ein Teil: Beitrag "AN2131 Interrupts in C verwenden" @spess53: In dem obigen Thread aktiviert man die Interrupts mit
1 | EA=1 |
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.