Escuela de Ingenierías Industriales (Badajoz) - UEx Interfaces y Periféricos Escuela de Ingenierías Industriales (Badajoz) Universidad de Extremadura Asignatura: INTERFACES Y PERIFÉRICOS Profesor: José Ignacio Suárez Marcelo Práctica 1: “Programación de la UART 8250/16450 mediante E/S por programa”. Objetivo Conseguir que el alumno aprenda a programar una interfaz serie y que establezca una comunicación con otro procesador empleando para ello la técnica de E/S por programa. La práctica consiste en establecer una comunicación serie entre dos ordenadores PCs. Ambos ordenadores se intercambiarán mensajes escritos por teclado que serán mostrados en la pantalla del ordenador remoto. El programa de comunicación deberá realizar entre otras cosas las siguientes tareas: • Programación adecuada de la UART 8250/16450. • Comprobación de que el ordenador remoto esté dispuesto a establecer comunicación. • Mostrar al ordenador remoto la disponibilidad del ordenador local para establecer comunicación. • Comprobar la llegada de nuevos datos al puerto serie (mediante la técnica de E/S por programa) y, en caso de tener un nuevo dato, éste deberá ser leído y mostrado por la pantalla. • Lectura del teclado y, en caso de detectar la pulsación de alguna tecla, enviar su código a través del puerto serie cuando el ordenador remoto esté preparado. NOTA: Serán necesarios los apuntes sobre programación de la UART 8250/16450. Práctica 1 Programación de la UART 8250/16450 mediante E/S por programa Escuela de Ingenierías Industriales (Badajoz) - UEx Interfaces y Periféricos /****************************************/ /* */ /* INTERFACES Y PERIFÉRICOS */ /* */ /* PRACTICA 1 */ /* */ /* Comunicación serie con otro PC */ /* empleando E/S POR PROGRAMA */ /* */ /****************************************/ #include <dos.h> #include <stdio.h> #include <conio.h> //carga bibliotecas #define #define #define #define 0x3F8 0x2F8 0x3E8 0x2E8 //define direcciones base //de los puertos serie #define PUERTO COM2 //define puerto que va a ser utilizado #define #define #define #define #define #define #define #define #define #define #define #define PUERTO+0 PUERTO+0 PUERTO+0 PUERTO+1 PUERTO+1 PUERTO+2 PUERTO+2 PUERTO+3 PUERTO+4 PUERTO+5 PUERTO+6 PUERTO+7 COM1 COM2 COM3 COM4 TB RB DLAB_L IER DLAB_H IIR FCR LCR MCR LSR MSR SR //Transmitter Holding Buffer (DLAB=0) //Receiver Buffer (DLAB=0) //Divisor Latch Low Byte (DLAB=1) //Interrupt Enable Register (DLAB=0) //Divisor Latch High Byte (DLAB=1) //Interrupt Identification Register //FIFO Control Register //Line Control Register //Modem Control Register //Line Status Register //Modem Status Register //Scratch Register [Write] [Read] [R/W] [R/W] [R/W] [R] [W] [R/W] [R/W] [R] [R] [R/W] /* =============== PROGRAMA PRINCIPAL =============== */ void main(void) { int c; int char_in; int tecla; //carácter leído por el puerto serie //carácter leído por el teclado /* ---------- Configuración Puerto ---------- */ clrscr(); //limpia pantalla printf("\n**************************************************"); printf("\n* *"); printf("\n* INTERFACES Y PERIFÉRICOS - Curso 2001/02 *"); printf("\n* *"); printf("\n**************************************************"); printf("\nPresiona ESC para salir.\n\n"); do { /* --- Proceso de RECEPCIÓN --- */ /* --- Proceso de TRANSMISIÓN --- */ } while (tecla != 27); //sale del programa cuando se presiona ESC (ASCII 27) } Práctica 1 Programación de la UART 8250/16450 mediante E/S por programa