You are on page 1of 18

Unidad IV: Programacin de dispositivos.

4.1 El buffer de video en modo texto. Se llama modo texto a cualquier modo de vdeo de un ordenador en el que el contenido de la pantalla se representa internamente en trminos de caracteres textuales en lugar de pxeles individuales. Las aplicaciones en modo texto se comunican con el usuario mediante lneas de comandos (CLIs) e interfaces textuales de usuario (TUIs). Muchos juegos de caracteres usados en aplicaciones en modo texto tambin incluyen un conjunto limitado de caracteres semi-grficos predefinidos que pueden usarse para dibujar cajas y otros grficos rudimentarios usados para destacar el contenido o simular widgets u controles como los presentes en las aplicaciones escritas para interfaces grficas (GUIs). Las ventajas de los modos de texto respecto a los grficos incluyen el menor consumo de memoria y la ms rpida manipulacin de pantalla. Adems, las aplicaciones en modo texto tienen unos requisitos de ancho de banda relativamente bajos en uso remoto. Una desventaja obvia del modo texto es la restriccin del contenido de pantalla, que lo hace inviable para muchos tipos de aplicaciones. Una caracterstica importante de los programas en modo texto es que asumen un ancho constante de las fuentes, donde cada carcter tiene la misma anchura en pantalla, lo que permite mantener fcilmente la alineacin vertical cuando se muestran caracteres semi-grficos. Segn el entorno, el buffer de pantalla puede ser directamente accesible, como memoria convencional, para los programas locales. Los programas que muestran salidas en una terminal remota deben enviar secuencias de control especiales para manipular el buffer de pantalla. Los estndares ms populares de dichas secuencias de control son ANSI y VT100. Los programas que acceder al buffer de pantalla mediante secuencias de control pueden perder la sincronizacin con la pantalla real, por lo que muchos programas en modo texto tienen un comando para refrescar toda la pantalla, a menudo asociado con la combinacin de teclas Ctrl+L. La distincin entre los programas en modo texto y grfico puede a veces ser difusa, especialmente en ordenadores con tarjetas VGA, debido a que muchos programas en modo texto recientes llevaron al extremo las posibilidades de dicho hardware manipulando la controladora de vdeo. Por ejemplo, redefinan el juego de caracteres para crear caracteres semi-grficos a medida, e incluso simulaban un cursor de ratn grfico redefiniendo la apariencia de los caracteres sobre los que dicho cursor quedaba en cada momento. Tambin pueden usarse estas tcnicas para videojuegos 2D que necesiten aprovechar la mayor velocidad de manipulacin de los modos de texto respecto a los grficos. Muchos programas modernos con interfaz grfica simulan el estilo de los programas en modo texto, especialmente cuando es importante preservar la alineacin

vertical del texto, por ejemplo, durante la programacin. Existen tambin componentes software que emulan modos de texto, tales como los emuladores de terminal o la consola de Windows.

Bfer de vdeo. Fsicamente se encuentra ubicada en la tarjeta de vdeo, pero forma parte de la memoria RAM del PC, aunque su acceso es mucho ms lento que sta. Aqu se almacenan los datos que posteriormente sern visualizados en el monitor.

4.2 Acceso a discos en lenguaje ensamblador. 1. Qu es el acceso a dispositivos de almacenamiento? Un dispositivo de almacenamiento de acceso directo, es cualquier tipo de dispositivos de almacenamiento secundario que tiene un tiempo de acceso bajo en proporcin a su capacidad. Un disco es una superficie plana, magntica dividida en crculos concntricos a los cuales se les llama Tracks (pistas), adems de tener 2 lados, cabe mencionar que los primeros discos nicamente tenan 1 sola cara. Cada track est dividido en sectores, los cuales almacenan un determinado nmero de bytes. Las unidades de disco, son dispositivos capaces de leer o escribir en un disco para eso tiene una cabeza lectora quien realiza una operacin de moverse al track deseado (Seek Time), y luego espera por el sector seleccionado (Latency Time). 2. Cmo se hace el acceso a disco usando lenguaje ensamblador? Para leer o escribir en un disco, no se realiza byte a byte, sino ms bien en bloque de bytes, debido a que el acceso a disco implica movimientos mecnicos adems de que el acceso se da por sectores; en este proceso no intervienen el CPU, puesto que solo enva los comandos a la interface que maneja la unidad de disco y est es la que se encarga de leer o escribir informacin de un rea en especial de memoria, llamada DMA; en este proceso es conocido acceso directo a memoria.

