-         

Ergebnis 1 bis 3 von 3

Thema: Einfach nur mit Taster eine LED ein und aus schalten ?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    37
    Beiträge
    196

    Einfach nur mit Taster eine LED ein und aus schalten ?

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo

    Ich möcht ein Programm schreiben das mit "Taster" "LED's" Ein und mit selber Taste Aus zu schalten ist.

    Mein bis bisheriger versuch.


    Code:
     .include "m8def.inc"
    
    
     ;------------------------------------------------------
     ;   Initialisierungen
     ;------------------------------------------------------
     	ldi r16, 0xFF				; lade Arbeitsregister r16 mit der Konstanten 0xFF
    	out DDRB, r16 	
     	
    	ldi r16, 0x00
    	out DDRD, r16
     
     	ldi r19, 0x00       ; Lade register r19 mit der Konstanten 0x00	
    
    	ldi r20, 0x00		; Lade register r20 mit der Konstanten 0x00
    
    	ldi r17, 0x00       ; LED Wert
    
     ;------------------------------------------------------
     ;   HAUPTSCHLEIFE
     ;------------------------------------------------------
     
     Hauptschleife: 
     
     
     	in r20, PIND    	 ; an Port D anliegende Werte (Taster) nach r20 einlesen
        
    	cpse r20, r19		 ; wen beide register gleich sind dan ueber springe den nechsten schrit 
    
    	rjmp s    ;Sprung nach s
    
    	rjmp Hauptschleife    ;Sprung nach Hauptschleife
    s:
    	eor r17, r20
    
    	out PORTB, r17
    
    SprungXY1:
    	
    	in r17, PIND    	 ; an Port D anliegende Werte (Taster) nach r11 einlesen
    
    	cpse r20, r17		 ; wen beide register gleich sind dan ueber springe den nechsten schrit
    	
    	rjmp s2
    
    	rjmp Hauptschleife    ;Sprung nach Hauptschleife
    s2:
    	eor r20, r17
    
    	out PORTB, r20
    
    	rjmp Hauptschleife
    
    ;end
    Ich weis nicht mehr weiter und habe noch keine Erfahrung in Assembler.

    Ich Benutze ein STK500 und ein ATMega8.

    Mit freundlichen Grüßen Ferdinand.
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Es macht relativ wenig Sinn am Anfang erst den Port als Ausgang und dann gleich wieder als Eingang zu Schalten.

    Bei einlasen des Tasters sollte man nur ein Bit Testen. Das macht man z.B. ANDI r12, #0x10. Der vergleich über CPSE ist zwar möglich, aber gerade für den Anfang eher unüblich. Ich benutzte den Befehl eher selten, gängiger sidn da die bedingten Sprünge über BREQ und BRNE. Das Programm sollte man mal im Simulator als einzelschritt durchlaufen lassen, dann sieht man eigentlich ganz gut was passiert. Zum lernen ist der Simulator wirklich gut. Man vergisßt sonst leich das das Programm mit rasender Geschwindigkeit läuft. Es fehlt hier z.b. ein Entprellen der Taste, wenn das Prgramm mit mehr als etwa 1 kHz laufen soll.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.07.2006
    Ort
    Mannheim
    Beiträge
    454
    Als erstes gewöhn dir an den Stackpointer zu initialisieren (ob du ihn in diesem Programm brauchst oder nicht).


    INIT: LDI r16 LOW (RAMEND) ;Initiate Stackpointer
    OUT SPL, r16
    LDI r16, HIGH(RAMEND)
    OUT SPH, r16


    Hauptschleife:

    in r20, PIND ; an Port D anliegende Werte (Taster) nach r20 einlesen
    out portB, r20 ;..und an port B (LEDs) wieder ausgeben

    rjmp Hauptschleife ;Sprung nach Hauptschleife

    Taster einlesen und Ausgabe an LEDs in Endlosschleife mal als Anfang.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •