bigbehrens
04.03.2007, 12:55
Hallo Kollegen,
habe am Freitag das STK500 bekommen und wollte nun meine eigenen Progr. installieren.
Habe aber wieder ein kleines Problem, vielleicht könnte mal jemand drüber gucken ??? Bitte!
.include "m8515def.inc"
.def temp = R16
.def eingang = R17
.def ziehzeit = R18
.def wartezeit = R19
.cseg
.org 0x000
rjmp init
.org 0x009
rjmp timer_ov
.org 0x015
init:
; PORT D als Eingang deklariert
ldi temp, 0x00
out DDRD, temp
ldi temp, 0xFF
out PIND, temp
; PORT B als Ausgang deklariert
ldi temp, 0xFF
out DDRB, temp
ldi temp, 0xFF
out PORTB, temp
; Stackpointer init.
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
; Timer für Entprellen init
ldi temp, 0b00000001 ; Teiler auf 1 zum Test sonst 1024
out TCCR0, temp
ldi temp, 0b00000010
out TIMSK, temp ; Interrupt bei Overflow
ldi ziehzeit, 0xFF
ldi wartezeit, 0x02 ; Testweise auf 02 sonst FF
; Wartet auf Tasteneingabe.
warte_taste:
in eingang, PIND
ldi temp, 0xFF
cp eingang, temp
breq warte_taste
dec ziehzeit
out PORTB, ziehzeit
rcall warte
rjmp warte_taste
endloop:
rjmp endloop
; Hier wird das "wartezeit" heruntergezählt.
timer_ov:
dec wartezeit
reti
; Nur jeder ca. 1000 Taster wird gezählt. Zeit dafür!
warte:
sei
lauf:
ldi temp, 0x00
cp wartezeit, temp
brne lauf
cli
ret
AVR Studio sagt zwischendurch beim Sim :
AVR Simulator: Invalid opcode 0xffff at address 0x000007
Was bedeutet das?
Funktion sollte sein, man drückt eine Taste und es zählt einen weiter. Wenn man die Taste gefrückt hällt, zählt die Taste immer nach Zeitablauf weiter.
Vielen Dank schon mal!
habe am Freitag das STK500 bekommen und wollte nun meine eigenen Progr. installieren.
Habe aber wieder ein kleines Problem, vielleicht könnte mal jemand drüber gucken ??? Bitte!
.include "m8515def.inc"
.def temp = R16
.def eingang = R17
.def ziehzeit = R18
.def wartezeit = R19
.cseg
.org 0x000
rjmp init
.org 0x009
rjmp timer_ov
.org 0x015
init:
; PORT D als Eingang deklariert
ldi temp, 0x00
out DDRD, temp
ldi temp, 0xFF
out PIND, temp
; PORT B als Ausgang deklariert
ldi temp, 0xFF
out DDRB, temp
ldi temp, 0xFF
out PORTB, temp
; Stackpointer init.
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
; Timer für Entprellen init
ldi temp, 0b00000001 ; Teiler auf 1 zum Test sonst 1024
out TCCR0, temp
ldi temp, 0b00000010
out TIMSK, temp ; Interrupt bei Overflow
ldi ziehzeit, 0xFF
ldi wartezeit, 0x02 ; Testweise auf 02 sonst FF
; Wartet auf Tasteneingabe.
warte_taste:
in eingang, PIND
ldi temp, 0xFF
cp eingang, temp
breq warte_taste
dec ziehzeit
out PORTB, ziehzeit
rcall warte
rjmp warte_taste
endloop:
rjmp endloop
; Hier wird das "wartezeit" heruntergezählt.
timer_ov:
dec wartezeit
reti
; Nur jeder ca. 1000 Taster wird gezählt. Zeit dafür!
warte:
sei
lauf:
ldi temp, 0x00
cp wartezeit, temp
brne lauf
cli
ret
AVR Studio sagt zwischendurch beim Sim :
AVR Simulator: Invalid opcode 0xffff at address 0x000007
Was bedeutet das?
Funktion sollte sein, man drückt eine Taste und es zählt einen weiter. Wenn man die Taste gefrückt hällt, zählt die Taste immer nach Zeitablauf weiter.
Vielen Dank schon mal!