mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Warteschleife


Autor: blutengel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Habe mal ein kleines Programm zu meinem Verständniss geschrieben.
Dieses Programm lässt eine Led an PortC.0 blinken.Jetzt habe ich den 
Warteschleifengenerator von Tjabo Kloppenburg genutzt. Da ich einen 
externen Quarz von 12 MHZ verwenden, bedeutet dies ja das ich pro 
Sekunde 12000000 Zyklen habe. Da der Befehl RCALL ja 3 Zyclen und der 
Rücksprungbefehl RET 4 Zyklen benötigt muss ich ja nur noch 11999993 
Zyklen "Verbraten" sehe ich das so richtig oder habe ich in meiner 
Annahme einen Denkfehler?

Hier mal der Code:
.include "m32def.inc"  

.def temp = r16

 
       
        ldi temp, HIGH(RAMEND) ; HIGH-Byte 
        out SPH, temp        
        ldi temp, LOW(RAMEND)  ; LOW-Byte 
        out SPL, temp
 


ldi r16,0xff
out ddrc,r16

loop:
ldi r16,0b11110001;pin c.0 ein
out portc,r16 
rcall wait;warteschleife 1 sec aufrufen

ldi r16,0b11111111;pinc.0 aus
out portc,r16
rcall wait
rjmp loop 


wait:
; ============================= 
;    delay loop generator 
;     11999993 cycles: weil lcall = 3 zyclen und ret = 4 ==> 12000000 Zyklen = 1 sec
; ----------------------------- 
; delaying 11999988 cycles:
          ldi  R17, $6C
WGLOOP0:  ldi  R18, $BC
WGLOOP1:  ldi  R19, $C4
WGLOOP2:  dec  R19
          brne WGLOOP2
          dec  R18
          brne WGLOOP1
          dec  R17
          brne WGLOOP0
; ----------------------------- 
; delaying 3 cycles:
          ldi  R17, $01
WGLOOP3:  dec  R17
          brne WGLOOP3
; ----------------------------- 
; delaying 2 cycles:
          nop
          nop
; ============================= 
 
ret






 


Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
blutengel schrieb:

> externen Quarz von 12 MHZ verwenden, bedeutet dies ja das ich pro
> Sekunde 12000000 Zyklen habe.
Yep.
Mehr oder weniger.
Du wirst kaum einen Quarz finden, der exakt 12000000 Schwingungen in der 
Sekunde macht.

> Da der Befehl RCALL ja 3 Zyclen und der
> Rücksprungbefehl RET 4 Zyklen benötigt muss ich ja nur noch 11999993
> Zyklen "Verbraten" sehe ich das so richtig oder habe ich in meiner
> Annahme einen Denkfehler?

Ähm.
Wodurch unterscheidet sich jetzt deine Annahme von dem Kommentar, den 
dir der Generator bei der Funktion hinterlassen hat?
 ;     11999993 cycles: weil lcall = 3 zyclen und ret = 4 ==> 12000000 Zyklen = 1 sec

das steht genau dasselbe. Nur halt in Denglisch.

Autor: blutengel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
weil lcall = 3 zyclen und
>       ret = 4 ==> 12000000 Zyklen = 1 sec


Dieser Teil ist von mir Ergänzt worden.

MFG

blutengel

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
blutengel schrieb:
> weil lcall = 3 zyclen und
>>       ret = 4 ==> 12000000 Zyklen = 1 sec
>
>
> Dieser Teil ist von mir Ergänzt worden.

ok.
In dem Fall: Die Überlegung sieht stichhaltig aus (ohne jetzt die 
Schleifen nachgerechnet zu haben)

Autor: blutengel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was wäre denn wenn ich an dieser Stelle ein Uhrenquarz verwenden würde. 
ISt der denn genau?


MFG

blutengel

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
blutengel schrieb:
> Was wäre denn wenn ich an dieser Stelle ein Uhrenquarz verwenden würde.
> ISt der denn genau?

Was willst du machen?

Im AVR-Tutorial ist eine Uhr enthalten und wie man die einigermassen 
genau kriegt. Die dort benutzte Technik eines Timers mit CTC ist der 
Weg, wie man genaue Timings macht.

Autor: Ralli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich schon einen µC nehme, um einen Sekundentakt aus der
Quarzfrequenz des Taktgenerators zu erhalten, sind doch
"ZEITVERSCHWENDUNGS-SCHLEIFEN" so ziemlich das hässlichste, was
man dem µC antun kann.

Wozu hat er eingebaute Timer, Counter, Interrupts etc.?

Hat man die richtig programmiert, ist die Sekunde quarzgenau,
also mit Trimm-C dauerhaft für Temperaturen von 10°..40° C
auf +/-10 ppm abgleichbar. - Weniger als 1 s Fehler pro Tag.

Und soll der µC noch irgendwas anderes machen, z.B. auf eine Taste
reagieren, muss NICHTS geändert werden!

Also: TUTORIAL LESEN!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.