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
Welche Sprache? Welche Architektur? in C
1 | |
in AVR-Assembler
1 | |
2 | |
so in etwa? Je nachdem woher dein Bit kommt kann man das natürlich noch verbessern.
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
Am einfachsten: (alles natürlich beispielhaft)
1 | |
2 | |
3 | |
4 | |
Vieleicht gehts eleganter kam mir aber gerade so in den Kopf ;) braucht 1+1+1+1 = 4 Takte
1 | |
2 | |
3 | |
4 | |
Ich kann gerade nicht einschätzen, was die genau fehlt um das selbst zu formulieren.
Gast
#828077
Hi clc - Carry Flag löschen sec - Carra Flag setzen rol Register - Carry Flag nach Bit0 MfG Spess
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
oder so: lsl shiftbyte ;Null einschieben sbic port,portpin ;ist Portpin gesetzt? - nein... inc shiftbyte ;ja, Bit 0 setzen (abgeguckt bei PeDa) ...
Gast
#828510
@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
Gast
#828535
Hat er nicht nach einer Lösung in AVR-Assembler gefragt? Herbert vom Karvenzmann
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
Gast
#828829
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
Gast
#828833
@Herbert von Karvenzmann Nein, hatte er nicht explizit gesagt. BTW: Heißt Du nicht eigentlich Kaventsmann ? Hochachtungsvoll Herbert von Caravan
Gast
#828841
> @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
Bitte melde dich an, um einen Beitrag zu schreiben.