// Versión de la plantilla para cristal de 4.00Mhz.
#include <18F4550.h> // Definición de registros internos del PIC18F4550.
#fuses NOMCLR,XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000) // Trabajamos a 48.00Mhz.
// Definiciones del USB:
#DEFINE USB_HID_DEVICE TRUE // Vamos a utilizar el protocolo HID.
#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT
#define USB_EP1_TX_SIZE 8 // Definición del tamaño del buffer de salida.
#define USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT
#define USB_EP1_RX_SIZE 8 // Definición del tamaño del buffer de entrada.
// Definiciones varias:
#define ON output_high
#define OFF output_low
// Definicion de control
#define CARTON 170 //Comando para activar visualizador
// Salidas de uso general.
#define LED1 PIN_B0
//Registro 4094
#define DATA PIN_B1
#define CLOCK PIN_B2
#define STROBE PIN_B3
/*********************************************************************************************************/
// Definición de las librerías utilizadas.
#include <pic18_usb.h> // Drivers's USB del PIC18F4550.
#include <USB_easyHID_descriptores.h> // Descriptores USB para la placa MoyaPIC_USB28 y easyHID.
#include <usb.c> // Funciones del USB.
//0 1 2 3 4 5 6 7 8 9
INT const segmentos[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
void escribir(INT caracter);
/**********************************************************************************************************/
void main()
{
//Cuerpo principal del programa.
//Variables locales del main.
CHAR recibe[8];//Variable que contiene los datos que se van a visualizar en los led's.
CHAR dcarton[5];
INT t;
//Configuramos los puertos del microcontrolador:
//set_tris_a(0x00);//Define el puerto A.//RA0, como entrada
set_tris_b(0x00);//Define el puerto B.//Todo el puerto B como salida.
//set_tris_c(0b00000000);
//set_tris_d(0b00000000);
//set_tris_e(0b00000000);
output_b(0x00);//Limpiamos el puerto B.
output_b(0xff);
delay_ms(500);
output_b(0x00);
//Otras configuraciones:
disable_interrupts(global);
disable_interrupts(INT_timer1);
disable_interrupts(INT_rda);
disable_interrupts(INT_ext);
disable_interrupts(INT_ext1);
disable_interrupts(INT_ext2);
setup_spi(FALSE);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
port_b_pullups(FALSE);
usb_init_cs();//inicia el USB y sale. Va de la mano con usb_task().
WHILE(true)
{
usb_task();//Configuramos el puerto USB.
IF(usb_enumerated())//Si el puerto es enumerado y configurado por el host..
{
IF(usb_kbhit(1))//Si hay un paquete de datos en el buffer lo tomamos y guardamos en la variable data.
{
usb_get_packet(1, recibe, 8);
output_toggle(LED1);
delay_ms(200);
IF(recibe[0]==CARTON)
{
[B][COLOR="Red"] // Aqui esta el error[/COLOR][/B]
dcarton[0]=recibe[1];[COLOR="Lime"] //funciona[/COLOR]
delay_ms(50);
dcarton[1]=recibe[2];[COLOR="rgb(65, 105, 225)"]//no funciona[/COLOR]
delay_ms(50);
dcarton[2]=recibe[3];[COLOR="rgb(65, 105, 225)"]//no funciona[/COLOR]
delay_ms(50);
dcarton[3]=recibe[4];[COLOR="rgb(65, 105, 225)"]//no funciona[/COLOR]
delay_ms(50);
dcarton[4]=recibe[5];[COLOR="RoyalBlue"]//no funciona[/COLOR]
delay_ms(50);
output_toggle(LED1);
delay_ms(50);
}
}
}
//Visualizadores
FOR(t=0; t<5; t++)
{
escribir(dcarton[t]);
delay_ms(500);
}
}
}
void escribir(INT caracter)
{
INT c;
OFF(PIN_B1);
OFF(STROBE);
OFF(CLOCK);
FOR(c=0; c<8; c++)
{
output_bit(DATA, bit_test(segmentos[caracter], c));
ON(CLOCK);
delay_cycles(1);
OFF(CLOCK);
}
OFF(CLOCK);
ON(STROBE);
delay_cycles(1);
OFF(STROBE);
}