Gast
#64656
Hallo, Ich verstehe nicht wie man in den untenstehenden Listing ( einfache Dioden ein-aus Schaltung) auf eine Pause von 500 ms kommt. Ich verstehe das ein 3 Byte Zähler verwendet wird, aber nicht wie man die Zeit berechnet. Es wird ein Quarz von 4 MHz verwendet. Wird das Register r17 immer wieder dekrementiert oder nur einmal ? Ist es richtig das der Zähler 655360 Takte zählt ? .include "2313def.inc" ;Definitionsdatei laden .cseg ;Beginn eines Code-Segmentes .org 0 ;Startadresse=0 ; start: ldi r16,low(ramend) ;Stackpointer auf out spl,r16 ;RAM-Ende setzen ldi r16,0b00000001 ;PortB: PB0 auf Ausgang out ddrb,r16 ;setzen clr r16 ;Anfangswert setzen ; loop: out portb,r16 ;Daten an PortB ausgeben rcall wait ;Warteschleife aufrufen inc r16 ;Datenwert erhöhen rjmp loop ;Schleife neu beginnen ; ; Warteschleife (ungefähr 500ms) ; wait: ldi r19,10 ;r19, r18 und r17 clr r18 ;ergeben zusammen clr r17 ;einen 3-Byte-Zähler wait1: dec r17 ;niedrigstes Byte -1 brne wait1 ;0 erreicht? nein -> Schleife dec r18 ;mittleres Byte -1 brne wait1 ;0 erreicht? nein -> Schleife dec r19 ;höchstes Byte -1 brne wait1 ;0 erreicht? nein -> Schleife ret ;Schleifenende, Rückkehr