• Domingo 17 de Noviembre de 2024, 19:36

Autor Tema:  Com1. Ensamblador  (Leído 13865 veces)

JJFL

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Com1. Ensamblador
« en: Martes 30 de Mayo de 2006, 19:50 »
0
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.

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #1 en: Miércoles 31 de Mayo de 2006, 01:30 »
0
: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
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


Toph

  • Moderador
  • ******
  • Mensajes: 420
  • Nacionalidad: sv
    • Ver Perfil
    • http://www.electronicayotros.blogspot.com/
Re: Com1. Ensamblador
« Respuesta #2 en: Miércoles 31 de Mayo de 2006, 03:55 »
0
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?
Por favor leer esto antes de postear. Gracias
NO alimenten al TROLL y morirá
¿Querés ayudar?, pues doná comida gratis con un simple clic aqui ,sin trucos
photobucket , Google , wine y cutepdf Rock!!!


programacion,c,c++,
Microcontroladores,java,linux,videojuegos,
,.NET,asm,codigo
por favor este 2012 que sea

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #3 en: Miércoles 31 de Mayo de 2006, 16:14 »
0
: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.
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


Toph

  • Moderador
  • ******
  • Mensajes: 420
  • Nacionalidad: sv
    • Ver Perfil
    • http://www.electronicayotros.blogspot.com/
Re: Com1. Ensamblador
« Respuesta #4 en: Miércoles 31 de Mayo de 2006, 21:39 »
0
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.  
Por favor leer esto antes de postear. Gracias
NO alimenten al TROLL y morirá
¿Querés ayudar?, pues doná comida gratis con un simple clic aqui ,sin trucos
photobucket , Google , wine y cutepdf Rock!!!


programacion,c,c++,
Microcontroladores,java,linux,videojuegos,
,.NET,asm,codigo
por favor este 2012 que sea

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #5 en: Lunes 5 de Junio de 2006, 16:39 »
0
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.
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


Toph

  • Moderador
  • ******
  • Mensajes: 420
  • Nacionalidad: sv
    • Ver Perfil
    • http://www.electronicayotros.blogspot.com/
Re: Com1. Ensamblador
« Respuesta #6 en: Lunes 5 de Junio de 2006, 22:48 »
0
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
Por favor leer esto antes de postear. Gracias
NO alimenten al TROLL y morirá
¿Querés ayudar?, pues doná comida gratis con un simple clic aqui ,sin trucos
photobucket , Google , wine y cutepdf Rock!!!


programacion,c,c++,
Microcontroladores,java,linux,videojuegos,
,.NET,asm,codigo
por favor este 2012 que sea

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #7 en: Martes 6 de Junio de 2006, 06:57 »
0
:lol:  :lol:
ok ok pero no te enojes
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


guiweb

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #8 en: Martes 20 de Junio de 2006, 15:59 »
0
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

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #9 en: Martes 20 de Junio de 2006, 16:28 »
0
primeramente checate el link que di en el segundo post, pero es sencillo

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
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


guiweb

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #10 en: Martes 20 de Junio de 2006, 16:50 »
0
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

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #11 en: Martes 20 de Junio de 2006, 17:12 »
0
: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...
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


guiweb

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #12 en: Martes 20 de Junio de 2006, 17:42 »
0
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

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #13 en: Martes 20 de Junio de 2006, 17:53 »
0
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.
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


Toph

  • Moderador
  • ******
  • Mensajes: 420
  • Nacionalidad: sv
    • Ver Perfil
    • http://www.electronicayotros.blogspot.com/
Re: Com1. Ensamblador
« Respuesta #14 en: Miércoles 21 de Junio de 2006, 01:11 »
0
: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:
Por favor leer esto antes de postear. Gracias
NO alimenten al TROLL y morirá
¿Querés ayudar?, pues doná comida gratis con un simple clic aqui ,sin trucos
photobucket , Google , wine y cutepdf Rock!!!


programacion,c,c++,
Microcontroladores,java,linux,videojuegos,
,.NET,asm,codigo
por favor este 2012 que sea

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #15 en: Miércoles 21 de Junio de 2006, 18:34 »
0
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.
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


Toph

  • Moderador
  • ******
  • Mensajes: 420
  • Nacionalidad: sv
    • Ver Perfil
    • http://www.electronicayotros.blogspot.com/
Re: Com1. Ensamblador
« Respuesta #16 en: Miércoles 21 de Junio de 2006, 23:53 »
0
: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.
Por favor leer esto antes de postear. Gracias
NO alimenten al TROLL y morirá
¿Querés ayudar?, pues doná comida gratis con un simple clic aqui ,sin trucos
photobucket , Google , wine y cutepdf Rock!!!


programacion,c,c++,
Microcontroladores,java,linux,videojuegos,
,.NET,asm,codigo
por favor este 2012 que sea

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #17 en: Jueves 22 de Junio de 2006, 07:11 »
0
yo tampoco eso fue un ejemplo que puso el otro usuario.
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


pabloreda

  • Miembro MUY activo
  • ***
  • Mensajes: 125
    • Ver Perfil
    • http://www.reda4.org
Re: Com1. Ensamblador
« Respuesta #18 en: Jueves 22 de Junio de 2006, 15:46 »
0
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..

guiweb

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #19 en: Domingo 2 de Julio de 2006, 05:41 »
0
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.

Toph

  • Moderador
  • ******
  • Mensajes: 420
  • Nacionalidad: sv
    • Ver Perfil
    • http://www.electronicayotros.blogspot.com/
Re: Com1. Ensamblador
« Respuesta #20 en: Lunes 3 de Julio de 2006, 23:51 »
0
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:
Por favor leer esto antes de postear. Gracias
NO alimenten al TROLL y morirá
¿Querés ayudar?, pues doná comida gratis con un simple clic aqui ,sin trucos
photobucket , Google , wine y cutepdf Rock!!!


programacion,c,c++,
Microcontroladores,java,linux,videojuegos,
,.NET,asm,codigo
por favor este 2012 que sea

guiweb

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #21 en: Martes 4 de Julio de 2006, 18:52 »
0
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

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #22 en: Martes 4 de Julio de 2006, 20:25 »
0
: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
.
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


guiweb

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #23 en: Martes 4 de Julio de 2006, 21:08 »
0
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:

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Com1. Ensamblador
« Respuesta #24 en: Martes 4 de Julio de 2006, 21:18 »
0
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
 ?
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]