#include <18F2550.h>
#device adc=10
#fuses XT,NOWDT,PROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,FCMEN,PUT//good work
#use delay(clock=4000000)//cristal de 4MHz
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)//CONFIGURACION BALANZA
#include <usb_cdc.h>
#include <input.c>
#include <stdlib.h>
#define LED_ON output_high
#define LED_OFF output_low
#define LED6 PIN_B6//BANDERA DE COMUNICACION
#define LED7 PIN_B7//BANDERA DE NUMERACION
#define LED5 PIN_B5
#define LED4 PIN_B4
#define LED3 PIN_B3
#define LED2 PIN_B2
#define LED1 PIN_B1
#define LED0 PIN_B0
int const lenbuff=4;
float const area_Td=3.8;
int1 data_rdy=0;
int1 enviar_inicio=0;
int1 enviar_stop=0;
char rcvchar;
char cbuff[lenbuff];
int xbuff=0x00;
int ints=0, i;
int32 time=0;
float valor;
void addcbuff(char c);
#int_TIMER1////////////////////////////////////////////////////////////////////INTERRUPCION PARA EL TIMER1
void TIMER1_isr (void)
{// tiempo de envio T = 9.96sg
++ints;
if(ints>=19)// t = 524.288mS
{
ints=0;
enviar_inicio=TRUE;
time+=10;
}
}
#int_rda///////////////////////////////////////////////INTERRUPCION PARA ENVIAR DATOS AL BUFFER DEL SERIAL
void serial_isr()
{
rcvchar=0x00;
if(kbhit())
{
rcvchar=getc();
addcbuff(rcvchar);
}
}
////////////////////////////////// SUBFUNCIONES /////////////////////////////////////
void addcbuff(char c)
{
switch(c)
{
case '\r': break;
case '\n': break;
case 'c' : break;
case 's' : break;
case ' ' : break;
case 't' : enviar_stop=TRUE;break;
case '!' : data_rdy=TRUE;break;
default: cbuff[xbuff++]=c;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void inicbuff(void)
{
int i;
for(i=0;i<lenbuff;i++)
{
cbuff[i]=0x00;
}
xbuff=0x00;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void usb_debug_task(void) {
static int8 last_connected;
static int8 last_enumerated;
int8 new_connected;
int8 new_enumerated;
static int8 last_cdc;
int8 new_cdc;
new_connected=usb_attached();
new_enumerated=usb_enumerated();
new_cdc=usb_cdc_connected();
if (new_enumerated)
LED_ON(LED1);
else
LED_OFF(LED1);
if (new_cdc)
LED_OFF(LED2);
else
LED_OFF(LED2);
if (usb_cdc_carrier.dte_present)
LED_OFF(LED3);
else
{
time=0;
usb_cdc_putc(0x0C);
}
last_connected=new_connected;
last_enumerated=new_enumerated;
last_cdc=new_cdc;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void main(void)
{
delay_ms(500);
inicbuff();
LED_ON(LED6);
usb_cdc_init();
usb_init();
while(!usb_cdc_connected()) {}
LED_OFF(LED6);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
enable_interrupts(int_timer1);
enable_interrupts(int_rda);
enable_interrupts(global);
usb_cdc_putc(0x0c);
while (TRUE)
{
usb_task();
usb_debug_task();
if(enviar_inicio)
{
enviar_inicio=FALSE;
printf("cp\r\ncp\r\n");
}
if(data_rdy)
{
delay_ms(100);
valor = atof(cbuff);
valor /= area_Td;
printf(usb_cdc_putc,"%lu,%2.1f\r\n",time, valor);
inicbuff();
data_rdy=FALSE;
}
if(enviar_stop)
{
printf("0p\r\n");
delay_ms(250);
enviar_stop=FALSE;
}
}
}