You are on page 1of 2

#include <16F877A.

h>
#decide ADC=10
#use delay (clock=20000000)
#include <lcd.c>
#use fast_io(a)
#use fast_io(c)
#define pinservo0 PIN_C0
#define pinservo0 PIN_C1
#define pinservo0 PIN_C2
#define pinservo0 PIN_C3
#define pinservo0 PIN_C4
#define pinservo0 PIN_C5
#define pinservo0 PIN_C6
#define pinservo0 PIN_C7

int16 ticktotalservo=2000; //tickaltomaximo=11500 tickaltominimo=3500


int16 ticksaltoservo[8];
int8 servoamover=0;
int1 subir=1, enableservo[8]={1,1,1,1,1,0,0,0};
#int_timer1

void inttimer (void)


{
if(subir==1)
{
if(servoamover==0&&enableservo[0]==1) output_high(pinservo0);
if(servoamover==0&&enableservo[1]==1) output_high(pinservo1);
if(servoamover==0&&enableservo[2]==1) output_high(pinservo2);
if(servoamover==0&&enableservo[3]==1) output_high(pinservo3);
if(servoamover==0&&enableservo[4]==1) output_high(pinservo4);
if(servoamover==0&&enableservo[5]==1) output_high(pinservo5);
if(servoamover==0&&enableservo[6]==1) output_high(pinservo6);
if(servoamover==0&&enableservo[7]==1) output_high(pinservo7);
set_timer1(65535-ticksaltoservo[servoamover]);
subir=0;
}
else if(subir==0)
{
if(servoamover==0&&enableservo[0]==1) output_low(pinservo0);
if(servoamover==0&&enableservo[1]==1) output_low(pinservo1);
if(servoamover==0&&enableservo[2]==1) output_low(pinservo2);
if(servoamover==0&&enableservo[3]==1) output_low(pinservo3);
if(servoamover==0&&enableservo[4]==1) output_low(pinservo4);
if(servoamover==0&&enableservo[5]==1) output_low(pinservo5);
if(servoamover==0&&enableservo[6]==1) output_low(pinservo6);
if(servoamover==0&&enableservo[7]==1) output_low(pinservo7);
set_timer1(65535-tickstotalservo+ticksaltoservo[servoamover]);
servoamover++;
if (servoamover>7)servoamover=0;
subir=1;
}
}
void main()
{
int8i;
set_tris_c(0x00);

set_tris_a(0xff);
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);
disable_interrupts(global);
setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
setup_timer_1(T1_INTERNAL \ T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
port_b_pullups(FALSE);
enable_interrupts(int_timer1);
enabled_interrupts(global);
set_timer1(60000);
while(1)
{
for(i=0;i<8;i++)
{
if(enableservo==1)
set_adc_channel(i);
delay_ms(10);
ticksaltoservo=400+(read_adc()*1.7);
}
}
}

You might also like