

.include "m8def.inc"

ldi r16, 0xFF ;Port config
out DDRD, r16
ldi r16, 0xFF
out DDRC, r16
ldi r16,0x00 
out DDRB, r16
ldi r16, LOW(RAMEND); STack init
out SPL, r16
ldi r16, HIGH(RAMEND)
out SPH, r16

.def r16 = temp ;registerdefinitionen
.def r17 = temp2
.def r18 = compare
.def r19 = zerleg
.def r20 = count
ov:
clr count

PBread:
brsh
in zerleg, PINB ;Portb einlesen, vergleichen ,ggf zähler erhöhen
cpse compare, zerleg 
inc count 
brvs ov
mov zerleg, compare ;

Position:
mov temp, zerleg
rcall BCD ; eingang auswerten, display aktivieren, delay abwarten 
ldi temp, 0b00000001
out portc, temp
clr temp
;hier delay interrupt

counter: ; counterauswertung
mov zerleg, count


hunderter: ;anzahl der hunderter nach temp
cpi zerleg, 100
brlo hout
inc temp
rjmp hunderter

hout: ; hunderter ausgeben
rcall BCD
ldi temp, 0b00001000
out portc
clr temp
; hier delay inerrupt

zehner: ;anzahl der zehner nach temp
cpi zerleg, 10
brlo zout
inc temp
rjmp zehner

zout: ; zehner ausgabe
rcall BCD
ldi temp, 0b00000100
out portc, temp
clr temp
;hier delay interrupt

eout: ;einer ausgeben
mov temp, zerleg
rcall BCD
ldi temp, 0b00000010
out portc, temp
;hier delay inerrupt

rjmp PBread

BCD:
ldi ZL, LOW(seg_7*2)
ldi ZH, HIGH(seg_7*2)
and ZL:ZH, temp
lpm
mov r0, temp
out PORTD, temp
ret
seg_7:
.db 238, 6, 124, 62, 150, 186, 250, 38, 254, 190