SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: JJFL en Martes 30 de Mayo de 2006, 19:50

Título: Com1. Ensamblador
Publicado por: JJFL en Martes 30 de Mayo de 2006, 19:50
Saludos.

Necesito sacar pulsos de la computadora para mover un carrito con motores stepper,
manejado con el teclado, por el puerto serial com1 en assembler, lo unico que me falta es saber como sacar el pulso, y que se sostenga mientras se mantenga la tecla presionada, por que mi circuito solo necesita dos bits de entrada.

 :comp:

A quien pueda ayudarme, muchas gracias.
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Miércoles 31 de Mayo de 2006, 01:30
:comp:
Debes usar los servicios de la interrupcion 14 pero creo que no sera tan facil como eso dado que necesitas un interprete que conozca del protocolo de comunicaciones del puerto serial.

checate este link :

http://www.ctyme.com/intr/int-14.htm (http://www.ctyme.com/intr/int-14.htm)
Título: Re: Com1. Ensamblador
Publicado por: Toph en Miércoles 31 de Mayo de 2006, 03:55
Citar
Necesito sacar pulsos de la computadora para mover un carrito con motores stepper,
manejado con el teclado, por el puerto serial com1 en assembler, lo unico que me falta es saber como sacar el pulso,

pues para sacar un dato por el puerto serial tienes que hacer lo siguiente:

Código: Text
  1. MOV DX,0000, DX=0 valor para COM1
  2. MOV AH,00&#59;funcion 00h-inicializando el puerto serial
  3. MOV AL,52&#59; en AL se pone el caracter a ser enviado
  4. INT14       &#59;llamada de servicio del bios
  5.  
  6.  

Citar
y que se sostenga mientras se mantenga la tecla presionada, por que mi circuito solo necesita dos bits de entrada.

con respecto a esto no se me ocurre como :o , porque al enviar el dato por el puerto serial al leerlo tu dispositivo, el dato se borra. talvez se nos ocurra algo si explicas con mas detalle como va a trabajar tu carro.

por cierto solo por curiosidad ¿que controlador estas usando para manejar un motor mediante ordenes enviadas desde un puerto serie?
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Miércoles 31 de Mayo de 2006, 16:14
:blink:  :blink:  :blink:

MMMMM Dudo mucho que funcione ese codigo ya que para inicializar el puerto se usa en efecto el servicio : AH=0 pero en AL debemos poner los parametros del puerto como por ejemplo velocidad de tranmision, paridad, bit de parada y longitud de la palabra. ahora bien del otro lado debe de haber un dispositivio que interprete el protocolo de comunicaciones del puerto serie y empatado con esta configuracion , para enviar un caracter en efecto se coloca en AL pero se utiliza el servicio AH=0x01 obvio todo de la int 14H y lo que puedes hacer para crear el ciclo puedes usar C++ usar do-while y kbhit(); o bien hacerlo todo con assembler
y un loop pero tambien tendrias que usar los servicios de la int 16H.
Título: Re: Com1. Ensamblador
Publicado por: Toph en Miércoles 31 de Mayo de 2006, 21:39
Citar
ya que para inicializar el puerto se usa en efecto el servicio : AH=0 pero en AL debemos poner los parametros del puerto como por ejemplo velocidad de tranmision, paridad, bit de parada y longitud de la palabra.
 ;) si cometi un error ahi deberia ser funcion 1, me equivoque a la hora de postearlo confundi la funcion para enviar con la de inicializar el puerto realmente queria poner solo la rutina de como enviar por el puerto serial no como configurarlo porque eso se lo dejo a el porque no se como lo necesite,  :o ,  

pero por si acaso aqui dejo como deberia de ser:
configuracion:
Código: Text
  1. MOV AL,F3;(velocidad = 9600, 8 bits de datos, 1 bit de paro, sin paridad)(esto depende como quieras configurar el puerto)
  2. MOV DX,0000; determina que se usa el puerto COM1
  3. MOV AH,00; inicializa puerto serial
  4. INT 14
  5.  
  6.  
envio de un dato por el puerto
Código: Text
  1.  
  2. MOV DX,0000;puerto COM1
  3. MOV AH,01&#59; funcion 01h-enviando un caracter al COM
  4. MOV AL, 52; caracter a ser enviado  
  5. INT 14
  6.  
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Lunes 5 de Junio de 2006, 16:39
Cita de: "Tania_D"
Citar
ya que para inicializar el puerto se usa en efecto el servicio : AH=0 pero en AL debemos poner los parametros del puerto como por ejemplo velocidad de tranmision, paridad, bit de parada y longitud de la palabra.
 ;) si cometi un error ahi deberia ser funcion 1, me equivoque a la hora de postearlo confundi la funcion para enviar con la de inicializar el puerto realmente queria poner solo la rutina de como enviar por el puerto serial no como configurarlo porque eso se lo dejo a el porque no se como lo necesite,  :o ,  

pero por si acaso aqui dejo como deberia de ser:
configuracion:
Código: Text
  1. MOV AL,F3;(velocidad = 9600, 8 bits de datos, 1 bit de paro, sin paridad)(esto depende como quieras configurar el puerto)
  2. MOV DX,0000; determina que se usa el puerto COM1
  3. MOV AH,00; inicializa puerto serial
  4. INT 14
  5.  
  6.  
envio de un dato por el puerto
Código: Text
  1.  
  2. MOV DX,0000;puerto COM1
  3. MOV AH,01; funcion 01h-enviando un caracter al COM
  4. MOV AL, 52; caracter a ser enviado  
  5. INT 14
  6.  
 :comp:  :comp:  :comp:
Pero creo que no es posible enviar datos desde el puerto serial sin no inicializarlo antes, ya he hecho un programa para comunicacion serial lo voy a probar si funciona sin inicializar y os digo que ha pasado.
Título: Re: Com1. Ensamblador
Publicado por: Toph en Lunes 5 de Junio de 2006, 22:48
Citar
Pero creo que no es posible enviar datos desde el puerto serial sin no inicializarlo antes
 :blink: ????
yo no dije que no fuera necesario inicializarlo antes, lo que dije es que esa rutina no se la queria poner porque no se como JJFL quiere configurar el puerto

Citar
realmente queria poner solo la rutina de como enviar por el puerto serial no como configurarlo porque eso se lo dejo a el porque no se como lo necesite
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Martes 6 de Junio de 2006, 06:57
:lol:  :lol:
ok ok pero no te enojes
Título: Re: Com1. Ensamblador
Publicado por: guiweb en Martes 20 de Junio de 2006, 15:59
wow porfin encuentro un foro donde la Gente de Verdad te ayuda y no te dice: "sabes.. yo tengo ese codigo que necesitas, cuanto estas dispuesto a pagar?"

