Hola amigos del foro:
Les cuento lo que me pasa. estoy realizando un programa que utilice las interrupciones ext y rda...el programa es el siguiente:
#include <16f877.h>
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C6, rcv=PIN_C7)
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT
#include <stdlib.h>
//////////////////////////////////////////////
// VARIABLES GLOBALES //
//////////////////////////////////////////////
int x=1;// variable global
int y=0;
unsigned long int ton=0;
unsigned long int toff=0;
//////////////////////////////////////////////
#int_ext
encendido(void)
{
printf("valor x= %d
", x );
switch(x)
{
case(1)://ENCENDIDO
{
output_high(PIN_A5);//indica encendido equipo
output_low(PIN_A0);// APAGA PIN QUE INDICABA APAGADO
x=0;
y=1;//para emtrar al while
ext_int_edge(H_to_L);// interrupcion ALTO a BAJO
output_high(PIN_D2);// Habilita switch cmos recepción
enable_interrupts(int_rda);
printf("sali con x= %d e y= %d
",x,y);
printf("
Tiempo de encendido: "

; // pregunta tiempo de encendido
break;
}
case(0)://APAGADO
{
output_low(PIN_D2);//deshabilita switch cmos recepción
delay_ms(10);
output_low(PIN_A5);
output_High(PIN_A0);// indica apagado equipo
x=1;
ext_int_edge(L_to_H);//interrupcion BAJO a ALTO
disable_interrupts(int_rda);
printf("sali con x=%d
",x);
break;
}
}//Fin switch
return 0;
}//Fin interrupción ext encendido
#INT_RDA
rsis(void)
{
char string[20];
gets(string);
ton=atol(string);
printf("%u
",atol(string));
printf("
Tiempo de apagado1: "

;
output_high(pin_b3);
gets(string);
output_low(pin_b3);
toff=atol(string);
printf("%u
",atol(string));
printf("
Tiempo de encendido1: "

;
return 0;
} //fin interrupcion Transmision/Recepcion
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
// INICIO MAIN ///
///////////////////////////////////////////////////////
void main(void)
{//INICIO MAIN
unsigned long int z; //recepcion
set_tris_a(0b00000001);//todas salidas
output_a(0b00010001);// RA= alta indica apagado equipo
setup_adc_ports(NO_ANALOGS);// todas digitasles
set_tris_b(0b00000001);// RB0 entrada resto salidas
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
set_tris_d(0x00);// toas salidas
output_d(0x00);//todas bajas
enable_interrupts(int_ext);
ext_int_edge(L_to_H);
enable_interrupts(GLOBAL);
printf("
Inicio MAIN
"

;
while(y==1)
{
for(z=0; z<ton; z++)
{
output_high(pin_b7);
output_high(pin_b6);
output_high(pin_b5);
output_high(pin_b4);
delay_ms(1000);
}
output_low(pin_b7);
output_low(pin_b6);
output_low(pin_b5);
output_low(pin_b4);
for(z=0; z<toff; z++)
delay_ms(1000);
} //fin while
}// FIN MAIN
al programa lo voy revisando con el Hyper terminal.....y pasa lo siguiente:
manda el primer mensaje Inicio main.....luego hago saltar la interrupción y entra en ella y me imprime lo siguiente:" VALOR X:1" , "Sali con x=0 e y =1" y el otro "tiempo de encendido:"
aqui es donde se me produce el primer problema cuando introduzco por ejemplo un 2 no lo guarda lo que guarda es 0, esto lo compruebo ya que imprimo el valor guardado en la variable string, luego me pide que ingrese el tiempo de encendido....aqui si me funciona ya que al ingresar por ejemplo un 2 me imprime ese mismo valor....luego como veran en el programa aparece un último printf que dice tiempo de encendido1: trato de meter algun dato y me aparece en la pantalla del hyperterminal "Inicio MAIN".........que es el primer mensje que me manda y con ello me doy cuenta que se me reinicio el pic.....
aqui les copio lo que me manda el hyperterminal:
Inicio MAIN /// primer inicio pic
valor x= 1
sali con x= 0 e y= 1
Tiempo de encendido: 0 ingreso un 3 y me devuelve un 0
Tiempo de apagado1: 2 ingreso un 2 y me devuelve un 2
Tiempo de encendido1: pregunta ingreso un número y aprieto enter
Inicio MAIN se recetea el pic.....
espero haber dejado claro cual eran mis dos dudas...
espero respuestas...
gracias de antemano
hq