Atmel mega16 verschiebt ungewollt

OP #666769
Lesenswert?

Hi,

ich will einen atmega16 Microprozessor programmieren.
Ich benutze das STK500 und das AVR Studio 4.

Ich will, dass wenn ich an Port A einen Taster drücke die dazugehörige 
LED an Port B leuchtet.

Also so:

PA0 = PB0
PA1 = PB1 etc.

Zurzeit ist es so:

PA1 = PB3
PA2 = PB4
PA3 = PB5
PA4 = PB6
PA5 = PB7
PA6 = nichts
PA7 = nichts
1
#include "m16def.inc"
2

3
loop:
4
  ldi  R18, 0x00  ;schreibe 00 in das Register 18
5
  out  DDRA, R18  ;setzt kompletten PortA als Eingang
6
  
7
  in  R22, PinA   ;kopiere PinA in Register 22
8

9
  ldi  R18, 0xFF  ;schreibe FF in Register 18
10
  out DDRB,R18    ;setzt kompletten PortB als Ausgang
11
  out PORTB,R22   ;aktiviert LEDs
12

13
  rjmp loop       ;springe zu Loop

Kann mir jemand helfen?
#666786
Lesenswert?

Hallo Stefan,

könnte sein was Peter schreibt.

Zudem wäre es besser, die E/A-Konfiguration zu Anfang ausserhalb der 
Schleife zum machen.

1
#include "m16def.inc"
2

3
  clr  R18        ; Reg löschen
4
                  ; Pull-ups aus, TriState schalten
5
  out  PORTA,R18  ; Port A löschen
6
  out  PORTB,R18  ; Port B löschen
7

8
  out  DDRA,R18   ; alles als Eingang
9
  neg  R18        ; Reg invertieren
10
  out  DDRB,R18   ; Port B auf Ausgang
11

12
loop:
13
  in  R22, PinA   ;kopiere PinA in Register 22
14

15
  out PORTB,R22   ;aktiviert LEDs
16

17
  rjmp loop       ;springe zu Loop

alternativ kannst Du auch:
1
#include "m16def.inc"
2

3
  clr  R18             ; Reg löschen
4
  out  PORTA,R18       ; Port A löschen
5
  out  PORTB,R18       ; Port B löschen
6

7
  ldi  R18,0b00000000  ; Muster 0=Eingang, 1=Ausgang
8
  out  DDRA,R18        ; PORT A Richtung setzen
9
  ldi  R18,0b11111111  ; Muster 0=Eingang, 1=Ausgang
10
  out  DDRB,R18        ; Port B Richtung setzen
11

12
loop:
13
  in  R22, PinA   ;kopiere PinA in Register 22
14

15
  out PORTB,R22   ;aktiviert LEDs
16

17
  rjmp loop       ;springe zu Loop

Da, kannst Du dann auch direkt sehen, welche Port-Pins wie geschaltet 
sind.


Grüße
Hans-Josef

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren