Ensamblador - Por favor necesito ayuda con este ejercicio

   
Vista:

Por favor necesito ayuda con este ejercicio

Publicado por daymel (1 intervención) el 14/05/2008 16:07:45
Se desea diseñar un programa en ensamblador para vizualizar el nivel de un tanque de agua de 32 m
cúbicos de capacidad en el centro de la pantalla utilizando el modo grafico (ver esquema).
Por el puerto serie COM2, se resibiran cada un segundo durante tres minutos 5 bits de datos que
representan el nivel de agua en el tanque en metros cubicos con un bit de parada, sin paridad y a 50 baudios.
El esquema en la pantalla que representa el nivel del tanque debe actualizarse cada vez que reciba un dato.
Si el nivel del tanque esta mas de 10 segundos por encima del 95 por ciento o por debajo del 5 por ciento de
la capacidad del tanque se debe mostrar un mensaje de alarma al inicio de la pantalla.
Para el esquema considere el tanque de 8 pixeles de ancho y 2 pixeles de alto por cada metro cúbico de agua.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Por favor necesito ayuda con este ejercicio

Publicado por MSH (121 intervenciones) el 24/05/2008 16:31:21
Saludos:

Espero que este proyecto siga en pie. Si alguien necesita hacer algo similar, aquí va una referencia.

En ensamblador, hay una inerrupción del BIOS que se encarga de la configuración del puerto serial. Esta es la INT 14H

Las funciones básicas de esta interrupción son las siguientes:

*Función 00H

Inicializa el puerto de comunicaciones. Establece los parámetros siguientes en el AL de acuerdo con el número de bit:

-Velocidad en baudios ( del bit 7 al 5)

000=110
001=150
010=300
011=600
100=1200
101=2400
110=4800
111=9600

-Paridad (del 4 al 3)
00=ninguna
01=impar
10=ninguna
11=par

-Bit de parada (2)
0=1
1=2

-Longitud de palabra (del 1 al 0)

10=7 bits
11=8 bits

A continuación está un ejemplo que establece COM1 a 1200 baudios, sin paridad,un bit de parada y longitud de 8 bits:

mov ah,00h ;inicializa puerto
mov al,10000011b ;parámetros
mov dx,00 ; puerto COM1 (el com 2 sería mov dx,01)
int 14 ;llama al BIOS

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Por favor necesito ayuda con este ejercicio

Publicado por MSH (121 intervenciones) el 26/05/2008 20:46:41
...

*Función 01H

Caracter de transmición. Carga el registro AL con el caracter que la rutina transmite y el registro DX con el numero del puerto. La operación regresa en el registro AH el estado del puerto. Si la operación es habilitada para transmitir el byte, tambien establece el bit 7 del AH, aunque el propósito normal de este bit es reportar un error de tiempo terminado. Desde luego, hay que ejecutar previamente la función 00H antes de usar este servicio (la que se explicó anteriormente)

Del ejemplo anterior:

Establece COM1 a 1200 baudios, sin paridad,un bit de parada y longitud de 8 bits:

mov ah,00h ;inicializa puerto
mov al,10000011b ;parámetros
mov dx,00 ; puerto COM1 (el com 2 sería mov dx,01)
int 14H ;llama al BIOS

mov ah,01h ;peticion para caracter de transmición
mov al, char ;caracter de transmición
mov dx,00 ;puerto COM1
int 14H ;llama al BIOS

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Por favor necesito ayuda con este ejercicio

Publicado por MSH (121 intervenciones) el 26/05/2008 20:57:53
...

*Función 02H

Caracter recibido. Carga el número de puerto en el registro DX. La operación acepta un caracter desde la línea de comunicaciones y lo envía al AL. También establece el registro AH con el estado del puerto para bits de error 7,4,3,2, y 1. Por lo tanto un número diferente de 0 en el AX indica un error de entrada. Asegúrate de usar la función 00H antes de utilizar este servicio.

Del ejemplo anterior:

Establece COM1 a 1200 baudios, sin paridad,un bit de parada y longitud de 8 bits:

mov ah,00h ;inicializa puerto
mov al,10000011b ;parámetros
mov dx,00 ; puerto COM1 (el com 2 sería mov dx,01)
int 14H ;llama al BIOS

mov ah,01h ;peticion para caracter de transmisión
mov al, char ;caracter de transmisión
mov dx,00 ;puerto COM1
int 14H ;llama al BIOS

mov ah,02h ;petición para recibir caracter
mov dx,00 ;puerto COM1
int 14H ;llama al BIOS

cmp ax,0000h ;la comunicación fué correcta?
je correcto ;si? envia mensaje o señal válida
jmp incorrecto ;no?envía mensaje de error o alarma
.
.
.

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Por favor necesito ayuda con este ejercicio

Publicado por MSH (121 intervenciones) el 26/05/2008 21:23:07
...

*Función 03H

Regresa estado del puerto de comunicaciones. Carga el número del puerto en el registro DX. La operación regresa el estado de la línea en el AH y el estado del módem en el AL

Código del estado de la línea en el registro AH (más usado)

7 - Fuera de tiempo
6 - Transmitir registro de corrimiento vacío
5 - Transmitir registro válido vacío
4 - Detección de ruptura
3 - Error de marcado
2 - Error de paridad
1 - Error de sobre corrida
0 - Dato listo

Código del estado del módem en el registro AL

7 - Línea recibida señal detectada
6 - Indicadores
5 - Conjunto de datos listos
4 - Limpiar para enviar
3 - Delta recibe línea de señal de detección
2 - Detector anillo del borde posterior
1 - Conjunto de datos Delta Listo
0 - Limpiar Delta para enviar

¿A que viene todo esto?

Vendrán algunos ejemplos de uso del puerto serial
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Por favor necesito ayuda con este ejercicio

Publicado por Javier (27 intervenciones) el 27/05/2008 09:55:29
Esa informacion esta muy bien. Pero solo es valida para DOS. Que pasa si yo uso LINUX por ejemplo u otro sistema operativo o simplemente, un 16F84 ?.

Hay que poner el acceso a los registros que usan el puerto 03F8 y demas.

Yo lo tengo pero no es publico sin el previo pago de lo que en su dia me costo averiguar todo esto.

Yo puedo hacer el problema del deposito sin interrupcion. Directamente en ENSAMBLADOR PURO.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Por favor necesito ayuda con este ejercicio

Publicado por MSH (121 intervenciones) el 27/05/2008 16:40:07
Hasta donde sé, este foro es para resolver dudas con ensamblador en DOS.

Como la información para programar ensamblador en DOS es generalizada, no le encuentro sentido cobrar por tus honorarios (menos aquí, ya que se supone que es un foro de ayuda.). Además de que "sirve de nada el conocimiento si no se comparte".

Si quieres que tus soluciones a los problemas te $ean redituable$, sugiero que te comuniques directamente con el usuario (por algo se llena el campo de "Correo"antes de postear). De hecho, si hay alguna dificultad en el problema, yo se lo hago saber a quien pregunta.

La información expuesta, es para que al menos se tenga referencia de cómo se controla básicamente un puerto serial. Para que a la hora de desarrollar el proyecto no se haga una labor difícil. (Que por cierto, en el caso de este tanque, lo llevo por la mitad)

En cuanto a Linux, pues hay algunos foros en internet que ofrecen tutoriales y ejemplos "gratuitos" sobre el NASM, así que por soluciones no paramos.

¿Y en PICS? No se diga.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar