Autor Tema: comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)  (Leído 12910 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Gero Molina

  • PIC10
  • *
  • Mensajes: 10
comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)
« en: 09 de Noviembre de 2011, 21:04:33 »
Muy bien , he aqui un post esperado en el mundo del Lenguaje ensamblador. (si todo sale bien  :lol: )

durante los 2 proximos meses , junto con mi amigo Cézar González , vamos a terminar nuestra  tesis de la universidad , y vamos ha hacerlo con la cereza del postre:
(tambores....) ¡ ¡ ¡una tarjeta de adquisicion de datos USB hecha completamente en lenguaje ensamblador ! ! !   :-/ uhu ! !

en este post voy a comunicarles todos los pormenores de nuestra aventura , asi como compartir informacion (y pedirles ayuda cuando estemos dandonos cabezasos contra la compu y llenando la solicitud de proroga en mi U  :mrgreen: )

este es el trato , Empezamos el 11/11/2011 (hasta eso daremos informacion de USB y esperaremos a ver si no cierran el post :lol:) y terminamos el 01/01/2012.

Todos los que quieran una buena dosis de USB y Lenguage ensamblador al rojo vivo , Agarrense ! 8).....

« Última modificación: 10 de Noviembre de 2011, 00:31:01 por Gero Molina »
La revolución no será  televisada . Estallara en banda ancha !

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)
« Respuesta #1 en: 09 de Noviembre de 2011, 21:28:00 »
Citar
y llenando la solicitud de proroga en mi U 
   :D me acordé que me tocó hacerlo

Seguramente varios nos sumaremos a seguir los avances de esta hazaña
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)
« Respuesta #2 en: 10 de Noviembre de 2011, 00:56:08 »
Menuda tarea, aquí tienen a otro seguidor de este post :).

Aaah, prórrogas.... ;) :)
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Gero Molina

  • PIC10
  • *
  • Mensajes: 10
Re: comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)
« Respuesta #3 en: 10 de Noviembre de 2011, 02:53:18 »
siii , mientras mas seamos , menos tiempo nos demoraremos en hacerlo , y mas rapido adjuntaré a mi nombre el prefijo 'ing'.  :D

Muy bien , ahora si , Instrucciones de este post:

-sigue las reglas del foro (he leido tanto esto que realmente no lo puedo ovbiar  :mrgreen: ).
-ten a la mano el  Datasheet del pic 18f4550  , y la especificacion USB 2.0
-lee el Libro: USB in a nutshell  , en la pagina de Beyond Logic que han echo un muy buen trabajo.

Sii , yo se , este momento deben estar pensando: ¿yo llego a este post con la esperanza de que alguien me diga en 4 lineas lo que es USB,  y me haga descargar su codigo en asm ,  y este robotsito acordeonista  me dice que "para empezar" lea 1547 paginas de INGLES TECNICO  ! !  :5]  ? ? ...
Pues bien , ante eso , debo decir que: la especificacion 2.0 es como 'el datasheet' de USB , no tienes que leerla pero la tienes que tener con tigo al momento de programar (a parte que desde ahora asumiremos  todos que tenemos ese libro y nos referiremos a él).
En tanto a 'USB in a nutshell' , es un libro que realmente lo DEBES leer para desarrollar aplicaciones USB de cualquier tipo.
Por lo del ingles:pues  si, es una  real desgracia , pero no lo he encontrado en español... quiza en el futuro Tronix saque una edicion en español. pero hasta eso...  :(

PD: es mi primer post este , me emociona muuucho tener gente de otros países aqui ,  saludos!  :laugh:

La revolución no será  televisada . Estallara en banda ancha !

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)
« Respuesta #4 en: 10 de Noviembre de 2011, 06:45:57 »
Estaremos atentos a vuestros avances, no lo dudeis, tambien se os echara una mano... si podemos y sabemos, porque el tema es complejo.

Desconectado Gero Molina

  • PIC10
  • *
  • Mensajes: 10
Re: comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)
« Respuesta #5 en: 10 de Noviembre de 2011, 20:01:41 »
                                                                      LINKS  de  información sobre USB

Ok , un dia para empesar ha hablar de Pics y para calentar , paginas Web.
existe tanta información en la red , que a veces no puedes encontrar-concentrarte_en-dedicarte_de_lleno_a-dar_con una pagina y solo una pagina en la que puedas confiar.
Es por eso que voy a colocar aqui algunos links que ,a parte de ser los que he chequeado siempre , son los que mas se mencionan en todas partes , son estos:

USB made Simple , una pagina desde el reino Unido con una explicacion muuy preciza y suuper sencilla de lo que es USB , tienen una muuy buena explicacion de lo que son las transferencias  , paquetes , endpoints y eso..y una buena gia para enumeracion en la parte4

Foro de USB de Microchip , es donde los capos de la Microchip se reunen para conversar , el Segundo mejor foro de microcontroladores Pic despues de foros TodoPic !:mrgreen:

Bradley Minch code page es una pagina de un profe de electrónica forero de Microchip que hizo un Device USB en Assembler , puedes bajartelos y ver como ha hecho el man y mas que nada , te da la tranquilidad de saber que ajguien lo ha hecho y que no es una Utopíia ! eh?..

De ahi , hay hay algunas paginas super garas , pero que no he visitado mucho , pero que son super garas, son :http://www.beyondlogic.org/ de donde te has bajado (si seguiste las instrucciones) el Libro de USB in a Nutshell , www.lvr.com del cual todos hablan y /my_very_first_usb_device.html .
La revolución no será  televisada . Estallara en banda ancha !

Desconectado Gero Molina

  • PIC10
  • *
  • Mensajes: 10
Re: comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)
« Respuesta #6 en: 14 de Noviembre de 2011, 20:43:39 »
USBPROTOCOLO USB
1.- Host y Device
debi haber escrito el viernes en la noche , pero el fin de semana estaba realmente bueno en esta cuidad..en fin , comencemos..

hay ya demasiada informacion acerca del protocolo USB en la red y en otras artes de este foro , asi que no voy a profunizar en teoria sino mas bien en la lógica que nos servira al rato del código , asi como los conseptos y terminos que se usan en el Datasheet y que desde ahora supondre que todos conocen.

En esta pagina muy buena y en español... puedes ver que el protocolo USB no es imposible de dominar sino solo dificil.
la primera regla de oro que tienes que saber es que el ordenador (que se le conoce como host en el lexico USBniano..) es el dueño , amo y señor de la comunicacion , esto quiere decir que : el te va a decir cuando quiere mandarte algo o que le mandes algo , cuando quiere cambiarte tus propiedades , menearte tus buffers , calibrarte los registros , darte su direccion , pedirte tu nombre , cédula , proposito de utilizacion de este protocolo , etc...y voz (y por 'voz' me refiero a tu pic) , en lenguaje USBsiano te llamas el device , o tambien te das a conocer como function  , y eres el esclavo de comunicacion (si , es un lenguaje bien discriminatorio , pero que querian , este protocolo fue desarrollado por las mayores transnacionales de computacion del mundo asi que  :?..) , asi que tienes que hacer lo que el Host te pida , darletu numero , calibrarte cuando te pida , mandarle los datos que el quiera cuando el quiera , etc etc etc...

