Forum: Mikrocontroller und Digitale Elektronik Warteschleife 1s bei XTAL 4000000


von Luigi A. (spok)


Lesenswert?

Hallo zusammen,

bin nicht so erfahren in der Assemblerprogrammierung.Ich wollte eine 
Warteschleife bauen die ca 1 Sekunde dauert. Mein Taktgenerator hat 
4Mhz.
Habe folgenden Code geschrieben:

(Xtal = 4000000)
1
wait1s:                                 
2
3
  push temp1
4
  push temp2
5
  push temp3
6
7
     ldi temp3, (xtal * 1/191208)
8
        WGLOOP4:     
9
     ldi  temp1, $F8
10
  WGLOOP2:   
11
     ldi  temp2, $FF
12
  WGLOOP3:   
13
     dec  temp2
14
                 brne WGLOOP3
15
                 dec  temp1
16
                 brne WGLOOP2
17
     dec temp3
18
     brne WGLOOP4
19
20
  pop temp3
21
  pop temp2
22
  pop temp1
23
ret


Naja irgendwas stimmt wohl nicht. Die Dauer entspricht nicht 1 Sekunde 
sondern ca 0,85 Sekunden.
Habe ich aus eurer Sicht die Werte richtig eingetragen?

Danke!

von Peter D. (peda)


Lesenswert?

Nimm ein Macro und laß die magischen Zahlen den Assembler selber 
ausrechnen, der kann 64Bit Ganzzahl.
1
.include "tn13def.inc"
2
3
        .equ    F_CPU = 4000000       ; 4MHz
4
5
.macro  warte
6
        ldi     r16, byte1( @0 / 6 )
7
        ldi     r17, byte2( @0 / 6 )
8
        ldi     r18, byte3( @0 / 6 )
9
        ldi     r19, byte4( @0 / 6 )
10
_warte11:
11
        subi    r16, byte1(1)         ; 1 Zyklus
12
        sbci    r17, byte2(1)         ; 1 Zyklus
13
        sbci    r18, byte3(1)         ; 1 Zyklus
14
        sbci    r19, byte4(1)         ; 1 Zyklus
15
        brne    _warte11              ; 2 Zyklen
16
                                      ; = 6 Zyklen
17
.endmacro
18
19
main:
20
        sbi     ddrb, pb1
21
        sbi     portb, pb1
22
        warte   F_CPU * 1         ; 1s
23
        cbi     portb, pb1
24
        warte   F_CPU * 2         ; 2s
25
        rjmp    main

von Luigi A. (spok)


Lesenswert?

Peter Dannegger schrieb:
> Nimm ein Macro und laß die magischen Zahlen den Assembler selber
> ausrechnen, der kann 64Bit Ganzzahl.


Danke für den Hinweis. Bin leider noch nicht so weit.
Kenne mich noch nicht mit Macro's aus.


Kommt noch...

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
Noch kein Account? Hier anmelden.