veo que estan hablando de puerto serie.. la verdad es que yo tengo que hacer un chat por interrupciones por serie... NO QUIERO que me lo hagan, sino que sacarme de varias dudas, ya que me fascina Assembler, pero no soy un experto, por ejemplo no se inicializar el puerto. cosa sencilla, talvez para ustedes jejej lo que es para mi... no entiendo nada...

me puedes explicar porfa como inicializar el puerto?
muchas gracias
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Martes 20 de Junio de 2006, 16:28
primeramente checate el link que di en el segundo post, pero es sencillo

http://www.ctyme.com/intr/int-14.htm (http://www.ctyme.com/intr/int-14.htm)

inicializar puerto
AH = 00h
AL = paramertos de puerto
DX = # de puerto

parametros del puerto

Bit(s)  Description    
7-5    data rate (110,150,300,600,1200,2400,4800,9600 bps)
4-3    parity (00 or 10 = none, 01 = odd, 11 = even)
2      stop bits (set = 2, clear = 1)
1-0    data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8)


es decir:


_AH=0x0;  
_DX=0x0;  para COM1
_AL=11100111
asm int 0x14;
 en AL es decir 111=9600 bps 00 = ninguna paridad 1= bit de parada 11= longitud de palabra igual a 8   todo esto  junto es 11100111

Cualquier duda por aqui andaremos
Título: Re: Com1. Ensamblador
Publicado por: guiweb en Martes 20 de Junio de 2006, 16:50
ufff muchisimas gracias por la respuesta.
pero tengo una duda... cuando hacemos trabajos en clases, (todo en papel, nada de computacion) y decidimos escribir algo por el puerto serie le damos a:

mov dx,378H
mov al,xxxxh
out dx,al


entonces, para que escribo el 378H??? es para indicarle que se vaya por el serie?? pero si al inicializarlo nunca mensione este numero o_O..... jiji como veras tengo algunas dudillas nada mas :P


Muchas Gracias
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Martes 20 de Junio de 2006, 17:12
:huh:  :huh:


mmm creo que estas confundiendo las cosas el 0378H se refiere al puerto paralelo por lo regular LTP1 es decir el pto de impresora, eso lo podes ver en tu bios en cuanto alos ptos series son COM1, COM2, etc...
Título: Re: Com1. Ensamblador
Publicado por: guiweb en Martes 20 de Junio de 2006, 17:42
disculpa, no me acuerdo bien cual es, si era el 378 cosa que ya se qe no es, o era el 3F8H, supongo que ese si era... porfa omite el 378 y cambialo por 3F8H para que se entienda mi pregunta anterior
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Martes 20 de Junio de 2006, 17:53
03F8H ó 03FFH son las posibles asignaciones del COM1 es decir le estas diciendo que saque por el puerto 03F8H lo que esta contenido el AL , lo que pasa aqui es al inicializar el pto con  las instrucciones que te di este busca la direccion en el que este COM1, ademas para realizar un chat entre dos PC's por medio del pto serie es necesario empatar alas dos pc's , es decir deben tener el mismo bit de parada, la misma paridad y la misma longitud de palabra porque el pto serial conlleva un protocolo de comunicaciones el cual debe  ser entendido por la otra pc por eso se les debe inicializar aunque tu codigo me parece extraño porque el direccionar de la manera de 03F8H por lo regular se usa con outport e inport de C++.

y si 0378H es el pto paralelo no lo confundas.
Título: Re: Com1. Ensamblador
Publicado por: Toph en Miércoles 21 de Junio de 2006, 01:11
:huh: guiweb, las rutinas que ha colocado Radoslav y las que puse yo son para ensamblador para x86.

tu dijiste:
Citar
entonces, para que escribo el 378H??? es para indicarle que se vaya por el serie?? pero si al inicializarlo nunca mensione este numero o_O..... jiji como veras tengo algunas dudillas nada mas

despues corregiste que era 3F8H que efectivamente es para indicar que es el puerto serial COM1, si vas a utilizar COM2 seria 2F8H, Esto hasta donde yo se no se hace para x86  :huh: pero no estoy segura
¿para que familia de micros estas programando? :blink: , puede que  las rutinas para configurar puerto que se han posteado aqui no te sirvan, voy a revisar.

quedo a la espera de tu respuesta.


saludos  :hola:
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Miércoles 21 de Junio de 2006, 18:34
Cita de: "Tania_D"
hasta donde yo se no se hace para x86  :huh: pero no estoy segura
¿para que familia de micros estas programando? :blink: , puede que  las rutinas para configurar puerto que se han posteado aqui no te sirvan, voy a revisar.

quedo a la espera de tu respuesta.


saludos  :hola:
Hola panterita rosa como estas?. espero que muy bien.

Creo a mi parecer que te estas equivocando, no en cuanto a lo que dices porque es cierto pero lo que quiweb quiere hacer es un CHAT por el pto serie como lo puso en el primer post, esta es una practica muy común para los escolapios yo la hice hace unos años y en la escuela en la que iba la siguen haciendo y en efecto el codigo es de 16 bits, pero funciona correctamente en cualquier PC con cualquier procesador y con cualquier sistema operativo de windows os lo digo porque yo  hice un juego interactivo para dos pc's por el pto serial con este codigo de 16 bits, pero ayudado con Turbo C para la interfaz grafica y me ha funcionado con todas las pc's que lo he probado, incluso en Windows Vista. os voy a buscar el codigo y si lo encuentro lo pongo para que os vean.
Título: Re: Com1. Ensamblador
Publicado por: Toph en Miércoles 21 de Junio de 2006, 23:53
:comp: yo tambien he hecho una especie de chat en ensablador para puerto serial , pero no use nunca numero de puertos ni instrucciones IN o Out, por eso lo decia.
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Jueves 22 de Junio de 2006, 07:11
yo tampoco eso fue un ejemplo que puso el otro usuario.
Título: Re: Com1. Ensamblador
Publicado por: pabloreda en Jueves 22 de Junio de 2006, 15:46
Quizas pueda ayudar en este tema.

El hard funciona realmente con IN y OUT o con acessos directos a memoria (como escribir en la mem de pantalla), Tanto el BIOS como los llamados al sistema, INT y todo eso, son capas agregadas por el fabricante del mother y el pinche sistema operativo. La verdadera finalidad de estas capas es la promesa de compatibilidad pero a veces trae mas problemas que soluciones

