LED schalten mit atmega32

Gast #1046493
Lesenswert?

Hallo,

ich möchte mit einem atmega32 eine LED schalten.
Das ganze soll in Assembler geschieben werden, es sollen die Kommandos 
sbis und sbic genutzt werden.

Der Eingangspin soll der Pin 1 von PortD sein.

Leider leuchtet die LED an PortB die ganze Zeit, es wird nicht 
geschaltet.
Wo ist der Fehler?

Franz

Hier der Code:
1
include "m32def.inc"         ; Definitionsdatei für den Prozessortyp einbinden
2
 
3
         ldi r16, 0xFF
4
         out DDRB, r16     ; Alle Pins am Port B durch Ausgabe von 0xFF ins
5
                           ; Richtungsregister DDRB als Ausgang konfigurieren
6
         ldi r16, 0x00
7
         out DDRD, r16     ; Alle Pins am Port D durch Ausgabe von 0x00 ins
8
                           ; Richtungsregister DDRD als Eingang konfigurieren
9

10
loop:
11
            sbic PIND, 1
12
      in r16, 1
13

14
      sbis PIND, 1
15
    in r16, 0
16
  
17

18
     out PORTB, r16    ; Inhalt von r16 an Port B ausgeben
19
         
20
     rjmp loop
Gast #1046500
Lesenswert?

ich programmiere zwar nicht in assambler, aber ich sehe schon das du die 
led an und ausschlatest. da dein auge aber viel zu träge ist dies 
wahrzunehmen, sihet es für dich so aus als wäre die led ständig an.
mach das am bestem im timer un taggel das bin aller 1s oder so
Gast #1046520
Lesenswert?

Hi

in r16, 1          ???
sbis PIND, 1
in r16, 0          ???

Das heisst einmal 'in r16, TWSR' und 'in r16, TWBR'. Aber das willst du 
nicht wirklich. Was sollen die beiden Zeilen bezwecken? 'in'-Befehle 
sind zu Lesen von IO-Registern. Wenn du ein Register mit einem Wert 
laden willst, musst du z.B. 'ldi r16, 1' benutzen.

MfG Spess
Gast #1046531
Lesenswert?

Danke für die Antworten.

So, ich habe den Code verbessert.

Aber leider funktionier das immer noch nicht.

Franz
1
loop:
2
            sbic PIND, 1
3
      ldi r16, 1
4

5
      sbis PIND, 1
6
    ldi r16, 0
7
  
8

9
     out PORTB, r16    ; Inhalt von r16 an Port B ausgeben
10
         
11
     rjmp loop

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