/* zeit2.c */ /* Timer 0 zählt die Variable zeit im Modus 1 hoch Periodendauer 10 ms */ /* Aufgaben: 1. dieselbe Aufgabe mit Timer 1 2. Periodendauer = 1000 ms 3. Nach jeder Periode Impuls mit ca. 3 µs ausgeben 4. Nach jeder 10. Periode Impuls mit 1 Periode ausgeben 5. DAC an Port-1 mit Sinus-, Dreieck- oder Rechteck ansteuern 6. Nach jeder 100. Periode Zählerstand als Dezimalzahl/Hex-Zahl/Binärzahl an die serielle Schnittstelle senden (als Hauptprogramm) 7. Funktion zur Ausgabe der Uhrzeit in Stunden, Minuten, Sekunden (als Hauptprogramm) */ #define TEILER10MS (55536U + 21U) sfr TMOD = 0x89; sfr TH0 = 0x8C; sfr TL0 = 0x8A; sbit TR0 = 0x8C; sbit TF0 = 0x8D; sbit EAL = 0xAF; sbit ET0 = 0xA9; unsigned long zeit = 0; void IRS_timer0 (void) interrupt 1 { TH0 = TEILER10MS / 256; TL0 = TEILER10MS & 0x00FF; zeit++; } main() { /* Initialisierung des Interrupt-Systems */ EAL = 1; /* Interrupts einschalten */ ET0 = 1; /* Interrupt Timer 0 einschalten */ /* Initialisierung des Timers */ TMOD = 0x01; /* ?? */ TH0 = TEILER10MS / 256; TL0 = TEILER10MS & 0x00FF; TR0 = 1; /* Timer wird gestartet */ /* Hauptprogramm */ for (;;) { } }