.include "tn2313def.inc"
.def temp =r16   
.def temp1 =r18   
.def temp2 =r19     
.def temp3 =r20  
.def temp4 =r21  
.def temp5 =r22  
.def temp6 =r23

.dseg
ram1: .byte 1
ram2: .byte 1
ram3: .byte 1

     

.cseg
.org 0
 rjmp RESET                 ; Reset Handler
 rjmp INT0                  ; External Interrupt0 Handler
 rjmp INT1                  ; External Interrupt1 Handler
 rjmp TIM1_CAPT             ; Timer1 Capture Handler
 rjmp TIM1_COMPA            ; Timer1 CompareA Handler
 rjmp TIM1_OVF              ; Timer1 Overflow Handler
 rjmp TIM0_OVF              ; Timer0 Overflow Handler
 rjmp USART0_RXC            ; USART0 RX Complete Handler
 rjmp USART0_DRE            ; USART0,UDR Empty Handler
 rjmp USART0_TXC            ; USART0 TX Complete Handler
 rjmp ANA_COMP              ; Analog Comparator Handler
 rjmp PCINT                 ; Pin Change Interrupt
 rjmp TIMER1_COMPB          ; Timer1 Compare B Handler
 rjmp TIMER0_COMPA          ; Timer0 Compare A Handler
 rjmp TIMER0_COMPB          ; Timer0 Compare B Handler
 rjmp USI_START             ; USI Start Handler
 rjmp USI_OVERFLOW          ; USI Overflow Handler
 rjmp EE_READY              ; EEPROM Ready Handler
 rjmp WDT_OVERFLOW          ; Watchdog Overflow Handler

  EXT_INT0:                 ; External Interrupt0 Handler
  EXT_INT1:                 ; External Interrupt1 Handler
  TIM1_CAPT:                ; Timer1 Capture Handler
  TIM1_COMPA:              ; Timer1 CompareA Handler
  TIM1_OVF:                 ; Timer1 Overflow Handler
  ;TIM0_OVF:                 ; Timer0 Overflow Handler
  USART0_RXC:               ; USART0 RX Complete Handler
  USART0_DRE:               ; USART0,UDR Empty Handler
  USART0_TXC:               ; USART0 TX Complete Handler
  ANA_COMP:                 ; Analog Comparator Handler
  PCINT:                    ; Pin Change Interrupt
  ;TIMER1_COMPB:             ; Timer1 Compare B Handler
  TIMER0_COMPA:             ; Timer0 Compare A Handler
  TIMER0_COMPB:             ; Timer0 Compare B Handler
  USI_START:                ; USI Start Handler
  USI_OVERFLOW:             ; USI Overflow Handler
  EE_READY:                 ; EEPROM Ready Handler
  WDT_OVERFLOW:
  reti
   
reset:
      rjmp init
init:
       ser temp
	   out ddrb,temp
	   ldi temp,0b11111100
	   out ddrd,temp
	   ldi temp,low(RAMEND)
	   out SPL,temp
	   
	   ldi temp,0b00000001
	   out tccr0b,temp
	   ldi temp,0b00000010
	   out timsk,temp
	   ldi temp2,0x03
	   ldi temp,0x00
	   sts ram1,temp
	   sts ram2,temp
	   sts ram3,temp
	   ldi temp,0x00
	   sei
	   rjmp start

TIMER1_COMPB:

cli 
dec temp
clr temp4
out tcnt1h,temp4
out tcnt1l,temp4
sei

reti

start: 
       sbis pind,0
	   rjmp auto
	   sbis pind,1
	   rjmp vent
	   nop
	   rjmp start

auto: 
      ldi temp,0x14
	  ldi temp4,0b00000101
	  out tccr1b,temp4
	  ldi temp4,0b00100010
	  out timsk,temp4
	  ldi temp4,0xe4
	  out ocr1bh,temp4
	  ldi temp4,0xe2
	  out ocr1bl,temp4
      rjmp auto1

auto1:
      nop
      nop
	  cli
      cpi temp,0x00
	  breq vent_on
	  sei
      nop
	  nop
	  nop
	  rjmp auto1

vent_on:
       ldi temp4,0b01000000
	   out portd,temp4
	   ldi temp,0x14
	   rjmp vent_off

vent_off:
       nop
	   nop
	   nop
	   nop
	   nop
	   cli
       cpi temp,0x00
	   breq off
	   sei
	   nop
	   nop
	   rjmp vent_off

off: 
      clr temp4
	  out portd,temp4
	  ldi temp4,0b00000010
	  out timsk,temp4
	  rjmp off1

off1: 
      rjmp off1
vent:
      ser temp4
	  out portd,temp4
	  ldi temp,0x37
      rjmp vent1

vent1:
      rjmp vent1

TIM0_OVF:
cli

cpi temp2,0x03
breq coder
cpi temp2,0x02
breq alow
cpi temp2,0x01
breq ahigh

alow:
lds temp6,ram3
rcall light
inc temp6
out portb,temp6
inc temp2
rjmp null

ahigh:
sts ram1,temp6
lds temp6,ram2
rcall light
inc temp6
inc temp6
out portb,temp6
inc temp2
rjmp null

coder:
cli
mov temp6,temp
rcall coder1
sts ram2,temp1
sts ram3,temp6
clr temp1
sei
ldi temp2,0x01
rjmp null


coder1:
cpi temp6,0x0a
brlo coder2
sbci temp6,0x0a
inc temp1
rjmp coder1
coder2:
ret



light:

      ldi zl,low(array*2)
	  ldi zh,high(array*2)
	  add zl,temp6
	  lpm
	  mov temp6,r0
	  ret
       

array:
.db 0b00000000,0b00010000
.db 0b00100000,0b00110000
.db 0b01000000,0b01010000
.db 0b01100000,0b01110000
.db 0b10000000,0b10010000

null:
clr temp6
out tcnt0,temp6
clr temp6
sei

reti


