Toon posts:

[.NET] Shift Operator met meerdere bits

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik stuur via .Net code een parallelle poort aan om zo 8 ledjes die een byte voorstellen te bedienen.

Ik moet onder andere de ledjes laten verschuiven door middel van de Shift operator, wanneer het ledje 8 brand en ik schuif door moet automatisch ledje 1 terug gaan branden, ze moeten dus in een "loopje" bewegen.

Wanneer ik dit doe met 1 ledje lukt dit perfect, het brandend ledje schuift door en springt na ledje 8 terug op ledje1.

Maar wanneer ik dit doe met 2 ledjes komt er altijd maar eentje terug, die meerdere ledjes zouden dus ook in een loopje moeten bewegen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Private Sub btnOmhoog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOmhoog.Click
        Dim x As Byte = ClsParPort.inport(&H378)
        x = x << 1

        If x = 0 Then
            x = 1
            ClsParPort.outport(&H378, x)
            getstatus()
        Else
            ClsParPort.outport(&H378, x)
            getstatus()
        End If

    End Sub

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19-02 20:38
edit:
Laat maar, dit is een zinloos topic. :/

[ Voor 97% gewijzigd door Soultaker op 11-06-2006 16:22 ]


Verwijderd

Topicstarter
Hoe bedoelt ge? Zit er anders wel al hele dag op te zoeken...

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19-02 20:38
Waarom post je hier code die je niet zelf verzonnen hebt? Als je enig idee zou hebben wat er op regel vijf en zes gebeurt hoefde je de vraag niet te stellen.

Om dan nog een constructieve draai aan m'n reacties te geven: om de code voor elke configuratie van brandende ledjes te laten werken, moet je ervoor zorgen dat er het volgende gebeurt:
• elke bit in 'x' schuift één plek naar links;
• de hoogste bit uit 'x' wordt de laagste bit uit 'x'.

Dit laatste is het cruciale punt en wat er op regel 5-6 gebeurt voor het geval met één bit.

[ Voor 38% gewijzigd door Soultaker op 11-06-2006 16:30 ]


Verwijderd

Topicstarter
Ik weet wel degelijk wat daar gebeurd, en heb die code zelf geschreven maar die werkt enkel als er maar 1 bit verschuift. Ik probeer me er niet makkelijk van af te maken want zit al een godganse dag te ze zoeken op dit probleem.

Bij 1 bitje komt er na de 128 een 0, die vang ik dan op zodanig hij weer bij 1 begint.

Maar bij meerdere bits heb ik echt geen idee

Edit:De laatste bit moet na 128 dus de eerste worden, op dat gegeven zit ik al hele dag te zoeken namelijk.

[ Voor 14% gewijzigd door Verwijderd op 11-06-2006 16:34 ]


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Dat er altijd maar eentje terug komt is door de x = 1.

De bits die eraf schuiven, moeten 8 bits naar rechts er weer bij. Ze schuiven dus zeven naar rechts.
Dat kan je zo doen:
C:
1
x = x << 1 | x >> 7;

[ Voor 5% gewijzigd door Daos op 11-06-2006 16:35 ]


Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
    Private Sub btnOmhoog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOmhoog.Click
        Dim x As Byte = ClsParPort.inport(&H378)
        Dim y As Byte

        y = x << 1 Or x >> 7
        ClsParPort.outport(&H378, y)
        getstatus()

    End Sub


Zo was het inderdaad, bedankt!

Ik zat het veel te ver zoeken
Pagina: 1