Rutinas que permiten lectura y escritura absoluta de sectores, as como la determinacin del espacio libre disponible en un disco. Rutina_AbsolutedRead: Transfiere el contenido de uno o ms sectores del disco al buffer especificado, accesando directamente a los sectores lgicos. En caso de error, se enciende el bit de acarreo y AX contiene el cdigo del error.

Rutina_AbsoluteWrite: Transfiere el contenido del buffer especificado a uno o ms sectores de disco, accesando directamente a los sectores lgicos. En caso de error, se enciende el bit de acarreo y AX contiene el cdigo del error.

Rutina_FreeDiskSpace: Devuelven en DX:AX el espacio libre en disco (en Kb). En caso de error, se enciende el bit de acarreo.

4.3 Programacin del puerto serial. Un puerto serie o puerto serial es una interfaz de comunicaciones de datos digitales, frecuentemente utilizado por computadoras y perifricos, donde la informacin es transmitida bit a bit enviando un solo bit a la vez, en contraste con el puerto paralelo que enva varios bits simultneamente. El canal serie del PC es uno de los recursos ms comunes para la conexin de perifricos como pueden ser dispositivos de puntero (mouse) o de comunicacin (modem, cables de conexin entre PCs).

Configuracin del puerto serie Cada uno de los puertos COM tiene 7 registros a comentar: Registro base+0: tiene 3 funciones Transmitter Hlding Register (THR); Su funcin es la de transmitir un dato (palabra) por el Puerto. Reciver Data Register (RDR): Su funcin es la de recibir un dato (palabra) del puerto. Baud Rate Divisor Low (BRDL): Velocidad del canal, parte baja. Registro base+1: Tiene 2 funciones Baud Rate Divisor High (BRDH): Velocidad del canal, parte alta. Interrupt Enable Register (IER): Activar o desactivar las interrupciones para el puerto COM. Registro base+2: Interrupt ID Register (IIR): Controla la prioridad de las interrupciones. Registro Base+3: Line Control Register (LCR): Controla los parmetros de configuracin del canal serie (velocidad). Registro base+4: Modem Control Register (MCR): Activa las seales del MODEM. Registro base+5: Line Status Register (MSR): Muestra el estado del modem. Registro base+6: Modem Status Register (MSR): Muestra el estado del Modem. Debemos configurar correctamente el puerto serial antes de trabajar con l. Y para configurarlo hacemos lo siguiente: Primero configuramos el LCR, pero poniendo el bit DLAB a 1. Luego configuro el DRDL, seguidamente el BRDH y finalmente vuelvo a configurar el LCR con los mismos bits que antes, pero esta vez el bit DLAB a 0.

Explicacin de los registros LCR: Con este registro definimos (configuramos) los parmetros de la comunicacin serie. DLAB es el bit de ms peso y Num (1) el de menos peso. Num (1) y Num (2): Indica el nmero de bits de datos en cada palabra que vamos a utilizar. Se configura con la siguiente tabla.

Stop: Indica el nmero de bits de stop que enviar (o esperar) del puerto. Lo normal es poner un 0 en este bit para conseguir un bit de stop. Pero si ponemos un 1, el canal usar 1.5 bits de stop si el nmero de bits de la palabra (configurada en Num) es de 5. En caso de que sean ms de 5, se usaran 2 stop bits. Puede que en determinados momentos nos sea de utilidad, pero yo lo nico que veo es que enva 10 bits en lugar de 9, cosa que implica ms tiempo en l envi, as que siempre ponemos un 0 (1 stop bit). Paridad: Indica si hay paridad en la comunicacin serial. Con un 0 le diremos que nos queremos paridad, y con un 1 que s. La paridad es una manera de detectar errores, pero debemos programar nuestro programa para que lo detecte. As que de momento ponemos un 0. Tipo: Este bit nos indicar el tipo de paridad que vamos a usar. Con un 0 le indicaremos que vamos a mirar la paridad de modo impar, mientras que con 1 miraremos la paridad de modo par. Stick: Indica el nivel que usaremos para la paridad, si ponemos un 0, contaremos el nmero de 1 para la paridad. Y si ponemos un 1 contaremos el nmero de 0 para la paridad. Break: Fuerza un corte de la comunicacin. Si lo dejamos a 0 no pasar nada, pero si lo ponemos a i cortamos la comunicacin y forzamos la salida a 0. DLAB:Bit interno, de uso no es decisivo. Lo que hace es configurar una vez el puerto poniendo a 1 este bit, configurar la velocidad (los 2 registros) y luego volver a configurar el puerto poniendo un 0.

