Einzelnen Beitrag anzeigen
Alt 27.11.2006, 17:18   #4
philharmony
Master
 
Registriert seit: 11.03.2003
Alter: 41
Beiträge: 610


philharmony eine Nachricht über ICQ schicken
Standard

Moin, habe hier ein kleines Problem beim Versuch, eine REdec-Funktion zu entwickeln.
Im Simulationsmodus der AVR-Studio funktionert es, auf dem Board leuchtet immer nur LED7, sie geht aus wenn SW0 ODER SW1 gedrückt sind.
Hier der Assemblercode:

Zitat:
.nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8535def.inc"
.list

.def vorrueck=r16
.def counter=r17
.def AR1=r18
.def AR2=r19
.def gezaehlt=r20
.def hilfszaehler=r21
rjmp main

main:

ldi AR1,LOW(RAMEND) ;Stackpointer
out SPL,AR1
ldi AR1,HIGH(RAMEND)
out SPH,AR1

ldi AR1, 0x00 ;DataDirection D für Input
out DDRD, AR1

ldi AR1, 0xFF ; Port D alles auf 1 Setzen (1=alles aus)
out PORTD, AR1

ldi AR1, 0xFF ; Datadirection B auf 0 also Eingang
out DDRB, AR1 ; Port B alles 1 damit alle LDS aus
out PORTB, AR1

ldi gezaehlt, 1
loop:
in AR2, PIND
rcall pruefen_reset
rcall ausgabe
rjmp loop






pruefen_reset:
ldi AR1, 0xFF
cpse AR1, AR2
rjmp pruefen_vor
rcall entprellen
ldi gezaehlt, 0
ret

pruefen_vor:
ldi AR1, 0xFE
cpse AR1, AR2
rjmp pruefen_rueck
rcall entprellen
ldi vorrueck, 1
rjmp pulse

pruefen_rueck:
ldi AR1, 0xFD
cpse AR1, AR2
rjmp pulse
rcall entprellen
ldi vorrueck, 2
rjmp pulse

pulse:
ldi AR1, 0xFC
cpse AR1, AR2
rjmp loop
rcall entprellen
ldi AR1, 0
cpse AR1, gezaehlt
rjmp loop
ldi gezaehlt, 1
ldi AR1, 0xFE
cpse AR1, vorrueck
rjmp decrease
rjmp increase

decrease:
dec counter
rjmp ausgabe

increase:
inc counter
rjmp ausgabe

ausgabe:
mov R1, counter
com R1
out PORTB, R1
rjmp loop

entprellen:
clr hilfszaehler
loop2:
in AR2, PIND
cpse AR1, AR2
rjmp loop
inc hilfszaehler
ldi AR2, 56
cpse hilfszaehler, AR2
rjmp loop2
ret

philharmony ist offline   Mit Zitat antworten