Sie sind auf Seite 1von 3

#include <18F4550.

h>
#fuses XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN // XTAL=0
4MHz
/*
XTPLL:
ES PLL es lo que define la frecuencia de un artefacto electrnico
NOWDT:
No Watchdog Timer
NOPROTECT: Codigo no protegido de lectura
NOLVP:
Deshabilita un pin asignado para la programacion de bajo voltaje
NODEBUG:
USBDIV:
PLL1:

NO debug mode for ICD


Transmision para usb corriendo a 48Mhz
Significa que el PLL prescaler NO dividir la frecuencia del cristal.

CPUDIV1:
El PLL postscaler decide la divisin en 2 de la frecuencia de salida d
el PLL de 96MHZ, si queremos 48MHZ, lo dejaremos como est.
VREGEN:
Habilita el regulador de 3.3 volts que usa el mdulo USB, no lo usarem
os por los momentos, se cambiar por NOVREGEN
*/
#use delay(clock=48000000)

//Se usara un oscilador externo de 4MHz

#Byte PortA = 0xF80


#Byte PortB = 0xF81
#Byte PortC = 0xF82
#Byte PortD = 0xF83
Slo 40/44 pines).
#Byte PortE = 0xF84
#bit A0
= PortA.0
bit RA0 del PIC.

//
//
//
//

Direccin
Direccin
Direccin
Direccin

del
del
del
del

puerto
puerto
puerto
puerto

A
B
C
D

para
para
para
para

la
la
la
la

familia
familia
familia
familia

18Fxx5x.
18Fxx5x.
18Fxx5x.
18Fxx5x (

// Direccin del puerto E para la familia 18Fxx5x.


// Creamos una asignacin para hacer referencia al

#define USB_HID_DEVICE
#define USB_EP1_TX_ENABLE
lk/interrupt transfers
#define USB_EP1_RX_ENABLE
ulk/interrupt transfers
#define USB_EP1_TX_SIZE
oint 10 buffer
#define USB_EP1_RX_SIZE
oint 1 buffer

FALSE
USB_ENABLE_BULK

//Disable HID
//turn on EP1(EndPoint1) for IN bu

USB_ENABLE_BULK

//turn on EP1(EndPoint1) for OUT b

10

//size to allocate for the tx endp

//size to allocate for the rx endp

#include <pic18_usb.h>
//Microchip PIC18Fxx5x Hardware layer for CCS's PIC
USB driver
#include "usb_desc_scope.h" //Enumerador PalitroqueZ
#include <usb.c>
//handles usb setup tokens and get descriptor report
s
#use
#use
#use
#use
#use

fast_io(a)
fast_io(b)
fast_io(c)
fast_io(d)
fast_io(e)

//Se
//Se
//Se
//Se
//Se

utilizara
utilizara
utilizara
utilizara
utilizara

el
el
el
el
el

puerto
puerto
puerto
puerto
puerto

A
B
C
D
E

//int8 crea una variable que puede guardar 8 bits de datos (guarda 8 valores en
lugar de solamente 0 / 1)
//int8 va esde 0 a 255.
int8 Aux1=0, Aux2=0, Aux3=0, Aux4=0, Aux5=0;
int8 Enc1=0, Enc2=0, Enc3=0, Enc4=0, Enc5=0;
int8 Q=0;

int8 outa[1];
int16 cont[5];
void main()
{
set_tris_a(0b11111110);
set_tris_b(0b11111111);
set_tris_c(0b11111111);
set_tris_d(0b11111111);
set_tris_e(0b11111111);

//PortA
//PortB
//PortC
//PortD
//PortE

setup_adc (adc_clock_div_32); //No ADC, no comparators...


setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
port_b_pullups(FALSE);
usb_init(); //init USB
usb_task(); //enable usb device and interruptions
usb_wait_for_enumeration(); //wait
outa[0]=0;
do
{
cont[Q]=0;
// Adems de poner a cero el array Cont, aprovecho para h
acer parpadear
Q++;
// un LED al comienzo. Parpadear 6 veces, una vez que el
PIC y el PC se reconocen.
A0=0;
delay_ms(100);
A0=1;
delay_ms(100);
}
while (Q<6);
Q=0;
while (true)
{
Aux1 = Enc1;
//
ber si hay cambios en el encoder.
Enc1 = PORTB & 3;
//
B0 y RB1 de PortB para que el Pic solo pueda contar 00 nes
If ((Aux1 == 2) && (Enc1 == 3)) { cont[0]++;}//
, incrementa el contador.
If ((Aux1 == 3) && (Enc1 == 2)) { cont[0]--;}//
, decrementa el contador.
If (bit_test(PORTD, 7) == 0) { cont[0]=0;}//
oder, poner a cero el contador.
//La linea anterior no se ocupa debido a que los
enen Pb.

Igualamos para luego sa


Aislamos los dos bits R
01 - 10 - 11 en esos pi
Si hay flanco de subida
Si hay flanco de bajada
Si se ha pulsado el enc
encoder del mouse no ti

Aux2 = Enc2;
Enc2 = PORTB & 12;
// Aislamos los dos bi
ts RB2 y RB3 de PortB para que el Pic solo pueda contar 00 - 01 - 10 - 11 en eso
s pines
If ((Aux2 == 8) && (Enc2 == 12)) { cont[1]++;}

If ((Aux2 == 12) && (Enc2 == 8)) { cont[1]--;}


If (bit_test(PORTD, 6) == 0)
{ cont[1]=0;}
//La linea anterior no se ocupa debido a que los encoder del mouse no t
ienen Pb.
Aux3 = Enc3;
Enc3 = PORTB & 48;
// Aislamos los dos bi
ts RB4 y RB5 de PortB para que el Pic solo pueda contar 00 - 01 - 10 - 11 en eso
s pines
If ((Aux3 == 32) && (Enc3 == 48)) { cont[2]++;}
If ((Aux3 == 48) && (Enc3 == 32)) { cont[2]--;}
If (bit_test(PORTD, 5) == 0)
{ cont[2]=0;}
//La linea anterior no se ocupa debido a que los encoder del mouse no t
ienen Pb.
Aux4 = Enc4;
Enc4 = PORTB & 192;
// Aislamos los dos bit
s RB6 y RB7 de PortB para que el Pic solo pueda contar 00 - 01 - 10 - 11 en esos
pines
If ((Aux4 == 128) && (Enc4 == 192)) { cont[3]++;}
If ((Aux4 == 192) && (Enc4 == 128)) { cont[3]--;}
If (bit_test(PORTD, 4)
== 0)
{ cont[3]=0;}
//La linea anterior no se ocupa debido a que los encoder del mouse no t
ienen Pb.
Aux5 = Enc5;
Enc5 = PORTD & 3;
// Aislamos los dos bit
s RD0 y RD1 de PortD para que el Pic solo pueda contar 00 - 01 - 10 - 11 en esos
pines
If ((Aux5 == 2) && (Enc5 == 3)) { cont[4]++;}
If ((Aux5 == 3) && (Enc5 == 2)) { cont[4]--;}
If (bit_test(PORTD, 3) == 0) { cont[4]=0;}
//La linea anterior no se ocupa debido a que los encoder del mouse no t
ienen Pb.
If (usb_enumerated())
{
usb_put_packet(1, cont, 10, USB_DTS_TOGGLE);
}
}
}

Das könnte Ihnen auch gefallen