You are on page 1of 4

#include <18F4550.

h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL2,CPUDIV1,VREGEN
#use delay(clock=8000000)
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
#define USB_HID_DEVICE
FALSE
//// *deshabilitamos el uso de las directivas HID
///
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK
//// *turn on EP1(EndPoint1) for IN bulk/interrupt transfers
///
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK
//// *turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
///
#define USB_EP1_TX_SIZE
8
//// *Tamao del buffer del TX EndPoint1. (Cambiado de 32 a 8).
///
#define USB_EP1_RX_SIZE
8
//// *Tamao del buffer del RX EndPoint1. (Cambiado de 32 a 8).
///
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
#include <pic18_usb.h>
//// *Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver ///
#include <PicUSB.h>
//// *Configuracin del USB y los descriptores para este dispositivo//
#include <usb.c>
//// *handles usb setup tokens and get descriptor reports
////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
#byte port_a=0xF80
////
-Direccion del puerto A
////
#byte port_b=0xF81
////
-Direccion del puerto B
////
#byte port_c=0xF82
////
-Direccion del puerto C
////
#byte port_d=0xF83
////
-Direccion del puerto D
////
#byte port_e=0xF84
////
-Direccion del puerto E
////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
int16 x=0; y;
char a,b;
void main(void){

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_oscillator(False);

for(x=0;x<3;x++){
Output_High(31744);
delay_ms(300);
Output_High(31745);
delay_ms(300);
Output_Low(31744);
delay_ms(300);
Output_Low(31745);
delay_ms(300);
}

////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////
PIN_A0 "31744" Led Verde
////
////
PIN_A1 "31745" Led Rojo
////
////////////////////////////////////////////////////////////////////
////
////
//// Encendido y apagado de led conectados a RA0 y RA1
////
//// para verificar que el .HEX ha sido cargado correctamente ////
//// y que el integrado recibe corriente del puerto USB
////
////
////
//// En este bucle encendera el led verde y despues el rojo,
////
//// apagando posteriormente el verde y despues el rojo. Esto ////
//// se repetira tres veces
////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////

for(x=0;x<3;x++){
Output_High(31744);
Output_High(31745);
delay_ms(300);
Output_Low(31744);
Output_Low(31745);
delay_ms(300);
}
usb_init();
usb_attach();
usb_task();
delay_ms(999);

while(!usb_enumerated()){
Output_High(31744);
Output_Low(31745);
delay_ms(600);
Output_High(31745);
Output_Low(31744);
delay_ms(600);
}
delay_ms(100);
}
do{
do{
y=0;
b=0;
a=0;

Output_High(31744);

Output_High(31768);
for(y= 31753; y<=31759;y++){
if(Input(y)==1){
a=40;
Output_Low(31768);
goto detectado;
}
}

Output_Low(31768);
Output_High(31769);
for(y= 31753; y<=31759;y++){
if(Input(y)==1){
a=41;
Output_Low(31769);
goto detectado;
}
}
Output_Low(31769);
Output_High(31770);

////
////
////
////
////
////
//// En este otro bucle encendera y apagara los dos diodos
////
//// Led al mismo tiempo, haciendolo tres veces
////
////
////
////
////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//// *Inicializacin del mdulo USB del microcontrolador.
////
////
////
//// *Testa la conexin USB con el PC y obliga a que la active ////
////
si est desactivada
////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////
////
//// *Bucle para en el cual encendera alternadamente los led
////
////
hasta que la diana sea detectada correctamente
////
////
por el PC y con los driver instalados. Mientras tanto
////
////
los led permaneceran oscilando alternativamente.
////
////
////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//// *Este primer "do{ }while(1);" pertenece al blucle
////
////
principal del programa.
////
////////////////////////////////////////////////////////////////////
//// *El segundo "do{ while(1);" es el correspondiente al
////
////
barrido del teclado, del cual solo saldra por medio de
////
////
una etiqueta "detectado" que es llevado fuera del
////
////
"do{}while(1);" y mandar los datos.
////
////////////////////////////////////////////////////////////////////
//// *Encenderemos el Led siempre que estemos testeando tirada ////
////////////////////////////////////////////////////////////////////
////----BARRIDO DE PINES DE PIC PARA LA DETECCION DE DARDOS---- ///
//// *Aplicamos nivel alto al "PIN_D0 31768"
///
//// *Un "FOR"que nos recorrera los numeros pertenecientes a los ///
//// pines desde "RB1 31753" hasta "RB7 31759" en busca de un
///
//// cambion de nivel, el cual se detecta con el "IF", testeando///
//// que el valor del pin "INPUT" indicado por la variabe "y"
///
//// sea nivel alto.
///
//// En caso de cumplir la condicin, a la variable "a" se le
///
//// asigna el valor "40". Ponemos a nivel bajo el "PIN_D0 31768"/
//// y despues acudimos a la llamada de de la etiqueta "detectado"/
//// *En caso de no cumplir la condicion del "IF", pondremos a ///
////
nivel bajo dicho"PIN_D0 31768" y podremos a alto el
///
////
siguiente pin "PIN_D1 31769" realizando las mismas acciones//
////
que las descritas anteriormente, cambiando el valor de "a" //
//// *Realizaremos todas esta acciones en los pines de "RD0","RD1"/
////
"RD2","RD3","RD4","RD5","RD6","RD7","RE0" y "RE1".
///
////
///
////////////////////////////////////////////////////////////////////

for(y= 31753; y<=31759;y++){


if(Input(y)==1){
a=42;
Output_Low(31770);
goto detectado;
}
}
Output_Low(31770);
Output_High(31771);
for(y= 31753; y<=31759;y++){
if(Input(y)==1){
a=43;
Output_Low(31771);
goto detectado;
}
}
Output_Low(31771);
Output_High(31772);
for(y= 31753; y<=31759;y++){
if(Input(y)==1){
a=44;
Output_Low(31772);
goto detectado;
}
}
Output_Low(31772);
Output_High(31773);
for(y= 31753; y<=31759;y++){
if(Input(y)==1){
a=45;
Output_Low(31773);
goto detectado;
}
}
Output_Low(31773);
Output_High(31774);
for(y= 31753; y<=31759;y++){
if(Input(y)==1){
a=46;
Output_Low(31774);
goto detectado;
}
}
Output_Low(31774);
Output_High(31775);
for(y= 31753; y<=31759;y++){
if(Input(y)==1){
a=47;
Output_Low(31775);
goto detectado;
}
}
Output_Low(31775);
Output_High(31776);
for(y= 31753; y<=31759;y++){
if(Input(y)==1){
a=48;
Output_Low(31776);

goto detectado;
}
}
Output_Low(31776);
Output_High(31777);
for(y= 31753; y<=31759;y++){
if(Input(y)==1){
a=49;
Output_Low(31777);
goto detectado;
}
}
Output_Low(31777);
}while(1);

detectado:
Output_High(31745);
delay_ms(500);
Output_Low(31744);
switch(y){
case 31753:{
b=58;
}break;
case 31754:{
b=57;
}break;
case 31755:{
b=56;
}break;
case 31756:{
b=55;
}break;
case 31757:{
b=54;
}break;
case 31758:{
b=53;
}break;
case 31759:{
b=52;
}break;
}
usb_puts(1,&a,8,100);
usb_puts(1,&b,8,100);
Output_High(31744);
Output_Low(31745);
}while(1);
}

////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////
////
//// *Aquitenemos la etiqueta detectado, donde acudira en caso ////
//// de haber detectado un cambio de nivel en algun pin del
////
//// puerto B.
////
//// *Acontinuacion encendemos el Led Rojo y apagamos el Verde ////
//// De este modo sabremos por el estado de los Led si la diana////
//// a detectado el dardo.
////
////
////
//// *Una vez acudida a la llamada de la etiqueta, la
////
//// variable "Y" se ha quedado con el valor del Pin del cual ////
//// ha cambiado el estado e interrumpiendo el bucle "FOR".
////
//// *Ahora asignaremos a la variable "B" un valor, dependiendo ////
//// del valor de "y" y con "switch" le asignaremos dicho valor.///
////
////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////
////
//// *Usamos la funcion "usb_puts()" para mandar los datos por ////
//// "a" y "b".
////
////
////
//// *Encendemos el Led Verde para indicar que ya se puede
////
//// lanzar el dardo y apagamos el Led Rojo.
////
//// *Ahora bien todo terminado solo queda volver a repetir todo////
//// y para ello el bucle infinito "DO{... }WHILE(1)".
////
////
////
////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////

You might also like