Forum: Mikrocontroller und Digitale Elektronik Probleme mit Rechnung und Carry 8051


von Franz (Gast)


Lesenswert?

Hi,

vielleicht kann ich den ein oder anderen noch an nem Freitag mit nem 
kleinen Problem von mir quälen. Folgendes Problem:
Ich hab hier nen gemessenen Wert im Akku der zwischen 0 und 102 
schwankt, es soll aber nicht über die 99 gehen von daher subtrahiere ich 
R0( R0=99) vom Akku clear vorher noch den Akku, dass auch genau 99 und 
nicht 100 Subtrahiert wird. Wenn der Wert im Akku kleiner als 99 ist, 
wird Carry gesetzt und rausgesprungen, wenn er größer wird Carry gesetzt 
und Sprung wird ausgeführt,  automatisches setzten des Wertes 99.

Funktioniert aber irgendwie nicht :/ weiss jemand warum???

1
UEBERLAUF:    MOV A, R7
2
              CLR C
3
              SUBB A, R0
4
              JNC UEBER
5
              RET
6
7
UEBER:        MOV A, #99d
8
              RET


Na ja, lassts euch gut gehn... kann das Bierchen heute Abend kaum 
erwarten

von Skua (Gast)


Lesenswert?

1
UEBERLAUF:    MOV A, R7
2
              CLR C
3
              SUBB A, R0
4
              JNC UEBER
5
              MOV A, R7 ;<----------------------
6
              RET
7
8
UEBER:        MOV A, #99d
9
              RET

mfg.

von Klaus (Gast)


Lesenswert?

>Funktioniert aber irgendwie nicht

Erklärmal das irgendwie genauer.

So wie ich das sehe funktioniert deine Routine.
Mit der Ergänzung Skua funzt sie besser.

von Peter D. (peda)


Lesenswert?

Dokumentier mal Deine Funktion, damit Du auch selber durchsiehst, z.B.
1
;function: if R7 > 99 then R7 = 0
2
;input; R7 = 0..255
3
;output: R7 = 0..99
4
lim_99:
5
  cjne r7, #100, _lim_1
6
_lim_1:
7
  jc _lim_2
8
  mov r7, #0
9
_lim_2:
10
  ret


Peter

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.