-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: Portpins zusammenfügen und 12-bit ausgeben

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82

    Portpins zusammenfügen und 12-bit ausgeben

    Anzeige

    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.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    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.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Hibyte = Hibyte And &B0000000000001111
    wird nicht klappen - da müssten die ersten 8 Nullen weg.

    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.

    oder einfach mal als beispiel
    ich möchte die zahl 100 als binär am portA ausgeben.
    wie macht man das?
    PortA = 100

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    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?

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    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).

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    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.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Dim Hibyte As Word
    Okay - ich wusste nicht, dass "Hibyte" ein Word ist - sorry. Dann kannst Du natürlich auch 16 Bits drüberlegen, kein Problem.

    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?

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    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

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    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:

    Code:
    PortC = High(Endhighbyte)
    PortA = Low(Endhighbyte)
    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 werden

    Vielleicht kriegst Du ja raus wie

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    Zitat Zitat von Sauerbruch
    "obere" 8 bits ( 15-8 ) auf PortC, und dessen "unteren" 8 bits ( 7-0 ) auf PortA ausgegeben werden sollen?
    ich hab es nicht ganz verstanden. also als ausgang den Vollen portA von 0-7 und den rest von PortC 0-4.
    ich kann es aber erst Freirag testen, weil ich morgen und übermorgen Berufschule habe, und Freitag komme ich wieder zur Arbeit.
    Danke

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •