Forum: Mikrocontroller und Digitale Elektronik Einlesen eines Bits am ATMEGA168


von Jost (Gast)


Lesenswert?

Hi,

ich habe ein Problem bei der Programmierung meines 
ATMEGA168PA-Controllers. Ich probiere (als Test erstmal) den Port C 
auszulesen und die Daten auf Port B (der mit LEDs bestückt ist, die auch 
funktonieren) auszugeben.

Dazu nutze ich das unten angegebene Code-Stück. Irgendwie funktioniert 
das aber nicht, denn die Ausgabe auf Port B ist immer 0b01111111. Das 
oberste Bit ist 0, da es nicht existiert - soviel ist klar. Allerdings 
ändert sich die Ausgabe nicht, wenn ich eines der Bits extern auf Low 
ziehe (hab nachgemessen, ist wirklich auf Low). Warum?
1
.NOLIST
2
.INCLUDE "m168def.inc"
3
.LIST
4
.DEF  mp = R16
5
6
rjmp main
7
8
main:
9
  ; Port C ist reiner Eingabeport:
10
  ldi mp, 0x00
11
  out DDRC, mp
12
  ; Und die Pull-Ups von C sind allesamt aktiviert:
13
  com mp
14
  out PORTC, mp
15
  
16
  ; Port B ist reiner Ausgabeport:
17
  ldi mp, 0xFF
18
  out DDRB, mp
19
  
20
loop:
21
  ; Lies Port C, gib das gelesene auf Port B aus und tu das endlos.
22
  in mp, PORTC
23
  out PORTB, mp
24
  rjmp loop

Viele Grüße,
Jost

von Peter II (Gast)


Lesenswert?

auslesen geht aber mit PINC und nicht mit PORTC

von Alex S. (thor368)


Lesenswert?

Genauer:

PortX Register sind die buffer für die Treiberstufen pro Port. DDRX sind 
sozusagen die enables für die Treiberstufen und PinX Register sind die 
Eingaspuffer der Ports.

Thor

von Jost (Gast)


Lesenswert?

Peter II schrieb:
> auslesen geht aber mit PINC und nicht mit PORTC

Das erklärt so einiges.

Danke euch beiden

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.