-         
Seite 1 von 53 1231151 ... LetzteLetzte
Ergebnis 1 bis 10 von 524

Thema: Tutorial für alle Assembler-Anfänger _

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    34
    Beiträge
    289

    Tutorial für alle Assembler-Anfänger _

    Anzeige

    Hallo,

    sry, dass ich nochmal nerve, aber ich probier schon die ganze Zeit, sone Art "Lichtschalter" hinzubekommen.
    Vorneweg erstmal: Ich hab das myAvr-Board 1.4
    Hab einen Taster mit PortD.2 und einen Taster mit PortD.3 verbunden. Dann hab ich noch eine LED mit PortB.2 verbunden. Wenn ich den Taster1 (PortD.2) drücke, soll die LED ausgehen und wenn ich Taster2 (PortD.3) drücke, soll die LED angehen. Ich bekomms einfach net, vlt. könnt ihr mir weiterhelfen, das ganze möcht ich gern mit Assembler realisieren.

    Hier mein Code:
    Code:
    .include "m8def.inc"
    
    .def temp = r16
    
    		ldi temp, LOW(RAMEND)		;LOW-Byte der obersten RAM-Adresse
    		out SPL, temp
    		ldi temp, HIGH(RAMEND)		;HIGH-Byte der obersten RAM-Adresse
    		out SPH, temp
    
    		ldi temp, 0b00000000
    		out DDRD, temp				;PortD als Eingang
    		ldi temp, 0b11111111
    		out DDRB, temp				;PortB als Ausgang
    		out PortD, temp				;Pullups von PortD aktivieren
    
    main:
    		sbic PIND, 2				;Liegt an D.2 low an? Wenn nicht, dann nächsten Befehl überspringen
    		sbi PortB, 2				;Wenn ja, dann B.2 auf high setzen
    
    		sbic PIND, 3				;Liegt an D.3 low an? Wenn nicht, dann nächsten Befehl überspringen
    		cbi PortB, 2				;Wenn ja, dann B.2 auf low setzen
    
    rjmp main							;Endlosschleife
    Ich denk mal, Geübte steigen durch den Code durch.

    Das was er jetzt macht: Am Anfang leuchtet die LED ganz schwach (soll aber ganz aus sein). Wenn ich auf einen Taster drücke, geht sie aus (wenn ich ihn aber wieder loslasse, ist sie wieder schwach an) und wenn ich auf den anderen Taster drücke, leuchtet sie stark (geht dann aber auch wieder auf schwach, wenn ich den Taster loslasse )

    Gruß
    Thomas

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.03.2005
    Beiträge
    141
    hast du dich schon mal mit dem thema "entprellen" beschäftigt?

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    34
    Beiträge
    289
    Nee, noch nie gehört

    [edit]
    Ahh, du meinst, das der Taster nicht gleich zum stehen kommt, sondern noch ein wenig "hüpft", wie ein Ball, den man fallen lässt?
    Hmm..aber was das genau mit meinem Problem zu tun hat, versteh ich leider noch nicht so ganz.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.03.2005
    Beiträge
    141
    ja genau das meine ich... auf den ersten blick müsste das gehen was du da geschrieben hast... kann es aber im moment nicht überprüfen

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    34
    Beiträge
    289
    Naja, das was ich ja am meisten nicht verstehe ist, warum am Anfang die LED schwach leuchtet?

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    19.05.2005
    Ort
    78224
    Beiträge
    13
    SBIC bedeutet, den nächsten Befehl über springen falls der entsprechende Pin auf 0 ist, d.h. dein Schalter gedrückt ist.
    Wenn du keinen Schalter drückst, wird die LED abwechselnd schnell an un d ausgeschaltet : LED leuchtet schwach.

    Du solltest es anstatt mit SBIC mal mit SBIS versuchen, dann sollte es klappen.

    Gruss Klaus

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    34
    Beiträge
    289
    Ahh, so gehts, danke
    Ich mach mir auch grad Gedanken, wie ich das ganze auf nur einen Schalter mache, also drücken, dann LED an, nochmal drücken, LED aus. Am besten wäre es, wenn ich mir ne Variable anlege und dort speicher, ob LED an oder aus ist, aber wie ich Variablen anlege, weiß ich leider nicht.
    Aber ich denk, da gibt es auch nen einfacheren Weg, oder?
    So wie:
    Code:
    if Taste gedrückt
    if PortB.2 = 1
    dann PortB.2 = 0
    So wäre dann wohl der Pseudecode.
    Bitte noch keinen Code posten, brauch nur nen Denkanstoß

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    47
    Beiträge
    2.236
    Hallo, als Variablen in Assembler nehme ich einfach einen freien Register darin kannst Du die bits mit sbr und cbr setzen oder löschen.
    Mit sbrs springst Du wenn bit gesetzt alternativ sbrc wenn gelöscht.

    Achtung sbr bzw. cbr erwarten ein k255 als wert, also setzen mit z.B sbr test,(1<<sperre)
    und sbrs , sbrc erwarten nur ein b7 also sbrs test,sperre
    Gruß Sebastian

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    19.05.2005
    Ort
    78224
    Beiträge
    13
    Mit nur einem Schalter bekommst du Probleme wegen des Schalterprellens. Dieses Problem kann softwaremässig nur mit einem Timer gelöst werden, der innerhalb einer vorgegebenen Zeit (ca. 0,5 Sekunden) nach dem Drücken des Schalters eine weitere Abfrage des Schalters verhindert. Da ich eigentlich nicht in Assembler programmiere, kann ich dir hierfür auch keine Hilfe bieten. In C hatte ich das Problem aber schon mal so gelöst.
    Gruss Klaus

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    34
    Beiträge
    289
    Axo, hab mich hier im Forum auch schonmal schlau gemacht wegen dem Prellen. Ist ziemlich kompliziert zu lösen mitm Timer. Najo, muss ich mal schaun, trotzdem Danke an euch.

Seite 1 von 53 1231151 ... LetzteLetzte

Berechtigungen

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