4.4 Programacin del puerto paralelo. El puerto paralelo de una PC es ideal para ser usado como herramienta de control de motores, LED's, etc. El mismo posee un bus de datos de 8 bits (Pin 2 a 9) y muchas seales de control, algunas de salida y otras de entrada que tambin pueden ser usadas fcilmente. Las PC's generalmente poseen solo uno de estos puertos (LPT1) pero se le puede adicionar una tarjeta con un segundo puerto paralelo (LPT2). En reglas generales la direccin hexadecimal del puerto LPT1 es igual a 0x378 (888 en decimal) y 0x278 (632 en decimal) para el LPT2. Esto se puede verificar fcilmente en el setup de la PC. Breve descripcin del puerto paralelo El puerto paralelo de un PC posee un conector de salida del tipo DB25 hembra cuyo diagrama y seales utilizadas podemos ver en la siguiente figura:

Si deseamos escribir un dato en el bus de salida de datos (pin 2 a 9) solo debemos escribir el byte correspondiente en la direccin hexadecimal 0X378 (888 en decimal) cuando trabajamos con el LPT1 y 0x278 (632 en decimal) cuando trabajamos con el LPT2. Los distintos pins (bits) de salida correspondientes al bus de datos no pueden ser escritos en forma independiente, por lo que siempre que se desee modificar uno se debern escribir los ocho bits nuevamente. Para leer el estado de los pins de entrada (10, 12, 13 y 15) se debe realizar una lectura a la direccin hexadecimal 0x379 (889 en decimal) si trabajamos con el LPT1 o bien leer la direccin 0x279 (633 en decimal) si trabajamos con el LPT2. La lectura ser

devuelta en un byte en donde el bit 6 corresponde al pin 10, el bit 5 corresponde al pin 12, el bit 4 corresponde al pin 13 y el bit 3 corresponde al pin 15.

Option Explicit Public Out_TTL As Byte 'contiene el BYTE a sacar por el puerto Public In_Port As Integer 'contine la direccin de lectura del LPT Public Out_Port As Integer 'contiene la direcc.para escribir al LPT Private Sub Form_Load() 'procedimiento inicial 'Configura la COMBOLIST cmbLptSelect cmbLptSelect.AddItem "0x378" cmbLptSelect.AddItem "0x278" cmbLptSelect.AddItem "0x3BC" 'Establece LPT1 como default cmbLptSelect.ListIndex = 0 SetLPTAddress 'estable direccion base del LTP Port_Reset 'reseteo salidas TTL End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Cancel = 1 'evita que se salga mediante la 'X' End Sub

Private Sub Form_Unload(Cancel As Integer) 'si sale del programa Port_Reset 'entonces reseteo salidas TTL End End Sub Private Sub cmdSalir_Click() 'si presiono SALIR, reseteo Port_Reset 'las salidas TTL y salgo del programa End End Sub Private Sub Port_Reset() 'procedimiento para resetear salidas TTL PortOut Out_Port, 0 End Sub Private Sub cmbLptSelect_Click() SetLPTAddress 'llamo rutina para determinarar la direccion 'base del nuevo LPT elegido End Sub Private Sub cmdHelpOnLpt_Click() frmHelpOnLpt.Show End Sub Private Sub SetLPTAddress() 'establece la direccion correpondiente 'al puerto seleccionado Select Case cmbLptSelect.ListIndex Case Is = 0 Out_Port = &H378 Case Is = 1 Out_Port = &H278 Case Is = 2 Out_Port = &H3BC End Select In_Port = Out_Port + 1 End Sub Private Sub Chkttl0_Click() 'invierto estado de TTL0 If chkTTL0.Value = 1 Then SetPortBit Out_Port, 0 chkTTL0.Caption = "Salida TTL0 = 1 - ALTO" Else ClrPortBit Out_Port, 0 chkTTL0.Caption = "Salida TTL0 = 0 - BAJO" End If End Sub

