;
;   "myprog_mpr.txt" ;   
;
;------------------------------------------------------
  .cseg
		.org 0x000
	irq_res:
		rjmp init ;      
; - - - - - - - - - - - - - - - - - - - - - - - - - - -
;     

		.org OC0Aaddr
	irq_t0:
		rjmp tiks ;     tiks

; - - - - - - - - - - - - - - - - - - - - - - - - - - -

;---------------------------------------------------------------
; :
;  -  RC- 9,6 
;   power-on-reset
;Clkpr -   - < > (/8)  
;Osccal -   -  9,6    
; BOD  -
;WDT     
; -     
;---------------------------------------------------------------
;   
;Didr0 = 0  
;      
;---------------------------------------------------------------

  .org (irq_res+int_vectors_size) ;   
 init:                    ;   
  wdr
	
  sbi ACSR,ACD ;  
  in tmp0,MCUCR
  sbr tmp0,1<<PUD
  out MCUCR,tmp0 ; "" 

  ldi tmp0,1<<PB5 ;   PORTB  PORTB5(reset) 0
  ldi tmp1,1<<R_led | 1<<SYS_res
  out PORTB,tmp0 ; R_led=G_led=SYS_res=CPU_res=S_Hrbt=0,PB5=1
  out DDRB,tmp1 ; R_led=0, G_led=1, SYS_res=0, CPU_res=1, S_Hrbt=1
  clr tmp7 ;   

  rcall WDT_off ;  

;    
; 0      OCR0A
;    9,6    8
;    1024
;    0,1024/0,2048 (120/240)   OCF0A

  in tmp0,TIFR0
  sbrc tmp0,OCF0A
  out TIFR0,tmp0 ;  OCF0A  1(  BOD)
	ldi tmp0,240 ; 120   0,1024/0,2048=120/240
  out OCR0A,tmp0 ; 
  ldi tmp0,1<<WGM01
  out TCCR0A,tmp0 ;  TCCR0A
  ldi tmp0,tim_off ;
  out TCCR0B,tmp0 ;  TCCR0B
  ldi tmp0,1<<OCIE0A
  out TIMSK0,tmp0 ;  OCF0A 
 rcall tim_start ;    PORF  BORF
   sei ;  
  
;    MCUSR - 
;   PORF
;   BOD BORF

power_on:
   in tmp0,MCUSR
   sbrs tmp0,PORF
   rjmp test_bod ;    BOD  test_bod
   cbr tmp0,1<<PORF ;  PORF   PORF (  )
   out MCUSR,tmp0 ; PORF=0
; murg_start -   R_led     
   ldi tmp2,8 ;   f_tiks    
murg_start:
   sbrs tmp7,f_tiks ;  
   rjmp murg_start
   cbr tmp7,1<<f_tiks ;   
   dec tmp2
   brne murg_start ;   
   ldi tmp0,tim_off
   out TCCR0B,tmp0 ;  
   ldi tmp0,1<<G_led | 1<<CPU_res
   out DDRB,tmp0 ; R_led=1, G_led=0, SYS_res=1, CPU_res=0, S_Hrbt=1
   nop
;   S_Hrbt  SYS_res
;    SYS_res  S_Hrbt =0
;        
;  SYS_res=0, CPU_res=1, G_led=0, R_led=0
;  
;       wait_point
wait_point:
  sbis PINB,SYS_res ;      
  rjmp start_sensres ;(murg_sysres)
  sbis PINB,S_Hrbt ;       S_Hrbt
  rjmp start_sensres ;(murg_Hrbt)
  rjmp wait_point ;     

;  BORF   BORF,
;   -        SYS_res
test_bod:
  sbrs tmp0,BORF
  rjmp unk_error ;   PORF  BORF = " "
  cbr tmp0,1<<BORF
  out MCUSR,tmp0 ; BORF=0
;    R_led=0, G_led=1, SYS_res=0, CPU_res=1, S_Hrbt=1
  ldi tmp3,3
ltbod:
 sbi DDRB,R_led ; R_led=0
 rcall murg_bod_1 ;  
 cbi DDRB,R_led ; R_led=1
 rcall murg_bod_0 ; R&G 
 sbi DDRB,R_led ; R_led=0
 rcall murg_bod_1 ;  
 cbi DDRB,R_led ; R_led=1
 rcall murg_bod_0 ; R&G 
 sbi DDRB,R_led ; R_led=0
 rcall murg_bod_1 ;  
 cbi DDRB,R_led ; R_led=1
 rcall murg_bod_0 ; R&G  -
 rcall murg_bod_0 ; R&G  -
 dec tmp3
 brne ltbod ;   
;          
  ldi tmp0,1<<G_led | 1<<CPU_res ;  ,   
  out DDRB,tmp0 ; R_led=1, G_led=0, SYS_res=1, CPU_res=0, S_Hrbt=1
  ldi tmp0,tim_off
  out TCCR0B,tmp0 ;  
 rjmp wait_point ;      S_Hrbt  SYS_res

;        SYS_res  S_Hrbt
;  
;  R_led=G_led=0, SYS_res=0, CPU_res=1, S_Hrbt=1
start_sensres:
  ldi tmp1,1<<SYS_res
  out DDRB,tmp1 ; R_led=1,G_led=1, SYS_res=0, CPU_res=1, S_Hrbt=1
  cbr tmp7,1<<f_tiks ;    
  rcall tim_start ;    murg_sysres

  ldi tmp3,3
murg_sysres:
  sbi DDRB,R_led ; R_led=0
  rcall murg_bod_1 ;  
  cbi DDRB,R_led ; R_led=1
  sbi DDRB,G_led ; G_led=0
  rcall murg_bod_1 ;  
  cbi DDRB,G_led ; G_led=1
  sbi DDRB,R_led ; R_led=0
  rcall murg_bod_1 ;  
  cbi DDRB,R_led ; R_led=1
  rcall murg_bod_0 ; R&G 
  rcall murg_bod_0 ; R&G 
  dec tmp3
 brne murg_sysres ;   

  ldi tmp0,tim_off
  out TCCR0B,tmp0 ;  
  ldi tmp0,1<<G_led | 1<<CPU_res
  out DDRB,tmp0 ; R_led=1, G_led=0, SYS_res=1, CPU_res=0, S_Hrbt=1
 rjmp wait_point ;     S_Hrbt  SYS_res

;     
;     ,    
unk_error:
 ;  R_led=0,G_led=1, SYS_res=0, CPU_res=1, S_Hrbt=1
  ldi tmp1,1<<R_led | 1<<SYS_res
  out DDRB,tmp1 ; R_led=G_led=0, SYS_res=0, CPU_res=1, S_Hrbt=1
unk_er_loop:
  rcall murg_bod_1 ;  
  cbi DDRB,R_led ; R_led=1
  sbi DDRB,G_led ; G_led=0
	rcall murg_bod_1 ;  
  cbi DDRB,G_led ; G_led=1
  sbi DDRB,R_led ; R_led=0
  
 rjmp unk_error ;     

;