Llamando al SO o al BIOS seguro que anda y cada uno tiene su propia forma de hacerlo, seguramente en algun momento hacen los IN y OUT correspondientes.
por otra parte hacerlo directamente con el hard (IN y OUT) tiene la ventaja de saber realmente que estas haciendo y quizas aprovechar alguna caracteristica especial.

espero que les sea util..
Título: Re: Com1. Ensamblador
Publicado por: guiweb en Domingo 2 de Julio de 2006, 05:41
al verdad que me ha sido muy util, pero no estoy con la certeza, o mas bien estoy con muchas dudas... la verdad se que es mucho pedir, pero me estoy enredando solo, podrian escribir un pequeñito codigo de como programar el pto serie y enviar un dato por el?? se los agradeceria un mundo ya que aun sigo perdido sobre como hacerlo  :unsure:  :(

muchas gracias anticipadas.
Título: Re: Com1. Ensamblador
Publicado por: Toph en Lunes 3 de Julio de 2006, 23:51
Citar
al verdad que me ha sido muy util, pero no estoy con la certeza, o mas bien estoy con muchas dudas... la verdad se que es mucho pedir, pero me estoy enredando solo, podrian escribir un pequeñito codigo de como programar el pto serie y enviar un dato por el?? se los agradeceria un mundo ya que aun sigo perdido sobre como hacerlo unsure.gif sad.gif

muchas gracias anticipadas.

 :huh: pues Radoslav y yo pusimos las rutinas de configuracion y envio, la duda que a mi me surgio es que tu dijiste que usabas instrucciones IN y OUT y numeros de puerto, y yo nunca las he utilizado por eso te pregunte para que microprocesador estabas trabajando yo pienso que quiza ahi esta la diferencia o talvez hay dos formas de hacerlo con IN Y OUT y con la INT14 y funciones, no se.



saludos :hola:
Título: Re: Com1. Ensamblador
Publicado por: guiweb en Martes 4 de Julio de 2006, 18:52
mira, esto es lo que llevo hecho de mi programa, aun no está listo, asi que si ven alguna barbaridad, no se enoje :D

Código: Text
  1.  
  2. STACK SEGMENT STACK
  3.  
  4. STACK ENDS
  5.  
  6. DATA SEGMENT
  7.  
  8.  letra dw 1
  9.  letra_ok db 1
  10.  cont db 5
  11.  
  12. DATA ENDS
  13.  
  14. ;Definicion de macros a utilizar
  15. ;///////////////////////////////////////////////////////////////
  16. PONVECTOR MACRO TIPO, SUBRUTINA
  17.   push di
  18.   mov di,0
  19.   mov es,di
  20.   mov di, tipo*4
  21.   cli
  22.   mov word ptr es:[di],offset subrutina
  23.   mov word ptr es:[di+2],seg subrutina
  24.   sti
  25.   pop di
  26. ENDM
  27.  
  28. GUARDAVECTOR MACRO TIPO, VIEJOIP, VIEJOCS
  29.   mov di,0
  30.   mov es,di
  31.   mov di, tipo*4
  32.   cli
  33.   mov ax,data
  34.   mov ds,ax
  35.   mov ax,es:[di]
  36.   mov VIEJOIP,ax
  37.   mov ax,es:[di+2]
  38.   mov VIEJOCS,ax
  39.   sti
  40. ENDM
  41.  
  42. RESTAURAVECTOR MACRO TIPO, VIEJOIP, VIEJOCS
  43.   mov di,0
  44.   mov es,di
  45.   mov di, tipo*4
  46.   cli
  47.   mov ax,data
  48.   mov ds,ax
  49.   mov ax,VIEJOCS
  50.   mov es:[di+2],ax
  51.   mov ax,VIEJOIP
  52.   mov es:[di],ax
  53.   sti
  54. ENDM
  55.  
  56.  
  57. CODE SEGMENT
  58.   MiProg proc FAR
  59.   assume cs:code,ds:data
  60.  
  61.   mov ax,data
  62.   mod ds,ax
  63. &#59;Inhabilito interrupcion
  64.   cli
  65.  
  66. ;////////// PROGRAMACION DEL PUERTO SERIE//////////////////////////
  67.  
  68. &#59;;;;;;;;;;;;;;;;;;;;;;;;;; Registro de línea de control
  69.   Mov Dx,3FBH
  70.   Mov AL,10000000b
  71.   Out Dx, AL
  72.  
  73. &#59;;;;;;;;;;;;;;;;;;;;;;;;;; Divisor de la veloidad en bauidos (byte alto)
  74.    Mov DX,3F9H
  75.   Mov AL,0
  76.   Out Dx, AL
  77.  
  78. &#59;;;;;;;;;;;;;;;;;;;;;;;;;; Divisor de la velocidad en baudios (byte bajo)
  79.   Mov Dx,3F8H
  80.   Mov AL,12H
  81.   Out DX,AL
  82.  
  83. &#59;;;;;;;;;;;;;;;;;;;;;;;;;; Longuitud de los caracteres los bits 0 y 1 deben estar en 1para que sea de 8 bit
  84.   Mov AL,00000011b
  85.   Mov DX,3FBH
  86.   Out DX, AL
  87.  
  88.   Mov DX,3FCH&#59;INSTRUCCION DEL PROFE
  89.   Mov AL,8d
  90.   Out DX,AL
  91.  
  92. &#59;;;;;;;;;;;;;;;;;;;;;;;;;; Guardamos el puerto
  93.   Mov DX,3F8H
  94.   IN AL,DX&#59;;;;;;;;;;;;;;;;;leo que es lo que me llega por el puerto  
  95.  
  96.  
  97. ;////////////////////////////
  98.         GUARDAVECTOR 8, VIEJOIP8, VIEJOCS8
  99.         PONVECTOR 8, envia
  100.   PONVECTOR 9, recibe
  101.            
  102. &#59;Desenmascaro la IRQ4
  103.   in al,21h        &#59;Leo el regístro de mascara
  104.   and al,11101111b &#59;Solo altero el bit 5 perteneciente a la IRQ4
  105.   out 21h,al       &#59;Modifico el registro de mascara con el IRQ4 desenmascarado
  106.  
  107. &#59;Habilito interrupcion
  108.   sti
  109.   CMP letra_ok,1  
  110.    AA1: MOV AH,01h  &#59; ACA HAGO TODO LO NECESARIO PARA PODER IMPRIMIR UN CARACTER EN PANTALLA
  111.   INT 21h
  112.   MOV CL,AL
  113.   MOV CONT,1
  114.   JMP AA1
  115.    aqui:
  116.   cmp fin,1
  117.   jne aqui
  118.  
  119.   RESTAURAVECTOR 8, VIEJOIP8, VIEJOCS8
  120.  
  121. &#59;Enmascaro la IRQ4 en el controlador de interrupciones, y la restauro
  122.   in al,21h
  123.   or al,0001 0000
  124.   out 21h,al
  125.  
  126.   mov ax,4c00h
  127.   int 21h
  128.  
  129. ;/////////INTERRUPICON PARA RECIBIR////////////
  130. recibe:
  131.   push ax
  132.   push dx
  133.   push ds
  134.  
  135.   mov ax,data
  136.   mov ds,ax
  137.  
  138.   mov al,20h
  139.   out 20h,al
  140.  
  141.   pod ds
  142.   pop dx
  143.   pop ax
  144.       IRET
  145.  
  146.  
  147. ;////////INTERRUPCION PARA ENVIAR////////////
  148. envia:
  149.   recibe:
  150.   push ax
  151.   push dx
  152.   push ds
  153.  
  154.   mov ax,data
  155.   mov ds,ax
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.   Mov DX,3F8H
  163.    
  164.   OUT DX,CL&#59;;;;;;;;;;;;;;;;; ACA TENGO GUARDADO EL DATO QUE VIENE DESDE TECLADO
  165.  
  166.  
  167.  
  168.  
  169.   mov al,20h
  170.   out 20h,al
  171.  
  172.   pod ds
  173.   pop dx
  174.   pop ax
  175.      
  176.       IRET
  177. ;////////////////////////////
  178.  
  179. MiProg ENDP
  180. CODE ENDS
  181. END MiProg
  182.  
  183.  
  184.  
bueno, eso es lo que llevo, Saludos
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Martes 4 de Julio de 2006, 20:25
:P  :P

Yo creo que antes de discutir cualquier cosa aun no no has  aclarado sobre que estas trabajando, es decir el programa  es para una pc para un micro para un sistema minimo no se en fin deberias aclarar ese punto lo considero necesario
yo tengo unos 3 o 4 archivos que trabajan ptos serie son para usar el pto serie de una pc es decir COM1
.
Título: Re: Com1. Ensamblador
Publicado por: guiweb en Martes 4 de Julio de 2006, 21:08
Cita de: "Radoslav"
:P  :P

Yo creo que antes de discutir cualquier cosa aun no no has  aclarado sobre que estas trabajando, es decir el programa  es para una pc para un micro para un sistema minimo no se en fin deberias aclarar ese punto lo considero necesario
yo tengo unos 3 o 4 archivos que trabajan ptos serie son para usar el pto serie de una pc es decir COM1
.
Estimadicimo, usted tiene toda la santa razon.
Estoy trabajando para usar el puerto serie (com1) de un PC, la idea del chat es conectar por com1 con los pines 2-3,3-2, 5-5 del puerto 2 PC's y por DOS chatear un poco, estoy trabajando sobre un AMD sempron 3100 con windows XP pro.
bueno parece que ahora si avance algo y me siento feliz conmigo mismo, vean el codigo que les dejo, y si alguien puede probarlo, se los agradecerían un monton.
Código: Text
  1.  
  2. STACK SEGMENT STACK
  3.  
  4. STACK ENDS
  5.  
  6. DATA SEGMENT
  7.  
  8.  letra_enviada db 1
  9.  letra_recibida db 1
  10.  letra_enviada_ok db 1
  11.  letra_recibida_ok db 1
  12.  viejoip8 dw 0
  13.  viejocs8 dw 0
  14.  contador_fin dw 500
  15.  
  16. DATA ENDS
  17.  
  18. ;Definicion de macros a utilizar
  19. ;///////////////////////////////////////////////////////////////
  20. PONVECTOR MACRO TIPO, SUBRUTINA
  21.   push di
  22.   mov di,0
  23.   mov es,di
  24.   mov di, tipo*4
  25.   cli
  26.   mov word ptr es:[di],offset subrutina
  27.   mov word ptr es:[di+2],seg subrutina
  28.   sti
  29.   pop di
  30. ENDM
  31.  
  32. GUARDAVECTOR MACRO TIPO, VIEJOIP, VIEJOCS
  33.   mov di,0
  34.   mov es,di
  35.   mov di, tipo*4
  36.   cli
  37.   mov ax,data
  38.   mov ds,ax
  39.   mov ax,es:[di]
  40.   mov VIEJOIP,ax
  41.   mov ax,es:[di+2]
  42.   mov VIEJOCS,ax
  43.   sti
  44. ENDM
  45.  
  46. RESTAURAVECTOR MACRO TIPO, VIEJOIP, VIEJOCS
  47.   mov di,0
  48.   mov es,di
  49.   mov di, tipo*4
  50.   cli
  51.   mov ax,data
  52.   mov ds,ax
  53.   mov ax,VIEJOCS
  54.   mov es:[di+2],ax
  55.   mov ax,VIEJOIP
  56.   mov es:[di],ax
  57.   sti
  58. ENDM
  59.  
  60.  
  61. CODE SEGMENT
  62.   MiProg proc FAR
  63.   assume cs:code,ds:data
  64.  
  65.   mov ax,data
  66.   mov ds,ax
  67. ;Inhabilito interrupcion
  68.   cli
  69.  
  70. ;////////// PROGRAMACION DEL PUERTO SERIE//////////////////////////
  71.  
  72. ;;;;;;;;;;;;;;;;;;;;;;;;;; Registro de línea de control
  73.   Mov Dx,3FBH
  74.   Mov AL,10000000b
  75.   Out Dx, AL
  76.   
  77. ;;;;;;;;;;;;;;;;;;;;;;;;;; Divisor de la veloidad en bauidos (byte alto)
  78.    Mov DX,3F9H
  79.   Mov AL,0
  80.   Out Dx, AL
  81.   
  82. ;;;;;;;;;;;;;;;;;;;;;;;;;; Divisor de la velocidad en baudios (byte bajo)
  83.   Mov Dx,3F8H
  84.   Mov AL,60H
  85.   Out DX,AL
  86.   
  87. ;;;;;;;;;;;;;;;;;;;;;;;;;; Longuitud de los caracteres los bits 0 y 1 deben estar en 1para que sea de 8 bit
  88.   Mov AL,00000011b
  89.   Mov DX,3FBH
  90.   Out DX, AL
  91.   
  92.   Mov DX,3FCH;INSTRUCCION DEL PROFE
  93.   Mov AL,8d
  94.   Out DX,AL
  95.  
  96. ;;;;;;;;;;;;;;;;;;;;;;;;;; Guardamos el puerto
  97.   Mov DX,3F8H
  98.   IN AL,DX;;;;;;;;;;;;;;;;;leo que es lo que me llega por el puerto  
  99.   
  100.  
  101. ;////////////////////////////
  102.         GUARDAVECTOR 8, VIEJOIP8, VIEJOCS8
  103.         PONVECTOR 8, envia
  104.   PONVECTOR 9, recibe
  105.            
  106. ;Desenmascaro la IRQ4
  107.   in al,21h        ;Leo el regístro de mascara
  108.   and al,11101111b&#59;Solo altero el bit 5 perteneciente a la IRQ4
  109.   out 21h,al      &#59;Modifico el registro de mascara con el IRQ4 desenmascarado
  110.   
  111. ;Habilito interrupcion
  112.   sti
  113. espera:  CMP contador_fin,0
  114.   JE  salir_programa
  115. &#59;;;;;;;;;;;;;;;;;;;;;;;;;Ahora, voy a verificar si tengo alguna nueva letra
  116.   CMP letra_recibida_ok,1
  117.   JNE escribe
  118.   MOV AH,09h    &#59;;;; si tengo una nueva letra, la cargo en dx, y la muestro en pantalla.
  119.   LEA DX,letra_recibida  ;;;;;;;;;;;;Con esta funcion, se escribe un caracter en pantalla y se guarda en al
  120.   INT 21h
  121.   MOV letra_recibida_ok,0
  122.   JMP escribe
  123.   
  124. escribe:  CMP letra_enviada_ok,1;una vez que se haya enviado la letra, dejo el valor en 1, para que pueda enviar otra
  125.   JNE decrementa
  126.   CMP contador_fin,0
  127.   CMP letra_enviada,1
  128.   JNE decrementa
  129.   JE salir_programa
  130.   MOV ah,01h
  131.   INT 21h
  132.   MOV letra_enviada,al
  133.   MOV letra_enviada_ok,0;con esto digo que he escrito una letra y que está lista para ser enviada
  134.   JMP decrementa
  135.  
  136.    decrementa: DEC contador_fin
  137.    JNZ espera  &#59;;;;; aca itero, para ver si he recibido una letra o si envie una letra.
  138.    JMP salir_programa
  139.  
  140.   RESTAURAVECTOR 8, VIEJOIP8, VIEJOCS8
  141.  
  142. ;Enmascaro la IRQ4 en el controlador de interrupciones, y la restauro
  143.   in al,21h
  144.   xor al,00010000b
  145.   out 21h,al
  146.  
  147. salir_programa:  mov ax,4c00h
  148.   int 21h
  149.  
  150. ;/////////INTERRUPICON PARA RECIBIR////////////
  151. recibe:
  152.   push ax
  153.   push dx
  154.   push ds
  155.  
  156.   mov ax,data
  157.   mov ds,ax
  158.   mov dx,3f8h
  159.   in al,dx
  160.   jz sale_recibe
  161.   mov letra_recibida,al
  162.   mov letra_recibida_ok,1
  163.   mov contador_fin,500
  164.   jmp sale_recibe
  165.   sale_recibe: mov al,20h
  166.   out 20h,al
  167.  
  168.   pop ds
  169.   pop dx
  170.   pop ax
  171.       IRET
  172.   
  173.  
  174. ;////////INTERRUPCION PARA ENVIAR////////////
  175. envia:
  176.   push ax
  177.   push dx
  178.   push ds
  179.  
  180.   mov ax,data
  181.   mov ds,ax
  182.   
  183.   CMP letra_enviada_ok,0
  184.   JNE sale_envia
  185.   Mov DX,3F8H
  186.   MOV al,letra_enviada
  187.    OUT DX,al;;;;;;;;;;;;;;;;; ACA TENGO GUARDADO EL DATO QUE VIENE DESDE TECLADO
  188.   MOV letra_enviada_ok,1
  189.   mov contador_fin,500
  190.   jmp sale_envia
  191.   
  192.   sale_envia: mov al,20h
  193.   out 20h,al
  194.  
  195.   pop ds
  196.   pop dx
  197.   pop ax
  198.       
  199.       IRET
  200. ;////////////////////////////
  201.  
  202. MiProg ENDP
  203. CODE ENDS
  204. END MiProg
  205.  
  206.  
  207.  
por lo pronto, no es nada espectacular, estoy en el trabajo y no lo he podido probar ya que no tengo mi cable aqui, pero espero que alguien lo pueda probar y que me cuente jejej GRANDE OTTO PETERSEN (mi profe)

EDITADO POR MII
bueno parece que me emocione un poco, la verdad es que todo este codigo no hace nada  :blink: solo muestra un monton de basura, no lo habia podido probar, ya que mi notebook no tiene puerto seria :P bueno la cosa es que muestra solo basura y se cierra enseguida, a que se puede deber?? :scream:  :alien:  :ph34r:
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Martes 4 de Julio de 2006, 21:18
el codigo como tal parece no tener errores, pero las instrucciones in y out no se acostumbra usarlas en el PC lo cual no quiere decir que no funcione adecuadamente , primeramente deberias asegurar que la direccion que le estas dando como tu puerto COM1 sea la adecuada y que los dos puerto com1 de las dos maquinas que quieres intercomunicar esten empatados de tener complicaciones yo recomendaria el uso de los servicios de la int 14 pero de estar restringido, todo se soluciuonan haciendo pruebas, yo hice el chat que dices pero con turbo C y ASM mezclado deja lo busco y te lo paso para que lo que veas
ok
 ?
Título: Re: Com1. Ensamblador
Publicado por: guiweb en Martes 4 de Julio de 2006, 21:32
Cita de: "Radoslav"
el codigo como tal parece no tener errores, pero las instrucciones in y out no se acostumbra usarlas en el PC lo cual no quiere decir que no funcione adecuadamente , primeramente deberias asegurar que la direccion que le estas dando como tu puerto COM1 sea la adecuada y que los dos puerto com1 de las dos maquinas que quieres intercomunicar esten empatados de tener complicaciones yo recomendaria el uso de los servicios de la int 14 pero de estar restringido, todo se soluciuonan haciendo pruebas, yo hice el chat que dices pero con turbo C y ASM mezclado deja lo busco y te lo paso para que lo que veas
ok
 ?
ok muchas gracias, te cuento que el codigo que subi, solo muestra basura y se cierra inmediatamente... cosa rara, espero poder ver tu codigo y asi entender un poquito mas,

VAMOS VAMOS QUE SE PUEDE :D ;)  :D
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Jueves 6 de Julio de 2006, 20:36
Bueno este es el codigo se compila en turbo C , aclaro este no es mio me lo encontre por ahi , el que yo tengo escanea los puertos UART _USART y bueno en fin esta un poco muy loco y creo que entenderas mejor este .