Asi mismo , los datos que salen del host se llaman OUT DATA y la que entra IN DATA..
y dentro de tu pic , tus datos que entran se llaman OUT DATA porque salen del host y los que salen del pic se llaman IN DATA porque entran al host , (porque voz eres ellacallo del host , y la terminologia se centra solo en el todopoderoso-exentrico-narcisista host y porque es asi y la vida es injusta con los menos pudientes y ya ,asi es , asi será , tienes que aceptarlo, te va a confundir , te va a desorientar despues de estar ofuscado y medio tonto y cabezon programando despues de estar  3 horas programando en assembler  , te va a molestar como una piedra en tu calsoncillo o tu hermano menor en la edad del burro , etc). asi que masbien te acostumbras y te lo memorisas desde ahora para que no te lo tengas que repetir  de nuevo ,
 lo que sale del hos al device , se llama Out
lo que entra  al host desde el device  , se llama In
Ok?, ok....
La revolución no será  televisada . Estallara en banda ancha !

Desconectado Gero Molina

  • PIC10
  • *
  • Mensajes: 10
Re: comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)
« Respuesta #7 en: 15 de Noviembre de 2011, 23:30:57 »
                                                                               modulo USB en el pic 18f4550

(registros de control)

el modulo USB del pic es una herramienta suuuuper Poderosa que tiene el Pic y que en cuanto a USB ,  hace las cosas faciles  (relativamente  :?...)

este compañero del foro ya hizo una descripción detallada y en español (muchas gracias , jhonatanpic888) de lo que es el modulo USB  , o sino , puedes consultar el Datasheet , que tiene informacion super puntual y super concisa de lo que es el Modulo.

Yo voy a tratar de explicar la logica de como funciona el modulo segun yo , para en base a eso poder escribir codigo... Aqui vamos.

Registros de control
El modulo USB en si , es decir El mismisimo modulo Usb , solo se configura con 3 registros que son :

El  USB Control register (UCON) , que controla las Propiedades de lo que quieres hacer con el modulo , cosas que puedes cambiar cuando estas en plena comunicacion y cosas asi , es como todo registro de control de cualquier registro USB...

para ver la descripcion completa de este registro , nada a este post

El  USB Configuration register (UCFG) que es un poco mas denso ya , porque controla cosas mas del mismo modulo , del hardware interno , cosas que debes setear y no volver a tocarles , como los pull-up resistors o el pingpong configuration...este registro se setea antes de habilitar el Modulo y no se cambia mas despues...

para ver la descripcion completa de este registro , nada a este post

USB Transfer Status register (USTAT) , aqui te dicen cual es el estado de las transacciones , a que Endpoint fueron , si fueron IN o OUT , etc , etc , etc... , a este registro vamos a ir cada ves que tengamos una interrupcion por transacciones..

para ver la descripcion completa de este registro , nada a este post
hay algo medio turbio con este registro , porque es como 4 registros en donde solo se ve el ultimo , y los otros se cargan mientras voz ves el uno , y se actualizan cada transaccion niseque , pero eso vamos a ver luego , porque no estoy muy seguro de como funciona ese truco asi bien bien...en fin..


los demas registros de control no actuan realmente sobre el moduloUSB : veras..
El  USB Device Address register (UADDR) es solo en donde pones la direccion que te da el host el rato de la enumeracion ,(si no sabes lo que estoy hablando , por favor , revisa los links que deje n la parte de : 'links')

Los Frame Number registers (UFRMH:UFRML)contienen el numero de frame en en el que estas , esto sirve para cuando estas en plena Interrup transaccion feliz de la vida mandando datos a la compu...

Ahora , Los Endpoint Enable registers (UEPn) si son registros de control , pero no del modulo , sino de los Endpoints que vas a utilizar , es decir , los que habilitan que cierto Endpoint sea In , sea Out , dé handshakes , dé Stalls , etc..
si vas a usar 3 endpoints , tienes los registros UEP0 , UEP1 y UEP2 , (si , tres registros)  , uno para cada Endpoint que vayas a usar , los UEPN son asi:

para ver la descripcion completa de este registro , nada a este post


y finalmente estan los Buffer Descriptors , que lo que hacen es describir el buffer que vas a utilizar , estos son super importantes y puede que te den un dolor de cabeza (o al menos a mi me han dado alguunos...)
estos Buffer Descriptors los veremos mas adelante cuando hablemos de espacio de memoria en la Ram y Ownership y eso , pero si te voy a decir algo; (antes de que te acuerdes que a los endpoints ya vimos como configurarles...) , en estos registros , no configuras los Endpoints que vas a usar , sino solo les describes.. , es decir , dices de cuantos bytes son , donde empiezan (en la Ram) , que caracteristicas tienen , te peleas con el SIE a ver si les manejas voz o le maneja el , etc...

Pues como ves ,no es mucho lo que tienes que setear para empesar  a trabajar con el Modulo , pero eso si , tienes que saber , bit x bit , que es lo que significa y que estas haciendo , porque van ha haber días de programacion perdidos por no clerear un bit , o no testear una bandera o algo.. asi que pilas , vayan donde mi pana Jonatan Moyano a estudiarse esos registros , que ya en pocos posts mas empezamos con el código....

PD: si esque creen que hay algun concepto que no le cachen mucho porque voy un poco rapido  , o quieren que profundize en algo , avisen , pero no quiero meterme taaanto en teoria teoria USB porque informacion de eso ya hay , lo que trato de hacer es llegar a la logica assemblerera....
La revolución no será  televisada . Estallara en banda ancha !

Desconectado Gero Molina

  • PIC10
  • *
  • Mensajes: 10
Re: comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)
« Respuesta #8 en: 21 de Abril de 2012, 00:49:03 »
Diario del autor.

Fecha: 4-20

Situación: todos festejando el 4-20 acá...

Yo, dándole que dá miedo igual, pero con una buena noticia para la comunidad internacional: "lo he logrado, pocas lineas de código para mi compu, varias lineas para los hispanos programadores"

cuando sepa como postear código lo subo panitas!!! jaja

Saludos.
La revolución no será  televisada . Estallara en banda ancha !

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)
« Respuesta #9 en: 23 de Abril de 2012, 08:14:42 »
Hola Gero, felicitaciones por tu labor!, y para portear codigo, donde dice GeSHi, seleccionas ASM, luego copy/paste tu codigo  ;-)
Ya tienes otro seguidor más!!!  :mrgreen:
Saludos!
Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Gero Molina

  • PIC10
  • *
  • Mensajes: 10
Re: comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)
« Respuesta #10 en: 03 de Mayo de 2012, 14:17:32 »
Ah, muy bien!..

Pues ahí está, espero les sirva:

