Tema 4 Programación de dispositivos - SLVany/Lenguajes-de-Interfaz GitHub Wiki

La programación de dispositivos se refiere a la creación de software que permite interactuar con dispositivos electrónicos específicos, como sensores, actuadores, pantallas de visualización, entre otros. Se trata de una área especializada de la programación que requiere conocimientos técnicos específicos y habilidades especializadas para interactuar con las interfaces de estos dispositivos. Este tipo de programación puede involucrar el uso de lenguajes de programación específicos, herramientas y plataformas de desarrollo para dispositivos, así como la comprensión de las especificaciones y protocolos de comunicación que utilizan los dispositivos.

En otras palabras, la programación de dispositivos se enfoca en desarrollar software que permita aprovechar al máximo las capacidades de un dispositivo electrónico y que le dé funcionalidad de acuerdo a las necesidades del usuario o del negocio.

4.1 El Buffer de video en modo texto

image

Un buffer (o búfer en español) es un espacio de memoria dedicado al almacenamiento temporal de información, en el cual se guardan datos durante el tiempo de espera antes de ser procesados. El ejemplo más común de un buffer es el streaming, que es la ejecución de audio o video sin descargarlo a la computadora o dispositivo en el que se quiere utilizar, ya que de no utilizar un búfer de video la posibilidad de que se corte la reproducción por un problema en el ancho de banda es mayor.

El buffer de video en modo texto también permite una programación más sencilla de la presentación de texto en la pantalla y puede ser útil para la creación de interfaces amigables con el usuario.

4.2 Acceso a discos en lenguaje ensamblador

Acceder a los discos desde el lenguaje ensamblador puede ser complejo y requiere de una comprensión detallada de varios conceptos. Algunos de estos conceptos incluyen la programación de controladores de dispositivos, el acceso a bloques de disco y la gestión de interrupciones. En este tema, se pueden encontrar diversas estrategias y métodos para programar el acceso a discos en ensamblador, lo que puede ser útil en la creación de sistemas de archivos y otras aplicaciones que requieren acceso a discos en el nivel del sistema operativo. Este tema requiere que se entiendan varios conceptos para poder utilizarlo.

El primero es que para poder escribir o leer desde un disco, se tiene que realizar en bloques de bytes y no byte por byte ya que el acceso implica movimientos mecánicos del disco y que la información en él se almacena por sectores. El proceso de acceso a disco no es llevado a cabo por la UCP, ésta solo envía comandos a la interfaz que maneja la unidad de disco, la cual se encarga de leer o escribir información del área de acceso directo a memoria o DMA (Direct Memory Access), la cual es un espacio de memoria especial para estos procesos.

El segundo concepto importante es cómo está constituido un disco de almacenamiento. Los discos están conformados físicamente por discos a los que se les denomina caras, los cuales estan divididos en anillos concéntricos a los cuales se les denomina pistas (track) y está dividido en un numero determinado de sectores, los cuales son divisiones de las pistas,

image

A continuación hablare sobre 3 formas de utilizar el acceso a discos.

Para escritura tenemos el AbsoluteRead el cual transfiere el contenido de uno o mas sectores del disco al buffer especificado, accesando directamente a los sectores lógicos. En caso de error, se enciende el bit de acarreo y AX contiene el código de error.

image

En el caso del AbsoluteWrite pdoemos decir que transfiere el contenido del búfer especificado a uno o más sectores de disco, accesando directamente a los sectores lógicos. En caso de error, se enciende el bit de acarreo y AX contiene el código de error.

image

Por ultimo el FreeDiskSpace que devuelve en DX:AX el espacio libre en disco, expresado en Kilobytes. En caso de error, se enciende el bit de acarreo.

image

4.3 Programación del puerto serial

En lenguaje ensamblador se puede utilizar el puerto serial para el intercambio de datos, para lograrlo, se puede acudir a la interrupción 14H de la ROM-BIOS para configurar, leer, escribir o simplemente para conocer el estado del puerto; cada una de estas cuatro opciones es un servicio de la interrupción, y se seleccionan a través del registro AH

download

