Forum: Mikrocontroller und Digitale Elektronik Frequenzteiler/Dualzähler AVR ASM Programmieren


von Dennis (Gast)


Angehängte Dateien:

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

von Dennis (Gast)


Lesenswert?

sorry für die Formatierung. Irgendwie wurde es nicht übernommen, wie ich 
es eigentlich wollte :)

von Dennis (Gast)


Lesenswert?

achja.. und die Simulation mit Atmel Studio 6.2 funktioniert 
einwandfrei. Dort zählt er hoch bis 255 un dann wieder auf 0 :/

von Flip B. (frickelfreak)


Lesenswert?

leds falsch angeschlossen.

von Dennis (Gast)


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

von Dennis (Gast)


Lesenswert?

LED´s sind richtig angeschlossen, verwende nur auf dem Video PORTD, weil 
ich dachte das eventuell PortB das Problem wäre

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.