Archiv verlassen und diese Seite im Standarddesign anzeigen : if - Anweisung allgemein in assembler
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
Da ist nichts falsch.
Wenn Du Probleme hast, bitte mehr Infos
Gruß, olfi
Es geht nichts: taster gedrückt --> licht bleibt aus.
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
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.
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 ?
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.
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
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
Hallo,
hast Du schonmal die SuFu benutzt?
Schaue mal hier (https://www.roboternetz.de/phpBB2/viewtopic.php?t=11488)
Beitrag vom 08.08.05 19:36
Gruß Sebastian
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.