
; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************

.include "C:\VMLAB\include\m32def.inc"

.equ Anod10 = 1
.equ Anod1 = 2
; Define here the variables

.def tmp =r16
.def count =r19
.def sevseg =r20

.eseg ; Eeprom Segment
.org 0
.db 0xbb , 0x82 , 0x3e , 0xae , 0x87 , 0xad , 0xbd , 0xa2 , 0xbf , 0xaf

.cseg
.org 0
reset:
rjmp start
reti
reti
reti
reti
reti
reti
reti
rjmp TIM2_COMP
reti
reti
reti
reti
reti
rjmp OCT1_A
reti
rjmp OCT1_B
reti
reti
reti
rjmp TIM0_COMP
reti
reti
reti
reti
reti

; Program starts here after Reset

start:
clr r16
clr r17
clr r18
clr count
clr sevseg
ldi tmp, 0xff
out PORTA, tmp
out DDRA, tmp
;stek init
ldi tmp, HIGH(RAMEND)
out SPH, tmp
ldi tmp, LOW(RAMEND)
out SPL, tmp
;end init stek

ldi tmp, (1<<OCIE2)|(1<<OCIE0)|(1<<OCIE1A)|(1<<OCIE1B)
out TIMSK, tmp

;T0 Init
ldi tmp, (1<<CTC0)|(1<<CS00)
out TCCR0, tmp
;Compare with
ldi tmp, 0xff
out OCR0, tmp
;T1 Init
ldi tmp, (1<<CS10)|(1<<CTC1)
out TCCR1B, tmp
ldi tmp, 200
out OCR1AL, tmp
ldi tmp, 100
out OCR1BL, tmp
;T2 Init
ldi tmp, (1<<CTC2)|(1<<CS20)
out TCCR2, tmp
;Compare with
ldi tmp, 100
out OCR2, tmp
sei
forever:
nop
nop
nop
nop
sei
rjmp forever


delay:
ldi r16, 1
ldi r17, 100
del:
dec r16
cpi r16, 0
breq del1
rjmp del
del1:

d:
dec r17
cpi r17, 0
brne del
reti


TIM0_COMP:


in tmp, PINA
cpi tmp, 0b11111110
breq KEY_UP
cpi tmp, 0b11111101
breq KEY_DOWN

reti

TIM2_COMP:
push tmp

out DDRD, sevseg
pop tmp
reti

SEV_SEG:

out EEARL, count

ldi tmp,0
nop
nop
nop
clr tmp
out EEARH, tmp
ldi tmp, (1<<EERE)
out EECR, tmp
in sevseg, EEDR
reti

KEY_UP:
cpi count, 9
brsh forever
inc count
rcall delay
rcall SEV_SEG

reti

KEY_DOWN:
cpi count, 0
breq forever
dec count
rcall delay
rcall SEV_SEG
reti

OCT1_A:
reti
OCT1_B:
reti