En todos los casos, el registro DX debe contener el número del puerto serie; el primero de ellos, COM1 se especifica como 00h.

Para configurar o inicializar el puerto serie, bastará con utilizar el servicio 00 de la interrupción, colocando en el registro AL los valores equivalentes a los parámetros. Con éste método es posible obtener frecuencias de transmisión que van desde los 110 hasta los 9600 baudios.

image image image image image

Para utilizar correctamente el puerto serial, es necesario conocer el significado de cada uno de sus bits,

image

En este ejemplo se utiliza el lenguaje ensamblador para configurar el puerto serial para 1200 baudios, sin bit de paridad, sin bit de parada y 8 bits, realizando el siguiente programa:

mov ah,0 → servicio 00 de INT 14h: inicializa el puerto

mov a1,83 → configuración: 1200 baudios, no paridad, sin bit de parada, 8 bits de datos

mov dx,00 → Selecciona el puerto COM1

int 14 → interrupción del BIOS

mov ah,4c → servicio 4ch de INT 21h: terminar

int 21 → interrupción servicio del DOS

4.4 Programación del puerto paralelo

Es necesario saber que antes de utilizarlo, que el puerto paralelo se compone de los siguientes tipos de pines: De estado:

Dan información al sistema al igual que el de control.

De datos:

Que son los más importantes, ya que por estos sale información crucial, la cual es la que se utiliza para mostrar las salidas de datos.

El puerto paralelo es una interfaz de hardware que permite la transferencia de datos en paralelo entre una computadora y dispositivos externos. La programación del puerto paralelo, específicamente en el contexto de la materia de lenguajes de interfaz, se refiere a la capacidad de controlar y comunicarse con dispositivos conectados a través de este puerto utilizando un lenguaje de programación.

El puerto paralelo más comúnmente utilizado en computadoras personales es el Puerto Paralelo Estándar de la Asociación de la Industria de la Computadora Electrónica (ECP, por sus siglas en inglés), también conocido como el puerto LPT (Line Print Terminal) o el puerto LPT1.

En la programación del puerto paralelo, se utilizan técnicas y comandos específicos para enviar y recibir datos desde y hacia dispositivos conectados al puerto. Esto implica el manejo de señales de control y datos utilizando pines específicos del puerto paralelo.

Es importante tener en cuenta que el puerto paralelo ha sido ampliamente reemplazado por interfaces más modernas, como los puertos USB, en la mayoría de las computadoras actuales. Sin embargo, el aprendizaje de la programación del puerto paralelo puede ser útil para comprender conceptos básicos de la comunicación de datos y la interacción con dispositivos de hardware.

4.5 Programación híbrida

La programación híbrida implica utilizar múltiples lenguajes de interfaz, como lenguajes de programación de bajo nivel y lenguajes de scripting, para desarrollar una aplicación que aproveche las ventajas de cada uno de ellos.

Por ejemplo, podría utilizarse un lenguaje de bajo nivel, como C o C++, para programar componentes críticos de rendimiento de una aplicación, como algoritmos de procesamiento intensivo o control de hardware. Estos lenguajes ofrecen un control directo sobre el hardware y un alto rendimiento.

Por otro lado, se pueden utilizar lenguajes de scripting, como Python o JavaScript, para desarrollar componentes de interfaz de usuario, manejo de eventos y lógica de la aplicación. Estos lenguajes de scripting ofrecen una sintaxis más fácil de usar y permiten un desarrollo rápido y flexible.

4.6 Programación de puerto usb

El Bus Universal en Serie o USB por sus siglas en inglés, es un bus estándar industrial que define los cables, conectores y protocolos utilizados en bus para conectar, comunicar y proveer de alimentación eléctrica a dispositivos y periféricos.

Fue creado por las empresas que buscaban unificar la forma de conectar periféricos a los equipos, y aunque su versión 1.0 se publicó en 1996, no fue sino hasta 1998 con la especificación 1.1 que se comenzó a utilizar de forma masiva.

La utilización del puerto USB en ensamblador es con los objetivos principales de reorientar la utilización de los periféricos para que tengan mejor rendimiento y utilizar al máximo sus capacidades, así como poder crear nuevos periféricos.