PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dezimalzahl in Binärzahl umwandeln Atmega8



runner02
30.07.2011, 19:07
Hallo Leute,

Komischerweise finde ich weder in Google noch hier in der Forumssuche einen Befehl (wie 'inttostr' in Delphi), der mir Zahlen von int nach bin umwandelt... :(

Z.B.

variable1 = 24

variable2 = inttobin (variable1)


-> gebe ich variable2 aus, soll 0011001 etc rauskommen <-



Mfg

Richard
30.07.2011, 19:10
Welche Programmiersprache?

Gruß Richard

runner02
30.07.2011, 19:11
Bascom, bitte

Kampi
30.07.2011, 19:14
Mit dem Befehl "Bin" machst du das.

Wenn du dieses Programm hast:

Dim A as Byte
A = 10
Dim B as String * 10

B = Bin(A)

Damit wandelst du die Zahl A in einen Binären String um.

runner02
30.07.2011, 19:39
Großartig, Danke!!

String*10?? Und wenn ich es per LEDs ausgebe brauche ich Byte?? -> PORTB = Bin(A)

Und statt Byte kann ich auch Integer nehmen?? Also wenn ich z.b. 2053 habe, dann reicht doch Byte nicht mehr... ?

Kampi
30.07.2011, 19:49
Ja genau für Portausgabe heißt es dann "Print Bin(A). Und die genaue deffinition des Befehls ist:

Convert a numeric variable into the binary string representation.

Sollte dann auch mit Integer gehen. Weiß ich aber nicht genau. Musst du mal ausprobieren.

Sauerbruch
30.07.2011, 22:18
Und wenn ich es per LEDs ausgebe brauche ich Byte??

Was meinst Du denn genau mit "per LED ausgeben"? Sollen alle Bits nacheinander, d.h. seriell über einen einzigen Pin ausgegeben werden, oder alle Bits gleichzeitig über 8 bzw. 16 Anschlüsse?

Kampi
30.07.2011, 22:20
Nein du kannst mit "Bin" jeden Numerischen Wert in einen Binären String verwandeln den du dann auf den Ports ausgeben kannst.

Sauerbruch
30.07.2011, 22:25
Die Frage ging mehr an runner02 - der "Bin"-Befehl ist mir wohl geläufig, nur kann man ein Byte (oder mehrere Bytes) ja durchaus auch parallel über einen kompletten Port ausgeben...

Vitis
01.08.2011, 08:50
mehrere Bytes gehen nur bei Ports mit mehr als 8 Bit, ansonsten beim 8-Bitter brauchst Du garnix umwandeln so lange Deine Zahl unter 256 bleibt passt das auf das Portregister. Wenn Du ne Word- oder Int- Variable auf zwei Ports verteilen willst machst Du das entweder über high() oder low() -Befehl oder legst gleich ne Overlayvariable an ...

dim x_word as word
dim lowbyte_word as byte at x_word overlay
dim highbyte_word as byte at x_word+1 overlay

dann nur noch
porta=lowbyte
portb=highbyte

Eine Dezimalzahl brauchst Du nicht in Binär umwandeln, der µC rechnet eh nur in Binärzahlen. Die Ausgabe von Dezimalzahlen muss dieser immer umrechnen :)

runner02
03.08.2011, 13:26
mehrere Bytes will ich gar nicht ausgeben, bei integer ist es um die Tage gegangen.... Siehe hier https://www.roboternetz.de/community/showthread.php?54278-BASCOM-simple-Uhr&p=520358#post520358