Hola tengo una inquietud tengo 2 micros comunicados por rs232 inalambricamente con modulos xbee y lo que deseo hacer es lo siguiente: que el RX se encienda y entre en modo de SLEEP, despues se encienda el micro TX y que por interruccion de RS232 se despierte el RX aqui ajunto el codigo del RX:
#include <16F877A.h>
#DEVICE ADC=8
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=20M)
#include <LCD_B.c>
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8 , parity=N )
int A=0,
B=0,
C=0,
D=0,
E=0,
J=0,
K=0,
L=0,
M=0,
N=0,
O=0,
P=0,
Q=0,
R=0,
W=0,
X=0,
Y=0,
Z=0,
bandera=0 ; // bandera para la recepcion del dato y el modo sllep empieza en cero //
#int_RDA
void RDA_isr(){ //inicia la interrupccion //
if(kbhit(1)) { // aqui pregunta por el bus de datos que si se encuentra en 1 reciba y haga la interrupccion //
Y=GETC(); // recibe la variable y del tx del control remoto //
bandera=1; //como se inicia en cero cuando recibe el dato se pone en uno //
X++; //aqui se incrementa la variable sumandose//
switch(X){ //empieza por casos //
case 1: A=Y; //caso 1 a es igual a y//
break;
case 2: B=Y;
break;
case 3: C=Y;
break;
case 4: D=Y;
break;
case 5: E=Y;
break;
} //cierre del if del case de las variable que se incrementa //
if(X==5){X=0;} //cuandp x valga 5 se inicializa la variable de entrada osea siempre se van a evaluar los 5 casos //
} // cierre del el kbhit en uno y recibe los datos //
} // cierre de la interrupccion //
Void main(){
setup_adc_ports(ALL_ANALOG); //sets all the adc pins to analog
setup_adc(ADC_CLOCK_INTERNAL);
LCD_INIT();
lcd_gotoxy(3,1);
printf(lcd_putc,"BIENVENIDOS"); ///lcd 2 x 16 para el robot ///
delay_ms(800);
lcd_putc('\f');
lcd_gotoxy(1,1); //1 MNS//
lcd_putc("ESTABLECIENDO LA");
delay_ms(800);
lcd_gotoxy(2,2);
lcd_putc("COMUNICACION...."); //2 MNS//
delay_ms(800);
lcd_putc("\f");
enable_interrupts(int_RDA);
enable_interrupts(GLOBAL);
while(true){
if (bandera==1);{
lcd_gotoxy(1,1);
printf(lcd_putc,"A0=%u ",A);
lcd_gotoxy(9,1);
printf(lcd_putc,"A1=%u ",B);
set_adc_channel(3);
delay_us(10);
M=read_adc();
PUTC(M);
set_adc_channel(4);
delay_us(10);
N=read_adc();
PUTC(N);
} // cierre del if es igual a bandera en 1 igual a eso //
if(bandera==0){
sleep();
bandera=1;
}
} // cierre del while true //
}