Código: Text
  1.  
  2. #include<conio.h>
  3. #include<stdlib.h>
  4. #include<dos.h>
  5. #include<io.h>
  6. #include<stdio.h>
  7. #include<alloc.h>
  8. /*definimos el valor que toman los puertos*/
  9. #define COM1 0
  10. #define COM2 1
  11.  
  12. /*definimos las distintas velocidades de trasmision*/
  13. #define bd_110 0
  14. #define bd_150 32
  15. #define bd_300 64
  16. #define bd_600 96
  17. #define bd_1200 128
  18. #define bd_2400 160
  19. #define bd_4800 192
  20. #define bd_9600 224
  21.  
  22. /*definimos los valores para los bits de datos*/
  23. #define bitd_7 2
  24. #define bitd_8 3
  25.  
  26. /*definimos los valores para los bits de stop*/
  27. #define bits_1 0
  28. #define bits_2 4
  29.  
  30. /*definimos los valores para la paridad*/
  31. #define nula 0
  32. #define impar 8
  33. #define par 24
  34.  
  35. void inicializar(int,int,int,int,int);
  36. unsigned char compruebo(int);
  37. void leer_car(unsigned char *,int);
  38. void enviar_car(unsigned char,int);
  39.  
  40. void main(void)
  41. {
  42. unsigned char let,car,bytel;
  43. clrscr();
  44. inicializar(COM1,bd_9600,impar,bits_1,bitd_8);
  45. while (let!=27)
  46.    {
  47.    if (compruebo(COM1)&1) //comprobamos si el bit 0 del valor retornado
  48.       {                   //es 1
  49.       leer_car(&car,COM1);
  50.       if (car!=0)
  51.         {
  52.          if (car=='\r') car='\n';
  53.          printf("%c",car);
  54.         }
  55.         car=0;
  56.         enviar_car(0,COM1);
  57.       }
  58.       if (kbhit())
  59.       {
  60.       let=getch();
  61.       if (let!=27)
  62.          {
  63.            enviar_car(let,COM1);
  64.          }
  65.       }
  66.    }
  67. }
  68. void inicializar(int puerto,int baudios,int paridad,int b_stop,int b_datos)
  69. {
  70. unsigned char total;//sumaremos los par metros de inicializacion
  71.       total=baudios+paridad+b_stop+b_datos;
  72. asm {          //inicilizamos el puerto
  73.       mov ah,0h   //el servicio uh nos permite inicializar el puerto
  74.       mov dx,puerto //pasamos el puerto a 'dx'
  75.       mov al,total //pasamos la suma de los parametros a 'al'
  76.       int 14h //solicitamos la interrupcion 14h
  77.       }
  78.  
  79. }
  80. unsigned char compruebo(int puerto)
  81. {
  82. unsigned char com;
  83. asm { //estado del puerto
  84.      mov ah,3h //el servicio 3h comprueba el estado del puerto
  85.      mov dx,puerto //pasamos el puerto a 'dx'
  86.      int 14h //solicitamos la interrupcion 14h
  87.      mov com,ah //codigo de error retornado a 'ah' y pasado a 'com'
  88.    }
  89.    return com;
  90. }
  91. void leer_car(unsigned char *caracter, int puerto)
  92. {
  93.    unsigned char letra;
  94.    asm{    //recoge un caracter
  95.      mov ah,2h      //el servicio 2h nos permite recoger un caracter
  96.      mov dx,puerto //pasamos el puerto a DX
  97.      int 14h   //solicitamos la interrupcion 14h
  98.      mov letra,al //el caracter es retornado a 'al' y la pasamos a letra
  99.       }
  100.       *caracter=letra;
  101. }
  102. void enviar_car(unsigned char caracter, int puerto)
  103.    {
  104.    asm{    //envia un caracter
  105.         mov ah,1h   //el servicio 1h nos permite enviar un caracter
  106.         mov dx,puerto //pasamos el puerto a DX
  107.         mov al,caracter   //pasamos el caracter a 'al'
  108.         int 14h   //solicitamos la interrupcion 14h
  109.      }
  110.    }
  111.  
  112.  
  113.  

