Forum: Mikrocontroller und Digitale Elektronik Byte in 2*4Bit aufteilen


von Robin W. (robo11)


Lesenswert?

Hallo,

ich brauche euren Rat:

Ich habe jetzt wie ihr sicher erkennen könnt den PortA als Byte in die 
Variable A geschrieben. Jetzt möchte ich dieses Byte in 2*4 aufteilen, 
denn ich möchte 4 Bit + 4 Bit rechnen und diese auf PortB ausgeben. Wie 
mache ich das am besten, das Byte A in 2 Byte jeweils 4 Bit aufteilen?
1
 Dim A As Byte
2
 Config Porta = Input
3
 Config Portb = Output
4
5
6
  Do
7
8
  A = Pina
9
10
  Loop
11
  End

Mit freundlichen Grüßen

Robin Wenert

von Werner (Gast)


Lesenswert?

Maskieren und schieben in der Programmiersprache deine Wahl?

von Robin W. (robo11)


Lesenswert?

Bascom bitte!

von Klaus D. (kolisson)


Lesenswert?

dim a as byte
dim b as byte


A = wert
b = wert

a = a and &b00001111
b = b and &b11110000

shift b, right,4

von Robin W. (robo11)


Lesenswert?

THX! ich werde es gleich testen! Vielen Dank für die schnelligkeit :D

von Robin W. (robo11)


Lesenswert?

Aber wie könnte ich jetzt A und B addieren, wahrscheinlich in DEC 
umwandeln oder? Hierzu finden ich leider nichts kann mir da nochmal 
jemand helfen? Dann müsste ich es aber auch wieder von DEC in BIN 
wandeln damit ich es auf einem anderen Port ausgeben kann!

von Werner (Gast)


Lesenswert?

Klaus De lisson schrieb:
> b = b and &b11110000
> shift b, right,4

Wozu die erste Zeile? Wenn in BASCOM Shift hält, was der Name 
verspricht, ist es kein Rotate-Befehlt.

von Klaus D. (kolisson)


Lesenswert?

Werner schrieb:
> Wozu die erste Zeile? Wenn in BASCOM Shift hält, was der Name
> verspricht, ist es kein Rotate-Befehlt.

Recht hast du ja aber ich glaube ich habe es so geschrieben
dass dem fragesteller der Weg klarer wird.

Robin Wenert schrieb:
> Aber wie könnte ich jetzt A und B addieren, wahrscheinlich in DEC
> umwandeln oder?

c = a + b

Gruss k.

von Robin W. (robo11)


Lesenswert?

OK! Hätt ich mir denken sollen ;)

Und zur ausgabe einfach? :
PORTB = C


Dann würde das Programm so aussehen oder?:
1
 $regfile = "m32def.dat"
2
 $framesize = 32
3
 $swstack = 32
4
 $hwstack = 32
5
 $crystal = 1000000
6
 $sim
7
8
 Dim A As Byte
9
 Dim B As Byte
10
 Dim C As Byte
11
 Config Porta = Input
12
 Config Portb = Output
13
14
15
  Do
16
17
18
   A = Pina
19
   B = Pina
20
21
   A = A And &B00001111
22
   B = B And &B11110000
23
24
   Shift B , Right , 4
25
26
   C = A + B
27
28
   Portb = C
29
30
  Loop
31
  End

von Werner (Gast)


Lesenswert?

Robin Wenert schrieb:
> Und zur ausgabe einfach? :
...
> C = A + B
...
> PORTB = C

Ist das wirklich das, was du erreichen möchtest?

Vielleicht meinst du
1
C = Shift (B,Left,4) OR A
2
PORTB = C

von Robin W. (robo11)


Lesenswert?

Nunja ich möchte das Ergebnis der Addition auf PORTB in BCD-Code 
ausgeben!

von Robin W. (robo11)


Lesenswert?

OK mit der Lösung von Klaus funktioniert es perfekt!
Vielen Vielen Dank an euch!

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.