#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

void main()
{
   
   int val,timing;

   set_tris_a(0xff); //porta all input
   set_tris_b(0xff); //portb all input
   set_tris_d(0x00); //portd all output

   setup_adc_ports(0xE);         //porta,0 analog
   setup_adc(adc_clock_div_8);   //클럭을 8분주 해서 사용
   set_adc_channel(0);           //()번 채널 선택
   

   val=1;
   
   portd=0;
   
   goto sequential;

   sequential: //LED 순차진행
   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)==0){    
         goto reverse;
      }
      timing=2*read_adc();
   }
  
   
   reverse:    //LED 역진행
   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)==0){ 
         goto sequential;
      }
      
      timing=2*read_adc();
   }
}
//스위치를 누르고 있으면 sequential과 reverse가 왔다 갔다 하는 현상
//원래는 스위치를 누르고 있어도 led는 한 번 눌린 후의 방향으로 진행해야함

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

도트 매트릭스 대각선 출력  (0) 2010.05.27
Hello, 2*2 Dot Matrix  (0) 2010.05.26
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
Reversible 풀이중  (0) 2010.02.24
Debounce 풀이  (0) 2010.02.24
Debounce 풀이중...  (0) 2010.02.11
Posted by 도전하는 공돌이pooh

댓글을 달아 주세요