Instituto Tecnológicode Milpa Alta Lenguajes de Interfaz Alumnos: Bravo García Emmanuel. Puebla Valencia Jesús. Ramírez Gervacio Daniel. Velasco Velázquez Germán. Profesora: María Teresa De León Juárez. Unidad IV “Programación de Dispositivos” Ingeniería en Sistemas Computacionales (I.S.C. 62) Índice de Contenidos Introducción ...................................................................................................... 2 4.1 El búfer de video en modo texto ................................................................. 3 Ejemplo 1: ...................................................................................................... 4 4.2 Acceso a discos en el lenguaje ensamblador .......................................... 5 Ejemplo:......................................................................................................... 6 a) Rutina _AbsoluteRead: ............................................................................... 6 b) Rutina _AbsoluteWrite: ............................................................................... 7 c) Rutina _FreeDiskSpace .............................................................................. 8 4.3 Programación del puerto serial .............................................................. 10 Ejemplo:....................................................................................................... 11 4.4 Programación del puerto paralelo .......................................................... 14 Ejemplo:....................................................................................................... 14 Variantes .................................................................................................. 15 4.5 Programación hibrida ............................................................................ 17 Ejemplo:....................................................................................................... 17 4.6 Programación de puerto USB ................................................................ 19 Ejemplo:....................................................................................................... 20 Conclusiónes ......................................................¡Error! Marcador no definido. Bravo García Emmanuel ........................................................................... 22 Puebla Valencia Jesús .............................................................................. 22 Ramírez Gervacio Daniel ........................................................................... 22 Velasco Velázquez Germán ....................................................................... 22 Referencias ..................................................................................................... 23 1 básicamente el impedimento principal es el tipo de cable que se utiliza para interconectar los equipos. sin embargo esto no se cumple. Los puertos de comunicación de la PC son de particular interés para el estudioso de la electrónica ya que le permiten utilizar una computadora personal para controlar todo tipo circuitos electrónicos utilizados. en un esquema de transmisión de datos en paralelo un dispositivo envía datos a otro a una tasa de n número de bits a través de n número de cables a un tiempo. 2 . Existen dos métodos básicos para transmisión de datos en las computadoras modernas. principalmente. en actividades de automatización de procesos. Sería fácil pensar que un sistema en paralelo es n veces más rápido que un sistema enserie. En un esquema de transmisión de datos en serie un dispositivo envía datos a otro a razón de un bit a la vez a través de un cable. Por otro lado. mientras los datos se encuentran en el buffer los cuales se guardan para ser procesados. tareas repetitivas y otras actividades que demandan precisión. adquisición de datos.Introducción En el presente trabajo se desarrollan temas relacionados con lenguajes de interfaz en específico programación de dispositivos ejemplos de cada tipo de programación además de una clara explicación de que es un buffer que no es otro cosa que la ubicación de la memoria de un dispositivo digital. como memoria convencional. Los programas que acceder al buffer de pantalla mediante secuencias de control pueden perder la sincronización con la pantalla real.1. Mientras los datos están en el buffer.4. por lo que muchos programas en modo texto tienen un comando para «refrescar» toda la pantalla. El uso del modo texto se hizo popular a principios de los años 1970. Los programas que muestran salidas en una terminal remota deben enviar secuencias de control especiales para manipular el buffer de pantalla. Según el entorno. muchos juegos de caracteres usados en aplicaciones en modo texto también incluyen un conjunto limitado de caracteres semi gráficos predefinidos que pueden usarse para dibujar cajas u otros gráficos usados para destacar el contenido o simular widgets y controles como los presentes en las aplicaciones escritas para interfaces gráficas.1 El búfer de video en modo texto Buffer: Es la ubicación de la memoria de un dispositivo digital o una computadora que está reservada para el almacenamiento temporal de información. el buffer de pantalla puede ser directamente accesible. Figura 4. cuando los terminales de texto orientados a vídeo empezaron a reemplazar a los teletipos en el uso interactivo de las computadoras.1 Diagrama 3 . para los programas locales. a menudo asociado con la combinación de teclas Ctrl+L. aguardan para ser procesados. Los estándares más populares de dichas secuencias de control son ANSI y VT100. Las aplicaciones en modo texto se comunican con el usuario mediante líneas de comandos e interfaces textuales de usuario. 2 Texto Pixeles Un ejemplo de buffer tiene lugar cuando se intenta ejecutar aplicaciones de audio o video directamente desde Internet.Figura 4.columna Final en Dh. Esta práctica. Columna Inicial en Cl mov dx. 80h. 4 . requiere de la utilización de un buffer para reducir el riesgo de que se corte la reproducción ante problemas en el ancho de banda. 00h. el primer número es el color del fondo (el 8) y el segundo es el color del texto (el 0).Columna Final en Dl int 10h ret prepararPantalla endp para llamarlo debes hacerlo asi: call prepararPantalla En los atributos de color de fondo puedes ver un 80h. 06h.funcion de limpiar pantalla mov bh. 00h. Ejemplo 1: Abarcando los aspectos más importantes del modo de video: ENDP prepararPantalla proc near mov ah.columna inicial en Ch. 30a0h. sin descargarlas a la computadora.1.cantidad de Filas a Borrar Enrollar mov cx.Atributos de color de fondo mov al. conocida como streaming. fecha y hora de última actualización. En DOS. número tracks. • Archivos (área de datos): Es donde se guarda la información contenida en los archivos. extensión. este proceso es conocido como acceso directo a memoria. • Tabla de localización de archivos (FAT): En esta tabla se guarda una lista de los sectores ocupados por cada archivo contenido en el disco. 5 . Para el manejo de disco desde el sistema DOS. puesto que solo envía los comandos a la interfaz que maneja la unidad de disco y esta es la encargada de leer. acceso aleatorio. es decir mapea todos los sectores físicos de un disco en sectores lógicos. Además contiene un pequeño programa que se encargará de bajar el sistema operativo (boot del sistema). les transfiere el control para que aparezca el prompt del sistema. número de lados. tamaño. en este proceso no interviene el CPU.2 Acceso a discos en el lenguaje ensamblador El acceso a discos implica movimientos mecánicos además de que el acceso se da por sectores. y se con servicios de la misma interrupción. tal como número de sectores. Boot Strap: Lee el primer sector del disco (boot record) y le transfiere el control. donde se van a escribir los registros. no se sigue un orden establecido y se puede leer/escribir en cualquier registro. se utilizan los discos a los cuales se le haya aplicado el comando format.4. el cual realiza un formato a nivel de BIOS INT 13h. para trabajar con archivos se necesitan dos estructuras de datos: ¬ Un área de memoria para el DTA. en este caso se sigue un orden en la lectura/escritura de registros. atributos y un apuntador a su correspondiente en el FAT). Un archivo se puede acceder de dos formas: acceso secuencial. llamada DMA. etc. escribir información de un área especial de memoria. • Directorio: Se guarda información acerca de los archivos en el disco (nombre. Boot del sistema: Pasa a memoria los archivos del sistema operativo. Para el manejo de discos desde la BIOS se hace uso de la interrupción 13h. divide el disco en 4 áreas básicas de información: • Boot record: Contiene la información acerca del formato del disco. DTA DB 128 DUP (0). llamada DMA. salvar BP mov bp.Start:WORD. permitir acceso a los argumentos 6 . se enciende el bit de acarreo y AX contiene el código del error. Los datos se registran sobre la superficie del disco en una serie de circunferencias concéntricas llamadas pistas (track). así como la determinación del espacio libre disponible en un disco. debido a que el acceso a disco implica movimientos mecánicos además de que el acceso se da por sectores. En esta sección se presentan 3 rutinas que permiten lectura y escritura absoluta de sectores.NumSect:WORD. no se realiza byte a byte. Cada pista está dividida en porciones iguales llamadas sectores (unidad básica de almacenamiento en disco). este proceso es conocido como acceso directo a memoria.sp . Para leer o escribir en un disco. sino más bien en bloques de bytes. Varias pistas. a) Rutina _AbsoluteRead: Transfiere el contenido de uno o más sectores del disco al buffer especificado. En caso de error. una por cada cara del disco (generalmente 2). componen un Clúster. y depende de las características del disco. El tamaño de un sector se mide en bytes. en este proceso no intervienen el CPU.Un área para el bloque de control de archivos (FCB) en donde se guarda información importante para el acceso al archivo.Drive:BYTE= ArgLen push bp . Invocación: push <unidad de disco> push <número de sectores a leer> push <prime r sector a leer> push SEG <buffer> push OFFSET <buffer> call _AbsoluteRead PUBLIC _AbsoluteRead _AbsoluteRead PROC NEAR ARG Buffer:DWORD. Ejemplo: El sistema de almacenamiento en disco constituye el soporte externo de la información. puesto que solo envía los comandos a la interface que maneja la unidad de disco y ésta es la que se encarga de leer o escribir información de un área especial de memoria. accesando directamente a los sectores lógicos. permitir acceso a los argumentos push bx .push bx . salvar BP mov bp. lectura absoluta de disco mov cx. En caso de error.sp . recuperar registros pop dx pop cx pop bx pop bp ret ArgLen _AbsoluteRead ENDP b) Rutina _AbsoluteWrite: Transfiere el contenido del buffer especificado a uno o más sectores de disco.NumSect mov dx.Start:WORD.NumSect:WORD.Start lds bx.Buffer int 25h pop bx pop ds . Invocación: push <unidad de disco> push <número de sectores a escribir> push <primer sector a escribir> push SEG <buffer> push OFFSET <buffer> call _AbsoluteWrite PUBLIC _Absolut eWrite _AbsoluteWrite PROC NEAR ARG Buffer:DWORD. salvar registros push cx push dx push ds mov al.Drive:BYTE= ArgLen push bp .Drive . salvar registros push cx push dx push ds 7 . accesando directamente a los sectores lógicos. se enciende el bit de acarreo y AX contiene el código del error. DX:AX= bytes por cluster mov cx.Drive . se enciende el bit de accarreo. DX:AX= Kb por cluster mul bx 8 .36h . función 36h mov dl. recuperar registros pop dx pop cx pop bx pop bp ret ArgLen _AbsoluteWrite ENDP c) Rutina _FreeDiskSpace Devuelve en DX:AX el espacio libre en disco (en Kb).Start lds bx.Drive int 21h . En caso de error.NumSect mov dx. salvar registros push cx mov ah. CX= 1 Kb div cx . salvar BP mov bp.Buffer int 26h pop bx pop ds .1024 . permitir acceso a los argumentos push bx .mov al. del DOS mul cx . Invocación: push <unidad de disco> call _FreeDiskSpace PUBLIC _FreeDiskSpace _FreeDiskSpace PROC NEAR ARG Drive:BYTE= ArgLen push bp . escritura absoluta a disco mov cx.sp . recuperar registros pop bx pop bp ret ArgLen _FreeDiskSpace Figura 4.1 Periféricos E/S 9 . DX:AX= Kb libres en el disco pop cx .2.. 4. Este último problema surge también si se decide hacer un controlador específico para una tarea específica. colocando en el registro AL los valores equivalentes a los parámetros. En todos los casos.RTS. el registro DX debe contener el número del puerto serie.1 puertos seriales 10 . Aunque esto implica dos inconvenientes: la necesidad de que el código corra con privilegios de supe usuario. como se puede observar en la figura 2.3. Figura 4. bastará con utilizar el servicio 00 de la interrupción. Servicio 00 01 02 03 Descripción Inicializar puerto serie Enviar un dato Recibir un dato Obtener el estado del puerto Servicios para el puerto serial disponibles a través de la interrupción 14H.CTS y RI resulta muy importante como primer solución para el programador el acceso directo a los puertos de entrada y salida. a las señales de control del puerto serie. el acceso a el bajo nivel. y se seleccionan a través del registro AH. La tabla muestra los valores que debe contener el registro AH para invocar cada uno de los servicios. en concreto DCD. Con éste método es posible obtener frecuencias de transmisión que van desde los 110 hasta los 9600 baudios. leer. cada una de estas cuatro opciones es un servicio de la interrupción. En lenguaje ensamblador. Para configurar o inicializar el puerto serie. escribir o simplemente para conocer el estado del puerto. el hecho de necesitar conocer con precisión como esta implementado el dispositivo físico.DSR. COM1 se especifica como 00h.DTR. Comunicación serial en lenguaje ensamblador. programadores de micro controladores (por ejemplo para el PIC). se puede acudir a la interrupción 14H de la ROM -BIOS para configurar. el primero de ellos.3 Programación del puerto serial Cuando se pretende realizar aplicaciones tales como programas de terminal. Ejemplos de este tipo de comunicación son: • I2C • ONE WIRE • SPI En la comunicación serial asíncrona.Portopen = true • Definir el tamaño del buffer receptor. no son necesarios los pulsos de reloj. La siguiente figura muestra la estructura de una carácter que se trasmite en forma serial asíncrono. La duración de cada bit está determinada por la velocidad con la cual se realiza la transferencia de datos. esto se hace utilizando la siguiente instrucción: MSComm1.En la comunicación serial sincronía además de una línea sobre la cual se transmitirán los datos se necesita de una línea la cual contendrá los pulsos de reloj que indicaran cuando un datos es válido. Ejemplo: Pasos para poder enviar datos a través del Puerto Serial: • Insertar el control MS Comm sobre la forma: • Establecer las siguientes propiedades: ComPort: Settings: Handshaking: • Abrir el puerto. esto se hace con la propiedad InputLen 11 . para después volverlo a abrir el puerto con una aplicación en Visual Basic. entonces se debe cerrar esa aplicación. si este ya está abierto por otra aplicación.La Existen dos tipos de comunicaciones seriales: la síncrona y asíncrona . 2.PortOpen = True End With Command1. Seleccione del menú Project . este en la barra de herramientas 3.Caption = "Send &Xon" End Sub Private Sub Command1_Click() MSComm1.Caption = "&Send Xoff" Command2.PortOpen = False 12 .Settings = "9600.Handshaking = 2 .1" .comRTS .InputLen = 1024 • Enviar los datos que se desean • Cuando la aplicación se termine se debe cerrar el puerto.Output = "987654321" & Chr$(Xon) End Sub Private Sub Form_Unload(Cancel As Integer) MSComm1. Agregue el siguiente código a sus respetivos controles: Option Explicit Const Xon = &H11 Const Xoff = &H13 Private Sub Form_Load() Form1.n. Agregue 2 controles Command Buttons a la forma. Cree un Nuevo proyecto Form1 (es creado por default). Agregue el control MSCOMM a la forma.verifique que el control MicrosoftComm.8.RThreshold = 1 .SThreshold = 1 .RTSEnable = True .MSComm1.Caption = "Primera aplicación con el Puerto Serial” With MSComm1 . 4. Aplicación #1 1.Output = "123456789" & Chr$(Xoff) End Sub Private Sub Command2_Click() MSComm1. UART.'CL/RF').%Se configura que el dato es de 8 bits set(PS.'DataBit'.'Timeout'.'Terminator'.Dispositivo Digital Programable.%Se configura el bit de paro set(PS.%"c" carácter con que se finaliza el envío set(PS.'Baudrate'. clc. Para escribir el dato en el puerto serial se ocupa la siguente instrucción: Fwrite (PS.'uint8').%Se configura la velocidad a 9600 bps set(PS.'Parity'.variable.End Sub clearall.% 5 Segundos de tiempo de espera. 13 .'InputBufferSize'.1). Finalmente.Decodifica serial a paralelo.. Delete (PS).'uint16')..%"n" es el número de bytes a recibir set(PS. PS = serial('COM1') set(PS.'StopBits'.%"n" es el número de bytes a enviar set(PS. DSP .9600). closeall. fopen(PS) Para leer los datos del puerto serial se debe poner la instrucción: variable = fread(PS.'none').1.1). Clear PS.1).'OutputBufferSize'.5). unca vez que lees del puerto o escribes en él se debe de cerrar a través de lasinstrucciones Close (PS).8).%Se configura la paridad set(PS. para leerla como números enteros. LED's. un número entre 0 y 9.lleva al registro AL. bien sea como fuente (en operaciones de escritura) o destino (en operaciones de lectura) del dato. como en los siguientes casos: out DX. Como verán la utilización del puerto paralelo en lenguaje ensamblador es muy sencilla.DX . vamos a prender el led con el brillo correspondiente.available(). en cuyo caso la instrucción que lee o escribe puede señalar directamente el puerto.lleva al puerto DX el contenido del registro AL in AL. El mismo posee un bus de datos de 8 bits (Pin 2 a 9) y muchas señales de control. para saber si hay información disponible en el buffer de entrada. etc. Para recibir y procesar la información enviada desde la computadora. exigencia. Para hacer esto lo hacemos desde la ventana que el monitor serial tiene para esto. el contenido del puerto DX Otra. En lenguaje ensamblador. Ejemplo: En este proyecto vamos a enviar la información al arduino usando el monitor serial. se puede leer un dato del puerto mediante la instrucción IN o escribir un dato en el puerto con la instrucción OUT. a excepción de los casos en los cuales el número del puerto es inferior a 255 (FFh). Y despues. la función Serial.parseInt(). AL .4. en ambos casos el registro AL debe participar activamente en la instrucción. 14 . Tendremos que usar la función map() para convertir estos valores a valores usados para las salidas analógicas con PWM.4 Programación del puerto paralelo El puerto paralelo de una PC es ideal para ser usado como herramienta de control de motores.Las PC's generalmente poseen solo uno de estos puertos (LPT1) pero se le puede adicionar una tarjeta con un segundo puerto paralelo (LPT2). valores entre 0 y 255. Con la información recibida. es que el número del puerto sobre el que se va a realizar la transferencia de datos debe estar señalado por le registro DX. Primero la función Serial. algunas de salida y otras de entrada que también pueden ser usadas fácilmente. vamos a utilizar dos de las funciones de la biblioteca Serial. en caso de que esta información esté disponible. /* En este proyecto cambiamos la instensidad de un led dependiendo de un dato enviado con el monitor serial y recibido por el serial del Arduino */ const int pinLed = 9. // el pin con el led.parseInt(). // limitamos el valor entre 0 y 255 brillo = constrain(brillo. // inicializa el pinLed de salida pinMode(pinLed. 0. 255). tienen que ser con pwm int brillo. brillo).begin(9600). /* En este proyecto cambiamos la instensidad de un led dependiendo de un dato enviado con el monitor serial y recibido por el serial del Arduino */ 15 . // una constante para guardar el valor del dato enviado void setup() { // inicializa la comunicacion serial Serial. 0. // mapea el valor de entrada a un valor entre 0 y 255 brillo = map(brillo. } } Variantes ¿Qué pasa si se envian caracteres distintos a un número entre 0 y 9? Podemos agregar un mensaje de error. lo lee. debe ser un valor entre 0 y 9): brillo = Serial. OUTPUT). 9.println(brillo). // envia por el serial el valor convertido a un valor entre 0 y 255 Serial. 0. // enciende el led con un valor entre 0 y 255 analogWrite(pinLed. 255).available()) { // si es asi. } void loop() { // checa si la computadora ha enviado un dato if (Serial.println("Envia un numero entre 0 y 9"). // envia un mensaje con las instrucciones Serial. const int pinLed = 9.println("Envia un numero entre 0 y 9").begin(9600). lo lee. // el pin con el led. // enciende el led con un valor entre 0 y 255 analogWrite(pinLed. // envia un mensaje con las instrucciones Serial. } } } 16 . } else { Serial.available()) { // si es asi. OUTPUT). 9. brillo). // y lo mapeamos a un valor entre 0 y 255 brillo = map(brillo. // inicializa el pinLed de salida pinMode(pinLed.println(brillo). // checamos si es un valor entre 0 y 9 if (dato >= '0' && dato <= '9' ) { // si lo es lo convertimos a un entero entre 0 y 9 int brillo = dato .'0'. 255).read(). } void loop() { // checa si la computadora ha enviado un dato if (Serial. // devuelve el valor convertido a un valor entre 0 y 255 Serial. 0. 0. tienen que ser con pwm void setup() { // inicializa la comunicacion serial Serial.println("Debes enviar un numero entre 0 y 9"). y lo guarda en una variable de tipo caracter): char dato = Serial. La programación híbrida proporciona un mecanismo por medio del cual podemos aprovechar las ventajas del lenguaje ensamblador y los lenguajes de alto nivel. Assembler. Assembler.5 Programación hibrida La programación hibrida es utilizada en los casos en donde el código en ensamblador dificulta la estructuración del programa.184Fh Int 10h End.0000h Mov DX. La programación híbrida proporciona un mecanismo por medio del cual podemos aprovechar las ventajas del lenguaje ensamblador y los lenguajes de alto nivel. todo esto con el fin escribir programas más rápidos y eficientes. lo que es lo mismo a la función ClrScr en pascal.Este procedimiento imprime el carácter en la pantalla Procedure Imprime_Car(C: Char). 17 .Este procedimiento limpia la pantalla y pone blanco sobre azul Procedure Limpia_Pantalla. está escrito en ensamblador dentro de una función en pascal. Asm Mov AX. . Ventajas de la Programación Híbrida • Para mejorar la escalabilidad • Cuando muchas tareas producen desbalanceo • Aplicaciones que combinan paralelismo de grano grueso y fino • Reducción del tiempo de desarrollo de código • Cuando el número de procesos MPI es fijo • En caso de mezcla de paralelismo funcional y de datos Ejemplo: La red es el siguiente donde utilizamos código en ensamblador y código pascal. La compilación hibrida es utilizada en lo que es conocida como programación hibrida (válgase la redundancia).j : integer. Var Car: Char.4. i. El siguiente código sirve para limpiar pantalla.17h Mov CX. La programación hibrida es utilizada en los casos en donde el código en ensamblador dificulta la estructuración del programa. todo esto con el fin escribir programas más rápidos y eficientes.0600h Mov Bh. . Uses Crt. Imprime_Car(Car). Write(‘Presiona enter para salir u otro para seguir…’).0).02h Mov Bh. Repeat Limpia_Pantalla.Asm Mov Ah. 18 . Readln. Cursor_XY(30. Cursor_XY(0.Y: Byte). End.C Int 21h End. If car #13 then Begin For i:=0 to 24 do For j:=0 to 79 do Cursor_XY(j. Until car = #13. .02h Mov Dl.00h Mov Dh.Este procedimiento tiene la misma función que el procedimiento Goto XY de Turbo Pascal Procedure Cursor_XY(X.24). Limpia_Pantalla. Write(‘Introduce un carácter: ‘). Imprime_Car(Car). Car:=Read Key. End.X Int 10h End. Assembler. Asm Mov Ah. Begin Limpia_Pantalla.i).Y Mov Dl. Para usos en aplicaciones que requieran mayores velocidades de transferencia de información los cuales no fueron objeto de investigación en este trabajo. desconectar y reconocer dispositivos sin necesidad de reiniciar o apagar la computadora. mientras que la versión USB 3 cuenta con un medio Dúplex que permite enviar o recibir datos de manera simultánea. porque se satura la línea del puerto y se ralentiza el sistema al tener que administrarse todos simultáneamente. •También incluye internamente otros puertos nombrados PCI etc. aun no hay dispositivos comerciales/populares para esta tecnología. Nos concentramos específicamente en el puerto USB. esto es solamente se envía o recibe datos en un sentido a la vez. •Cuenta con tecnología “Plug-Play” la cual permite conectar. • Las versiones USB 1. junto con el lanzamiento del microprocesador Intel2 Pentium II en 1997 •Cada puerto. Características del puerto USB La versión USB.0 transmiten en un medio unidireccional los datos. permite conectar hasta 127 dispositivos externos. recibir información de la misma o hacer ambas cosas. •A pesar de que el puerto USB 3.4.X y USB 2. está actualmente integrado ya en algunas placas de nueva Generación.6 Programación de puerto USB •USB viene de frase en Ingles “Universal Serial Bus” que se utiliza para describir un tipo de puerto en la computadora personal en donde se conectan distintos periféricos tales como máquinas de imprimir. La computadora personal moderna tiene dos puertos típicos de conexión a) El puerto USB descrito anteriormente b) El puerto Ethernet usado para conectar la computadora personal a la Internet. pero solo se recomiendan como máximo 8. 19 .0 1 parece en el mercado. • Un puerto es una localización en la computadora en donde conectamos los periféricos "estos pueden enviar información a la computadora. teclados de computadoras e inanidad de productos de uso generalizado. cámaras fotográficas. include "MOUSDESC.asm) Hay tres lineas de codigo ahí.. USB descriptors for CDC demo Paso 3 Copie este código y guárdelo en la carpeta c:\cdcdemo y compilelo..1 prog_puerto_USB Ejemplo: USB con ASSEMBLER PASO 1 Usaremos MPASM en la version 4..ASM" ..6. Code: DEFINE OSC 48 Buffer VAR BYTE[16] Cnt VAR BYTE B0 VAR BYTE B1 VAR BYTE ADCON1 = 15 CMCON = 7 Cnt = 16 USBInit ' Set all I/Os to Digital ' Disable Comparators ' Initialize USART 20 . en nuestro caso c:\cdcdemo. PASO 2.. USB descriptores for mouse demo . Abra el archivo de descriptores USB (llamado USBDESC.* y lo copiaremos a donde queremos trabajar. .Figura 4. para que CDCDESC. cambie .ASM pueda usarse.ASM" include "CDCDESC..ASM" include "PACHDESC..Y tomaremos de la carpeta c:\pbp\usb18\*..7. Code: . USB descriptors for Francisco González's demo .. Buffer. PBP toma los archivos USB18 en la carpeta cdcdemo para generar el correspondiente .B1 BUFFER(B0) = B1 NEXT B0 ' Main Program Loop Loop: USBService ' Must service USB regularly USBOut 3. cnt... Abra Hyperteminal y seleccione el componente virtual que usted instaló. buffer. asi tendrá mas rapidez de maquina. asi que instale el Microchip CDC driver. cnt.. usted verá USB CONNECTED! repeditas veces. ¿Y como envío y recibo los datos? Programe este código en su PIC Code: buffer Var Byte[16] cnt Var Byte LED Var PORTB.puede enviar datos del PIC al PC por Comunicación Serial. idleloop ' Message received Toggle LED outloop: USBService ' Must service USB regularly USBOut 3. loop goto loop end Cuando compila el programa de arriba. Windows detectará el dispositivo USB. Ya tiene su programa listo para usar y creado en assembler.10. FELICIDADES.0 Define OSC USBInit Low LED 48 ' LED off ' Wait for USB input idleloop: USBService ' Must service USB regularly cnt = 1 ' Specify input buffer size USBIn 3.["USB CONNECTED!". outloop Goto idleloop ' Wait for next buffer De nuevo abra Hyperterminal y el PIC hará ecos de vuelta de lo que escriba de vuelta (un byte a la vez). buffer. 21 .for b0 = 0 to 15 lookup b0. Bueno. Cnt.13].hex VOILA!!!!. STEP FOUR.. Velasco Velázquez Germán Creo que el lenguaje ensamblador a pesar de ser más rápido es eficaz a la hora de implementarlo claro que se debe saber del tema. hibrida o puerto USB es de gran ayuda para la comunicación entre el usuario y algún dispositivo lo hace de manera más fácil. 22 . serial. Pero existen ramas donde es necesario el uso de lenguaje ensamblador como lo es la electrónica donde los recursos de los aparatos son limitados y es necesario utilizar lenguaje ensamblador para su manipulación mediante los diferentes puertos y vistas de salida gráficas. Además de que el lenguaje de programación tiene un grado de complejidad. Puebla Valencia Jesús El lenguaje ensamblador a pesar de ser más rápido de cualquier otro lenguaje es también el más complejo por eso es utilizado para complementar los limitantes de los lenguajes de programación de alto nivel. se puede decir que como se tiene acceso a casi todo el hardware de la computadora vía interrupciones de software. la electrónica donde los recursos de los aparatos son limitados y es necesario utilizar lenguaje ensamblador. Ramírez Gervacio Daniel Se puede decir que este tipo de programación para dispositivos ya sea paralelo. pero que actualmente esta herramienta de programación nos da bastantes ventas como por ejemplo poder comunicar un robot por medio de instrucciones. tiene posibilidades que se puedan programar virus. programación en USB para la manipulación de Arduino y hasta para sistemas más complejos y poder manipularlos mediante la comunicación USB.Conclusiones Bravo García Emmanuel Con lo que hemos visto de todos estos tipos de programación. por ejemplo. mx/2005_09_01_archive.mx/proyectos/enviandoMonitorSerial http://www.com/USB+CON+ASSEMBLER http://hgr.goconqr.blogspot.lawebdelprogramador.academia.html http://www.com/puertos_ensamblador.html http://www.itpn.edu/9552859/La_programaci%C3%B3n_hibrida http://ensam1.mx/recursosisc/6semestre/lenguajesdeinterfaz/Unidad%20IV.wikispaces.pdf https://prezi.tripod.unam.com/fza8xd9uiku8/unidad-4-programacion-de-dispositivos/ 23 .com/foros/Ensamblador/1022270-Documentacion-PuertoUSB.Referencias https://www.matem.com/en/p/971362-unidad-4--programaci-n-de-dispositivos-mind_maps http://arduineando.html http://instrumentaciongz.