Make your own free website on Tripod.com
Control de los Puertos en Lenguaje Ensamblador
 

 
 
 
 
 
 
 
  
 
Comunicación serial en lenguaje ensamblador. 
En lenguaje ensamblador, 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. La figura 1 muestra los valores que debe contener el registro AH para invocar cada uno de los servicios. En todos los casos, el registro DX debe contener el número del puerto serie; el primero de ellos, COM1 se especifica como 00h. 
 
Servicio
Descripción
00 Inicializar puerto serie
01
Enviar un dato
02
Recibir un dato
03
Obtener el estado del puerto
 
figura 1.Servicios para el puerto serial disponibles a través de la interrupción 14H
 
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, como se puede observar en la figura 2. Con éste método es posible obtener frecuencias de transmisión que van desde los 110 hasta los 9600 baudios. 
figura 2

Para enviar un dato por el puerto serial, bastará con colocar en el registro AH el valor 01 correspondiente a este servicio y en el registro AL el dato a ser enviado, invocando de nuevo la interrupción 14H. La lectura de un dato que ha llegado al puerto se logra con el servicio 02, el cual devuelve en el registro AL el dato. La lectura del estado del puerto se consigue a través del servicio 03 de esta misma interrupción, y retorna en el registro AX el estado del puerto, el cual contendrá los bits que se muestran en la figura 3. 
 

figura 3

Por ejemplo, podemos utilizar 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: inicializar puerto 
    mov a1,83 ;configuración: 1200 baudios, no paridad,     
                    ;un bit de parada, 8 bits de datos   
    mov dx,00 ;Seleccionar puerto COM1  
    int 14        ;interrupción del BIOS   
    mov ah,4c ;servicio 4ch de INT 21h: terminar  
    int 21        ;interrupción servicio del DOS
Este programa (en donde todos las cantidades están expresadas en hexadecimal) se puede tornar ejecutable utilizando algunos de los ensambladores para PC, o utilizando el comando DEBUG del DOS. 

Otra forma de seleccionar los parámetros de la comunicación y lograr ésta, es mediante la modificación y consulta de los registros correspondientes al circuito integrado que maneja la comunicación serial: el UART 8250 o similar. Como se sabe, este circuito integrado puede ser manejado como un puerto, en el cual es posible la escritura o lectura de sus estados. 

Comunicación con el puerto paralelo en lenguaje ensamblador. 
En lenguaje ensamblador, se puede leer un dato del puerto mediante la instrucción IN ó escribir un dato en el puerto con la instrución OUT ,  en ambos casos el registro AL debe participar activamente en la instrucción, bien sea como fuente (en operaciones de escritura) o destino (en operaciones de lectura) del dato, como en los siguientes casos: 
 

    out DX, AL  ;lleva al puerto DX el contenido del registro AL 
    in   AL,DX   ;lleva al registro AL, el contenido del puerto DX
Otra, exigencia, 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, a excepción de los casos en los cuales el número del puerto es inferior a 255 (FFh), en cuyo caso la instrucción que lee o escribe puede señalar directamente el puerto. 

Como veran la utilización del puerto paralelo en lenguaje emsamblador es muy sencilla. 

Referencias utilizadas: 
1.- Naranjo C. , Jhon Jairo. Electronica & Computadores."Interface serial RS-232".  Año I Nº10. Pag. 71-76 
2.- Naranjo C. , Jhon Jairo. Electronica & Computadores."Control de puertos en lenguaje ensamblador".  Año II Nº2. Pag. 64-68 

Otros Articulos 

 
henryg@ing.ula.ve