assembler Programm licht an/aus

OP #1547223
Lesenswert?

Hallo,

ich bin neu in der atmel programierung. Wäre es möglich, wenn jemand 
über mein code schauen könnte? irgendwie sind alle leds an, obwohl diese 
aus sein sollen.

Weiss jemand wieso? Die LEDs sollen erst angehen, wenn ich Pin0 
drücken.. dann sollen die LEDs solange anbleiben, bis Pin7 einmal 
gedrückt wird.
Sieht jemand meinen Fehler?
1
.INCLUDE "8515def.inc"
2

3
.DEF mp = R16
4
.DEF mo = R17
5

6
main:    ldi mo, 0xFF
7

8
      ldi mp, 0xFF
9
      out DDRB, mp  ;PortB als  Ausgang
10
      ldi mp, 0x00
11
      out DDRD,mp    ;Port D als Eingang
12

13
      ldi mp, 0xFF
14
      out PORTB, mp
15
loop:    
16
      sbic PIND, 0
17
      rcall ledan
18

19
      sbic PIND, 7
20
      rcall ledaus
21

22
      rjmp loop
23

24

25
ledan:    ldi mp, 0x00
26
      out PORTB, mp
27
      ret
28

29
ledaus:    ldi mp, 0xFF
30
      out PORTB, mp
31
      ret
Gast #1547239
Lesenswert?

Schaltplan?

Die LEDs müssen bei diesem Code active-low geschaltet sein. Die Taster 
an PD0 sind ebenfalls active-low (siehe IO in AVR-GCC-Tutorial) 
geschaltet. Deshalb sind Pull-up Widerstände erforderlich, um im 
losgelassenen Zustand ein sicheres HIGH zu haben. Die internen Pullups 
hast du nicht aktiviert, deshalb die Frage oben nach dem Schaltplan...
Gast #1548140
Lesenswert?

Du hast zwar PortD als Eingang definiert, aber nicht die internen
Pullups eingeschaltet:

Also noch ein 0xFF in PortD schreiben.

Allerdings ist selbst dann das Ganze noch vom Prellen der Taster 
abhängig.
OP #1548193
Lesenswert?

welches Testprogramm =?

Ausgngssituation: alle LEDs an !!!
wenn ich den Taster drücke, wo alle LEDs ausgehen sollen, geht das auch.
nach loslassen des Testers gehen die LEDs auch wieder an.
sobald man aber den Taster drückt, der die LEDs einschalten soll(geht ja 
nicht weil die LEDs schon an sind) werden die LEDs nur etwas heller...
Verbindung(Flachkabel etc.) kanns ja niht sein.
1
loop:
2
      sbic PIND, 7
3
      rcall ledaus
4

5
      sbic PIND, 0
6
      rcall ledan
7

8

9

10
      rjmp loop
11

12

13
ledan:    ldi mp, 0x00
14
      out PORTB, mp
15
      ret
16

17
ledaus:    ldi mp, 0xFF
18
      out PORTB, mp
19
      ret

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