Frequenzteiler/Dualzähler AVR ASM Programmieren

Gast #4362604
Lesenswert?
• ▲
▼
Hallo zusammen,
ich bin neu im Bereich der Mikrocontrollerprogrammierung und fange 
gerade mit der Assemblerprogrammierung an.
Ich habe ein Programm geschrieben, bei dem ein Port ganz simple 
hochzählen soll. Dies ergibt dann einen Dualzähler bzw. Frequenzteiler.
Nur zählt der Controller leider nicht korrekt (Atmega8), wie im Video zu 
sehen ist.
Nach einem Reset zählt er nur bis 32 und fängt dann wieder bei 0 an und 
danach zählt er dann weiter als 32.
Woran kann das liegen?

Hier das Programm:
/*
 *  Frequenzteiler/Dualzähler 1Hz
 *  Ausgang: PORTB
 *  Created: 19.11.2015 10:40:30
 *  Author: Lubic, Napierski, Wittenberg
 */


;---Assemblerdirektiv(en)---

.INCLUDE "m8def.inc"

;---Initialisierung---
  ldi r16, low(RAMEND)         ;Stack-Initialisierung
  out SPL, r16
  ldi r16, high(RAMEND)
  out SPH, r16

  .DEF  output=R25
  .DEF  Wait1=R20
  .DEF  Wait2=R21

  ldi   r17,0xff    ;Lade Konstante ffh in r17
  out   DDRB,r17    ;PORT B ist Ausgang
  ldi  output,0x00          ;Arbeitsregister output Anfangsbedinung 0


;---Hauptprogramm---

loop:          ;Beginn der Endlosschleife

  out  PORTB,output          ;PORTB auf Null setzen
  RCALL  Unterprogramm
  INC  output            ;Arbeitsregister r16 inkrementieren

  rjmp  loop      ;Springe zur Marke loop


;-------Unterprogramm Wartschleife---------

Unterprogramm:

  ldi  wait1,0xFF    ;lade 255 in Register "Wait1"

Warten:
  ldi  wait2,0xFF    ;lade 255 in Register "Wait2"

Warten1:
  nop
  nop
  nop

  dec  wait2      ;Dekrementiere Register "wait2" um 1
  brne  Warten1      ;Vergleiche "wait2" mit 0. Wenn ungleich 0 springe 
zu Warten1

  dec  wait1      ;Dekrementiere Register "wait1" um 1
  brne  Warten      ;Vergleiche "wait1" mit 0. Wenn ungleich 0 springe 
zu Warten1

  ret        ;Rücksprung zum Hauptprogramm
Angehängte Dateien:
Gast #4362642
Lesenswert?
• ▲
▼
hab gerade nochmal experimentiert.
Wenn ich dem Controller sage, er soll 0xFF ausgeben(alle LED´s an) dann 
leuchtet die 5. LED(von links) also PB5.
Wenn ich allerdings 0x10 direkt rausgebe (also dezimal 16), müste die 
LED ja eigentlich an gehen.. tut sie aber nicht

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.