Forum: Mikrocontroller und Digitale Elektronik Eingangspin direkt in Register


von Robert M. (xertno)


Lesenswert?

Hallo,
Ich möchte gern serielle Daten in einen MC von Atmel aufnehmen. dafür 
habe ich einen Pin am PortA auf Eingang geschaltet und möchte den 
Zustand von diesem nun in das Nullte Bit in einem Register schreiben 
dieses denn Schieben usw.
Nun geht das nicht ganz so wie ich mir das vorgestellt oder besser 
Programmiert habe nun ist das auch in gewisser weise nachvollziehbar da 
ich nicht weiß wie das nullte Bit in einem Register durch den IN Befehl 
beschrieben wird.
Währe toll wenn mir jemand dabei helfen kann.

von Johannes M. (johnny-m)


Lesenswert?

Direkt gehts nicht. In welcher Programmiersprache soll das ganze denn 
sein? Assembler oder C? Oder gar Bascom?

von Robert M. (xertno)


Lesenswert?

in Assembler

von Michael U. (Gast)


Lesenswert?

Hallo,

auch wenn Du sehr sparsam mit Infos umgehst (welcher Atmel? Welche 
Programmiersprache, welches Datenformat haben die seriellen Daten?),

bei den AVR liest IN PINx,register den Zustand des Ports komplett in das 
angegeben Register.

Von da ab mußt Du dann selber sortieren.

Möglich wäre z.B.:

CLR r17

IN PINA,r16
ROR r16 schiebt Bit 0 in Carry
ROL r17 schiebt Carry in Bit 0

Serielle Daten empfängst Du damit aber noch nicht, ist nur eine mögliche 
Lösung für Deine konkrete Frage, wie man den Zustand von Bit0 eines 
Ports in Register schieben kann.

Gruß aus Berlin
Michael


von Johannes M. (johnny-m)


Lesenswert?

Michaels Lösung ist sicher die eleganteste und kürzeste. Du musst dann 
noch das ganze in einer Schleife machen und entsprechend 
synchronisieren.

von A.K. (Gast)


Lesenswert?

Möchte noch an das "T" Bit erinnern, mit dem sich Bits beliebig 
transportieren lassen.

von Robert M. (xertno)


Lesenswert?

Gut das werde ich jetzt mal versuchen, und das nächste mal gibt es die 
Standardinfos gleich ;).

von Hannes L. (hannes)


Lesenswert?

Oder
1
 clc                 ;Carry erstmal auf 0
2
 sbic pinb,3         ;Pegel an PB3 ermitteln, überspringen, wenn L (0)
3
 sec                 ;Carry setzen, wenn Pegel H (1) war
4
 rol r2              ;Carry in das Register r2 rotieren (reinschieben)

Aber das ist noch keine komplette serielle Kommunikation...
Danach hattest Du aber auch nicht gefragt, oder?

...

von Peter D. (peda)


Lesenswert?

Oder
1
lsl     r16
2
sbic    pinb,3
3
inc     r16


Peter

von Hannes L. (hannes)


Lesenswert?

Peter Dannegger wrote:
> Oder
>
>
1
> lsl     r16
2
> sbic    pinb,3
3
> inc     r16
4
>
>
>
> Peter

Danke, Du verblüffst mich immer wieder...

Gruß, Hannes

von Johannes M. (johnny-m)


Lesenswert?

Hannes Lux wrote:
> Peter Dannegger wrote:
> ...
> Danke, Du verblüffst mich immer wieder...
Nicht nur Dich...

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.