10

Private Sub Chkttl1_Click() 'invierto estado de TTL1 If chkTTL1.Value = 1 Then SetPortBit Out_Port, 1 chkTTL1.Caption = "Salida TTL1 = 1 - ALTO" Else ClrPortBit Out_Port, 1 chkTTL1.Caption = "Salida TTL1 = 0 - BAJO" End If End Sub

Private Sub Chkttl2_Click()

'invierto estado de TTL2

If chkTTL2.Value = 1 Then SetPortBit Out_Port, 2 chkTTL2.Caption = "Salida TTL2 = 1 - ALTO" Else ClrPortBit Out_Port, 2 chkTTL2.Caption = "Salida TTL2 = 0 - BAJO" End If End Sub Private Sub Chkttl3_Click() 'invierto estado de TTL3

If chkTTL3.Value = 1 Then SetPortBit Out_Port, 3 chkTTL3.Caption = "Salida TTL3 = 1 - ALTO" Else ClrPortBit Out_Port, 3 chkTTL3.Caption = "Salida TTL3 = 0 - BAJO" End If End Sub

Private Sub Chkttl4_Click()

'invierto estado de TTL4

If chkTTL4.Value = 1 Then SetPortBit Out_Port, 4 chkTTL4.Caption = "Salida TTL4 = 1 - ALTO" Else ClrPortBit Out_Port, 4

11

chkTTL4.Caption = "Salida TTL4 = 0 - BAJO" End If End Sub

Private Sub Chkttl5_Click()

'invierto estado de TTL5

If chkTTL5.Value = 1 Then SetPortBit Out_Port, 5 chkTTL5.Caption = "Salida TTL5 = 1 - ALTO" Else ClrPortBit Out_Port, 5 chkTTL5.Caption = "Salida TTL5 = 0 - BAJO" End If End Sub Private Sub Chkttl6_Click() 'invierto estado de TTL6

If chkTTL6.Value = 1 Then SetPortBit Out_Port, 6 chkTTL6.Caption = "Salida TTL6 = 1 - ALTO" Else ClrPortBit Out_Port, 6 chkTTL6.Caption = "Salida TTL6 = 0 - BAJO" End If End Sub Private Sub Chkttl7_Click() 'invierto estado de TTL7

If chkTTL7.Value = 1 Then SetPortBit Out_Port, 7 chkTTL7.Caption = "Salida TTL7 = 1 - ALTO" Else ClrPortBit Out_Port, 7 chkTTL7.Caption = "Salida TTL7 = 0 - BAJO" End If End Sub Private Sub Timer1_Timer() 'timer de 50ms para refrescar en Dim Lectura As Byte 'pantalla el estado de las

12

Dim Estado(3) As Byte 'entradas INPUT 0 a 3 Dim Estado_Str(3) As String Dim Bucle As Byte Lectura = PortIn(In_Port) 'leo el puerto de entrada

'filtro solo los bit's que necesito conocer Estado(0) = Lectura And &H8 '= 00001000 en Binario Estado(1) = Lectura And &H10 '= 00010000 en Binario Estado(2) = Lectura And &H20 '= 00100000 en Binario Estado(3) = Lectura And &H40 '= 01000000 en Binario For Bucle = 0 To 3 If Estado(Bucle) <> 0 Then Estado_Str(Bucle) = "1 - ALTO" Else Estado_Str(Bucle) = "0 - BAJO" End If Next Bucle lblInput0.Caption = "INPUT 0 = " & Estado_Str(0) lblInput1.Caption = "INPUT 1 = " & Estado_Str(1) lblInput2.Caption = "INPUT 2 = " & Estado_Str(2) lblInput3.Caption = "INPUT 3 = " & Estado_Str(3) End Sub

4.5 Programacin hbrida. Directivas para compilacin hbrida: La compilacin hibrida es utilizada en lo que es conocida como programacin hibrida (vlgase la redundancia). La programacin hibrida es utilizada en los casos en donde el cdigo en ensamblador dificulta la estructuracin del programa. La programacin hbrida 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 ms rpidos y eficientes. Ejemplo: la red es el siguiente donde utilizamos cdigo en ensamblador y cdigo pascal. El siguiente cdigo sirve para limpiar pantalla, est escrito en ensamblador dentro de una funcin en pascal, lo que es lo mismo a la funcin ClrScr en pascal.

