Forum: Mikrocontroller und Digitale Elektronik Spinnt mein Controller?


von Stefan (Gast)


Lesenswert?

Ich habe mir einen kleinen Testaufbau mit einem AT90s2313 aufgebaut und
folgendes Programm darauf geschrieben:

.include "2313def.inc"      ;Definitionsdatei laden
.cseg          ;Beginn eines Code-Segmentes
.org 0          ;Startadresse=0
;
start:  ldi  r16,low(ramend)    ;Stackpointer auf
  out  spl,r16      ;RAM-Ende setzen
  ldi  r16,0b00000001    ;PortB: PB0 auf Ausgang
  out  ddrb,r16    ;setzen
  clr  r16      ;Anfangswert setzen
;
loop:  out  portb,r16    ;Daten an PortB ausgeben
  rcall  wait      ;Warteschleife aufrufen
  inc  r16      ;Datenwert erhöhen
  rjmp  loop      ;Schleife neu beginnen
;
;  Warteschleife (ungefähr 500ms)
;
wait:  ldi  r19,10      ;r19, r18 und r17
  clr  r18      ;ergeben zusammen
  clr  r17      ;einen 3-Byte-Zähler
wait1:  dec  r17      ;niedrigstes Byte -1
  brne  wait1      ;0 erreicht? nein -> Schleife
  dec  r18      ;mittleres Byte -1
  brne  wait1      ;0 erreicht? nein -> Schleife
  dec  r19      ;höchstes Byte -1
  brne  wait1      ;0 erreicht? nein -> Schleife
  ret        ;Schleifenende, Rückkehr

Das ganze funktioniert, nur wenn ich statt PB0 einen anderen Pin als
Ausgang nehme, oder auch zwei verschiedene gleichzeitig, dann blinken
diese nicht im gleichen Takt. Sie werden von PB0 bis PB7 immer
langsamer. Muss das so sein oder ist da was kaputt?

von Axos (Gast)


Lesenswert?

Das muss so sein...schau dir mal an wie im beinärformat hochgezählt
wird.


00000001
00000010
00000011
00000100
00000101
00000110
00000111
.
.
.
wie du merkst haben die höheren bits(weiter links) länger an oder aus
zeiten.

MfG Axos

von Stefan (Gast)


Lesenswert?

Sorry, hab das Programm nicht selber geschrieben. An was erkennt man
denn das die zahlenwerte länger sind? Muss ich da Spaltenweise gucken,
z.b. ganz rechts folgt immer in jeder Zeile ein Wechsel, eine Spalte
weiter links nur jede zweite Zeile u.s.w?

von Tobi (Gast)


Lesenswert?


von Quark (Gast)


Lesenswert?

das was Axos beschreibt, ist die binäre Darstellung
des Ausgabewertes, der mit 0 initialisiert wird,
und mit
  inc  r16      ;Datenwert erhöhen
immer um eins erhöt wird.
Das r16 in binärer Schreibweise ergib die Aufstellung von Axos.

Quark

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.