puerto serie
Como puedo hacer para recibir datos en un puerto serie a una velocidad y enviarlos por otro puerto que transmite a una velocidad mas baja?
Este ejemplo es para puerto serie entre dos PC...
; TERMINAL 1200 BAUDIOS
;
; PROGRAMA PARA TRABAJAR LA IBM-PC COMO TERMINAL
; A LA VELOCIDAD DE 1200 BAUDIOS
;
; SE UTILIZA AQUI LA POSIBILIDAD DE LA IBM-PC DE TRABAJAR
; EN UN LAZO CERRADO, TRANSMITIENDO Y RECIBIENDO DE MANERA INTERNA
;
; SI SE DESEA COMUNICAR CONT OTRA PC, CAMBIAR LA CONSTANTE 13H A 03H
; EN LA INICIALIZACION DE REGISTROS DEL MODEM
STACK SEGMENT PARA STACK 'STACK'
DB 256 DUP(0)
STACK ENDS
CODE SEGMENT PARA PUBLIC 'CODE'
START PROC FAR
ASSUME CS:CODE
PUSH DS
MOV AX,0
PUSH AX
; ESTABLECIMIENTO DEL PROTOCOLO (USART 8251)
MOV DX,3FBH ; DIRECCION DEL REGISTRO DE CONTROL DE LINEA
MOV AL,80H
OUT DX,AL ; DIRECCIONA LOS REGISTROS DE VELOCIDAD
MOV DX,3F8H ; DIRECCION DEL REGISTRO DIV DE BUDIOS (LOW)
MOV AL,60H ; LOW BYTE PARA 1200 BAUDIOS
OUT DX,AL
MOV DX,3F9H ; DIRECCION DEL HIGH BYTE REGISTRO BAUDIOS
MOV AL,0 ; HIGH BYTE PARA 1200 BUDIOS
OUT DX,AL
; INICIALIZANDO EL REGISTRO DE CONTROL DE LINEA
MOV DX,3FBH ; REGISTRO DE CONTOL DE LINEA
MOV AL,0AH ; PARIDAD INPAR, 1 BIT PARADA, 7 BITS DATOS
OUT DX,AL
; INICIALIZANDO EL REGISTRO DE CONTROL DE MODEM PARA
; SENALES DE SOLICITUD DE ENVIO Y DATA TERMINAL READY
; Y LAZO CERRADO
MOV DX,3FCH ; REGISTRO CONTROL DEL MODEM
MOV AL,03H ; LAZO CERRADO Y SENALES DE CONTROL
OUT DX,AL
; SE INHABILITAN LAS CUATRO INTERRUPCIONES DEL MODEM
MOV DX,3F9H ; REGISTRO DE INTERRUPCIONES
MOV AL,0 ; INHABILITAR TODO
OUT DX,AL
; CON ESTO SE TERMINO LA INICIALIZACION DEL 8251
LAZO: MOV DX,3FDH ; REGISTRO STATUS DE LINEA
IN AL,DX ; LEO STATUS
; TEST AL,1EH ; ERROR EN RECEPCION ?
; JNZ ERROR
; TEST AL,01H ; RECIBIDO DATO ?
; JNZ RECEIVE
; TEST AL,20H ; REGISTRO TRANSMISOR VACIO ?
; JZ LAZO ; NO ESTA LISTO, ESPERA
; 8251 LISTO PARA TRANSMITIR OTRO CARACTER
; SI HAY UN CARACTER EN EL BUFFER DEL TECLADO,
; TOMARLO Y ENVIARLO AL 8251
MOV AH,1 ; FUNCION CHEQUEA BUFFER TECLADO
INT 16H ; LLAMADA AL BIOS
JZ receive ; NO HAY CARACTER LISTO
MOV AH,0 ; LEE CARACTER DEL BUFFER
INT 16H ; PONE EL CARACTER EN AL
mov ax,4c00h
int 21h
MOV DX,3F8H ; REGISTRO DEL TRANSMISOR
OUT DX,AL ; TRANSMITE CARACTER
JMP LAZO
RECEIVE:
MOV DX,3F8H ; REGISTRO DE RECEPCION
IN AL,DX ; LEE CARACTER RECIBIDO
AND AL,7FH ; SOLO 7 BITS DE DATOS
PUSH AX ; SALVA CARACTER RECIBIDO
MOV BX,0
MOV AH,14 ; FUNCION DISPLAY
INT 10H ; LLAMADA AL BIOS
POP AX ; RECUPERA CARACTER RECIBIDO
jmp lazo
CMP AL,1BH ; ES ESCAPE ?
JZ SALE ; SI LO ES, SALIR AL DOS
CMP AL,0DH ; ES RETORNO DE CARRO ?
JNZ LAZO ; BUSCA OTRO CARACTER
MOV AL,0AH ; CAMBIO DE LINEA (POR RETORNO DEL CARRO)
MOV BX,0
MOV AH,14 ; DISPLAY
INT 10H
JMP LAZO
ERROR: MOV DX,3F8H ; REGISTRO RECEPTOR
IN AL,DX ; CARACTER INCORRECTO A AL
;MOV AL,'?' ; SE MUESTRA EN LUGAR DEL INCORRECTO
;MOV BX,0
;MOV AH,14
;INT 10H
JMP LAZO
SALE: RET
START ENDP
CODE ENDS
END START
; TERMINAL 1200 BAUDIOS
;
; PROGRAMA PARA TRABAJAR LA IBM-PC COMO TERMINAL
; A LA VELOCIDAD DE 1200 BAUDIOS
;
; SE UTILIZA AQUI LA POSIBILIDAD DE LA IBM-PC DE TRABAJAR
; EN UN LAZO CERRADO, TRANSMITIENDO Y RECIBIENDO DE MANERA INTERNA
;
; SI SE DESEA COMUNICAR CONT OTRA PC, CAMBIAR LA CONSTANTE 13H A 03H
; EN LA INICIALIZACION DE REGISTROS DEL MODEM
STACK SEGMENT PARA STACK 'STACK'
DB 256 DUP(0)
STACK ENDS
CODE SEGMENT PARA PUBLIC 'CODE'
START PROC FAR
ASSUME CS:CODE
PUSH DS
MOV AX,0
PUSH AX
; ESTABLECIMIENTO DEL PROTOCOLO (USART 8251)
MOV DX,3FBH ; DIRECCION DEL REGISTRO DE CONTROL DE LINEA
MOV AL,80H
OUT DX,AL ; DIRECCIONA LOS REGISTROS DE VELOCIDAD
MOV DX,3F8H ; DIRECCION DEL REGISTRO DIV DE BUDIOS (LOW)
MOV AL,60H ; LOW BYTE PARA 1200 BAUDIOS
OUT DX,AL
MOV DX,3F9H ; DIRECCION DEL HIGH BYTE REGISTRO BAUDIOS
MOV AL,0 ; HIGH BYTE PARA 1200 BUDIOS
OUT DX,AL
; INICIALIZANDO EL REGISTRO DE CONTROL DE LINEA
MOV DX,3FBH ; REGISTRO DE CONTOL DE LINEA
MOV AL,0AH ; PARIDAD INPAR, 1 BIT PARADA, 7 BITS DATOS
OUT DX,AL
; INICIALIZANDO EL REGISTRO DE CONTROL DE MODEM PARA
; SENALES DE SOLICITUD DE ENVIO Y DATA TERMINAL READY
; Y LAZO CERRADO
MOV DX,3FCH ; REGISTRO CONTROL DEL MODEM
MOV AL,03H ; LAZO CERRADO Y SENALES DE CONTROL
OUT DX,AL
; SE INHABILITAN LAS CUATRO INTERRUPCIONES DEL MODEM
MOV DX,3F9H ; REGISTRO DE INTERRUPCIONES
MOV AL,0 ; INHABILITAR TODO
OUT DX,AL
; CON ESTO SE TERMINO LA INICIALIZACION DEL 8251
LAZO: MOV DX,3FDH ; REGISTRO STATUS DE LINEA
IN AL,DX ; LEO STATUS
; TEST AL,1EH ; ERROR EN RECEPCION ?
; JNZ ERROR
; TEST AL,01H ; RECIBIDO DATO ?
; JNZ RECEIVE
; TEST AL,20H ; REGISTRO TRANSMISOR VACIO ?
; JZ LAZO ; NO ESTA LISTO, ESPERA
; 8251 LISTO PARA TRANSMITIR OTRO CARACTER
; SI HAY UN CARACTER EN EL BUFFER DEL TECLADO,
; TOMARLO Y ENVIARLO AL 8251
MOV AH,1 ; FUNCION CHEQUEA BUFFER TECLADO
INT 16H ; LLAMADA AL BIOS
JZ receive ; NO HAY CARACTER LISTO
MOV AH,0 ; LEE CARACTER DEL BUFFER
INT 16H ; PONE EL CARACTER EN AL
mov ax,4c00h
int 21h
MOV DX,3F8H ; REGISTRO DEL TRANSMISOR
OUT DX,AL ; TRANSMITE CARACTER
JMP LAZO
RECEIVE:
MOV DX,3F8H ; REGISTRO DE RECEPCION
IN AL,DX ; LEE CARACTER RECIBIDO
AND AL,7FH ; SOLO 7 BITS DE DATOS
PUSH AX ; SALVA CARACTER RECIBIDO
MOV BX,0
MOV AH,14 ; FUNCION DISPLAY
INT 10H ; LLAMADA AL BIOS
POP AX ; RECUPERA CARACTER RECIBIDO
jmp lazo
CMP AL,1BH ; ES ESCAPE ?
JZ SALE ; SI LO ES, SALIR AL DOS
CMP AL,0DH ; ES RETORNO DE CARRO ?
JNZ LAZO ; BUSCA OTRO CARACTER
MOV AL,0AH ; CAMBIO DE LINEA (POR RETORNO DEL CARRO)
MOV BX,0
MOV AH,14 ; DISPLAY
INT 10H
JMP LAZO
ERROR: MOV DX,3F8H ; REGISTRO RECEPTOR
IN AL,DX ; CARACTER INCORRECTO A AL
;MOV AL,'?' ; SE MUESTRA EN LUGAR DEL INCORRECTO
;MOV BX,0
;MOV AH,14
;INT 10H
JMP LAZO
SALE: RET
START ENDP
CODE ENDS
END START
oye estoy buscando un programa del manejo del usart(8251) pero en lenguaje c solo quiero algo simple para saber como recepciono y transmito pues es que lo nesecito para un curso que estoy llevando ojala me puedas ayudar pues que la verdad es urgente ante todo gracias por ayudarme espero que puedas ayudarme pronto gracias
necesito saber si alguien me puede ayudar con este ejercicio
es que he estado trabada Hace dias con esto, y lo he hecho de alguna manera pero no se bien como hacerlo:
Se desea realizar un software que compruebe si se recibi贸 un paquete de datos
de forma 铆ntegra, la recepci贸n se basa en el siguiente protocolo: el primer
byte del paquete que se env铆a indica la cantidad de byte de datos que seguir谩n
a este primer byte, luego de recibir todo el paquete de informaci贸n se recibir谩n
dos byte con todos los bits en cero indicando que se concluy贸 el env铆o de informaci贸n.
Despu茅s de recibir el paquete completo si errores debe sonar bocina durante 3 segundos,
en caso de que no se reciban todos los datos al cabo de 1 minuto de comenzar la transmisi贸n,
sacar un cartel por pantalla de error y enviar a trav茅s del puerto serie el comando ffh
indic谩ndole a la otra PC que debe recomenzar. Si por el contrario se recibi贸 la informaci贸n
de forma correcta entonces debe enviarle el c贸digo 00h. El programa culmina al cabo de 30 minutos de ejecuci贸n.
saludos marisabet
es que he estado trabada Hace dias con esto, y lo he hecho de alguna manera pero no se bien como hacerlo:
Se desea realizar un software que compruebe si se recibi贸 un paquete de datos
de forma 铆ntegra, la recepci贸n se basa en el siguiente protocolo: el primer
byte del paquete que se env铆a indica la cantidad de byte de datos que seguir谩n
a este primer byte, luego de recibir todo el paquete de informaci贸n se recibir谩n
dos byte con todos los bits en cero indicando que se concluy贸 el env铆o de informaci贸n.
Despu茅s de recibir el paquete completo si errores debe sonar bocina durante 3 segundos,
en caso de que no se reciban todos los datos al cabo de 1 minuto de comenzar la transmisi贸n,
sacar un cartel por pantalla de error y enviar a trav茅s del puerto serie el comando ffh
indic谩ndole a la otra PC que debe recomenzar. Si por el contrario se recibi贸 la informaci贸n
de forma correcta entonces debe enviarle el c贸digo 00h. El programa culmina al cabo de 30 minutos de ejecuci贸n.
saludos marisabet
