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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren