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