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
/* Calcula promedio temperaturas de 16 recipientes. Los codigos de los recipientes van desde 0 a 3 LA INFORMACION TERMINA CUANDO EN EL BIT MENOS SIGNIFICATIVO VALE 1 SIN SINCRONISMO*/ #include<stdio.h> #include<stdlib.h> #include<sys/io.h> // biblioteca de linux #include<unistd.h> #define LPT1 0x378 // direcciones de los puertos #define LPT2 0x379 /********************** CAMPO DE BITS **************************/ struct BITS { unsigned int RECIP:4; int temp :9; unsigned int :2; unsigned char F :1; }; /********************** UNION CAMPO DE BITS CON LECTURA DEL PUERTO ****/ union UN { unsigned char byte[2]; struct BITS bit; }; /********************* DECLARACION DEL TIPO DE DATO *****************/ struct DATOS{ int CONT; int ACU; float PROM; }; /********************* PROGRAMA PRINCIPAL ***********************/ int main () { struct DATOS VEC[16]; union UN U; int FIN=0, I; for (I=0; I < 4 ; I++) { VEC[I].ACU =0; VEC[I].CONT =0; VEC[I].PROM = 0; } ioperm(LPT1, 2, 1); //habilita los ports while(!FIN) { U.byte[1] = inb(LPT2); //leo puerto LPT2 if(U.bit.F == 0) { U.byte[0]=inb(LPT1); //leo puerto LPT1 VEC[U.bit.RECIP].ACU += U.bit.temp; VEC[U.bit.RECIP].CONT++; } //fin del if else FIN=1; } //fin del while ioperm(LPT1, 2, 0); // deshabibito el puerto for(I=0;I<16;I++) if(VEC[I].CONT != 0) VEC[I].PROM= (float)VEC[I].ACU / VEC[I].CONT; for(I=0;I<16;I++) printf("\n Prom [%d] = %f", I, VEC[I].PROM); return 0; }
Compartir