Hola:
Te dejo para que lo descargues aqui, como es libre no veo que esto sea ilegal, asi que aqui lo puedes descargar:
http://rapidshare.de/files/29207545/MPASMWIN401.rar.html
yo pegue esa carpeta dentro de la misma carpeta de PBP y luego lo busque manualmente
no creo que usb se pueda simular en proteus
'Enciende dos leds conectados al cerebro central y uno situado en la estación base
'Conexion:
' PIN B0: reloj.
' PIN B1: datos.
' PIN B2: LED estación base.
DEFINE OSC 48
DEFINE LOADER_USED 1
USBBufferSizeMax con 8 ' maximum buffer size
USBBufferSizeTX con 8 ' input
USBBufferSizeRX con 8 ' output
' the USB buffer...
USBBuffer Var Byte[USBBufferSizeMax]
USBBufferCount Var Byte
'Variables propias
i VAR BYTE
aux VAR BYTE
auxBit var bit
estadoled VAR bit
orden VAR byte
' ************************************************************
' * main program loop - remember, you must keep the USB *
' * connection alive with a call to USBService every couple *
' * of milliseconds or so... *
' ************************************************************
TRISB=0 'B0 y B1 como salidas, B2 y B3 como entradas y el resto,
'como da igual(no las usaremos), salidas.
PORTB=0
usbinit ' initialise USB...
ProgramStart:
gosub DoUSBIn
'Cuando se emita una orden nueva, en USBBuffer[4] tendremos un 1. La orden
'nueva será transmitida por USBBuffer[5]. Para el caso de los LEDs: 1->LED 1
' 2->LED 2
'Si de lo que se trata es de una orden para la estación base, en USBBuffer[5]
'tendremos un 2. La orden será encender o apagar un LED situado en el pin 2 del puerto B
USBSERVICE
IF USBBuffer[4]=1 THEN 'Es una orden para el robot
GOSUB EnvioDato
else
if usbbuffer[4]=2 then 'USBBuffer[4]=2 -> Es una orden para la estación base.
if estadoled=1 then
PORTB.2=0
estadoled=0
else
PORTB.2=1
estadoled=1
endif
Endif
endif
'gosub DoUSBOut Por ahora no hace falta, dado que no enviamos nada al ordenador.
goto ProgramStart
' ************************************************************
' * receive data from the USB bus *
' ************************************************************
DoUSBIn:
USBBufferCount = USBBufferSizeRX ' RX buffer size
USBService ' keep connection alive
USBIn 1, USBBuffer, USBBufferCount, DoUSBIn ' read data, if available
return
' ************************************************************
' * wait for USB interface to attach *
' ************************************************************
DoUSBOut:
USBBufferCount = USBBufferSizeTX ' TX buffer size
USBService ' keep connection alive
USBOut 1, USBBuffer, USBBufferCount, DoUSBOut ' if bus available, transmit data
return
'Comunicación serie a dos hilos sin comprobación de escritura.
'El reloj se mandará por el pin 0 y el dato por el pin 1, ambos del puerto B
EnvioDato:
orden=USBBUFFER[5]
'Enviamos los datos:
aux=1 'aux solo tendrá un bit activo cada vez. De esta forma y mediante la AND
'podemos saber qué bit debemos mandar cada vez.
'Mandamos primero el bit MENOS significativo (LSB).
FOR i=1 TO 8 STEP 1
usbservice 'Mantenemos la conexión con el USB activa
if (AUX and orden)=0 then 'Calculamos el bit que se debe enviar
auxBit=0
ELSE
auxBit=1
endif
PORTB.1=auxBit 'Enviamos primero el dato y después activamos el reloj.
PORTB.0=1 'Activamos el reloj.
'Esperamos un tiempo prudencial y deshabilitamos el reloj.
pause 100
usbservice
PORTB.0=0
aux=aux*2 'Hacemos un desplazamiento a la izquierda para preparar el siguiente dato.
NEXT i
RETURN
;----- CONFIG4L Options --------------------------------------------------
_STVREN_OFF_4L EQU H'FE' ; Stack full/underflow will not cause Reset
_STVREN_ON_4L EQU H'FF' ; Stack full/underflow will cause Reset
_LVP_OFF_4L EQU H'FB' ; Single-Supply ICSP disabled
_LVP_ON_4L EQU H'FF' ; Single-Supply ICSP enabled
_XINST_OFF_4L EQU H'BF' ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
_XINST_ON_4L EQU H'FF' ; Instruction set extension and Indexed Addressing mode enabled
_DEBUG_ON_4L EQU H'7F' ; Background debugger enabled, RB6 and RB7 are dedicated to In-Circuit Debug
_DEBUG_OFF_4L EQU H'FF' ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
;----- CONFIG4L Options --------------------------------------------------
_STVREN_OFF_4L EQU H'FE' ; Stack full/underflow will not cause Reset
_STVREN_ON_4L EQU H'FF' ; Stack full/underflow will cause Reset
_LVP_OFF_4L EQU H'FB' ; Single-Supply ICSP disabled
_LVP_ON_4L EQU H'FF' ; Single-Supply ICSP enabled
_ICPRT_OFF_4L EQU H'DF' ; ICPORT disabled
_ICPRT_ON_4L EQU H'FF' ; ICPORT enabled
_XINST_OFF_4L EQU H'BF' ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
_XINST_ON_4L EQU H'FF' ; Instruction set extension and Indexed Addressing mode enabled
_DEBUG_ON_4L EQU H'7F' ; Background debugger enabled, RB6 and RB7 are dedicated to In-Circuit Debug
_DEBUG_OFF_4L EQU H'FF' ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
AttachToUSB:
REPEAT
USBPOLL
UNTIL PP0 = ATTACHED_STATE
RETURN
y queda allí indefinidamente hasta que conecto el hard al bus y pasa a la parte de programa ProgramLoop (Estoy usando los nombres que usa EasyHID para que sea más clara la explicación de mi duda)AttachToUSB:
REPEAT
USBPOLL
UNTIL PP0 = ATTACHED_STATE
RETURN
Sí lo he probado a éso que propones, pero el programa se muere en el bucle infinito .....
Y tu programa es....???
Recuerda que los indces deben ser menos uno. Si envias de la PC en el indice 8 en el PIc lo debes leer en el 7
El USBBUFFEROUT e IN estan declarados como BYTE en el Visual BASIC, y otra seria buena volvieran a generar el codigo para descartar que el VID y el PID esten fallando.
emula segun la imagen anexa estas tratando de compilar con el pic16f877 este no soporta usb tienes que cambiar a pic18f2550 o 4550...
por eso te da ese error..
saludos
:-)
Bueno la idea de este post es que entre todos podamos crear una especie de tutorial de como usar el USB de nuestra PC y conectarlo a los pics que soportan USB (18F2455,18F2550,18F4455 y 18F4550) obviamente para hacer esto necesitaremos herramientas cuales?
- El mas importante el easyHID que nos da mecanique (http://www.mecanique.co.uk/products/usb/easyhid.html)
- Que nuestro MCS soporte los pics
- y que tengamos un programador que tambien soporte los pics
Bueno una vez teniendo eso empecemos. Aqui en el foro tenemos varios ejemplos de conectar un pic al usb sobre todo con el 18F2550; sus medios de interfaz son normalmente la placa GTP USB LITE o tambien en conexiones como nos pone de ejemplo el mismo easyHID.
Un ejemplo excelente para no variar, es del amigo LordLafebre en la seccion de robotica con su bot Eleazar y tambien el de J1M que es un ejemplo de sumar pero ese en CCS.
Algo importante en este pseudoTUTO es saber que es lo que nos entrega el USB osea preguntemos ¿podemos mandar datos? ¿de que tipo? ¿su funcionamiento es similar al puerto serie (en este podemos enviar numeros, letras, cadenas etc)?
Bueno por lo pronto tratare de encontrar mas informacion para ampliar esto y tambien tratare de hacer algo un ejemplito o entender los ejemplos mencionados para empezar de cero.
Por lo pronto un link de lo que es el usb.
http://www.monografias.com/trabajos11/usbmem/usbmem.shtml
Tambien un documento les adjunto.
:-)
Bueno la idea de este post es que entre todos podamos crear una especie de tutorial de como usar el USB de nuestra PC y conectarlo a los pics que soportan USB (18F2455,18F2550,18F4455 y 18F4550) obviamente para hacer esto necesitaremos herramientas cuales?
- El mas importante el easyHID que nos da mecanique (http://www.mecanique.co.uk/products/usb/easyhid.html)
- Que nuestro MCS soporte los pics
- y que tengamos un programador que tambien soporte los pics
Bueno una vez teniendo eso empecemos. Aqui en el foro tenemos varios ejemplos de conectar un pic al usb sobre todo con el 18F2550; sus medios de interfaz son normalmente la placa GTP USB LITE o tambien en conexiones como nos pone de ejemplo el mismo easyHID.
Un ejemplo excelente para no variar, es del amigo LordLafebre en la seccion de robotica con su bot Eleazar y tambien el de J1M que es un ejemplo de sumar pero ese en CCS.
Algo importante en este pseudoTUTO es saber que es lo que nos entrega el USB osea preguntemos ¿podemos mandar datos? ¿de que tipo? ¿su funcionamiento es similar al puerto serie (en este podemos enviar numeros, letras, cadenas etc)?
Bueno por lo pronto tratare de encontrar mas informacion para ampliar esto y tambien tratare de hacer algo un ejemplito o entender los ejemplos mencionados para empezar de cero.
Por lo pronto un link de lo que es el usb.
http://www.monografias.com/trabajos11/usbmem/usbmem.shtml
Tambien un documento les adjunto.