Programm geht in Simulation aber nicht auf Steckbrett

Gast #2051469
Lesenswert?

Guten Tag.

Habe mir ein kleines Programm zusammengebastelt, was aber irgendwie 
nicht richtig funktioniert.

Das Problem ist das PD0-2 alle auf Low sind, aber trotzdem PD3-5 sowie 
PB0-2 auf High Tackten, wodurch die an den Port`s angeschlossenen LED`s 
aufblinken.
1
.include "tn2313def.inc"         ; Definitionsdatei für den Prozessortyp einbinden
2

3

4
    ;Aus/Eingänge einstellen
5
         ldi r16, 0x00       ; 0x00 in r16 laden
6
         out DDRA, r16       ; Inhalt von r16 ins IO-Register DDRA ausgeben
7
     ldi r16, 0x00       ; 0x00 in r16 laden
8
     out PORTA, r16      ; Inhalt von r16 ins IO-Register PORTA ausgeben
9
 
10
         ldi r16, 0b00111000 ; 0b11111100 in r16 laden
11
         out DDRD, r16       ; Inhalt von r16 ins IO-Register DDRD ausgeben
12
     ldi r16, 0x00       ; 0x00 in r16 laden
13
     out PORTD, r16      ; Inhalt von r16 ins IO-Register PORTD ausgeben
14

15
     ldi r16, 0b00000111 ; 0b00000111 in r16 laden
16
     out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB ausgeben
17
     ldi r16, 0x00       ; 0x00 in r16 laden
18
     out PORTB, r16      ; Inhalt von r16 ins IO-Register PORTB ausgeben
19

20
     
21
         ldi r18, LOW(RAMEND)             ; LOW-Byte der obersten RAM-Adresse
22
         out SPL, r18
23

24

25
loop:   
26

27
     
28
     sbis PIND, 2     ; Wenn Blinkersignal anliegt nächsten Befehl überspringen
29
     rcall reset
30
     sbic PIND, 2     ; Wenn Blinkersignal nicht anliegt nächsten Schritt überspringen
31
     rcall Blink1
32
     sbrc r16, 5        ; Wenn r16 voll ist (0xFF) nächsten Schritt ausführen
33
     ldi r16, 0x00     ; r16 auf 0 setzen
34
     rjmp loop
35
     
36

37

38
Blink1:
39

40
     ldi r20, 0x00
41
     sec
42
     rol r16       ; 1 in r16 einschieben
43
     push r16       ; r16 in Stack laden
44
     pop r17       ; In Stack geladenen Wert auf r17 schreiben
45
     andi r17, 0b00000111
46
     sbic PIND, 1     ; Wenn PortA1 Low nächsten Schritt überspringen
47
     out PORTB, r17     ; r17 ins Ausgangsregister PORTB laden
48
     sbis PIND, 1
49
     out PORTB, r20
50
     rol r17       ; drei Nullen von links in r17 einschieben
51
     rol r17       
52
     rol r17
53
     sbic PIND, 0     ; Wenn PinA0 Low nächsten Schritt überspringen
54
     out PORTD, r17     ; r17 ins Ausgangsregister PORTD laden
55
     sbis PIND, 0
56
     out PORTD, r20
57
     ldi r19, 0xFF
58
     rcall Warte
59
     ret         ; Zurückspringen zu rcall
60

61
Warte:
62

63
     dec r19
64
     brne Warte
65
     ret
66

67
Reset:
68

69
     ldi r16, 0x00
70
     out PORTB, r16
71
     out PORTD, r16
72
     ret
#2051486
Lesenswert?

Ich nehm an, Du benutzt nen externen Quartz. Schau mal, dass Du die 
Anschlüsse des Oszillators möglichst klein machst und die Kondensatoren 
eventuell direkt dranlötest. Dadurch kannst Du auf jeden Fall mal die 
Frequenz stabil halten und Energieverluste durch die Leitungen auf dem 
Steckbrett eliminieren.
Gast #2051498
Lesenswert?

Fehler gefunden:

Es "fehlten" Widerstände auf Masse an den Tastern ^^.
Wird nicht nochmal passieren (Soebend wurde mein erster AVR erfolgreich 
in Betrieb genommen!)

Vielen Dank an alle die mir dabei geholfen haben und das Forum.

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