; Loesung Aufgabe 7: EEPROM-Hochzaehler ; .nolist .include "tn13def.inc" .list ; ; Konstanten definieren .equ cEep = 10 ; Zelle im EEPROM-Speicher ; Verzoegerung durch Schleife .equ c002 = (1200000/50-8)/4 ; 0,02 s Verzoegerung .equ c01 = (1200000/10-8)/4 ; 0,1 s Verzoegerung .equ c02 = (1200000/5-8)/4 ; 0,2 s Verzoegerung ; ; Register definieren .def rmp = R16 ; Multi-Purpose-Register .def cnt = R17 ; Zaehler .def rdl = R24 ; Verzoegerungszaehler, LSB .def rdh = R25 ; dto., MSB ; ; Initiieren ldi rmp,LOW(RAMEND) ; Stapelzeiger out SPL,rmp ; setzen sbi DDRB,PB0 ; LED-Treiber an sbi PORTB,PB0 ; LED aus sbi PORTB,PB4 ; Pull-Up Taster an ; Verzoegerung um 0,02 s ldi rdh,HIGH(c002) ; 0,02 s ldi rdl,LOW(c002) rcall Delay ; rufe Unterprogramm ; Eingang abfragen clr cnt ; Zaehler auf Null sbis PINB,PB4 ; Frage Taster ab rjmp Schreiben ; Schreibe Null in EEPROM ; EEPROM lesen ldi rmp,cEep ; Adresse der EEPROM-Zelle in Register out EEARL,rmp ; in EEPROM-Adressregister schreiben sbi EECR,EERE ; Setze Read Enable Bit in cnt,EEDR ; Lese Inhalt der Zelle in das Register ; Zaehler um Eins erhoehen inc cnt ; increase Zaehler ; Zaehler in EEPROM schreiben Schreiben: sbic EECR,EEPE ; Control ob Schreiben moeglich rjmp Schreiben ; Schreiben noch nicht moeglich ldi rmp,(0<