espero te sirva y si tienes dudas me puedes preguntar.
Título: Re: Com1. Ensamblador
Publicado por: guiweb en Jueves 6 de Julio de 2006, 22:24
Gracias por tu ayuda, la verdad es que me he propuesto hacerlo solo con ASM, mira adelante un poco el codigo y segun yo, deberia estar funcionando correctamente, pero lo probe con 2 computadores y no funciono, mira te muestro el Codigo Completo..
bueno y espero que le sirva a algun estudiante por ahi que este desesperado buscandolo jejeje
es un chat que recibe por interrupcion, a traves de puerto serie..
Bicholey , amigo te pido porfavor si puedes probarlo y ver si a ti te funciona, muchas gracias
Código: Text
  1.  
  2. STACK SEGMENT STACK
  3.    db 256 dup (0)
  4. STACK ENDS
  5.  
  6. DATA SEGMENT
  7.   copyrigth db 'Programa Desarrollado por Guillermo Stortoni y Hernan Escalante, UCINF 2006',13,'$'
  8.  letra_enviada db 1
  9.  letra_recibida db 1
  10.  letra_enviada_ok db 1
  11.  letra_recibida_ok db 1
  12.  ren_limpio_rec db 1
  13.  ren_limpio db 1
  14.  renglon_limpio db '                                                                              ',13,'$'
  15.  renglon_envia db 5
  16.  renglon_recibe db 5
  17.  columna_envia db 5
  18.  columna_recibe db 5
  19.  viejoip8 dw 0
  20.  viejocs8 dw 0
  21.  cartel1 db '...Me estan Diciendo:',10,13,'$'
  22.  cartel2 db '...Estoy Escribiendo:',10,13,'$'
  23.  intro db 10,'$'
  24. DATA ENDS
  25.  
  26. ;Definicion de macros a utilizar
  27. ;///////////////////////////////////////////////////////////////
  28. PONVECTOR MACRO TIPO, SUBRUTINA
  29.   push di
  30.   mov di,0
  31.   mov es,di
  32.   mov di, tipo*4
  33.   cli
  34.   mov word ptr es:[di],offset subrutina
  35.   mov word ptr es:[di+2],seg subrutina
  36.   sti
  37.   pop di
  38. ENDM
  39.  
  40. GUARDAVECTOR MACRO TIPO, VIEJOIP, VIEJOCS
  41.   mov di,0
  42.   mov es,di
  43.   mov di, tipo*4
  44.   cli
  45.   mov ax,data
  46.   mov ds,ax
  47.   mov ax,es:[di]
  48.   mov VIEJOIP,ax
  49.   mov ax,es:[di+2]
  50.   mov VIEJOCS,ax
  51.   sti
  52. ENDM
  53.  
  54. RESTAURAVECTOR MACRO TIPO, VIEJOIP, VIEJOCS
  55.   mov di,0
  56.   mov es,di
  57.   mov di, tipo*4
  58.   cli
  59.   mov ax,data
  60.   mov ds,ax
  61.   mov ax,VIEJOCS
  62.   mov es:[di+2],ax
  63.   mov ax,VIEJOIP
  64.   mov es:[di],ax
  65.   sti
  66. ENDM
  67.  
  68. CODE SEGMENT
  69.   MiProg proc FAR
  70.   assume cs:code,ds:data
  71.  
  72.    mov ax,data
  73.   mov ds,ax
  74.  
  75.  &#59;inicializo la variable letra_recibida_ok con un 0, para iniciar la transmision.
  76.   mov letra_recibida_ok,0
  77.   mov renglon_recibe,1
  78.   mov renglon_envia,13
  79.   mov columna_envia,0
  80.   mov columna_recibe,0
  81.   mov ren_limpio,0
  82.   mov ren_limpio_rec,0
  83.  &#59;limpio la pantalla :D
  84.   mov ax,0600h
  85.   mov bh,17h
  86.   mov cx,0000h
  87.   mov dx,184fh
  88.   int 10h
  89.  &#59;muevo el cursor a la posicion renglon 0, columna 1: con el mensaje "aca se recibe"&#59;)
  90.   MOV ah,02h
  91.   MOV bh,00h
  92.   MOV dh,00
  93.   MOV dl,01
  94.   INT 10h
  95.   lea dx,cartel1
  96.   mov ah,09h
  97.   int 21h
  98.  &#59;muevo el cursor a la posicion renglon 12, columna 1: con el mensaje "aca se envia"&#59;)
  99.   MOV ah,02h
  100.   MOV bh,00h
  101.   MOV dh,12
  102.   MOV dl,01
  103.   INT 10h
  104.   lea dx,cartel2
  105.   mov ah,09h
  106.   int 21h
  107.  &#59; pongo el copyrigth
  108.   MOV ah,02h
  109.   MOV bh,00h
  110.   MOV dh,24
  111.   MOV dl,00
  112.   INT 10h
  113.   lea dx,copyrigth
  114.   mov ah,09h
  115.   int 21h
  116.  &#59;Inhabilito interrupcion
  117.   cli
  118.  
  119. ;////////// PROGRAMACION DEL PUERTO SERIE//////////////////////////
  120.  
  121. &#59;;;;;;;;;;;;;;;;;;;;;;;;;; Registro de línea de control
  122.   Mov Dx,3FBH
  123.   Mov AL,10000000b
  124.   Out Dx, AL
  125. &#59;;;;;;;;;;;;;;;;;;;;;;;;;; Divisor de la veloidad en bauidos (byte alto)
  126.    Mov DX,3F9H
  127.   Mov AL,0
  128.   Out Dx, AL
  129. &#59;;;;;;;;;;;;;;;;;;;;;;;;;; Divisor de la velocidad en baudios (byte bajo)
  130.   Mov Dx,3F8H
  131.   Mov AL,12H
  132.   Out DX,AL
  133. &#59;;;;;;;;;;;;;;;;;;;;;;;;;; Longuitud de los caracteres los bits 0 y 1 deben estar en 1para que sea de 8 bit
  134.   Mov AL,00000011b
  135.   Mov DX,3FBH
  136.   Out DX, AL
  137. &#59;;;;;;;;;;;;;;;;;;;;;;;;;; INSTRUCCION DEL PROFE
  138.   Mov DX,3FCH
  139.   Mov AL,03h
  140.   Out DX,AL
  141. &#59;;;;;;;;;;;;;;;;;;;;;;;;;; Habilito dicho por el profe
  142.   Mov DX,3F9H
  143.   Mov AL,1
  144.   Out Dx, AL
  145.  
  146. ;////////////////////////////
  147.   GUARDAVECTOR 8, VIEJOIP8, VIEJOCS8
  148.   PONVECTOR 12, recibe
  149.            
  150. &#59;Desenmascaro la IRQ4
  151.   in al,21h        &#59;Leo el regístro de mascara
  152.   and al,11101111b &#59;Solo altero el bit 5 perteneciente a la IRQ4
  153.   out 21h,al       &#59;Modifico el registro de mascara con el IRQ4 desenmascarado
  154.  
  155. &#59;Habilito interrupcion
  156.   sti
  157.   jmp escribe
  158.  
  159.  &#59;######################### ACA RECIBO, MUESTRO EN PANTALLA Y ACTUALIZO EL RENGLON ##########################
  160.  &#59;#                                                                                                         #
  161.  &#59;#                                                                                                         #
  162.   recibir: MOV ah,02h     &#59;peticion para colocar el cursor
  163.   MOV bh,00h              &#59;numero de pagina 0
  164.   MOV dh,renglon_recibe   &#59;la ultima posicion donde se escribio una letra
  165.   MOV dl,columna_recibe   &#59;la columna, la incrementa automaticamente la interrupcion RECIBE
  166.   INT 10h
  167.   CMP letra_recibida,0Dh  &#59;me llego un enter?
  168.   JNE sigue
  169.   mov columna_recibe,0
  170.   cmp renglon_recibe,9
  171.   jne sigue
  172.   mov ren_limpio_rec,1
  173.   mov renglon_recibe,1
  174.   jmp sigue
  175. sigue: cmp ren_limpio_rec,1
  176.   jne continua
  177.   lea dx,renglon_limpio
  178.   mov ah,09h
  179.   int 21h
  180.   jmp continua
  181. continua:  mov dl,letra_recibida
  182.   MOV ah,06h             &#59; la funcion 06h, me sirve para mostrar 1 caracter
  183.   INT 21h
  184.   MOV letra_recibida_ok,0
  185.   INC columna_recibe
  186.   JMP escribe
  187.  
  188.  &#59;######################### ACA ESCRIBO Y ENVIO POR PUERTO ##########################
  189.  &#59;#
  190.  &#59;#
  191.   escribe:  CMP letra_recibida_ok,1&#59; si la interrupcion hizo que me cayera una letra, dejo que se escriba la letra que llego
  192.   je recibir            &#59;le doy la posibilidad de que la escriba, antes de yo seguir escribiendo
  193.   MOV ah,02h           &#59;peticion para colocar el cursor
  194.   MOV bh,00h           &#59;numero de pagina 0
  195.   MOV dh,renglon_envia &#59;uso el ultimo renglon que me quedo, para seguir escribiendo en la misma posicion&#59;)
  196.   MOV dl,columna_envia &#59;uso la ultima columna que me quedo, para seguir escribiendo en la misma posicion&#59;)
  197.   INT 10h              &#59;interrupcion del bios
  198.   CMP ren_limpio,1     &#59;esta variable, si esta en 1, me indica que ya he escrito 10 renglones, por lo tanto borra el primer renglon
  199.   jne repite           &#59;si no he escrito aun 10 renglones, sigue con el codigo normalmente
  200.   lea dx, renglon_limpio;si no es asi, borra el primer renglon utilizado para poder escribir libremente
  201.   mov ah,09h           &#59;muestra el '             '
  202.   int 21h              &#59;DOS
  203.   repite: MOV ah,01h   &#59;pido solo 1 caracter el cual se despliega en pantalla y se guarda en al
  204.   INT 21h              &#59;DOS
  205.   cmp al,1Bh           &#59;comparo si el caracter presionado es 'esc' si es asi, se terminará el programa, de lo contrar continua
  206.   je salir_programa     &#59; esta esta clara cierto?
  207.   MOV letra_enviada,al &#59;guardo la tecla presionada en la variable tecla_enviada
  208.   MOV letra_enviada_ok,0&#59;con esto pongo una bandera de que he escrito una letra
  209.   MOV DX,0000           &#59;puerto COM1
  210.   MOV AH,01             &#59; funcion 01h-enviando un caracter al COM
  211.   MOV AL,letra_enviada  &#59;caracter a ser enviado
  212.   INT 14
  213.  &#59;MOV dx,3F8h           &#59; llamo al puerto COM1
  214.  &#59;out dx,al             &#59; escribo el caracter presionado por el puerto
  215.   inc columna_envia     &#59; si escribi una tecla, debo moverme un espacio, para eso incremento la columna
  216.   cmp letra_enviada,0dh &#59;comparo si la tecla presionada fue enter, de ser asi, necesitare hacer un salto de linea
  217.   jne repite            &#59;sino, sigue escribiendo
  218.   mov columna_envia,0   &#59;si aprete enter, retorno el carro
  219.   inc renglon_envia     &#59;salto 1 renglon
  220.   lea dx,intro          &#59;cargo un mensaje que lo unico que tiene es 1 espacio vacio
  221.   mov ah,09h            &#59;lo muestro en pantalla
  222.   int 21h               &#59;DOS
  223.   cmp renglon_envia,23  &#59;esto es para contar si ya mi cursor esta en el renglon 23
  224.   je  mod_renglon_envia &#59;y si es asi, lo reinicio al 13
  225.   jne escribe           &#59; sino, sigo escribiendo
  226. mod_renglon_envia: mov renglon_envia,13
  227.   mov ren_limpio,1       &#59;pongo una bandera avisando que y he escrito 23 renglones
  228.   jmp escribe             &#59;sigo escribiendo
  229.  
  230.  
  231. RESTAURAVECTOR 8, VIEJOIP8, VIEJOCS8
  232.  
  233. ;Enmascaro la IRQ4 en el controlador de interrupciones, y la restauro
  234. in al,21h
  235. or al,00010000b
  236. out 21h,al
  237.  
  238. salir_programa:  mov ax,4c00h
  239.                 int 21h
  240.  
  241. ;/////////INTERRUPICON PARA RECIBIR////////////
  242. recibe:
  243.   push ax
  244.   push dx
  245.   push ds
  246.  
  247.   mov ax,data
  248.   mov ds,ax
  249.   mov dx,3f8h
  250.   in al,dx
  251.   mov letra_recibida,al
  252.   mov letra_recibida_ok,1
  253.   inc renglon_recibe
  254.   mov al,20h
  255.   out 20h,al
  256.  
  257.   pop ds
  258.   pop dx
  259.   pop ax
  260.       IRET
  261.  
  262. MiProg ENDP
  263. CODE ENDS
  264. END MiProg
  265.  
  266.  
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Lunes 10 de Julio de 2006, 20:42
:unsure:  :unsure:


