;***** main loop **********************
;===== sensor OFF: LED_green blink
LED_Blnk:
  wdr ;reset watch_dog timer
  sbi PInB,_LED_Gr ;toggle LED_green ON/OFF
  ldi YH,HIGH(1000) ;delay for 1Sec
  ldi YL,LOW(1000)
;
LED_Blnk1: ;delay for 1mS
  ldi ZH,HIGH(1989) ;adjusted by oscilloscope
  ldi ZL,LOW(1989)
LED_Blnk2:
  sbiw ZL,1 ;1mS elapsed ?
  brne LED_Blnk2 ;No, wait 1mS
;
  sbis ACSR,_ACO ;Yes, then comparator is Hi (sensor is OFF) ?
  rjmp OSC_Out ; No, goto output OSC wave
  sbiw YL,1 ; Yes, then 1S elapsed ?
  brne LED_Blnk1 ; No, wait 1S
  rjmp LED_Blnk ; Yes, loop again
;
;===== sensor ON: OSC output
OSC_Out:
  sbi PortB,_LED_Gr ;LED_green turn OFF
  cbi PortB,_LED_Rd ;LED_red turn ON ;
OSC_HL:
  wdr ;reset watch_dog timer
  sbi PortB,_AMP ;OSC High period (speaker ON)
  ldi YL,Hi_period
OSC_H:
  subi YL,1
  brne OSC_H
;
  cbi PortB,_AMP ;OSC Low period (speaker OFF)
  ldi YL,Lo_period
OSC_L:
  subi YL,1
  brne OSC_L
  sbis ACSR,_ACO ;comparator is Hi (sensor is OFF) ?
  rjmp OSC_HL ;No, OSC go on
;
  sbi PortB,_LED_Rd ;Yes, LED_red turn OFF
  rjmp LED_Blnk ;return to LED_green blink
;