You are on page 1of 1

#include <16f887.h>#device ADC=10#use delay (clock=20000000)#include <lcd.

c>#use
fast_io(a)#use fast_io(c) #define pinServo0 PIN_C0#define pinServo1 PIN_C1#defi
ne pinServo2 PIN_C2#define pinServo3 PIN_C3#define pinServo4 PIN_C4#define pinSe
rvo5 PIN_C5#define pinServo6 PIN_C6#define pinServo7 PIN_C7 int16 ticksTotalServ
o = 12500; //tickAltoMaximo = 11500 tickAltoMinimo = 3500int16 ticksAltoServo[8]
;int8 servoAMover=0;int1 subir=1, enableServo[8]={1,1,1,1,1,0,0,0}; #int_timer1v
oid intTimer(void){ if(subir==1) { if(servoAMover == 0 && enableServo[0
] == 1) output_high(pinServo0); if(servoAMover == 1 && enableServo[1] == 1)
output_high(pinServo1); if(servoAMover == 2 && enableServo[2] == 1) output
_high(pinServo2); if(servoAMover == 3 && enableServo[3] == 1) output_high(p
inServo3); if(servoAMover == 4 && enableServo[4] == 1) output_high(pinServo
4); if(servoAMover == 5 && enableServo[5] == 1) output_high(pinServo5);
if(servoAMover == 6 && enableServo[6] == 1) output_high(pinServo6); if(se
rvoAMover == 7 && enableServo[7] == 1) output_high(pinServo7); set_timer1(6553
5 - ticksAltoServo[servoAMover]); subir = 0; } else if(subir==0) {
if(servoAMover == 0 && enableServo[0] == 1) output_low(pinServo0); if(ser
voAMover == 1 && enableServo[1] == 1) output_low(pinServo1); if(servoAMover
== 2 && enableServo[2] == 1) output_low(pinServo2); if(servoAMover == 3 &&
enableServo[3] == 1) output_low(pinServo3); if(servoAMover == 4 && enableS
ervo[4] == 1) output_low(pinServo4); if(servoAMover == 5 && enableServo[5]
== 1) output_low(pinServo5); if(servoAMover == 6 && enableServo[6] == 1) ou
tput_low(pinServo6); if(servoAMover == 7 && enableServo[7] == 1) output_low
(pinServo7); set_timer1(65535 - ticksTotalServo + ticksAltoServo[servoAMover])
; servoamover++; if (servoAMover > 7) servoAMover = 0 ; subir = 1; }}
void main(){ int8 i; set_tris_c(0x00); set_tris_a(0xFF); setup_adc(A
DC_CLOCK_INTERNAL); setup_adc_ports(ALL_ANALOG); disable_interrupts(gl
obal); 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); ena
ble_interrupts(int_timer1); enable_interrupts(global); set_timer1(60000);
while(1) { for(i=0;i<8;i++) //leyendo los valores de los LDR
{ if(enableServo[i]==1) set_adc_channel(i); delay_m
s(10); ticksAltoServo[i] = 4750 + (read_adc()*5) ; }
} }

You might also like