; ; "verzoegerung.asm" ;.include "2313def.inc" ; ; ; Verzoegerungsschleifen verzoegerung: ; bei 4 MHz dauert ein Taktimpuls 0,25 Mikrosekunden ; ; Anzahl Prozessortakte: ; ; 2+[4x(255-1)+3]x[5x(5-1)]+7=20389; x 0,25=5,09725 ms ; wdr ; Watchdogtimeout abfangen ldi zeit, 0xFF ; Laden von Wert 255 in ; ; "zeit"(8-Bit-Register) ldi zeit1, 0x05 ; Laden von Wert 5 in "zeit1" rjmp verzoegerungs_schleife ; Direktsprung nach Label ; ; ; "verzoegerungs_schleife" ; verzoegerungs_schleife: ; dec zeit ; Verringern "zeit" um eins cpi zeit, 1 ; Vergleich "zeit" mit Wert eins brlt verzoegerungs_schleife ; Fortfahren nur, wenn bei Registerwert ; ; eins von "zeit" CPI das Vorzeichen wechselt, ; ; sonst Sprung zu ; ; "verzoegerungs_schleife" ldi zeit, 0xFF ; Nachladen von "zeit" auf 255, ohne ; ; Vorzeichenwechsel dec zeit1 ; Verringern "zeit1" um eins cpi zeit1, 1 ; Vergleich "zeit1" mit Wert eins brlt verzoegerungs_schleife ; Fortfahren nur, wenn bei Registerwert ; ; eins von "zeit1" CPI das Vorzeichen ; ; wechselt, sonst Sprung zu ; ; "verzoegerungs_schleife" ret ; Rueckkehr zur naechsten Adresse ; ; hinter Unterprogrammaufruf durch ; ; RCALL ; Verzoegerung2: ;2+[4x(255-1)+3]x[5x(32-1)]+7= 39,49 ms bei 4 MHz ; wdr ldi zeit, 0xFF ldi zeit1, 0x20 ; Verzoegerungs_Schleife2: ; dec zeit cpi zeit, 1 brlt Verzoegerungs_Schleife2 ldi zeit, 0xFF dec zeit1 cpi zeit1, 1 brlt Verzoegerungs_Schleife2 ret ; Verzoegerung3: ; wdr ldi zeit, 0xFF ldi zeit1, 0xFF ldi zeit2, 0xA0 ; Verzoegerungs_Schleife3: ; dec zeit cpi zeit, 1 brlt Verzoegerungs_Schleife3 ldi zeit, 0xFF dec zeit1 cpi zeit1, 1 brlt Verzoegerungs_Schleife3 dec zeit2 cpi zeit2, 1 brlt Verzoegerungs_Schleife3 ret ; ; FIN