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
Hallo Miralem Am besten verstehst du den Code doch, wenn du im AVR Studio simuluierst. Da kannst du doch genau sehen, was abgeht. Ein Blick in die Datenblätter zeigt dir auch die Funktion der Befehle. Ich komme auf 1971229 Zyklen. Bei 4 MHz kommen dann 492.81 ms raus. R17 wird solange dekrementiert bis es null ist, dann wird r18 dekrementiert und wieder nach wait1: gesprungen und r17 dekrementiert. r17 steht aber ja noch auf null und wird mit dem nächsten dekrementieren auf 255 kommen, und so geht es weiter. In diesem Sinne MFG Dieter
Danke Dieter für deinen Tipp, Da ich überzeugter Linuxer binn wollte ich erst nur Linux Software einsätzen aber zum Glück kann ich das Studio auch mit win4lin emulieren. Du hast recht, es ist viel einfacher das Programm zu verstehen.
War ein Denkfehler: Der Zähler braucht ja die doppelte Zeit da er nicht nur 255 Takte zählt sondern auch zwischendurch das z-bit immer kontrolliert . Danke
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.