Beruflich Dokumente
Kultur Dokumente
Inicializar el puerto
Enviar un carcter
Recibir un carcter
Devolver el estado del puerto
7, 6, 5
Velocidad
Baudios
4,3
en Paridad
2
Bits de parada
Tabla 1
Opciones posibles:
Baudios 9600 4800 2400 1200 600 300 150 110
Bits
111 110 101 100 011 010 001 000
Paridad
Sin
Impar
Par
Bits
Parada
Uno
Dos
de
00 10
01
11
Bits
Datos
siete
ocho
0
1
COM1
COM2
COM3
COM4
a) Problemas Resueltos
5-1) DUP que enve datos al puerto serie de la PC.
de
10
11
1,0
Bits de datos
#include <conio.h>
#include <stdio.h>
#include <bios.h>
int puerto, dato, envio, config, ultimo=0;
void main(void)
{
clrscr();
printf("Ingrese puerto COM a usar: ");
scanf("%d", &puerto);
while(puerto<1 || puerto>4)
{
clrscr();
printf("ERROR... Debe ingresar 1, 2, 3 o 4\n\n");
printf("Ingrese puerto COM a usar: ");
scanf("%d", &puerto);
}
puerto--;
config=0x83; //Equivale en Binario: 10000011. Ver relacin con tabla 1
bioscom(0,config,puerto); //con 0 en el primer argumento inicializamos.
do
{
clrscr();
printf("Dato a enviar (ULTIMO: %d) --> ",ultimo);
scanf("%d", &dato); /captura desde teclado
while(dato<0 || dato>255)
{
printf("ERROR... Ingrese dato de 8 bits \n\n);
printf("Dato a enviar (ULTIMO: %d) --> ",ultimo);
scanf("%d", &dato);
}
envio=bioscom(1,dato,puerto); // con 1 en el primer argumento envo un carcter.
ultimo=dato; //muestra el ltimo dato enviado
}while(1==1);
}
5-2) DUP que lea reciba la entrada de datos desde el puerto serie de la PC.
#include <conio.h>
#include <stdio.h>
#include <dos.h>
#include <math.h>
#include <bios.h>
int puerto, k, j, dato, config;
char lectura[1],dato1[2];
void main(void)
{
clrscr();
printf("Ingrese puerto COM a usar: ");
scanf("%d", &puerto);
while(puerto<1 || puerto>4)
{
clrscr();
printf("ERROR... Debe ingresar 1, 2, 3 o 4 !!!\n\n");
printf("Ingrese puerto COM a usar: ");
scanf("%d", &puerto);
}
puerto--;
config=0x83;
bioscom(0,config,puerto); // opcin 0 para configurar de acuerdo a 0x83 = . 10000011
clrscr();
gotoxy(15,5);
printf("RECEPCION DE DATOS VIA SERIE");
gotoxy(10,8);
printf("Config --> COM %d \\ 1200 bps \\ 8N1", puerto+1);
gotoxy(35,10);
printf("Escape --> Salir");
gotoxy(25,12);
printf("MONITOR DE RECEPCION: ");
do{
if(!kbhit()) dato1[0]=leer( );
if(!kbhit())
{
gotoxy(40,12);
printf("%1s ",dato1);
}
}while(!kbhit());
getch( );
}
// funcin para leer el puerto
char leer( )
{
do{
dato=bioscom(2,0,puerto); //la opcin 2 es para leer desde el puerto
} while (!kbhit());
return(dato);
}
5-3) Hacer un programa que utilizando la funcin de comunicaciones serie del BIOS indique en
primer lugar el estado de un puerto serie determinado y a continuacin que haga de espejo
devolviendo las maysculas de los caracteres que recibe. Debe terminar su operacin cuando
reciba la orden Ctrl + Z.
#include <bios.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
#define INICI 0U
/*U unsigned*/
#define ENVIO 1U
#define RECIB 2U
#define ESTAD 3U
#define PUERTO 0U
void printstatus (int result);
void main(void)
{
char letra = 'A';
int result;
unsigned char tosend = (0xA0 | 0x0 | 0x3 | 0x0 ), counter;
/*formato con operador de bits*/
/*
2400 N 8 1
*/
system ("cls");
puts ("-----------------------------------------");
puts (" Resultado del setup");
puts ("_________________________________________");
result = bioscom ( INICI, tosend, PUERTO);
#include
#include
#include
#include
#include
<stdlib.h>
<fcntl.h>
/* Definiciones de
<errno.h>
/* Definiciones de
<sys/ioctl.h>
/* Constantes para
<termios.h>
/* Estructura de control
control de archivos */
control de errores */
ioctl */
termios */
5-8) DUP que inicialice un puerto serie abrindolo como archivo, imprima la velocidad y
caractersticas de transmisin, configure la velocidad y caractersticas de transmisin de acuerdo
a lo ingresado en la lnea de comandos e imprima el estado en que queda el puerto.
#include
#include
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<string.h>
<fcntl.h>
/* Definiciones de control de archivos */
<errno.h>
/* Definiciones de control de errores */
<sys/ioctl.h>
/* Constantes para ioctl */
<termios.h>
/* Estructura de control termios */
==
==
==
==
CS5)
CS6)
CS7)
CS8)
printf(
printf(
printf(
printf(
"5"
"6"
"7"
"8"
);
);
);
);
// Paridad
if( (opciones.c_cflag & PARENB) == 0) printf( "N" );
else {
if( (opciones.c_cflag & PARODD) == PARODD) printf( "O" );
else printf( "E" ); // paridad par
}
// Bits de parada
if( (opciones.c_cflag & CSTOPB) == CSTOPB) printf( "2" );
else printf( "1" );
// Velocidad de transmisin
printf( " " );
speed = cfgetispeed( &opciones );
switch( speed ) {
case B50: printf( "50" ); break;
case B75: printf( "75" ); break;
case B110: printf( "110" ); break;
case B134: printf( "134" ); break;
case B150: printf( "150" ); break;
case B200: printf( "200" ); break;
case B300: printf( "300" ); break;
case B600: printf( "600" ); break;
case B1200: printf( "1200" ); break;
case B1800: printf( "1800" ); break;
case B2400: printf( "2400" ); break;
case B4800: printf( "4800" ); break;
case B9600: printf( "9600" ); break;
case B19200: printf( "19200" ); break;
case B38400: printf( "38400" ); break;
case B57600: printf( "57600" ); break;
case B115200: printf( "115200" ); break;
default: printf ( "Error" ); break;
}
printf( " bps\n" );
}
int velocidad( int speed ) {
switch( speed ) {
case 50: return( B50 );
case 75: return( B75 );
case 110: return( B110 );
case 134: return( B134 );
case 150: return( B150 );
case 200: return( B200 );
case 300: return( B300 );
case 600:return( B600 );
case 1200: return( B1200 );
case 1800: return( B1800 );