-
        

Ergebnis 1 bis 3 von 3

Thema: Schieberegister über einen halben port?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    06.03.2006
    Beiträge
    25

    Schieberegister über einen halben port?

    Anzeige

    Guten Abend,
    ich habe vollgendes Problem:
    ich bin dabei ein Gerät zu reparieren, bzw mit einem atmega32 die Steuerung neu zu realisieren. Es handelt sich um eine Steuerung für ein Leinwandrack in einem Fotostudio.

    Die Hardware sieht nun so aus:
    PortA = output
    PortC = input

    PortA.0 und 1 sind nicht belegt
    PortA.2 wählt mittels taster1 auf PortC.4 die drehrichtung nach oben
    PortA.3 wählt mittels taster2 auf PortC.5 die drehrichtung nach unten
    PortA.4 - 7 sind die motoren 1 - 4

    Nun hab ich noch 2 Taster zur Verfügung mit denen ich im grunde PortA.4 -7 nach links und mit dem anderen nach rechts rotieren will.
    Mit dem Rotate befehl hab ich bis jetzt aber immer nur den ganzen port rotieren können, das ist in diesem Fall aber nicht zu gebrauchen, selbst wenn ich hardwareseitig nen anderen port verwende brauche ich dennoch nur 4 Ausgänge und nicht die vollen 8.

    Wenn jemand einen Rat weiß, bitte immer her damit

    Viele Grüße, Basti

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Einen halben Port zu rotieren geht nicht so einfach. Man muß dazu die benötigten Bits per AND separieren und den alten Bits die man stehen lassen will wieder zusammenfügen.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    bigeggmc,

    das kann man z.B. so machen (Rotation nach rechts):

    Code:
    in r16,PINA          ; Input Pins von PortA nach r16 einlesen
    mov r17,r16          ; Arbeitskopie nach r17
    lsr r17              ; schiebt alle 8 Bits um eins nach rechts, setzt Bit7 auf Null
    sbrc r17,3           ; nächste Anweisung überspringen, wenn Bit3 Null ist
    or r17,0x80          ; Bit7 auf 1 setzen
    andi r17,0xF0        ; untere 4 Bits in r17 löschen
    andi r16,0x0F        ; oberer 4 Bits in r16 löschen
    or r16,r17           ; beide Halb-Bytes in  r16 wieder zusammensetzen
    ; r16 enthält jetzt wieder den urspünglichen Port-Inhalt, aber die
    ; oberen 4 Bits sind um eins nach rechts rotiert.
    Das Programmstück lässt sich leicht für die Linksrotation modifizieren .

    mare_crisium

Berechtigungen

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