Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage atmega16


von der ernst (Gast)


Lesenswert?

ich möchte vom port a lesen und die schalterstellungen auf port d
ausgeben. folgender code:

ldi r17, 0x00
  out DDRA,r17
  ldi r20, 0xff
  out PORTA, r20
  ; Port A als eingang und pull up widerstände aktivieren

  in r25, PORTA

  ldi r16, 0xff
  out DDRC, r16
  out PORTC, r25

die schalter liegen auf masse also müßte alles richtig verdrahte sein.
jedoch funktioniert das nicht. was mache ich falsch?

von crazy horse (Gast)


Lesenswert?

wenn du auf PortD ausgeben willst, warum schreibst du dann DDRC/PORTC?

von der ernst (Gast)


Lesenswert?

ahm sorry auf port c ausgeben natürlich

von Philipp Burch (not logged in) (Gast)


Lesenswert?

Hi,

zum lesen immer die PINx-Register verwenden. Also
in r25, PINC

Wenn du das PORTx-Register schreibst/liest steuerst du damit nur die
Pullups.

von der ernst (Gast)


Lesenswert?

super danke das war der fehler

von der ernst (Gast)


Lesenswert?

eine frage hätt ich noch kann ich die PINS auch einzeln einlesen?
PINA ist in der m16def.inc so definiert:
; PINA
.equ  PINA7, 7
.equ  PINA6, 6
.equ  PINA5, 5
.equ  PINA4, 4
.equ  PINA3, 3
.equ  PINA2, 2
.equ  PINA1, 1
.equ  PINA0, 0

wenn ich im programm allerdings in r25, PINA4 schreibe statt PINA
funktioniert nichts mehr

von johnny.m (Gast)


Lesenswert?

Du kannst die Pins mit einer Maskierung einzeln einlesen

in r25, PINA           ;PINA in r25 einlesen
;Maskieren mit 0b00010000 (1 << 4 bzw. 1 << PINA4):
andi r25, (1 << PINA4)

PINA4 ist nur die Zahl (Bitnummer) 4 zugeordnet. Ansonsten hat PINA4
keine Funktion. Der Assembler versteht in dem oben von Dir verwendeten
Beispiel PINA4 als Register-Adresse. Dann kann es auch nicht
funktionieren. Mit einem Skip-Befehl kannst Du den Pin separat
auswerten:

sbis PINA, 4

oder

sbis PINA, PINA4

Ansonsten: Assembler-Befehlssatz mal genauer ansehen und v.a.
verstehen, was die einzelnen Befehle machen und wie sie funktionieren!

Gruß

Johnny

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.