mikrocontroller.net

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


Autor: Thomas Frosch (tfreal10)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Sprache? Welche Architektur?

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

in AVR-Assembler
(Bit irgendwie ins Carry-Bit befördern)
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.

Autor: Thomas Frosch (tfreal10)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am einfachsten:  (alles natürlich beispielhaft)
in r17, PORTA ;Port einlesen
andi r17, 0b0001000 ; gewünschtes Bit Maskieren
subi r17, 0xFF ; Testen ob 0 und ggf Carry setzen (0xFF-0 = kein Carry -1= Carry)
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

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LSL my_bitbuffer ; 0 reinschieben
BRxx found_a_zero ; Hier deine Bedingung einfügen
    INC my_bitbuffer ; 1 dazuaddieren
found_a_zero:

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

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

rol Register - Carry Flag nach Bit0

MfG Spess

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder so:

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

(abgeguckt bei PeDa)

...

Autor: Paul Baumann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Herbert vom Karvenzmann (Gast)
Datum:

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

Herbert vom Karvenzmann

Autor: Thomas Frosch (tfreal10)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Herbert von Caravan (Gast)
Datum:

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

BTW: Heißt Du nicht eigentlich Kaventsmann ?

Hochachtungsvoll
Herbert von Caravan

Autor: Herbert vom Karvenzmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.