Warteschleife 1s bei XTAL 4000000

OP #3948188
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!
#3948788
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.