Pues lo he probado pero no me funciono de igual manera, ahora he tenido mucho trabajo pero cuando tengo un tiempo me dare un tiempo para revisarlo más a fondo.
Título: Re: Com1. Ensamblador
Publicado por: guiweb en Martes 11 de Julio de 2006, 04:59
bueno el plazo ya se me acabo y el programa lo tuve que entregar, la buena noticia es que TENGO HECHO EL CHAT EN ASSEMBLER CON INTERRUPCIONES :D que super bueno, tiene un pequeño detalle que es cuando me llegan los caracteres despues el cursor no regresa a la zona de escritura, por lo que debo arreglar este inconveniente y listo :D.

Gracias por su ayuda y en especial a Bicholey, te pasaste amigo muchas gracias

Cualquier cosa si alguien lo quiere, es cosa que deje el pedido aca en el foro, yo voy a seguir perfeccionandolo para lanzarlo a la web...

Saludos
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Miércoles 12 de Julio de 2006, 05:58
:devil:  :devil:  :devil:


je je je je je no es nada yo hice varias de esas cosas cuando iba ala uni la diferencia es que yo siempre trabaje a 16 bits y como mi especialidad es la electronica no me he actualizado,es mas a penas estoy actualizando mis conocimientos.
Título: Re: Com1. Ensamblador
Publicado por: scarecrow en Lunes 4 de Junio de 2007, 17:06
Como me quedaria si lo fuera a configurar asi
Elabore un programa en lenguaje ensamblador que configure el puerto serie (COM 1) para que reciba 20 datos de 8 bits cada uno con un bit de stop y paridad par para una velocidad de 300 baudios.
Título: Re: Com1. Ensamblador
Publicado por: Bicholey en Lunes 4 de Junio de 2007, 17:14
Cita de: "scarecrow"
Como me quedaria si lo fuera a configurar asi
Elabore un programa en lenguaje ensamblador que configure el puerto serie (COM 1) para que reciba 20 datos de 8 bits cada uno con un bit de stop y paridad par para una velocidad de 300 baudios.
 :P  :D  :P  :D  :P  :lol:  :lol:  :lol:


En primera ya esta todo plenamente explicado en este post, al menos tomate el tiempo de leerlo, en segunda ya habias abierto una discucion al respecto y se te respondio y en tercera no te vamos a hacer la tarea, ya tienes todo el material para hacerlo, al menos intenta esforzar un poco el cerebro, que si no podes realizar un programa tan sencillo con toda esta informacion de verdad os recomiendo que te dediques a otra profesion, quiza abogado o contador...