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