Sie sind auf Seite 1von 3

//!

//ENCABEZADO DEL PROGRAMA


#INCLUDE <16F887.H>
#DEVICE ADC=10 //SE DEFINE EL ADC
#USE DELAY(CLOCK=4000000)
#USE RS232(BAUD=9600,XMIT=PIN_C6,RCV=PIN_C7)//SE DEFINE LA COMUNICACION SERIAL
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,MCLR
//DEFINICION DE PUERTOS
#BYTE PORTA=5
#BYTE PORTB=6
#BYTE PORTC=7
#BYTE PORTD=8
#define servo porta,0
#INCLUDE <stdlib.h>
//DEFINICION DE VARIABLES
signed long x;
CHAR recibir[5];
int32 i,j,opcion,grados,valor,movimiento,n,numero1,numero2,ciclo,m;
//METODOS DEL SISTEMA

#INT_RDA
VOID SERIAL_ISR()
{
if(kbhit())
{
gets(recibir);
switch(recibir[0])
{
case 'a':
puts("esta en servo");
puts("ingrese la secuencia para el servo");
for(i=0;i<=4;i++)
{
gets(recibir);
grados=atoi(recibir);
write_eeprom(i,grados);
}
opcion=1;
break;
case 'b':
puts("esta paso-paso,ingrese 5 valores");
puts("ingrese 1 para una vuelta horario ");
puts("ingrese 0 para una vuelta antihorario");
for(i=0;i<1;i++)
{
gets(recibir);
grados=atoi(recibir);
write_eeprom(i,grados);
}
opcion=2;
break;
default:
puts("esta haciendo el ridiculo ingrese otro valor");
}
}
}

VOID MAIN()
{
SET_TRIS_A (0B00000000);//definicion de puertos
SET_TRIS_B (0B00000000);
SET_TRIS_C (0B10000000);
//SET_TRIS_D (0B00000000);
//HABILITA LAS INTERRUPCIONES PARA LEER LAS VARIABES INGRESADAD
SETUP_TIMER_2(T2_DIV_BY_4,255,1);
SETUP_ADC_PORTS(ALL_ANALOG);
SETUP_ADC(ADC_CLOCK_DIV_8);
ENABLE_INTERRUPTS(GLOBAL);
ENABLE_INTERRUPTS(INT_RDA);
while(true)
{
inicio:
output_high(pin_c0);
puts("menu:a)servo,b)paso-paso");
delay_ms(200);

//!
if(opcion==1)
{puts("entro a servo");
for(j=0;j<=4;j++)
{
valor=read_eeprom(j);
//segun la configuracion en el proteus son 1000ms en 0 y 2000ms en 180
//conversion para que funcione en proteus
//movimiento=(valor*(1000/180)+1000);

//conversion para que funcione en la vida real


movimiento=(valor*(2000/180)+500);
for(i=0;i<=50;i++)
{
bit_set(servo);
delay_us(movimiento);
bit_clear(servo);
delay_ms(20);
}
delay_ms(300);
}
}
if(opcion==2)
{
puts("entro a paso-paso");
for(j=0;j<1;j++)
{
valor=read_eeprom(j);
if(valor==1)
{
for(i=0;i<128;i++)
{
portb=0b1000; // El motor avanza un paso en sentido horario
delay_ms(100);
portb=0B0100; // El motor avanza un paso en sentido horario
delay_ms(100);
portb=0B0010; // El motor avanza un paso en sentido horario
delay_ms(100);
portb=0B0001; // El motor avanza un paso en sentido horario
delay_ms(100);
}
}
if(valor==0)
{
for(i=0;i<128;i++)
{
portb=0b1100; // El motor avanza un paso en sentido horario
delay_ms(100);
portb=0B0110; // El motor avanza un paso en sentido horario
delay_ms(100);
portb=0B0011; // El motor avanza un paso en sentido horario
delay_ms(100);
portb=0B1001; // El motor avanza un paso en sentido horario
delay_ms(100);
}
}

}
opcion=3;
}
printf("\f");
}

Das könnte Ihnen auch gefallen