Hola a todos.
Tengo montado un programa en CCS que quiero controlar acciones a traves de la interrupcion de tipo #int_RDA por puerto serie, y lo envio por labview.
La cuestion es que envio un caracter, lo recibe y me lo envia para confirmar, activo y desactivo variables a nivel de 1 y 0, pero cuando el programa principal empieza no hace nada se estanca en la primera condicion que le ordeno dentro del main, es como sino reaccionara con las condiciones que le doy en la interrupcion.
Haber si se me puede decir donde fallo
Muchas gracias.
Dejo el codigo del programa.
Tengo montado un programa en CCS que quiero controlar acciones a traves de la interrupcion de tipo #int_RDA por puerto serie, y lo envio por labview.
La cuestion es que envio un caracter, lo recibe y me lo envia para confirmar, activo y desactivo variables a nivel de 1 y 0, pero cuando el programa principal empieza no hace nada se estanca en la primera condicion que le ordeno dentro del main, es como sino reaccionara con las condiciones que le doy en la interrupcion.
Haber si se me puede decir donde fallo
Muchas gracias.
Dejo el codigo del programa.
PHP:
#include "NewPFC.h"
#include <ds1307.c>
#include <24AA1025.c>
#define SIZE 32
int clock_on=250,i=0,j=0,k=0;
int16 address=0,count=0;
char buffer1[SIZE],buffer2[SIZE],buffer3[SIZE],buffer4[SIZE],buffer5[SIZE],buffer6[SIZE];
BYTE hora,minuto,segundo,mes,any,dia,semana;
BYTE start1,start2,start3,start4,flag1,flag2,flag3;
#int_RDA
void RDA_isr(void)
{
disable_interrupts(INT_RDA);
if(kbhit())
{
switch (getc())
{
case 'K':
putc('R');
start3=1;
start2=0;
break;
case 'J':
putc('M');
start2=1;
start3=0;
start4=0;
break;
case 'D':
start1=1;
break;
}
}
enable_interrupts(INT_RDA);
}
#int_TIMER0
void TIMER0_isr(void)
{
disable_interrupts(INT_TIMER0);
if(i<SIZE)
{
set_adc_channel(4);
buffer1[i]=read_adc();
set_adc_channel(5);
buffer2[i]=read_adc();
set_adc_channel(6);
buffer3[i]=read_adc();
set_adc_channel(7);
buffer4[i]=read_adc();
set_adc_channel(8);
buffer5[i]=read_adc();
set_adc_channel(9);
buffer6[i]=read_adc();
i++;
set_timer0(clock_on);
}
enable_interrupts(INT_TIMER0);
}
void main()
{
setup_adc_ports(sAN4|sAN5|sAN6|sAN7|sAN8|sAN9|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_4);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
enable_interrupts(INT_RDA);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
start2=1;
flag1=1;
// TODO: USER CODE!!
while(true)
{
if(start1==1)
{
dia=getc();
mes=getc();
any=getc();
hora=getc();
minuto=getc();
segundo=getc();
ds1307_introducir_tiempo(dia, mes, any, semana, hora, minuto, segundo);
start1=0;
flag2=1;
start3=1;
}
if(start2==1)
{
while(flag1==1)
{
for(j=0;j<=SIZE;j++)
{
output_high(PIN_A0);
write_ext_eeprom(address, buffer1[j]);
address++;
write_ext_eeprom(address, buffer2[j]);
address++;
write_ext_eeprom(address, buffer3[j]);
address++;
write_ext_eeprom(address, buffer4[j]);
address++;
write_ext_eeprom(address, buffer5[j]);
address++;
write_ext_eeprom(address, buffer6[j]);
address++;
ds1307_obtener_calendario(dia, mes, any, semana);
write_ext_eeprom(address,dia);
address++;
write_ext_eeprom(address,mes);
address++;
write_ext_eeprom(address,any);
address++;
ds1307_obtener_hora(hora, minuto, segundo);
write_ext_eeprom(address,hora);
address++;
write_ext_eeprom(address,minuto);
address++;
write_ext_eeprom(address,segundo);
address++;
}
count++;
i=0;
j=0;
}
count=0;
address=0;
}
if(start3==1)
{
while(flag2==1)
{
for(j=0;j<=count;j++)
{
for(k=0;k<=32;j++)
{
output_high(PIN_A1);
putc(read_ext_eeprom(address));
address++;
putc(read_ext_eeprom(address));
address++;
putc(read_ext_eeprom(address));
address++;
putc(read_ext_eeprom(address));
address++;
putc(read_ext_eeprom(address));
address++;
putc(read_ext_eeprom(address));
address++;
putc(read_ext_eeprom(address));
address++;
putc(read_ext_eeprom(address));
address++;
putc(read_ext_eeprom(address));
address++;
putc(read_ext_eeprom(address));
address++;
putc(read_ext_eeprom(address));
address++;
putc(read_ext_eeprom(address));
address++;
delay_ms(100);
}
}
start3=0;
flag2=0;
}
start4=1;
flag3=1;
address=0;
}
if(start4==1)
{
while(flag3==1)
{
for(j=0;j<=SIZE;j++)
{
putc(buffer1[j]);
putc(buffer2[j]);
putc(buffer3[j]);
putc(buffer4[j]);
putc(buffer5[j]);
putc(buffer6[j]);
ds1307_obtener_calendario(dia, mes, any, semana);
putc(dia);
putc(mes);
putc(any);
ds1307_obtener_hora(hora, minuto, segundo);
putc(hora);
putc(minuto);
putc(segundo);
}
}
}
}
}
Última edición por un moderador: