-         

Ergebnis 1 bis 10 von 10

Thema: if - Anweisung allgemein in assembler

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    15.03.2004
    Beiträge
    94

    if - Anweisung allgemein in assembler

    Anzeige

    Hi, ich will einen taster abfragen und damit eine led ein und ausschalten. in C
    mach ich sowas mit if(). Ich hab mal einen block hier, so wie ich es mir vorstelle. evtl kann mir jemand sagen, was falsch ist ?


    sbic PIND,2
    sbi PORTD,3

    sbis PIND,2
    cbi PORTD,3


    mfg

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    10.10.2004
    Ort
    Niedersachsen
    Beiträge
    60
    Da ist nichts falsch.
    Wenn Du Probleme hast, bitte mehr Infos

    Gruß, olfi

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    15.03.2004
    Beiträge
    94
    Es geht nichts: taster gedrückt --> licht bleibt aus.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    10.10.2004
    Ort
    Niedersachsen
    Beiträge
    60
    Zitat Zitat von olfi13
    Wenn Du Probleme hast, bitte mehr Infos
    Gruß, olfi
    Nichts für ungut...
    Wie wäre es wenn du mal dein Programm postest?
    Oder willst Du hier ein Ratespiel daraus veranstalten?
    Oder ist das etwa Dein gesamtes Programm?
    Keine Initialisierung? Keine Hauptprogrammschleife? Kein Prozessor angeschlossen?

    olfi

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    15.03.2004
    Beiträge
    94
    Ok, hier mal etwas mehr:

    ; Start, Power ON, Reset
    main: ldi r16,lo8(RAMEND)
    out SPL,r16
    ldi r16,hi8(RAMEND)
    out SPH,r16

    ; ----------------------------Portinitialisierung----------
    ldi r16,0x00
    out DDRC,r16 ;PORTC als Eingang

    ldi r16,0xFF
    out DDRD,r16 ;PORTD als Ausgang

    out PORTC,r16 ;PullUp an PORTC
    ;----------------------------------------------------------

    ;----------------------------------------------------------------------
    ; Hauptprogramm
    mainloop:

    sbic PORTC,2
    sbi PORTD,2

    sbis PORTC,2
    cbi PORTD,2


    rjmp mainloop

    ;----------------------------------------------------------------------



    danke.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    10.10.2004
    Ort
    Niedersachsen
    Beiträge
    60
    Hmm. Das Programm ist ein anderes geworden:
    Schreibe einmal als erste Zeile
    .org $000

    Dann ändere
    sbic PORTC,2 <- hier PinC, 2
    sbi PORTD,2

    sbis PORTC,2 <- hier PinC, 2
    cbi PORTD,2

    Welchen Prozessor benutzt Du?
    .include xxxxdef.inc ?

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    15.03.2004
    Beiträge
    94
    ich benutz den Atmega8. Es ging auch schonmal. Defekt ist er def. nicht.
    Ich will ja einfach nur in einer endlosschleife eine led am port ein, bzw.
    ausschalten.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    10.10.2004
    Ort
    Niedersachsen
    Beiträge
    60
    Hi,
    Ich habe in meinem vorherigen Text noch etwas hinzugefügt, bitte die 3 Punkte ändern.

    Das kann aber noch nicht dein gesamtes Programm sein, zumindest fehlt mir die Zeile .include xxxxdef.inc
    Falls Du mit dem AVR-Studio programmierst, lasse einmal den Simulator laufen.
    Und nochmals überprüfen ob Du wirklich dieses Programm in den Proz. brennst, ist mir auch schon des öfteren passiert.

    Gruß, olfi

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    15.03.2004
    Beiträge
    94
    So, hab jetzt mal was ausprobiert. Die LED am PortB soll mit dem Taster an und ausgeschalten werden. Eigentlich müsste es, denke ich, so gehen , oder ?
    Kann es sein, dass das so nicht ohne Timer geht ?
    Bin für alle anregungen dankbar !!

    mfg


    CODE:

    ; Start, Power ON, Reset
    main: ldi r16,lo8(RAMEND)
    out SPL,r16
    ldi r16,hi8(RAMEND)
    out SPH,r16
    ; Hier Init-Code eintragen.
    ; Port Init:------------------------------------------------
    ldi r16,0x00
    out DDRD,r16 ;PortD als Eingang

    ldi r16,0xff
    out DDRB,r16 ;PortB als Ausgang
    out PORTD,r16 ;Pullups von PortD

    ldi r19,0b00000000 ;Statusbyte mit 0 initialisieren (zur Wartung binaer)
    ;----------------------------------------------------------------------
    ; Hauptprogramm
    mainloop:
    sbis PIND,2 ;PORTD.2 cleared ?
    nop
    nop
    nop
    nop

    rcall testnset ;nein ! dann springe zu testnset

    rjmp mainloop ;ja ! dann wieder von vorne (mainloop)
    ;----------------------------------------------------------------------

    testnset: sbrc r19,7 ;MSB (b7) in r19 cleared ?
    rcall setsbit ;nein ! dann springe zu setsbit !

    rcall clearsbit ;ja ! dann springe zu clearsbit
    rjmp mainloop

    setsbit: sbi PORTB,0 ;setzte LED an !
    sbr r19,7 ;setze statusbit in r19
    rjmp mainloop ; und wieder ab in die hauptschleife

    clearsbit: cbi PORTB,0 ;clear LED !
    cbr r19,7 ;statusbit wieder aus
    rjmp mainloop ;ebenfalls wieder in die hauptschleife

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Hallo,
    hast Du schonmal die SuFu benutzt?
    Schaue mal hier
    Beitrag vom 08.08.05 19:36
    Gruß Sebastian

Berechtigungen

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