; ; delay_1s.asm ; ; Created: 25.12.2023 00:00:01 ; Author : Weihnachtsmann ; /* Eingangsbit PB0 um ca. 1 Sekunde verzoegert an PB1 ausgeben Interne 8 MHz mit Vorteiler /8 auf 1 MHz reduzieren. 125 Byte x 8 Bits x 8 Takte/Bit ergibt ca. 1 ms Aufloesung. */ #define EINGANG 1 // PortB 0 #define AUSGANG 2 // PortB 1 #define BYTES 125 // ca. 1 s bei 1 MHz CPU-Takt #define RAM_START 0x60 start: ldi r16,AUSGANG out DDRB,r16 // Ausgang aktivieren ldi r16,0 // zum loeschen ldi r30,RAM_START // z-low Anfang ldi r31,0 // z-high ldi r17,BYTES clear: st z+,r16 // RAM loeschen dec r17 brne clear // bis fertig durchlauf: ldi r30,RAM_START // nachladen ldi r17,BYTES // Anzahl in r16,PINB // PinB lesen ror r16 // Bit 0 -> C shift: ld r16,z // alter Wert rol r16 // mit C nach links schieben st z+,r16 // und speichern dec r17 // alle Bytes abarbeiten brne shift andi r16, AUSGANG // maskieren out PORTB,r16 // und PortB 1 entsprechend ausgeben rjmp durchlauf // neuer Durchlauf