.include"tn15def.inc"
;PB4 is the switch input pin
.org $0000
rjmp RESET
.org $000A
RESET: ldi r16,$10
out portb,r16 ;PB4 internal pull-up
ldi r16,$02
out ddrb,r16 ;PortB:mostly input with pull-ups,PB1:PWM output
;---------
ldi r16,$FD
out TCCR1,r16 ;Clr when T1>OCR1B,PWM ena,positive output,1/256 prescale
ldi r16,$7D
out OCR1B,r16 ;PWM frequency 50Hz
ldi r17,$75
ldi r16,$7A ;72-7A range(resolution not really good)
out OCR1A,r17 ;PWM positive duration 2ms
;---------
LOOP: sbis pinb,4
rjmp KYEVT
rjmp LOOP
KYEVT: rcall DELAY
sbic pinb,4
rjmp LOOP
in r18,OCR1A
cpse r18,r16
rjmp LOWER
out OCR1A,R17
rcall WAIT
CHKH: sbic pinb,4
rjmp LOOP
rjmp CHKH
LOWER: out OCR1A,r16
rcall WAIT
CHKL: sbic pinb,4
rjmp LOOP
rjmp CHKL
DELAY: ldi r19,$38
D1: ldi r20,$9F
D2: dec r20
tst r20
brne D2
dec r19
tst r19
brne D1
ret
WAIT: ldi r19,$FF
W1: ldi r20,$FF
W2: dec r20
tst r20
brne W2
dec r19
tst r19
brne W1
ret