#include <16F887.h>         
#USE DELAY(clock=400000000)
               
#FUSES INTRC,NOWDT,NOPUT,NOMCLR,NOPROTECT,NOCPD,NOBROWNOUT,NOIESO,NOFCMEN,NOLVP
#byte porta=0x07
#byte portb=0x06
#byte portd=0x08  //스페셜 레지스터의 portd가 0x08번지입니다.
void main()
{
   
   int val,timing;
   set_tris_a(0xff);
   set_tris_b(0xff); //portb all input
   set_tris_d(0x00); //portd를 모두 출력으로 선택
   setup_adc_ports(all_analog);  //모든 포트 아날로그
   setup_adc(adc_clock_div_8);   //클럭을 8분주 해서 사용
   set_adc_channel(0);           //()번 채널 선택
   
   val=1;
   
   portd=0;
   
   goto sequential;
   sequential:
   for(;;){
      delay_us(timing);delay_us(timing);delay_us(timing);delay_us(timing);
      portd=val;
      val=val*2;
      if(val==0b100000000){
         val=1;
      }
      
      if(bit_test(portb,0)==1){
         goto  reverse;
      }     //이부분을 손봐야 합니다.
            //아예 sequential과 reverse를 함수로 만들어버릴까..
      
      timing=2*read_adc();
   }
  
   
   reverse:
      for(;;){
         delay_us(timing);delay_us(timing);delay_us(timing);delay_us(timing);
         if(val==0b00000001){
            val=0b10000000;
         }
         portd=val;
         val=val/2;
         if(val==1){
            val=0b10000000;
         }
         
         if(bit_test(portb,0)==1){
            goto sequential;
         }
         timing=2*read_adc();
      }
}