Código: ASM
  1. ;==================================================================================================
  2. ;
  3. ;                                               FIRMWARE DE DEPURACIÓN DEL PROCESO DE ENUMERACIÓN
  4. ;                                                                       EN UN PIC 18F4550
  5. ;
  6. ;--------------------------------------------------------------------------------------------------
  7. ;NOTAS ENUMERA 64 bytes 1.0
  8. ;
  9. ;
  10. ;
  11. ;       FSR1H = 0x05 (en el banco 5 Endpoints)
  12. ;       FSR0H = 0x04 (en el banco 4 Buffer Descriptors)
  13. ;
  14. ;                                       TRONIX
  15. ;       César González
  16. ;       Gero Molina
  17. ;                               tronix.inventos@gmail.com
  18. ;      
  19. ;--------------------------------------------------------------------------------------------------
  20. ;
  21. ;==================================================================================================
  22.         list p=18f4553
  23.         #include <p18f4553.inc>
  24. ;==================================================================================================
  25. ;
  26. ;Declaración de variables
  27. ;
  28.         cblock 0x10
  29.  
  30.         ;RAM para demoras
  31. M1                                                              ;       Registros que carga los valores iniciales de demora                                                                    
  32. M2                             
  33. cont1                                                   ;       Contadores que se decrementan n la subrutina demora
  34. cont2                                                   ;hasta ser 0
  35. cont3                  
  36.         ;RAM USB
  37. USB_Estado     
  38. USB_Estado1                                     ;       Byte de identificación del Estado del proceso de enumeración
  39. USBreset
  40. USBerror
  41. USBtrans
  42. USBrequest
  43. usb_address                                             ;       Auxiliar para establecer UADDR en un IN Token
  44. USBin
  45. USBout
  46. USBstall
  47. USBsof
  48. USBrecipiente
  49. auxUSTAT                                                ;       Byte para respaldar USTAT
  50. PID_byte                                                ;       Byte para los bits PID
  51.  
  52. n_ByteCount                                             ;       Número para el Byte Count IN
  53. USB_config
  54.  
  55. dato_h
  56. dato_l
  57.  
  58. datoEP1L
  59. datoEP1H
  60.  
  61. index_ini
  62. index_end
  63.  
  64.         ;Endpoits
  65. ep00                                                    ;       Bytes de lectura del Endpoint 0 out
  66. ep01
  67. ep02
  68. ep03
  69. ep04
  70. ep05
  71. ep06
  72. ep07
  73.         ;Buffer Descriptors
  74. bd00                                                    ;       Bytes de lectura de los Buffer Descriptors 0 In/Out
  75. bd01
  76. bd02
  77. bd03
  78.         ;RAM para banderas     
  79. bandera
  80. flag
  81.        
  82.         endc
  83.  
  84.  
  85. ;Declaración de bits
  86.  
  87.  
  88. ;Bits del registro "bandera"
  89.  
  90.  
  91. ;Bits del registro "flag"
  92.  
  93.  
  94. ;=================================================================================================
  95. ;
  96. ;Descriptores
  97. ;
  98.         ;Device Descriptors
  99.         org 0x1100
  100.        
  101.         data 0x12,0x01,0x00,0x02,0x00,0x00,0x00,0x40,0x34,0x12,0x01,0x00,0x01,0x00,0x01,0x02        ;0-30
  102.         data 0x00,0x01
  103.  
  104.         ;Configuration Descriptors
  105.         org 0x1200
  106.  
  107.         data 0x09,0x02,0x29,0x00,0x01,0x01,0x00,0xC0,0x32,0x09,0x04,0x00,0x00,0x01,0x03,0x00   
  108.         data 0x00,0x00,0x09,0x21,0x01,0x01,0x00,0x01,0x22,0x2F,0x00,0x07,0x05,0x81,0x03,0x02    ;32-62
  109.         data 0x00,0x01,0x07,0x05,0x01,0x03,0x02,0x00,0x01                                                                               ;64-94 
  110.  
  111.         ;String Descriptors
  112.         org 0x1300
  113.  
  114.         data 0x04,0x03,0x09,0x04,0x20,0x03,'U',0x00,'D',0x00,'A',0x00,' ',0x00,'E',0x00                         ;0-30
  115.         data 'l',0x00,'e',0x00,'c',0x00,'t',0x00,'r',0x00,'o',0x00,'n',0x00,'i',0x00                            ;32-62
  116.         data 'c',0x00,'a',0x00,' ',0x00,' ',0x00,' ',0x00,' ',0x00,' ',0x00,' ',0x00                            ;64-94
  117.         data ' ',0x00,' ',0x00,' ',0x00,' ',0x00,0x10,0x03,'U',0x00,'S',0x00,'B',0x00                           ;96-126
  118.         data ' ',0x00,'D',0x00,'A',0x00,'Q',0x00,' ',0x00,' ',0x00,' ',0x00,' ',0x00                            ;128-158
  119.         data ' ',0x00,' ',0x00,' ',0x00,' ',0x00,' ',0x00,' ',0x00,' ',0x00,' ',0x00                            ;160-190
  120.         data ' ',0x00,' ',0x00,' ',0x00,' ',0x00,' ',0x00                                                                                       ;192-222
  121.  
  122.         ;Report Descriptors
  123.         org 0x1400
  124.  
  125.         data 0x06,0x00,0XFF,0X09,0X01,0XA1,0X01,0X19,0X01,0X29,0X01,0X15,0X00,0X26,0XFF,0X00
  126.         data 0X75,0X08,0X95,0X02,0X81,0X00,0X19,0X01,0X29,0X01,0X75,0X08,0X95,0X02,0X91,0X00
  127.         data 0XC0
  128.                                                                                                                                                                                                
  129. ;=================================================================================================
  130. ;
  131. ;Vectores
  132.         org 0X00
  133.         goto ini
  134.         org 0x18
  135.         goto interrupt
  136. ;===================================================================================================
  137. ;
  138. ;Subrutinas
  139. ;
  140. ;_______________________________________________________________________________        .·.·SUBRUTINAS DE DEMORAS.·.·
  141. ;
  142. ;MANEJO DE TABLA
  143.  
  144. enviar_paquete
  145.  
  146.                 movlw 0x05
  147.                 movwf FSR0L
  148.                 movf n_ByteCount,w
  149.                 movwf INDF0
  150.  
  151.                 movf index_ini,w
  152.                 movwf TBLPTRL           ;Primer Descriptor
  153.                 movf n_ByteCount,w
  154.                 mullw 2
  155.                 movf PRODL,w
  156.                 movwf index_end
  157.  
  158.                 movlw 0x05     
  159.                 movwf FSR1H
  160.                 movlw 0x08
  161.                 movwf FSR1L
  162.  
  163. rd_char                                         ;fin de envio?
  164.                 movf TBLPTRL,w
  165.                 subwf index_end,w
  166.                 btfsc STATUS,Z
  167.                 goto send                       ;fin
  168.                                                         ;lee próximo
  169.                 call lee_mem           
  170.                 movf dato_h,w
  171.                 movwf POSTINC1
  172.                 goto rd_char
  173.  
  174. send
  175.                 movlw 0x04
  176.                 movwf FSR0H
  177.                 movlw 0x04
  178.                 movwf FSR0L
  179.                 movf INDF0,w
  180.                 xorlw 0x40
  181.                 movwf INDF0
  182.                 andlw 0x40
  183.                 iorlw 0x88
  184.                 movwf INDF0
  185.                 return
  186. volver
  187.                 bsf UEP0,EPSTALL
  188.                 return
  189.                
  190. sendEP1
  191.                 movlw 0x05
  192.                 movwf FSR1H
  193.                 movlw 0x4A
  194.                 movwf FSR1L
  195.  
  196.                 movf datoEP1L,w
  197.                 movwf POSTINC1                          ;datos
  198.                 movf datoEP1H,w
  199.                 movwf INDF1
  200.  
  201.                 movlw 0x04
  202.                 movwf FSR0H
  203.                 movlw 0x0D
  204.                 movwf FSR0L
  205.                 movlw 0x02                                      ;byte count
  206.                 movwf INDF0
  207.  
  208.                 movlw 0x04
  209.                 movwf FSR0H
  210.                 movlw 0x0C
  211.                 movwf FSR0L
  212.                
  213.                 movf INDF0,w                           
  214.                 xorlw 0x40
  215.                 movwf INDF0
  216.                 andlw 0x40                                      ;mandar el byte (tomando en cuenta la sincronizacion)
  217.                 iorlw 0x88
  218.                 movwf INDF0
  219.                 return
  220.  
  221. ;lee MEMORIA DE PROGRAMAS E INCREMENTA CURSOR  
  222. lee_mem                                         ;leer el dato
  223.                 TBLRD*+                         ; read into TABLAT and increment
  224.                 movf TABLAT,w           ; get data
  225.                 movwf dato_h
  226.                 TBLRD*+                         ; read into TABLAT and increment
  227.                 movf TABLAT,w           ; get data
  228.                 movwf dato_l
  229.                 return                 
  230. ;                                      
  231. ;inicia puntero de TABLA en la 0x1100
  232. ini_ptr1
  233.                 clrf TBLPTRU
  234.                 movlw 11
  235.                 movwf TBLPTRH
  236.                 clrf TBLPTRL
  237.                 return
  238. ;inicia puntero de TABLA en la 0x1200
  239. ini_ptr2
  240.                 clrf TBLPTRU
  241.                 movlw 12
  242.                 movwf TBLPTRH
  243.                 clrf TBLPTRL
  244.                 return
  245. ;inicia puntero de TABLA2 en la 0x1300
  246. ini_ptr3
  247.                 clrf TBLPTRU
  248.                 movlw 13
  249.                 movwf TBLPTRH
  250.                 clrf TBLPTRL
  251.                 return
  252. ;inicia puntero de TABLA2 en la 0x1400
  253. ini_ptr4
  254.                 clrf TBLPTRU
  255.                 movlw 14
  256.                 movwf TBLPTRH
  257.                 clrf TBLPTRL
  258.                 return
  259.  
  260.  
  261. ;DEMORA DE 47US...................·.
  262. dem_40us
  263.                 movlw d'8'
  264.                 movwf M1               
  265.                 movlw d'1'
  266.                 movwf M2               
  267.                 call demora    
  268.                 return
  269. ;DEMORA DE 1.64ms (1640 US)....·.
  270. dem_1640us
  271.                 movlw d'46'
  272.                 movwf M1               
  273.                 movlw d'1'
  274.                 movwf M2               
  275.                 call demora            
  276.                 return
  277. ;DEMORA DE 5.32 m...............·.
  278. dem_5ms
  279.                 movlw d'60'
  280.                 movwf M1               
  281.                 movlw d'5'
  282.                 movwf M2               
  283.                 call demora    
  284.                 return
  285. ;DEMORA DE 50ms..................·.
  286. dem_50ms
  287.                 movlw d'67'
  288.                 movwf M1               
  289.                 movlw d'14'
  290.                 movwf M2               
  291.                 call demora            
  292.                 return
  293. ;DEMORA DE 100ms.................·.
  294. dem_100ms
  295.                 movlw d'100'
  296.                 movwf M1               
  297.                 movlw d'15'
  298.                 movwf M2               
  299.                 call demora    
  300.                 return
  301. ;DEMORA DE 1s aprox..............·.
  302. dem_1s 
  303.                 movlw d'102'
  304.                 movwf M1               
  305.                 movlw d'128'
  306.                 movwf M2               
  307.                 call demora            
  308.                 return
  309. ; DEMORA  general·.·.·.·.·.·.·.·.·.·.·.·.·
  310. demora  ;return
  311.                 movf M1,w
  312.                 movwf cont1
  313.                 movwf cont2
  314.                 movf M2,w
  315.                 movwf cont3
  316. loop    decfsz cont1
  317.                 goto loop
  318.                 movf M1,w
  319.                 movwf cont1
  320.                 decfsz cont2
  321.                 goto loop      
  322.                 movf M1,w
  323.                 movwf cont2
  324.                 decfsz cont3
  325.                 goto loop
  326.                 return
  327. ;_______________________________________________________________________________        .·.·SUBRUTINAS EEPROM.·.·
  328. ;
  329. ;subrutina endpoints
  330. ;
  331. Ini_endpoint0
  332.         ;Endpoint0     
  333.                 bsf UEP0,EPHSHK                 ;       Handshaking para el endpoint 0 habilitado
  334.                 bcf UEP0,EPCONDIS               ;       SETUP habilitado
  335.                 bsf UEP0,EPOUTEN                ;       Habilitado como Out
  336.                 bsf UEP0,EPINEN                 ;       Habilitado como In
  337.  
  338.                 movlw 0x04
  339.                 movwf FSR0H
  340.                 movlw 0x01
  341.                 movwf FSR0L
  342.                
  343.                 movlw 0x08                              ;       BD0CNT OUT
  344.                 movwf POSTINC0
  345.  
  346.                 movlw 0x00                              ;       BD0ADRL OUT
  347.                 movwf POSTINC0
  348.  
  349.                 movlw 0x05                              ;       BD0ADRH OUT
  350.                 movwf POSTINC0
  351.  
  352.                 movlw 0x08                              ;       BD0STAT IN
  353.                 movwf POSTINC0
  354.  
  355.                 movlw d'64'                             ;       BD0CNT IN
  356.                 movwf POSTINC0
  357.  
  358.                 movlw 0x08                              ;       BD0ADRL IN
  359.                 movwf POSTINC0
  360.  
  361.                 movlw 0x05                              ;       BD0ADRH IN
  362.                 movwf INDF0
  363.                
  364.  
  365.                 movlw 0x04
  366.                 movwf FSR0H
  367.                 movlw 0x00
  368.                 movwf FSR0L
  369.                 movlw 0x88                              ;       BD0STAT OUT
  370.                 movwf INDF0
  371.  
  372.                 return
  373.  
  374. Ini_endpoint1
  375.         ;Endpoint1
  376.                 bsf UEP1,EPHSHK                 ;       Handshaking para el endpoint 1 habilitado
  377.                 bsf UEP1,EPCONDIS               ;       SETUP habilitados
  378.                 bsf UEP1,EPOUTEN                ;       Habilitado como Out
  379.                 bsf UEP1,EPINEN                 ;       Habilitado como IN
  380.  
  381.                 movlw 0x04
  382.                 movwf FSR0H
  383.                 movlw 0x09
  384.                 movwf FSR0L
  385.                 movlw 0x02                              ;       BD1CNT OUT
  386.                 movwf POSTINC0
  387.  
  388.                 movlw 0x48                              ;       BD1ADRL OUT
  389.                 movwf POSTINC0
  390.  
  391.                 movlw 0x05                              ;       BD1ADRH OUT
  392.                 movwf POSTINC0
  393.  
  394.                 movlw 0x00                              ;       BD1STAT IN
  395.                 movwf POSTINC0
  396.  
  397.                 movlw 0x02                              ;       BD1CNT IN
  398.                 movwf POSTINC0
  399.  
  400.                 movlw 0x4A                              ;       BD1ADRL IN
  401.                 movwf POSTINC0
  402.  
  403.                 movlw 0x05                              ;       BD1ADRH IN
  404.                 movwf INDF0
  405.  
  406.                 movlw 0x04
  407.                 movwf FSR0H
  408.                 movlw 0x08
  409.                 movwf FSR0L
  410.                 movlw 0xC8                              ;       BD1STAT OUT
  411.                 movwf POSTINC0
  412.  
  413.                 return
  414. ;===============================================================================================================
  415. ;
  416. ;Programa Principal
  417. ;
  418. ini    
  419.         ;Condiciones iniciales
  420.                 movlb 0                                 ;       BSR = 00
  421.                
  422.                 ;Puertos
  423.                 movlw b'01111111'
  424.                 movwf TRISB
  425.                 clrf LATB
  426.                 clrf PORTB
  427.                
  428.         movlw b'11111111'
  429.         movwf TRISA
  430.         movlw b'00000000'
  431.         movwf TRISC
  432.         movwf PORTC
  433.        
  434.                 movlw b'00001111'               ;       Puertos digitales
  435.                 movwf ADCON1
  436.                 movlw b'00000111'
  437.                 movwf CMCON    
  438.                 clrf CCP2CON
  439.  
  440.                 ;Variables
  441.                 clrf USB_Estado
  442.                 clrf USBreset
  443.                 clrf USBerror
  444.                 clrf USBtrans
  445.                 clrf USBin
  446.                 clrf USBout
  447.                 clrf USBstall
  448.                 clrf USBsof
  449.                 clrf dato_h
  450.                 clrf dato_l
  451.                 clrf USB_config
  452.  
  453.                 movlw 0x05
  454.                 movwf datoEP1L
  455.                 movlw 0x06
  456.                 movwf datoEP1H
  457.  
  458.                 ;banderas
  459.                 clrf flag                               ;       Registros de banderas
  460.                 clrf bandera                    ;       Todas las banderas comienzan en 0
  461.  
  462.                 ;USB
  463.  
  464.                         ; REGISTROS GENERALES
  465.                         ; configuracion
  466.                        
  467.                        
  468.                 ;10-bit A/D
  469.         clrf    ADCON0
  470.         movlw b'00001110'               ;referido
  471.         movwf ADCON1
  472.         movlw b'00100001'
  473.         movwf ADCON2
  474.         bcf ADCON2,7
  475.        
  476.         bcf ADCON0,7
  477.         bsf ADCON0,0            ;On
  478.         call dem_40us          
  479.                        
  480.                 ;PWM
  481.         movlw b'00111100'
  482.         movwf CCP1CON
  483.         ;Timer2
  484.         movlw b'01111011'                       ;8bit Prscaler-16 Postscaler-1 (formula= PR2·1us·Prescalr )(1ms)
  485.         movwf T2CON
  486.         movlw d'255'
  487.         movwf PR2                                       ;da un overflow cuando TMR2 es igual a este,asi se puede regular el tiempo con mas exctitud    
  488.         bsf T2CON,2                             ;tmr2 ON               
  489.                        
  490.                        
  491.                        
  492.                 clrf UCFG                               ;       Primero se configura este registro
  493.                 bcf UCFG,UTEYE                  ;       Eye pattern test deshabilitado
  494.                 bcf UCFG,UOEMON                 ;       Señal UO(negada) inactiva
  495.                 bsf UCFG,UPUEN                  ;       On chip pull-up resistors habilitados
  496.                 bcf UCFG,UTRDIS                 ;       On chip tranciver habilitado (por default)
  497.                 bsf UCFG,FSEN                   ;       Full Speed
  498.                 bcf UCFG,PPB1                   ;       Ping Pong Buffers desabilitados
  499.                 bcf UCFG,PPB0
  500.                         ; Int USB
  501.                 clrf UIE
  502.                 bsf UIE,SOFIF                   ;       Start of frame
  503.                 bsf UIE,STALLIF                 ;       STALL
  504.                 bsf UIE,TRNIF                   ;       Transacción completa
  505.                 bsf UIE,ACTVIF                  ;       Actividad
  506.                 bsf UIE,UERRIF                  ;       Error
  507.                 bsf UIE,URSTIF                  ;       Reset
  508.                 clrf UIR                                ;       Banderas
  509.  
  510.                         ; control
  511.                 clrf UCON
  512.                 bcf UCON,PKTDIS                 ;       Procesamiento de paquetes Token habilitado
  513.                 bsf UCON,USBEN                  ;       Modulo USB y circuiteria habilitado
  514.                 bcf UCON,SUSPND                 ;       Modo en suspension deshabilitado
  515.  
  516. ;               call Ini_endpoint
  517.  
  518.                 ;Interrupciones
  519.                 clrf INTCON
  520.                 bsf PIE2,5
  521.                 bcf PIR2,5
  522.                 bsf INTCON,6                    ;       Todos las interrupciones perifericas activadas
  523.                                                                 ;       GIE y USBEN se prenden al final de la configuración
  524.  
  525.                 movlw 0xff
  526.                 movwf CCPR1L
  527.                 call dem_1s
  528.                 call dem_1s
  529.                 call dem_1s
  530.                 movlw 0x00
  531.                 movwf CCPR1L           
  532.                 bsf PORTB,7
  533.                 call dem_1s
  534.                 bcf PORTB,7
  535.  
  536.                 bsf INTCON,7
  537.  
  538. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  539. inicio
  540.                 btfss PORTC,1
  541.                 goto inicio
  542.                 call dem_1s
  543.                 call sendEP1
  544.  
  545. principal
  546.  
  547.                 btfss bandera,0
  548.                 goto principal
  549.                 bcf bandera,0
  550.                
  551.                
  552.                 bcf INTCON,7
  553.                 bsf ADCON0,1
  554. loopA0
  555.                 btfsc ADCON0,1;         tiempo de conversion (96us)
  556.                 goto loopA0
  557.                 movff ADRESH,datoEP1H
  558.                 movff ADRESL,datoEP1L
  559.                 call sendEP1
  560.                 bsf INTCON,7
  561.                 ;Aqui hay que preguntar por el LED, si esta apagado, goto inicio
  562.                 goto principal
  563.                        
  564. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  565.  
  566. ;===============================================================================================================
  567. ;interrupciones
  568.  
  569. interrupt                                               ;       Atención a interrupción
  570.                 btfsc PIR2,5
  571.                 call interrupcionUSB
  572.                 bcf PIR2,5
  573.                 retfie
  574. ;===============================================================================================================
  575.  
  576. ;-----------------------------------------------------------------------
  577. ;Atención a Interrupción USB (1er nivel)
  578. ;-----------------------------------------------------------------------
  579.  
  580. interrupcionUSB
  581.         btfsc UIR,UERRIF
  582.                 goto subERROR
  583.         btfsc UIR,SOFIF
  584.                 goto subSOF
  585.         btfsc UIR,IDLEIF
  586.                 goto subIDLE
  587.         btfsc UIR,ACTVIF
  588.                 call subACTV
  589.         btfsc UIR,STALLIF
  590.                 goto subSTALL
  591.         btfsc UIR,URSTIF
  592.                 goto subRESET
  593.         btfsc UIR,TRNIF
  594.                 goto subTRANS
  595.         return
  596.  
  597. subERROR
  598.                 clrf UEIR
  599.                 bcf UIR,UERRIF
  600.                 return
  601.  
  602. subSOF
  603.                 bcf UIR,SOFIF
  604.                 return
  605.  
  606. subIDLE
  607.                 bcf UIR,IDLEIF
  608.                 bsf UCON,SUSPND
  609.                 return
  610.  
  611. subACTV
  612.                 bcf UIR,ACTVIF
  613.                 bcf UCON,SUSPND
  614.                 return
  615.  
  616. subSTALL
  617.                 bcf UIR,STALLIF
  618.                 return
  619.  
  620. subRESET
  621.                
  622.                 bcf UIR,TRNIF
  623.                 bcf UIR,TRNIF
  624.                 bcf UIR,TRNIF
  625.                 bcf UIR,TRNIF
  626.  
  627.                 call Ini_endpoint0
  628.  
  629.                 clrf UADDR
  630.                 clrf UIR
  631.                 clrf USB_config
  632.  
  633.                 bsf UEP0,EPHSHK                 ;       Handshaking para el endpoint 0 habilitado
  634.                 bcf UEP0,EPCONDIS               ;       SETUP habilitado
  635.                 bsf UEP0,EPOUTEN                ;       Habilitado como Out
  636.                 bsf UEP0,EPINEN                 ;       Habilitado como In
  637.  
  638.                 setf UEIE
  639.  
  640.                 clrf USB_Estado
  641.  
  642.                 return
  643.  
  644. subTRANS                                        ; HACER CON DIR y PID
  645.  
  646.                 btfsc USTAT,3
  647.                         goto TRANS_EP1
  648.                        
  649.                 movlw 0x04
  650.                 movwf FSR0H
  651.  
  652.                 btfsc USTAT,DIR
  653.                 movlw 0x04
  654.                 btfss USTAT,DIR
  655.                 movlw 0x00
  656.        
  657.                 movwf FSR0L
  658.  
  659.                 movf POSTINC0,w
  660.                 movwf bd00
  661.                 movf POSTINC0,w
  662.                 movwf bd01
  663.                 movf POSTINC0,w
  664.                 movwf bd02
  665.                 movf POSTINC0,w
  666.                 movwf bd03
  667.  
  668.                 movf USTAT,w
  669.                 movwf auxUSTAT
  670.  
  671.                 bcf UIR,TRNIF  
  672.                        
  673.                 movf bd00,w
  674.                 andlw b'00111100'
  675.                 movwf PID_byte
  676.  
  677.                 sublw b'00000100'
  678.                 btfsc STATUS,Z
  679.                 call OUT_Token
  680.  
  681.                 movf PID_byte,w
  682.                 sublw b'00110100'
  683.                 btfsc STATUS,Z
  684.                 call SETUP_Token
  685.  
  686.                 movf PID_byte,w
  687.                 sublw b'00100100'
  688.                 btfsc STATUS,Z
  689.                 call IN_Token
  690.  
  691.                 return
  692.  
  693. TRANS_EP1
  694.                 btfss USTAT,DIR
  695.                         call OUT_Token_EP1
  696.                 btfsc USTAT,DIR
  697.                         call IN_Token_EP1
  698.                 bcf UIR,TRNIF
  699.                 bcf UCON,PKTDIS
  700.                 return
  701.  
  702.  
  703. ;
  704. ;-----------------------------------------------------------------------
  705. ;Token (2do nivel)
  706. ;-----------------------------------------------------------------------
  707. IN_Token
  708.                 movf auxUSTAT,w
  709.                 andlw b'00011000'
  710.                 btfss STATUS,Z
  711.                 return
  712.  
  713.                 movf USB_Estado,w
  714.                 sublw 0x02
  715.                 btfsc STATUS,Z
  716.                 movff usb_address,UADDR
  717.  
  718.                 movf USB_Estado,w
  719.                 sublw 0x01
  720.                 btfsc STATUS,Z
  721.                 goto enviar_paquete
  722.                 bcf UCON,PKTDIS
  723.                 return
  724.                
  725.  
  726.                
  727. OUT_Token
  728.  
  729.                 movf auxUSTAT,w
  730.                 andlw b'01111000'
  731.                 btfss STATUS,Z
  732.                 return
  733.  
  734.                 movlw 0x04
  735.                 movwf FSR0H
  736.                 movlw 0x01
  737.                 movwf FSR0L
  738.                 movlw 0x08
  739.                 movwf INDF0                             ;       ByteCount=8 (en estado default)
  740.  
  741.                 movlw 0x00
  742.                 movwf FSR0L
  743.                 movlw 0x88
  744.                 movwf INDF0
  745.  
  746.                 movlw 0x05
  747.                 movwf FSR0L
  748.                 movlw 0x00
  749.                 movwf INDF0    
  750.  
  751.                 movlw 0x04
  752.                 movwf FSR0L
  753.                 movlw 0xC8
  754.                 movwf INDF0
  755.                 return
  756.                
  757.        
  758.  
  759. SETUP_Token                                             ;       Transaccion de control
  760.        
  761.                 movlw 0x05
  762.                 movwf FSR1H
  763.                 movlw 0x00
  764.                 movwf FSR1L
  765.  
  766.                 movf POSTINC1,w
  767.                 movwf ep00
  768.                 movf POSTINC1,w
  769.                 movwf ep01
  770.                 movf POSTINC1,w
  771.                 movwf ep02
  772.                 movf POSTINC1,w
  773.                 movwf ep03
  774.                 movf POSTINC1,w
  775.                 movwf ep04
  776.                 movf POSTINC1,w
  777.                 movwf ep05
  778.                 movf POSTINC1,w
  779.                 movwf ep06
  780.                 movf POSTINC1,w
  781.                 movwf ep07
  782.  
  783.                 movlw 0x04
  784.                 movwf FSR0H
  785.                 movlw 0x01
  786.                 movwf FSR0L
  787.                 movlw 0x08
  788.                 movwf INDF0                             ;       ByteCount=8 (en estado default)
  789.        
  790.                 movlw 0x04
  791.                 movwf FSR0L
  792.                 movlw 0x08
  793.                 movwf INDF0
  794.  
  795.                 movlw 0x00
  796.                 movwf FSR0L
  797.        
  798.                 movf ep00,w
  799.                 sublw 0x21
  800.                 btfss STATUS,Z
  801.                 movlw 0x88
  802.                 btfsc STATUS,Z
  803.                 movlw 0xC8
  804.  
  805.                 movwf INDF0                             ;       BDown=1 SIE
  806.  
  807.                 bcf UCON,PKTDIS
  808.                 clrf USB_Estado
  809.  
  810.                 movf ep00,w
  811.                 andlw 0x60
  812.                 movwf USBrequest
  813.                 btfsc STATUS,Z
  814.                 goto StandarRqeuest
  815.                 movf USBrequest,w
  816.                 sublw 0x20
  817.                 btfsc STATUS,Z
  818.                 goto ClassRqeuest
  819.                 movf USBrequest,w
  820.                 sublw 0x40
  821.                 btfsc STATUS,Z
  822.                 goto VendorRqeuest
  823.                 return
  824.  
  825. IN_Token_EP1
  826.                 bsf bandera,0
  827.                
  828.                 return
  829.                
  830.        
  831. OUT_Token_EP1
  832.                 bsf PORTC,0
  833.                 return
  834.  
  835. ;-----------------------------------------------------------------------
  836. ;Request (3er nivel)
  837. ;-----------------------------------------------------------------------       
  838.  
  839. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++STANDART
  840.  
  841. StandarRqeuest
  842.                 movf ep01,w
  843.                 sublw 0x00
  844.                 btfsc STATUS,Z
  845.                 goto GET_STATUS
  846.                 movf ep01,w
  847.                 sublw 0x01
  848.                 btfsc STATUS,Z
  849.                 goto CLEAR_FEATURE
  850.                 movf ep01,w
  851.                 sublw 0x03
  852.                 btfsc STATUS,Z
  853.                 goto SET_FEATURE
  854.                 movf ep01,w
  855.                 sublw 0x05
  856.                 btfsc STATUS,Z
  857.                 goto SET_ADDRESS
  858.                 movf ep01,w
  859.                 sublw 0x06
  860.                 btfsc STATUS,Z
  861.                 goto GET_DESCRIPTOR
  862.                 movf ep01,w
  863.                 sublw 0x07
  864.                 btfsc STATUS,Z
  865.                 goto SET_DESCRIPTOR
  866.                 movf ep01,w
  867.                 sublw 0x08
  868.                 btfsc STATUS,Z
  869.                 goto GET_CONFIGURATION
  870.                 movf ep01,w
  871.                 sublw 0x09
  872.                 btfsc STATUS,Z
  873.                 goto SET_CONFIGURATION
  874.                 movf ep01,w
  875.                 sublw 0x0A
  876.                 btfsc STATUS,Z
  877.                 goto GET_INTERFACE
  878.                 movf ep01,w
  879.                 sublw 0x0B
  880.                 btfsc STATUS,Z
  881.                 goto SET_INTERFACE
  882.                 movf ep01,w
  883.                 sublw 0x0C
  884.                 btfsc STATUS,Z
  885.                 goto SYNCH_FRAME
  886.                 bsf     UEP0,EPSTALL
  887.                 return
  888.  
  889. GET_STATUS
  890.                 movf ep00,w
  891.                 andlw 0x0F
  892.                 movwf USBrecipiente
  893.                 sublw 0x00
  894.                 btfsc STATUS,Z
  895.                 goto Recipiente_Device
  896.                 movwf USBrecipiente
  897.                 sublw 0x01
  898.                 btfsc STATUS,Z
  899.                 goto Recipiente_Interface
  900.                 movwf USBrecipiente
  901.                 sublw 0x02
  902.                 btfsc STATUS,Z
  903.                 goto Recipiente_Ebdpoint
  904.                 bsf UEP0,EPSTALL
  905.                 return
  906. Recipiente_Device
  907.                 movlw 0x05
  908.                 movwf FSR0L
  909.                 movlw 2
  910.                 movwf INDF0
  911.                 movlw 0x05     
  912.                 movwf FSR1H
  913.                 movlw 0x08
  914.                 movwf FSR1L
  915.                 movlw 0x01
  916.                 movwf POSTINC1
  917.                 movlw 0x00
  918.                 movwf INDF1
  919.                 call send
  920.                 return
  921. Recipiente_Interface
  922.                 movf USB_Estado,w
  923.                 sublw 0x03                      ;       Config_estate
  924.                 btfss STATUS,Z
  925.                 goto volver
  926.                 movlw 0x05
  927.                 movwf FSR0L
  928.                 movlw 2
  929.                 movwf INDF0
  930.                 movlw 0x05     
  931.                 movwf FSR1H
  932.                 movlw 0x08
  933.                 movwf FSR1L
  934.                 movlw 0x00
  935.                 movwf POSTINC1
  936.                 movlw 0x00
  937.                 movwf INDF1
  938.                 call send
  939.                 return
  940. Recipiente_Ebdpoint
  941.                 movf USB_Estado,w
  942.                 sublw 0x02                              ;       address state
  943.                 btfss STATUS,Z
  944.                 call config_state
  945.                 movf ep04,w
  946.                 andlw 0x0F
  947.                 btfss STATUS,Z
  948.                 goto volver
  949.                 movlw 0x08
  950.                 movwf FSR1L
  951.                 btfsc UEP0,EPSTALL
  952.                 movlw 0x01
  953.                 btfss UEP0,EPSTALL
  954.                 movlw 0x00
  955.                 movwf POSTINC1
  956.                 clrf INDF1
  957.                 movlw 0x05
  958.                 movwf FSR0L
  959.                 movlw 2
  960.                 movwf INDF0
  961.                 call send
  962.                 return
  963. config_state
  964.                 movf USB_Estado,w
  965.                 sublw 0x03
  966.                 btfss STATUS,Z
  967.                 goto volver
  968.                 return         
  969.  
  970. CLEAR_FEATURE
  971.                 return
  972.  
  973. SET_FEATURE
  974.                 return
  975.  
  976. SET_ADDRESS
  977.                 btfsc ep02,7
  978.                 bsf UEP0,EPSTALL
  979.                 btfsc ep02,7
  980.                 return
  981.  
  982.                 movlw 0x02
  983.                 movwf USB_Estado
  984.  
  985.                 movff ep02,usb_address
  986.                 movlw 0x04
  987.                 movwf FSR0H
  988.                 movlw 0x05
  989.                 movwf FSR0L
  990.                 movlw 0x00
  991.                 movwf INDF0
  992.                 movlw 0x04
  993.                 movwf FSR0L
  994.                 movlw 0xC8
  995.                 movwf INDF0
  996.                 return
  997.  
  998. GET_DESCRIPTOR
  999.                 movlw 0x01                                              ;Get descriptor
  1000.                 movwf USB_Estado
  1001.                 movf ep03,w
  1002.                 sublw 1
  1003.                 btfsc STATUS,Z
  1004.                 goto DeviceDescriptor
  1005.                 movf ep03,w
  1006.                 sublw 2
  1007.                 btfsc STATUS,Z
  1008.                 goto ConfigDescriptor
  1009.                 movf ep03,w
  1010.                 sublw 3
  1011.                 btfsc STATUS,Z
  1012.                 goto StringDescriptor
  1013.                 movf ep03,w
  1014.                 sublw 6
  1015.                 btfsc STATUS,Z
  1016.                 bsf     UEP0,EPSTALL
  1017.                 movf ep03,w
  1018.                 sublw 0x21
  1019.                 btfsc STATUS,Z
  1020.                 goto HIDDescriptor
  1021.                 movf ep03,w
  1022.                 sublw 0x22
  1023.                 btfsc STATUS,Z
  1024.                 goto ReportDescriptor
  1025.                 return
  1026.  
  1027. DeviceDescriptor
  1028.                 call ini_ptr1
  1029.                 clrf TBLPTRL
  1030.                 call lee_mem
  1031.                 movf dato_h,w
  1032.                 movwf n_ByteCount
  1033.                 clrf index_ini
  1034.                 movf ep07,w
  1035.                 sublw 0
  1036.                 btfss STATUS,Z
  1037.                 goto enviar_paquete
  1038.                 movf ep06,w
  1039.                 subwf n_ByteCount,w
  1040.                 btfsc STATUS,N
  1041.                 goto enviar_paquete
  1042.                 movff ep06,n_ByteCount
  1043.                 goto enviar_paquete
  1044.  
  1045. ConfigDescriptor
  1046.                 movf ep02,w
  1047.                 sublw 0
  1048.                 btfss STATUS,Z
  1049.                 bsf UEP0,EPSTALL
  1050.                 movf ep02,w
  1051.                 sublw 0
  1052.                 btfss STATUS,Z
  1053.                 return
  1054.  
  1055.                 call ini_ptr2
  1056.                 movlw d'4'
  1057.                 movwf TBLPTRL
  1058.                 call lee_mem
  1059.                 movf dato_h,w
  1060.                 movwf n_ByteCount
  1061.                
  1062.                 clrf index_ini
  1063.  
  1064.                 movf ep06,w
  1065.                 btfsc STATUS,Z
  1066.                 bsf UEP0,EPSTALL
  1067.                 movf ep06,w
  1068.                 sublw 0x09
  1069.                 btfsc STATUS,Z
  1070.                 movff ep06,n_ByteCount
  1071.                 bsf PORTB,7
  1072.                 goto enviar_paquete
  1073.                
  1074. StringDescriptor
  1075.                 call ini_ptr3
  1076.                
  1077.                 movf ep02,w
  1078.                 sublw 0
  1079.                 btfsc STATUS,Z
  1080.                 call string0
  1081.  
  1082.                 movf ep02,w
  1083.                 sublw 1
  1084.                 btfsc STATUS,Z
  1085.                 call string1
  1086.        
  1087.                 movf ep02,w
  1088.                 sublw 2
  1089.                 btfsc STATUS,Z
  1090.                 call string2
  1091.                
  1092.                 call lee_mem
  1093.                 movf dato_h,w
  1094.                 movwf n_ByteCount
  1095.                
  1096.                 bsf PORTC,1    
  1097.                 goto enviar_paquete
  1098.  
  1099. string0
  1100.  
  1101.                 movlw 0x00
  1102.                 movwf index_ini
  1103.                 movwf TBLPTRL
  1104.                 return
  1105.  
  1106. string1
  1107.                 movlw 0x08
  1108.                 movwf index_ini
  1109.                 movwf TBLPTRL
  1110.                 return
  1111.  
  1112. string2
  1113.                 movlw 0x70
  1114.                 movwf index_ini
  1115.                 movwf TBLPTRL
  1116.                 return
  1117. HIDDescriptor
  1118.                 movf ep02,w
  1119.                 sublw 0
  1120.                 btfss STATUS,Z
  1121.                 bsf UEP0,EPSTALL
  1122.                 movf ep02,w
  1123.                 sublw 0
  1124.                 btfss STATUS,Z
  1125.                 return
  1126.  
  1127.                 call ini_ptr2
  1128.                 movlw 9
  1129.                 movwf n_ByteCount
  1130.                
  1131.                 movlw d'32'
  1132.                 movwf index_ini
  1133.  
  1134.                 goto enviar_paquete
  1135.                 return
  1136.  
  1137. ReportDescriptor
  1138.                 movf ep02,w
  1139.                 sublw 0
  1140.                 btfss STATUS,Z
  1141.                 bsf UEP0,EPSTALL
  1142.                 movf ep02,w
  1143.                 sublw 0
  1144.                 btfss STATUS,Z
  1145.                 return
  1146.  
  1147.                 call ini_ptr3
  1148.                 movlw 0x29
  1149.                 movwf n_ByteCount
  1150.                
  1151.                 clrf index_ini
  1152.  
  1153.                 goto enviar_paquete
  1154.                 return
  1155.  
  1156. SET_DESCRIPTOR
  1157.                 return
  1158.  
  1159. GET_CONFIGURATION
  1160.                 movlw 0x05
  1161.                 movwf FSR0L
  1162.                 movlw 1
  1163.                 movwf INDF0
  1164.                 movlw 0x05     
  1165.                 movwf FSR1H
  1166.                 movlw 0x08
  1167.                 movwf FSR1L
  1168.                 movf USB_config,w
  1169.                 movwf INDF1
  1170.                 call send
  1171.                 return
  1172.  
  1173. SET_CONFIGURATION
  1174.                 movf ep02,w
  1175.                 sublw 0
  1176.                 btfsc STATUS,Z
  1177.                 goto set_config0
  1178.                 movf ep02,w
  1179.                 sublw 1
  1180.                 btfss STATUS,Z
  1181.                 return
  1182.                 movlw 0x03                                      ;Estado Configurado
  1183.                 movwf USB_Estado
  1184.                 call Ini_endpoint1
  1185.                 movlw 0x05
  1186.                 movwf FSR0L
  1187.                 movlw 0
  1188.                 movwf INDF0
  1189.                 call send
  1190.                 return
  1191. set_config0
  1192.                 movlw 0x02                                      ; Estado Adress
  1193.                 movwf USB_Estado
  1194.                 movlw 0x05
  1195.                 movwf FSR0L
  1196.                 movlw 0
  1197.                 movwf INDF0
  1198.                 call send
  1199.                 return 
  1200.  
  1201. GET_INTERFACE  
  1202.                
  1203.                 return
  1204.  
  1205. SET_INTERFACE  
  1206.                 return
  1207.  
  1208. SYNCH_FRAME
  1209.                 return
  1210. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++CLASS
  1211. ClassRqeuest
  1212.                 return
  1213. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++VENDOR
  1214. VendorRqeuest
  1215.                 return
  1216.  
  1217.         end


Pues bien, esta es la metodología, ahí está el código, cualquier pregunta me la hacen saber

Suerte.
La revolución no será  televisada . Estallara en banda ancha !

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)
« Respuesta #11 en: 04 de Mayo de 2012, 13:26:18 »
Mis mas sinceras felicitaciones   :-/ :-/ :-/ :-/

Ya lo he copiado, gracias por el codigo, vaya currada os habeis pegado

Desconectado stretchmame32

  • PIC10
  • *
  • Mensajes: 6
Re: comunicacion Pic PC USB en assembler para 18f4550 (Diario del autor)
« Respuesta #12 en: 05 de Diciembre de 2012, 03:39:41 »
concuerdo con norberto ha sido una gran labor y sinceramente te felicito yo en lo personal detesto los lenguajes de alto nivel por que los considero muy limitados y me niego rotundamente a programar un pic utilizando estos lenguajes, los pic son para programar en lenguaje ensamblador tardese lo que se tarde je je je