assembler Programm licht an/aus

OP #1547223
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
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
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
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
Du musst

sbis PIND,7

eingeben

es soll skippen wenn PIND7 gesetzt ist, was er ja im Ruhezustand ist.
Das gleiche mit PIND0 machen.
Dann sollte es gehen.

Problem. Er macht die LED an und gleich wieder aus. Das die ganze Zeit 
-> leichtes leuchten.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.