13

En fin podemos mezclar el cdigo ensamblador con el cdigo de cualquier otro lenguaje que admita este procedimiento. En pascal antes de escribir el cdigo en ensamblador ay que poner Asm y al final de nuestro cdigo End. Operadores: Operadores Aritmticos: Pueden emplearse libremente (+), (-), (*) y (/). En este ltimo caso la divisin es siempre entera. Tambin se admiten los operadores MOD (resto de la divisin) y SHL/SHR (desplazar a la izquierda/derecha cierto nmero de bits). Operadores Lgicos: Pueden ser el AND, OR, XOR y NOT. Realizan las operaciones lgicas en las expresiones. Operadores relacionales: Devuelven condiciones de cierto (0FFFFh o 0FFh) o falso (0) evaluando una expresin. Pueden ser: EQ (igual), NE (no igual), LT (menor que), GT (mayor que), LE (menor o igual que), GE (mayor o igual que). Operadores de retorno de valores: Operador SEG: devuelve el valor del segmento de la variable o etiqueta, silo se puede emplear en programas de tipo EXE:

Operador OFFSET: devuelve el desplazamiento de la variable o etiqueta en su segmento:

14

Si se desea obtener el offset de una variable respecto al grupo (directiva GROUP) de segmentos en que est definida y no respecto al segmento concreto en que est definida:

Operador .TYPE: Devuelve el modo de la expresin indicada en un byte. El bit 0 indica modo relativo al cdigo y el 1 modo relativo a datos, si ambos bits estn inactivos significa modo absoluto. El bit 5 indica si la expresin es local (0 si est definida externamente o indefinida); el bit 7 indica si la expresin contiene una referencia externa. El TASM utiliza tambin el bit 3 para indicar algo que desconozco. Este operador es til sobre todo en las macros para determinar el tipo de los parmetros:

Operador TYPE: devuelve el tamao (bytes) de la variable indicada. No valido en variables DUP:

Operadores MASK y WIDTH: Informan de los campos de un registro de bits (base RECORD).

15

Operadores de Atributos: Operador PTR: redefine el atributo de tipo (BYTE, WORD, DWORD, QWORD, TBYTE) o el de distancia (NEAR o FAR) de un operando de memoria. Por ejemplo, si se tiene una tabla definida de la siguiente manera:

Para colocar en AL el primer byte de la misma, la instruccin MOV AL, tabla es incorrecta, ya que tabla (una cadena 10 palabras) no cabe en el registro AL. Lo que desea el programador es indicrselo en este caso explcitamente al ensamblador de la siguiente manera:

Trabajando con varios segmentos, PTR puede redefinir una etiqueta NEAR de uno de ellos para convertirla en FAR desde el otro, con objeto de poder llamarla. Operadores CS:, DS:, ES: y SS: El ensamblador genera un prefijo de un byte que indica al microprocesador el segmento que debe emplear para acceder a los datos en memoria. Por defecto, se supone DS para los registros BX, DI o SI (o sin registros de base o ndice) y SS para SP y BP. Si al acceder a un dato este no se encuentra en el segmento por defecto, el ensamblador aadir el byte adicional de manera automtica. Sin embargo, el programador puede forzar tambin esta circunstancia:

16

4.6 Programacin de puerto usb. Qu significa 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 perifricos tales como mquinas de imprimir, cmaras fotogrficas, teclados de computadoras e infinidad de productos de uso generalizado. Un puerto es una localizacin en la computadora en donde conectamos los perifricos. Estos pueden enviar informacin a la computadora, recibir informacin de la misma o hacer ambas cosas. La computadora personal moderna tiene dos puertos tpicos de conexin: a) El puerto USB descrito anteriormente b) El puerto Ethernet usado para conectar la computadora personal a la Internet Tambin incluye internamente otros puertos nombrados PCI etc. para usos en aplicaciones que requieran mayores velocidades de transferencia de informacin los cuales no fueron objeto de investigacin en este trabajo. Nos concentramos especficamente en el puerto USB.

17

Fuentes bibliogrficas:
http://arcaicospr.com/uploads/3/0/4/9/3049639/uso_del_puerto_usbuniversal_serial_bus_de_la_pc_nov_09_2 011.pdf http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r86275.PDF http://es.scribd.com/doc/44098211/programacion-hibrida

18

You might also like