#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();
      }
}

'(예전취미)전자회로 공부 > PIC-44Pindemoboard' 카테고리의 다른 글

Hello, PortD(F0)  (0) 2010.05.24
Timer0  (0) 2010.03.01
Reversible 풀이중2  (0) 2010.03.01
SETUP_ADC_PORTS()  (0) 2010.03.01
Debounce 풀이  (0) 2010.02.24
Debounce 풀이중...  (0) 2010.02.11
VS Rotate  (0) 2010.02.11
A2D  (0) 2010.02.11
Posted by 공돌이pooh
,