Forum: Mikrocontroller und Digitale Elektronik Bit nachschieben oder Bitfolge füllen


von Thomas F. (tfreal10)


Lesenswert?

Hi leute

Also bei mir wird ein Interrupt ausgelöst bei dem jedesmal der Status 
eines Ports abgefragt wird!

Nun soll eigentlich nichts anderes geschehen als eine Bitfolge seriell 
einzulesen!

also bin nun soweit dass das interrupt eben hochkommt und den port 
abfragt auf 0 oder 1 nun soll ein register beschrieben werden.

Also 1 Auftreten des Interrupts Status = 1
Register 0b00000001

2. Auftreten des Interrupts Status = 1
Register 0b00000011

3. Auftreten des Interrupts Status = 0
Register 0b00000110

usw.

mit welchen Befehl kann ich Bits schieben und dann eben noch ein 
spezielles Bit nachschieben

von Kai G. (runtimeterror)


Lesenswert?

Welche Sprache? Welche Architektur?

in C
1
x = (x << 1) | new_bit;

in AVR-Assembler
1
(Bit irgendwie ins Carry-Bit befördern)
2
rol my_register ; Carry-Bit in den Register reinschieben

so in etwa?

Je nachdem woher dein Bit kommt kann man das natürlich noch verbessern.

von Thomas F. (tfreal10)


Lesenswert?

sagen wir ich hab einfach eine Abfrage mit Sprüngen

also einmal ein Befehl für mit 1 Schieben und einmal mit 0 Schieben

AVR Assembler

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Am einfachsten:  (alles natürlich beispielhaft)
1
in r17, PORTA ;Port einlesen
2
andi r17, 0b0001000 ; gewünschtes Bit Maskieren
3
subi r17, 0xFF ; Testen ob 0 und ggf Carry setzen (0xFF-0 = kein Carry -1= Carry)
4
ror r16 ; rechts --> Carry wird vorne reingeschoben
Vieleicht gehts eleganter kam mir aber gerade so in den Kopf ;)

braucht 1+1+1+1 = 4 Takte

von Kai G. (runtimeterror)


Lesenswert?

1
LSL my_bitbuffer ; 0 reinschieben
2
BRxx found_a_zero ; Hier deine Bedingung einfügen
3
    INC my_bitbuffer ; 1 dazuaddieren
4
found_a_zero:

Ich kann gerade nicht einschätzen, was die genau fehlt um das selbst zu 
formulieren.

von Spess53 (Gast)


Lesenswert?

Hi

clc - Carry Flag löschen
sec - Carra Flag setzen

rol Register - Carry Flag nach Bit0

MfG Spess

von Michael U. (amiga)


Lesenswert?

Hallo,

außer, daß die Formulierung:
>also bin nun soweit dass das interrupt eben hochkommt und den port
abfragt auf 0 oder 1 nun soll ein register beschrieben werden.

etwas unklar ist (ein Port hat beim AVR 8 Bit...)

falls Du ein bestimmtes Bit meinst (immer das gleiche):

sec  ; carry setzen
sbis Port, Bit ; wenn Bit gesetzt -> ok
clc           ; sonst C löschen
rol r16      ; und reinschieben nach links.

Gruß aus Berlin
Michael

von Hannes L. (hannes)


Lesenswert?

oder so:

lsl shiftbyte        ;Null einschieben
sbic port,portpin    ;ist Portpin gesetzt? - nein...
inc shiftbyte        ;ja, Bit 0 setzen

(abgeguckt bei PeDa)

...

von Paul Baumann (Gast)


Angehängte Dateien:

Lesenswert?

@Thomas
Ich habe Dir mal ein Programm angehängt. (Bascom) Damit realisiere ich 
ein
16-Bit-Schieberegister. Vielleicht kannst Du daraus Deine Lösung 
ableiten.

MfG Paul

von Herbert vom Karvenzmann (Gast)


Lesenswert?

Hat er nicht nach einer Lösung in AVR-Assembler gefragt?

Herbert vom Karvenzmann

von Thomas F. (tfreal10)


Lesenswert?

Wow super danke für die Antworten!! die helfen mir auf jeden fall 
weiter!

Ja Sry meinte Pin nicht Port gg

hoffe nur dass ganze funktioniert im ganzen dann auch! Bin ja mal 
gespannt! Also nochmals besten Dank

von Spess53 (Gast)


Lesenswert?

Hi

Es gibt übrigens auch direkte Bittransferbefehle:

BST rXY,n  Damit wird das Bit n eines Registers r0..r31 in das T-Flag 
kopiert
BLD rXY,n  Kopiert T-Flag nach Bit n des Registers rXY (r0..r31).

MfG Spess

von Herbert von Caravan (Gast)


Lesenswert?

@Herbert von Karvenzmann
Nein, hatte er nicht explizit gesagt.

BTW: Heißt Du nicht eigentlich Kaventsmann ?

Hochachtungsvoll
Herbert von Caravan

von Herbert vom Karvenzmann (Gast)


Lesenswert?

> @Herbert von Karvenzmann
> Nein, hatte er nicht explizit gesagt.

Ich denke doch...

Beitrag "Re: Bit nachschieben oder Bitfolge füllen"

> BTW: Heißt Du nicht eigentlich Kaventsmann ?

Das ist da durchaus möglich, aber Sie wissen ja, wie das mit Eigennamen 
ist.

Gruß aus dem Karvendel,
Herbert, der Karvenzmann

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.