; Projekt-Name: Projekt01 Datum: 24.01.2014
; Datei: Tiny2313-tasteprellen.asm
; AVR: Tiny2313-20PU
.INCLUDE "tn2313def.inc" ; Deklaration für Tiny2313
rjmp reset ; Reseteinsprung
.ORG OVF0addr ; Interrupt-Vektor
rjmp TIMER0_OVF ; Sprung zur ISR
.def akku =r16
.def temp17=r17 ; r17 zum Entprellen
#define sw1 PIND,PD0
reset:
;Timer0 initial.
ldi akku,(1<<CS02)
out TCCR0B,akku ; Prescale = 256
ldi akku,(1<<TOIE0)
out TIMSK,akku
sei
;Vorbereitung PORTB und PIND
ldi akku,(1<<PB0)|(1<<PB1)
out DDRB,akku ; PB0 + PB1=Output
clr akku ; alle Pins in r16=Low
out DDRD,akku ; Datenricht. PD0-PD6=Input
ldi akku,0x7F ; 0b0111.1111
out PORTD,akku ; PD0 bis PD6=PULLUP
ldi akku,0x00 ; beide LEDs zu Beginn AUS
out PORTB,akku
loop:
halt1:
sbic sw1 ; überspringe, wenn sw1=0
rjmp halt1
sbi PORTB,PB0 ; PB0=EIN
rcall prellen
;-----------------------------------------------------
halt2:
sbic sw1
rjmp halt2
sbi PORTB,PB1 ; PB1=EIN
rcall prellen
;-----------------------------------------------------
halt3:
sbic sw1
rjmp halt3
cbi PORTB,PB0 ; PB0=AUS
rcall prellen
;-----------------------------------------------------
halt4:
sbic sw1
rjmp halt4
cbi PORTB,PB1 ; PB1=AUS
rcall prellen
;-----------------------------------------------------
rjmp loop
prellen:
ldi temp17,0x0F
pause1:
tst temp17 ; teste r17 auf LOW, LOW<<Z-Bit=1
brne pause1 ; Verzweig. nach pause1,wenn Z=0
ret
TIMER0_OVF:
push r2 ; Kopie r2 auf Stack, danach SP-1
in r2,SREG ; Inhalt vom SREG nach r2
dec temp17 ; r17 - 1
out SREG,r2 ; Inhalt vom r2 nach SREG
pop r2 ; SP+1, danach vom Stack in r2 laden
reti
.EXIT
Lesezeichen