hola gente.
he estado trabajando con el movimiento de 3 servos a la misma vez y con angulo diferente
por medio de interrupciones y transmision serial.estoy recibiendo un 1 por la transmision, pero ningun servo se mueve ni nada ocurre,mientras si decido moverlos uno por uno(main) si se mueven este es el codigo...agradesco sus opiniones
gracias
he estado trabajando con el movimiento de 3 servos a la misma vez y con angulo diferente
por medio de interrupciones y transmision serial.estoy recibiendo un 1 por la transmision, pero ningun servo se mueve ni nada ocurre,mientras si decido moverlos uno por uno(main) si se mueven este es el codigo...agradesco sus opiniones
Código:
#include<p18f4550.h>
#include<delays.h>
//#include <xlcd.h>
int aaa,bbb,a1,a2;
/*void DelayFor18TCY(){Delay10TCYx(2);}
void DelayPORXLCD(){Delay1KTCYx(15);}
void DelayXLCD(){Delay1KTCYx(5);}*/
void interrupcion1(void);
void interrupcion2(void);
#pragma code intalta=0x08
void intalta(void){
_asm goto interrupcion1 _endasm
}
#pragma code
#pragma interrupt interrupcion1
void interrupcion1(void){
RCREG=aaa;
if (aaa=1){
for(a1=0; a1<100; a1++){
if (a1==1){
a1=a1+1;
} else {
a1=a1;
}
PORTDbits.RD0=1;Delay10TCYx(100+a1);
PORTDbits.RD0=0;Delay100TCYx(200-a1);
// Delay10KTCYx(500);
}
}
INTCONbits.RBIF=0;
}
#pragma code intbaja=0x18
void intbaja(void){
_asm goto interrupcion2 _endasm
}
#pragma code
#pragma interrupt interrupcion2
void interrupcion2(void){
RCREG==bbb;
if (bbb=1){
for( a2=0; a2<50; a2++){
if (a2==1){
a2=a2+1;
} else {
a2=a2;
}
PORTDbits.RD0=1;Delay10TCYx(100+a2);
PORTDbits.RD0=0;Delay100TCYx(200-a2);
// Delay10KTCYx(500);
}
}
PIR1bits.ADIF=0;
}
/*void lcd1(int);
void lcd2(int);
void lcd3(int);*/
int x=0,y=0,z=0;
void main()
{
int a0=0,b0=0,c0=0;
double a=0.0,b=0.0,c=0.0;
int aa=0.0,bb=0.0,cc=0.0;
TRISB=0;
TRISC=128;//128 192
TRISD=0;
PORTD=0;
TXSTA=36;
RCSTA=176;
BAUDCON=0;//8
SPBRG=25;//103
RCONbits.IPEN = 1;
IPR1bits.ADIP=0;
PIE1bits.ADIE=1;
INTCON=200;
INTCON2bits.RBIP = 1;
INTCON2bits.RBPU = 0;
/*OpenXLCD(FOUR_BIT & LINES_5X7);
WriteCmdXLCD(1);
SetDDRamAddr(0x00);
putrsXLCD(" Te1:");
SetDDRamAddr(0x40);
putrsXLCD(" Te2:");
SetDDRamAddr(0x4A);
*/
while(1)
{
//PORTDbits.RD4=1;
//Delay1KTCYx(1);
//PORTDbits.RD4=0;
//Delay1KTCYx(1);
if(RCREG==200)
{
Delay1KTCYx(50);//50mseg
a0=RCREG;
a=(a0/18.0)*10.0;
aa=(100+a);
PORTDbits.RD0=1;
Delay10TCYx(aa);
PORTDbits.RD0=0;
Delay100TCYx(200.0-aa);
//lcd1(a0);
}
if(RCREG==220)
{
Delay1KTCYx(50);//50mseg
b0=RCREG;
b=(b0/18.0)*10.0;
bb=(100+b);
PORTDbits.RD1=1;
Delay10TCYx(bb);
PORTDbits.RD1=0;
Delay100TCYx(200.0-bb);
//lcd2(b0);
}
if(RCREG==240)
{
Delay1KTCYx(50);//50mseg
c0=RCREG;
c=(c0/18.0)*10.0;
cc=(100+c);
PORTDbits.RD2=1;
Delay10TCYx(cc);
PORTDbits.RD2=0;
Delay100TCYx(200.0-cc);
//lcd3(c0);
}
}
}
/*void lcd1(int n)
{
x=n/100;
y=(n/10)%10;
z=n%10;
SetDDRamAddr(0x05);
WriteDataXLCD(0x30+x);
WriteDataXLCD(0x30+y);
WriteDataXLCD(0x30+z);
}
void lcd2(int n)
{
x=n/100;
y=(n/10)%10;
z=n%10;
SetDDRamAddr(0x45);
WriteDataXLCD(0x30+x);
WriteDataXLCD(0x30+y);
WriteDataXLCD(0x30+z);
}
void lcd3(int n)
{
x=n/100;
y=(n/10)%10;
z=n%10;
SetDDRamAddr(0x4D);
WriteDataXLCD(0x30+x);
WriteDataXLCD(0x30+y);
WriteDataXLCD(0x30+z);
}
*/