Logo Studenta

EJ PORTSv2

Esta es una vista previa del archivo. Inicie sesión para ver el archivo original

/* Una fabrica recibe datos de Temperatura de sus ocho máquinas por los puertos 0X400 y 0X401.*/
/* El formato es: S: 1 bit MAQ 3 bits 8 bits para temperatura FIN 1 bit y 3 bits para Basura. se pide PROMEDIO de Temperatura de cada maquina*/
//El lote termina cuando FIN = 1. Los datos son válidos cuando el bit de Sincronismo pasa de = a 1
#include <stdio.h>
#include <stdlib.h>
#define PORT 0X400
#define PORT1 0X401
#define N 8
struct MAQUINA{
	unsigned int S: 1; //Sincronismo S=0 rechazarlo. S=1 aceptarlo.
	unsigned int MAQ: 3;
	unsigned int TEMP:8 ;
	unsigned int FIN: 1; // FIN = 0 seguir ingresando datos. FIN=1 se acaba el ngreso de datos
	unsigned int BASURA: 3;
	
};
union U{
	struct MAQUINA ZZ;
	unsigned char V[2];
};
 
struct VEC{
	unsigned char MAQ;
	int SUM;
	int CONT;
	float PROM;
};
int main()
{
 unsigned char A, B;
 int I;
 union U X;
 struct VEC M[N];
 float AUX;
 //Inicialización del Vector para poder Sumar y Contar
 for (I = 0; I < N ; I++){
 	M[I].MAQ=I;
 	M[I].SUM=0;
 	M[I].CONT=0;
 }
 /* Ingreso de datos*/
do{
 
/* Se ingresan por el puerto 0X400 */
//ioperm (PORT, 1,1); se habilita el puerto 0X400
//ioperm (PORT1, 1,1); se habilita el puerto 0X401
	
	
	do{
		//V[0[=inb(PORT); lee desde el puerto 0X400
		X.V[0]=rand()%256; // se ingresan los datos simulando un puerto
	 
		printf("\n\n EL SINCRONISMO ES: %d ", X.ZZ.S);
		
		}while (!X.ZZ.S); //se controla que X.ZZ.S = 0
			
	//Si se llegó hasta acá es que se leyó X.ZZ.S =1
	printf("\n\n ................... LLEGO SINCRONISMO = 1 ............................................");
	//Ahora hay que leer los siguientes 8 bits
	
	//V[1[=inb(PORT1); lee desde el puerto 0X401
		X.V[1]=rand()%256; // se ingresan los datos simulando un puerto
		
		printf("\n\n LA MAQUINA ES: %d ", X.ZZ.MAQ);
		
			printf("\n\n LA TEMPERATURA ES: %d ", X.ZZ.TEMP);
		// fflush(stdin);
		//printf("\n\n INGRESE DATO X.V[1]");
	 //scanf("%d", &X.V[1]);
	
	//	printf("\n\n LA SEGUNDA PARTE DEL DATO X.V[1] ES: %d y el FIN es %d ", X.V[1], X.ZZ.FIN);
	//	 fflush(stdin);
		M[X.ZZ.MAQ].SUM=M[X.ZZ.MAQ].SUM + X.ZZ.TEMP;
	 
 		M[X.ZZ.MAQ].CONT++;
	
	
	
	
	do{
		//V[0[=inb(0X400); lee desde el puerto 0X400
		X.V[0]=rand()%255; // se ingresan los datos simulando un puerto
		
		
		
		printf("\n\n EL SINCRONISMO ES: %d ", X.ZZ.S);
		
		}while (X.ZZ.S); // Espero que SINCRONISMO sea 0
		printf("\n\n ................... LLEGO SINCRONISMO = 0 ............................................");
printf("\n\n EL DATO FIN ES: %d ", X.ZZ.FIN);	
} while (!X.ZZ.FIN); 
//Se pregunta si FIN es igual a 0.Si eso sucede se siguen ingresando datos. Si FIN = 1 se FINALIZA
 printf("\n\n ................... LLEGO FIN = 1..........................................");
 
//Ahora vamos a calcular los promedios
 for (I = 0; I < N ; I++){
 	
	 if (M[I].CONT != 0){
 		
	 
	 	AUX= (float) M[I].SUM/M[I].CONT;
	 
 		M[I].PROM= AUX;
 		
	}
	
	 else
	 
	 	M[I].PROM= 0;
 		
 } 
 
printf ("\n\n\t\t \t\t RESULTADOS ");
printf ("\n\n\t MAQUINA \t SUMA \t CONT \t PROM ");
				
	for (I = 0; I < N ; I++){
		
		printf ("\n\n\t %d \t %d \t %d \t %.2f ", M[I].MAQ, M[I].SUM, M[I].CONT, M[I].PROM);		
	
	
	}
}

Continuar navegando