beginner_de
beginner_de
beginner_de
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Avr-Asm-Tutorial S. 62<br />
;<br />
.equ fck = fc / 1000 ; Taktfrequenz in kHz<br />
;<br />
; Verzoegerungsroutine<br />
;<br />
Delay1ms: ; 1 ms Routine<br />
.equ c1ms = (1000*fck)/4000 - 1 ; Konstante fuer 1 ms<br />
ldi R25,HIGH(c1ms) ; la<strong>de</strong> Zaehler<br />
ldi R24,LOW(c1ms)<br />
rjmp <strong>de</strong>lay<br />
;<br />
Delay100ms: ; 100 ms Routine<br />
.equ c100ms = (100*fck)/4 - 1 ; Konstante fuer 100 ms<br />
ldi R25,HIGH(c100ms) ; la<strong>de</strong> Zaehler<br />
ldi R24,LOW(c100ms)<br />
rjmp <strong>de</strong>lay<br />
;<br />
; Verzoe<strong>de</strong>rungsschleife, erwartet Konstante in R25:R24<br />
;<br />
Delay:<br />
sbiw R24,1 ; herunter zaehlen<br />
brne Delay ; zaehle bis Null<br />
nop ; zusaetzliche Verzoegerung<br />
Hinweise: Die Konstanten c1ms und c100ms wer<strong>de</strong>n auf unterschiedliche Weise berechnet, um bei<br />
<strong>de</strong>r Ganzzahlen-Verarbeitung durch <strong>de</strong>n Assembler einerseits zu große Rundungsfehler und an<strong>de</strong>rerseits<br />
Überläufe zu vermei<strong>de</strong>n.<br />
Verlängerung!<br />
Mit folgen<strong>de</strong>m Trick können Sie wie<strong>de</strong>r etwas Verlängerung herausholen:<br />
.equ c1 = 0 ; 0 Takte, macht <strong>de</strong>r Assembler alleine<br />
ldi R25,HIGH(c1) ; 1 Takt<br />
ldi R24,LOW(c1) ; 1 Takt<br />
Loop: ; Schleifenbeginn<br />
nop ; tue nichts, 1 Takt<br />
nop ; tue nichts, 1 Takt<br />
nop ; tue nichts, 1 Takt<br />
nop ; tue nichts, 1 Takt<br />
nop ; tue nichts, 1 Takt<br />
nop ; tue nichts, 1 Takt<br />
sbiw R24 ; 2 Takte<br />
brne Loop ; 2 Takte wenn nicht Null, 1 Takt bei Null<br />
Je<strong>de</strong>r Schleifendurchlauf (bis auf <strong>de</strong>n letzten) braucht jetzt zehn Takte und es gelten folgen<strong>de</strong> Formeln:<br />
nc = 2 + 10*(c1 - 1) + 9 o<strong>de</strong>r nc = 10 * c1 + 1<br />
Maximal sind jetzt 655361 Takte Verzögerung möglich.<br />
10.4 Das Blinkprogramm<br />
Damit sind wir beim beliebten "Hello World" für AVRs: <strong>de</strong>r im Sekun<strong>de</strong>nrhytmus<br />
blinken<strong>de</strong>n LED an einem AVR-Port. Die Hardware, die es dazu<br />
braucht, ist beschei<strong>de</strong>n. Die Software steht da: