Este es un ejemplo de un sencillo programa para controlar un servomotor por medio de la computadora. controlando a diferentes grados
//Control de motor servo hobbico
//#include <16F877.h>
#include <16F870.h>
#use delay(clock=10000000)
#fuses HS,NOWDT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#define out_SERVO PIN_C1
#include <stdio.h>
#include <stdlib.h>
void main()
{
char ch; //character variable
char ch_p='0'; //character para indicar posicion
int enable_SERVO; //variable de habilitación - apagado - default
enable_SERVO = 0; //apagado - default
output_bit(out_SERVO,0);
while(1)
{
if(kbhit())
{ //only get the character if one has been received
ch = getchar(); //wait for and get serial character
switch(ch)
{
case 'a': // arrancar motor
enable_SERVO=1;
break;
case 'p': // parar motor
enable_SERVO=0;
break;
default: // cambio de posicion
ch_p = ch;
break;
}
}
if(enable_SERVO==1) //si esta habilitado el SERVO
{
output_bit(out_SERVO,1);
switch(ch_p)
{
case '0': // posicion 0
delay_us(1000);
break;
case '1': // posicion 1
delay_us(1100);
break;
case '2': // posicion 2
delay_us(1200);
break;
case '3': // posicion 3
delay_us(1300);
break;
case '4': // posicion 4
delay_us(1400);
break;
case '5': // posicion 5
delay_us(1500);
break;
case '6': // posicion 6
delay_us(1600);
break;
case '7': // posicion 7
delay_us(1700);
break;
case '8': // posicion 8
delay_us(1800);
break;
case '9': // posicion 9
delay_us(1900);
break;
case 'A': // posicion 10
delay_us(2000);
break;
}
output_bit(out_SERVO,0);
delay_us(18000);//time - a variable 0-255 or a constant 0-65535
}
}
}