Descarga la aplicación para disfrutar aún más
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); } }
Compartir