• Jueves 14 de Noviembre de 2024, 21:20

Autor Tema:  Re: Comunicacion por puerto serial  (Leído 4590 veces)

jhor1976

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Comunicacion por puerto serial
« en: Jueves 17 de Octubre de 2002, 21:22 »
0
Hola:
Necesito hacer un programa en assembler que comunique dos computadores por puerto serial y haga lo siguiente:
En el computador1 voy a tener unos registros de un estudiante, como una base de datos, pero en assembler.
Y desde el computador2 voy a accesar a estos datos y los puedo modificar.
Alguien me puede colaborar?? me pueden dar ideas de como lo hago?? o alguien tiene el codigo para esto??
Gracias

joltrar

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
    • http://www2.netexplora.com/joltrar
Re: Comunicacion por puerto serial
« Respuesta #1 en: Domingo 3 de Noviembre de 2002, 01:09 »
0
Yo no lo he probado, ojalá te sirva:

/****************************************************************************

 Nombre: PUERTOS.C
 Utilidad: Permite la comunicaci¢n entre dos ordenadores por el puerto serie.
 Autor: Sergio Pacho
 Fecha: 6 de julio de 1998
 E-mail: http://www.mundoc.net

 Este programa es un ejemplo de como enviar informaci¢n entre dos ordenadores
 conectados a trav‚s del puerto serie ( COM1 o COM2 ).Podr¡amos decir que se
 trata de una especie de 'chat'.Para ello utilizaremos la int 14h y algunos de
 sus servicios.Es posible que funcione incorrectamente seg£n como tengas las
 configuraciones de Windows '95 y/o MS-DOS.Si no te funciona en Windows '95
 prueba a reiniciar el equipo en modo MS-DOS.Si no te funciona en MS-DOS, pues
 pru‚balo desde Windows '95... en fin ya sabes como es esto, no ?

 Lo £nico que te pido es que no modifiques los créditos, y que se lo pases a
 todos tus amigos, colegas...
 Tambi‚n puedes decir que lo has conseguido en:
 http://www.mundoc.net

****************************************************************************/

#include <stdio.h>
#include <dos.h>
#include <io.h>
#include <conio.h>
#include <alloc.h>
#include <stdlib.h>

/* Definimos el valor que toman los puertos */
#define COM1 0
#define COM2 1

/* Definimos las distintas velocidades de transmisi¢n */
#define bd_110 0
#define bd_150 32
#define bd_300 64
#define bd_600 96
#define bd_1200 128
#define bd_2400 160
#define bd_4800 192
#define bd_9600 224

/* Definimos los valores para los bits de datos */
#define bitd_7 2
#define bitd_8 3

/* Definimos los valores para los bits de stop */
#define bits_1 0
#define bits_2 4

/* Definimos los valores para la paridad */
#define nula 0
#define impar 8
#define par 24

void inicializar(int,int,int,int,int);
unsigned char compruebo(int);
void leer_car(unsigned char *,int);
void enviar_car(unsigned char,int);

void main(void)
{
   unsigned char let,car,byte1;
   clrscr();
   inicializar(COM1,bd_9600,impar,bits_1,bitd_8);
   while (let!=27)
   {
      if (compruebo(COM1)&1)   // comprobamos si el bit 0 del valor retornado
      {                        // es 1
         leer_car(&car,COM1);
         if (car!=0)
         {
            if (car=='r') car='n';
            printf("%c",car);
         }
         car=0;
         enviar_car(0,COM1);
      }
      if (kbhit())
      {
         let=getch();
         if (let!=27)
         {
            enviar_car(let,COM1);
         }
      }
   }
}

void inicializar(int puerto,int baudios,int paridad, int b_stop, int b_datos)
{
   unsigned char total; // sumaremos los par metros de inicializaci¢n
   total=baudios+paridad+b_stop+b_datos;
   asm {                // inicializamos el puerto
         mov ah,0h      // el servicio 0h nos permite inicializar el puerto
         mov dx,puerto  // pasamos el puerto a 'dx'
         mov al,total   // pasamos la suma de los par metros a 'al'
         int 14h        // solicitamos la interrupci¢n 14h
   }
}

unsigned char compruebo(int puerto)
{
   unsigned char com;
   asm {             // estado del puerto
      mov ah,3h      // el servicio 3h comprueba el estado del puerto
      mov dx,puerto  // pasamos el puerto a 'dx'
      int 14h        // solicitamos la interrupci¢n 14h
      mov com,ah     // c¢digo de error retornado a 'ah' y pasado a 'com'
   }
   return com;
}

void leer_car(unsigned char *caracter , int puerto)
{
   unsigned char letra;
   asm {             // recoge un car cter
      mov ah,2h          // el servicio 2h nos permite recoger un car cter
      mov dx,puerto  // pasamos el puerto a 'dx'
      int 14h        // solicitamos la interrupci¢n 14h
      mov letra,al   // el car cter es retornado a 'al' y lo pasamos a 'letra'
   }
   *caracter=letra;
}

void enviar_car(unsigned char caracter, int puerto)
{
   asm {               // envia un car cter
      mov ah,1h        // el servicio 1h nos permite enviar un car cter
      mov dx,puerto    // pasamos el puerto a 'dx'
      mov al,caracter  // pasamos el 'caracter' a 'al'
      int 14h          // solicitamos la interrupci¢n 14h
   }
}

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Comunicacion por puerto serial
« Respuesta #2 en: Jueves 16 de Octubre de 2003, 07:07 »
0
el programa parece muy bueno tengo que provarlo

daniel690

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Comunicacion por puerto serial
« Respuesta #3 en: Miércoles 26 de Noviembre de 2003, 20:04 »
0
Citar
Originalmente publicado por jhor1976
Hola:
Necesito hacer un programa en assembler que comunique dos computadores por puerto serial y haga lo siguiente:
En el computador1 voy a tener unos registros de un estudiante, como una base de datos, pero en assembler.
Y desde el computador2 voy a accesar a estos datos y los puedo modificar.
Alguien me puede colaborar?? me pueden dar ideas de como lo hago?? o alguien tiene el codigo para esto??
Gracias