PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : if - Anweisung allgemein in assembler



LC-HC
26.09.2005, 20:58
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

olfi13
26.09.2005, 21:45
Da ist nichts falsch.
Wenn Du Probleme hast, bitte mehr Infos

Gruß, olfi

LC-HC
27.09.2005, 12:05
Es geht nichts: taster gedrückt --> licht bleibt aus.

olfi13
27.09.2005, 13:23
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

LC-HC
27.09.2005, 16:45
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.

olfi13
27.09.2005, 17:18
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 ?

LC-HC
27.09.2005, 17:47
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.

olfi13
27.09.2005, 18:04
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

LC-HC
28.09.2005, 20:41
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

izaseba
28.09.2005, 22:14
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