oder einfach mal als beispiel
ich möchte die zahl 100 als binär am portA ausgeben.
wie macht man das?
Ich könnte in Bascom hilfe natürlich gucken, aber ich weiss nicht wonach ich gucken soll.
Hallo!
ich stehe gerade vor einem kleinem Problem.
Die "Aufgabe" lautet:
es soll erstens ein 12 bit breiter Gray-code eingelesen werden.
als eingangsports habe ich portb und portd genommen.
da ein Port nur 8 bit breit ist, nehme ich 2 ports:
Lobyte = Pinb
Hibyte = Pind
Hibyte = Hibyte And &B0000000000001111
so. dann soll das ganze in BCD-code umgerechnet werden.
mit den Befehl Gray2Bin
das wird auch kein Prob sein.
Das problem ist nur der umgerechnete BCD-code soll an ports A und C (auch zusammengefügt) ausgegeben werden.
Wie ich die Ports A und C zusammenfüge ist mir ungefähr klar.
aber wie gebe ich den BCD-Code aus?
Mir feht nur der Befehl. kann mir jemand helfen vielleicht?
Danke schön.
oder einfach mal als beispiel
ich möchte die zahl 100 als binär am portA ausgeben.
wie macht man das?
Ich könnte in Bascom hilfe natürlich gucken, aber ich weiss nicht wonach ich gucken soll.
wird nicht klappen - da müssten die ersten 8 Nullen weg.Hibyte = Hibyte And &B0000000000001111
Wenn ich den letzten Thread noch richtig im Kopf habe, hattest Du als Ergebnis doch ein Word. Wenn Du das auf 2 Ports ausgeben willst, sind die Befehle LOW und HIGH hilfreich.
PortA = 100oder einfach mal als beispiel
ich möchte die zahl 100 als binär am portA ausgeben.
wie macht man das?
ja, damals hast du mir sehr geholfen!
Warum müssen die ersten 8 nullen weg? Das ist doch der Eingang. oder verstehe ich was falsch?
Weil Du über ein Byte nur 8 Bits "drüberlegen" kannst - und keine 16.
Mit AND &B00001111 setzt Du die ersten 4 Bits des Ports auf 0 (da sie nicht an dem eigentlichen Wert beteiligt sind).
achso.
ich poste mal mein blöbes Programm, was ich bis jetzt habe. vielleicht hilft das ein wenig. und noch was... das sind jetzt 13 bit
Code:$regfile = "m32def.dat" $crystal = 1000000 Dim Pac As Word Dim Lobyte As Word Dim Hibyte As Word Dim Endlobyte As Word Dim Endhighbyte As Word Do Endlobyte = Pina 'PortA Untere 8 bit (ausgang) Endhighbyte = Pinc 'portC obere 5 bit (ausgang) Endhighbyte = Endhighbyte And &B0000000000000111 'Endhighbyte ist also der Ausgang? Lobyte = Pinb 'Port B untere 8 bit (eingang) Hibyte = Pind 'portD obere 5 bit (eingang) Hibyte = Hibyte And &B0000000000000111 ' zusammensetzen Rotate Hibyte , Left , 8 '8 bits nach links Pac = Lobyte + Hibyte ' zusammenzählen Pac = Gray2bin(pac) 'in bin umwandeln Endhighbyte = Pac an Endhighbyte die BIN ausgeben Wait 1 Loop
ich weiss, da steht fast alles mist, aber ich mache, wie ich kann. in der Hoffnung, dass mit jemand hilft.
Okay - ich wusste nicht, dass "Hibyte" ein Word ist - sorry. Dann kannst Du natürlich auch 16 Bits drüberlegen, kein Problem.Dim Hibyte As Word
Vielleicht habe ich etwas den Überblick verloren, aber grob & qualitativ sollte doch folgendes passieren:
1. 12 (oder 13?) bits werden über 2 Ports eingelesen
2. Die 5+8 Bits werden zu einem Word zusammengebastelt
3. Auf Word-Ebene findet irgendeine Umwandlung statt (Gray -> BCD?)
4. Das neue Word soll über 2 andere Ports ausgegeben werden.
Richtich?
Ja, es ist genau richtig was du da schreibst!
das problem ist der 4. Schritt. bis dahin komme ich in meinen Gedanken noch, und dann bleibe ich stecken. Wie fasse ich die anderen 2 ports zusammen und gebe aus den zusammengefassten Ports den umgerechneten BCD code aus?
Danke
Endhighbyte ist also Dein 16bit-Word ist, dessen "obere" 8 bits ( 15-8 ) auf PortC, und dessen "unteren" 8 bits ( 7-0 ) auf PortA ausgegeben werden sollen?
Dafür wäre die einfachste Lösung in etwa diese:
Und wenn Du jetzt noch ´ne echte Herausforderung suchst: Man kann den ganzen Zauber auch mit einer einzigen (!) Word-Variable abarbeiten anstatt mit 5. Auch wenn einn Mega32 richtig viel Ressourcen hat - irgendwann wird der Punkt kommen, an dem die Programme so gruß werden, dass die Kapazitäten knapp werdenCode:PortC = High(Endhighbyte) PortA = Low(Endhighbyte)
Vielleicht kriegst Du ja raus wie
ich hab es nicht ganz verstanden. also als ausgang den Vollen portA von 0-7 und den rest von PortC 0-4.Zitat von Sauerbruch
ich kann es aber erst Freirag testen, weil ich morgen und übermorgen Berufschule habe, und Freitag komme ich wieder zur Arbeit.
Danke
Lesezeichen