Leer puerto de serie

Fellix
06 de Mayo del 2010
Hola, Estoy intentando leer desde ensamblador (8086) el puerto de serie. De momento sé que la interrupción asociada es 0c. Se me ha ocurrido sustituir la ISR por una mía que lea lo que hay en el puerto de serie. Hay alguna forma más fácil de hacerlo? Esto es lo que tengo: INTER SEGMENT AT 0 ; segmetno en la tabla de vectores para manejar los vectores como si fueran variables. org 4*0C ; con esto marco un offset inicial, asÌ la variable empieza en el offset donde esta la isr del puerto de serie. Sin inicializar para no machacar el valor que hay vector_ip dw (?) ; primero esta el offset, luego la direccion de segmento vector_cs dw (?) INTER ENDS cambia proc cli; mov ax,vector_ip mov guarda_ip,ax mov ax,vector_cs mov guarda_cs,ax ; guardo lo que hay mov vector_ip,offset rutina ; redirecciono a mi rutina mov vector_cs,cs ; sti ret cambia endp rutina proc far ;obtener datos del arduino/serie, de un registro? ; poner datos leídos en una cadena mov dx, offset cadena mov ah,9 ; para visualizar cadenas con la interrupción 21h int 21h ; hay que pasarle en DX la dirección de la cadena (no lo rutina endp Voy bien? Qué pasa cuando se lanza la isr? se guarda en algún registro la info del puerto de serie? supongo que será algo más complejo y habrá que trabajar con la velocidad, paridad, etc, no?

Fellix
06 de Mayo del 2010
he dado con está web http://hgr.tripod.com/puertos_ensamblador.html

parece que hace justo lo que quiero pero más sencillo a ver si puedo probarlo y os digo, muchas gracias!!

felix
08 de Mayo del 2010
parece que he cantado victoria antes de tiempo. Leer datos funciona sin problemas pero escribir nada de nada, siempre me da un 80H, que significa un time out

El código es el siguiente
enviar proc
MOV AH,00 ;inicializar el puerto
MOV AL,11101011b ; velocidad 9600, N,un bit de stop, 8 bit de datos....
MOV DX,00 ; puerto com1
INT 14H
MOV AH, 1 ; enviar
MOV AL, 'S' ; envio un caracter
MOV DX, 00 ; puerto com1
INT 14H
RET
enviar endp

El código de recibir es el siguiente (funciona bien):



recibir proc
push bx
MOV AH,00 ;inicializar el puerto
MOV AL,11110011b ; velocidad 49600, N,un bit de stop, 8 bit de datos....
MOV DX,00 ; puerto com1
INT 14H

Esperar:
mov dx,0000
mov ah,03h
int 14h
test ah,01h; si el bit 1(dato listo) esta puesto a cero no hay dato listo
jz Esperar ;salta y vuelve a verificar
mov dx,0000
mov ah,02h
int 14h
mov car, al
pop bx
ret
recibir endp

paola del castillo arriola
13 de Marzo del 2017

hola una consulta que significa 

mov car, al

 OSEA ESPECIFICAMENTE ESE "CAR"