#include <18f252.h>
//#DEVICE ADC=8 //Solo regresa 8bits mas altos de la conversion
#FUSES H4,NOWDT,PUT,NOBROWNOUT,NOLVP,NOPROTECT,NODEBUG,CCP2C1,NOOSCSEN
#use delay(clock=40MHz)
#use rs232(uart1,baud=9600)
#USE FAST_IO(A)
#USE FAST_IO(B)
////////////////////////////////////////////////////////////
// Control de ServoMotor mediante algoritmo burbuja //
////////////////////////////////////////////////////////////
///------ - Tarjeta - ------- ///
///
/////////////////////////////////////////////////////////
// - algoritomo burbuja //
// - Controladora de servomotores //
// //
// //
/////////////////////////////////////////////////////////
#zero_ram //Inicializa variables a 0
#define n_servos 16 //Numero de servos
char servo_motor[n_servos]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14}; //Servos numerados
char servo_grados[]={ 10, 178, 96, 51,89, 13, 5, 36, 9,80,20,70,90,80,178,180 }; //Valor inicial de los servos
void bubbleSort(int grados[], int num_servos);
char servos; //Variables usadas para impresion de datos
void main(){
output_a(0b00000000); //Latch puertos
output_b(0b00100000); //Latch puertos
set_tris_a(0b00000000); //Config Puertos ADC0=A0
set_tris_b(0b00000100); // PWM por B0,TX=B5,RX=B2
////////////// Programa ////////////////////////
while(1){
bubbleSort(servo_grados,n_servos); //funcion burbuja
for(servos=0;servos<n_servos;servos++){
printf("Servo %2u = %3u grados\r",servo_motor
[servos
],servo_grados
[servos
]);
}
while(1); //loop
}//endwhile
}// en main
void bubbleSort(int grados[], int num_servos)
{
int i, j, temp;
for (i = (num_servos - 1); i > 0; i--)
{
for (j = 1; j <= i; j++)
{
if (servo_grados[j-1] > servo_grados[j])
{
temp = servo_grados[j-1]; //Acomoda de menor a mayor
servo_grados[j-1] = servo_grados[j];
servo_grados[j] = temp;
temp=servo_motor[j-1]; //Organiza servo con menor valor
servo_motor[j-1]=servo_motor[j];
servo_motor[j]=temp;
//printf("numero = %u \r",numbers[j]);
}
}
}
}