bienvenido

De modo a tener a mano algunos apuntes, de como se hacia eso, o donde era que guarde tal archivo que explicaba como se configuraba, reuno algunos materiales interesantes, en este espacio que espero les sea tambien de utilidad, saludos! FM,

jueves, 29 de abril de 2010

Pequeño how to de manejo del puerto serie

______________________________________________
---------TUTORIAL DE manejo del puerto serie---------
____________________by_fernando_martinez_©2008_

___tamaño de la palabra___
bit 0
bit 1

___Numero de stop___
bit 2

___paridad___
bit 3
bit 4

___velocidad___
bit 5
bit 6
bit 7










por ejemplo 231h = 11100111b
significa:
tamaño de palabra: 8bits
2 bits de stop
paridad nula
9600 velocidad de transmision.

86h = 10000110b
significa:
7 bits tamaño de palabra
2 bits de parada
paridad nula
1200 valocidad de transferencia.
_______________________________________
--------------------
para inicializar el puerto ----
_______________________________________

en ensamblador:

mov ah, 00h ; funcion de la interrupcion para configurar el puerto
mov al, 231h ; nuestra configuracion
mov dx, 3F8h ; la direccion del COM1 por ejemplo
int 14h

en C:
/* turbo c utiliza la funcion int86 declarada la siguiente forma:
int int86(int intno, union REGS *inregs, union REGS *outregs); */

void inicializar_puerto(int puerto, unsigned char code)
{
union REGS r;

r.x.dx=puerto;
r.h.ah=0;
r.h.al=code;
int86(0x14,&r,&r);
}
_______________________________________
----------------------para enviar un caracter ------
_______________________________________
ensamblador:

mov dx,3f8 ;puerto; p.e. el puerto COM1
mov al,car ;caracter a inviar
mov ah,01h ;funcion para enviar caracter
int 14h

en C:

void envia_caracter(int puerto, char car)
{
union REGS r;

r.x.dx=puerto;
r.h.al=car;
r.h.ah=0x01
int86(0x14,&r,&r);
}

________________________________________
-----------------------para recibir un caracter -------
________________________________________

ensamblador:

mov dx, 3F8
mov ah, 02h
int 14h ; en al se encuentra el caracter leido

en C:

int lee_puerto(int puerto)
{
union REGS r;

r.x.dx=puerto;
r.h.ah=0x02
int86(0x14,&r,&r);

return(r.h.al);
}

se puede controlar si hubo error en la lectura (tambien en la escritura) añadiendo:
if (r.h.ah & 128) printf("Error de lectura. \n");

_____________________________________
------------------------para chequear estado-----
_____________________________________

ensamblador:

mov dx, puerto
mov ah,03h
int 14h

en C:

int chequea_puerto(int puerto)
{
union REGS r;

r.x.dx=puerto;
r.h.ah=3
int86(0x14,&r,&r);

return(r.x.ax);
}

obs:
AH estado del puero serie
AL datos
si alguno de los bits del registro de estado esta en 1 ha ocurrido un error.

por eso podemos comprabar errores de la siguiente forma:
if(!(chequea_puerto(3F8)&256)) printf("Error\n");

__________________________
greeting to all asm coders---------
__________________________

No hay comentarios:

Publicar un comentario