Hallo Leute Wie kann ich die PINs von PORT D (ATmega8) als Eingang und Ausgang zugreifen? Ich möchte die PINs PD0-PD3 als Ausgänge an die LEDs einschliessen und der PIN PD4 als Eingang ( Taster ) nutzen. Ist das möglich?
Durch das Datenrichtungsregister DDRx In deinem Fall z.B. DDRD=0F; vorausgesetzt du nutzt GCC
Freilich! ;-) $Regfile="m8def.dat" 'ATmega8-Deklarationen $Crystal=4000000 'Taktfrequenz: 4 MHz ' DDRD =&B00001111 'Pin PD0 bis PD§ als Ausgang konfigurieren PORTD=&B11110000 'Ziehwiderstände einschalten Do If Pind.4 = 0 Then 'Ja, was Then? Das mußt Du selbst wissen! Loop End 'MfG Paul
ich nutze Assembler und ich hab schon DDRD=0x0F gesetzt. und ich möchte von Eingang einen Wert nehmen und in die Ausgänge schicken. warum funktioniert mein Taster nicht?
Wenn du keinen externen Pull-Up/down-Widerstand benutzt hast, dann liegt der Pegel am Pin im Ungewissen...
Bitte schau Dir mal das AVR-Tutorial an. Da steht alles Wissenswerte drin. PIND4 ist eine Zahl und kein Register, weshalb das mit dem "in" schon mal nicht klappen kann. Und Du kannst auch nicht einem ganzen Port den Wert eines Pins zuweisen! Abgesehen davon musst Du für den Taster vermutlich auch noch die Pull-Ups aktivieren. Und die Eingangspins müssen beim Schreibzugriff auf den Port maskiert werden...
>Eingang und Ausgang >zugreifen? Ich möchte die PINs PD0-PD3 als Ausgänge an die LEDs >PIN PD4 als Eingang (
1 | ldi r16, 0x0F |
2 | out DDRD, r16 // PD3..0 auf Ausgang |
3 | swap r16 |
4 | out portd, r16 // PullUp für PD7..4 |
5 | loop: |
6 | in r16, PIND // einlesen von pind |
7 | and r16, 0b00010000 // nur pind4 |
8 | swap r16 |
9 | in r17, PORTD |
10 | and r17, 0b11111110 // auf ausgang kopieren |
11 | ori r17, r16 |
12 | out PORTD, r17 |
13 | rjmp loop |
Probiers mal so. Der EIngang PD4 wird an den Ausgang PD0 kopiert
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.