Vous êtes sur la page 1sur 7

UNIVERSIDAD TECNOLGICA DEL PER FACULTAD DE INGENIERIA ELECTRNICA

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS


LABORATORIO N 5
TEMA: TIMER 8254

CODIGO

APELLIDOS Y NOMBRES

NOTA

0620761 0811011

Tuesta Rios Ulises Pea Caceres Jonathan

HORARIO

PC

FECHA

OBSERVACIONES

Mayo 2013

UNIVERSIDAD TECNOLGICA DEL PER FACULTAD DE INGENIERA ELCTRNICA

TEMPORIZADOR (TIMER)
Revisin de conceptos tericos

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS

UNIVERSIDAD TECNOLGICA DEL PER FACULTAD DE INGENIERA ELCTRNICA

/********************************************************************** PROGRAMA QUE PRESENTA UN RELOJ DE TIEMPO REAL QUE SE VISUALIZA EN LA ESQUINA SUPERIOR IZQUIERDA DE LA PANTALLA. SE UTILIZA EL TIMER 8254 COMO BASE DE TIEMPO. **********************************************************************/ #include <windows.h> #include <stdio.h> #include <conio.h> #include "winio.h" int main( void ) { unsigned char nibble; int h, m, s, pin_out; int cuenta, veinteava=0; bool bResult; // Call InitializeWinIo to initialize the WinIo library. bResult = InitializeWinIo(); if( ! bResult) { printf("Error during initialization of WinIo.\n"); return 1; } printf( "Hora, minutos y segundos actuales?" ); scanf( "%d%d%d", &h, &m, &s); /* Programacion del timer */ cuenta = 59659; _outp( 0x43, 0XB6 ); nibble = cuenta; _outp( 0x42, nibble ); nibble = cuenta >> 8; _outp( 0x42, nibble ); nibble = _inp( 0x61 ) | 0x01; _outp( 0x61, nibble ); /* Fin programacin del timer */ do { do { _outp( 0x43, 0xE8 ); pin_out = _inp( 0x42 ) >> 7; } while( pin_out == 0 ); do { _outp( 0x43,0xE8); pin_out = _inp( 0x42 ) >> 7; } while( pin_out == 1 ); veinteava++; /*Cuenta para 20 Hz*/ /*Envo de la palabra de control*/ /*Envo de la parte baja de la cuenta*/ /*Envo de la parte alta de la cuenta*/ /*Se habilita slo el gate del contador 2*/

/*Read Back=11101000 (latchear Status)*/ /*se filtra bit 7 del STATUS*/

/*Read Back=11101000 (latchear Status)*/ /*se filtra bit 7 del STATUS*/

/*Cada 20 cambios (0 a 1) del pin out se incrementa s en 1.*/

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS

UNIVERSIDAD TECNOLGICA DEL PER FACULTAD DE INGENIERA ELCTRNICA

if( if( if( if(

veinteava s == 60 ) m == 60 ) h == 24 )

== 20 { s = { m = { h =

) { veinteava = 0; s++; } 0; m++; } 0; h++; } 0; }

printf( "\r%02d:%02d:%02d", h, m, s ); } while( !kbhit() ); nibble = _inp( 0x61 ) & 0xFE; _outp( 0x61, nibble ); /*Se deshabilita el gate del contador 2*/

// When you're done using WinIo, call ShutdownWinIo ShutdownWinIo(); return 0; }

PRACTICA Escribir un programa que implemente un pequeo piano con las teclas A, S, D, F, G, H, J, K para emitir una escala completa (de DO a DO). Cada nota se emitir por un intervalo de 0.5 segundo luego de lo cual se dejar de emitir dicha nota. Si se presiona una segunda tecla antes que termine de emitirse el sonido de la anterior, se emitir inmediatamente la nueva nota durante el tiempo que le corresponde (cancelando la anterior).
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX #include <windows.h> #include <stdio.h> #include <conio.h> #include "winio.h" //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX void ConfigT0( int Frec ); void ConfigT2( int Frec ); void PasoUnPeriodo( void ); void ActivaT2( void ); void DesactivaT2( void ); void ActivaOndaT2aParlante( void ); void DesactivaOndaT2aParlante( void ); //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX int main( void ) { /* DO, RE, MI, FA, SOL, LA, SI, DO */ char Tecla[] = {'A','S','D','F','G','H','J','K'}; int Frec[] = {262,294,330,349,392,440,494,523}; int i; char c; int Cont = 0; bool bResult; // Call InitializeWinIo to initialize the WinIo library. bResult = InitializeWinIo(); if( ! bResult) { printf("Error during initialization of WinIo.\n"); return 1; } ConfigT0( 41 ); /*41 Hz*/

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS

UNIVERSIDAD TECNOLGICA DEL PER FACULTAD DE INGENIERA ELCTRNICA

DesactivaOndaT2aParlante(); /*Parlante no emite ningn tono*/ ActivaT2(); /*T2 listo para trabajar*/ while(1) { if( kbhit() ) { c = getch(); if( c == 27 ) { break; */ } for( i = 0; i < 8; i++ ) tecla de { if( c == Tecla[i] ) break; } if( i != 8 ) { ConfigT2( Frec[i] ); /* Configurar tono segn tecla presionada..*/ ActivaOndaT2aParlante();/*... activar parlante... */ Cont = 41; /*... 41 pulsos = 1 segundo */ } } if( Cont != 0 ) { PasoUnPeriodo(); Cont--; if( Cont == 0 ) /*... y si se ha completado la cuenta... */ DesactivaOndaT2aParlante(); /*... apagar el parlante */ } } DesactivaOndaT2aParlante(); DesactivaT2(); // When you're done using WinIo, call ShutdownWinIo ShutdownWinIo(); return 0; } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX void ConfigT0( int Frec ) { unsigned char byte; int frec; _outp(0X43, 0X36); frec = (1193182/Frec); byte = frec; /* Comprobar si se presion alguna piano */

/* Establecer si el usuario us el teclado... */ /*... slo en ese caso, se captura tecla. */ /* Verificar si se presion [ESC]... */ /*... en cuyo caso se sale del lazo prinicpal.

/* Comprobar el paso de un pulso..*/

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS

UNIVERSIDAD TECNOLGICA DEL PER FACULTAD DE INGENIERA ELCTRNICA

_outp(0X40, byte); byte = frec>>8; _outp(0X40, byte); } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX void ConfigT2( int Frec ) { unsigned char byte; int frec; _outp(0X43, 0XB6); frec = (1193182/Frec); byte = frec; _outp(0X42, byte); byte = frec>>8; _outp(0X42, byte); byte = _inp(0X61)|0X01; _outp(0X61, byte);

} //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX void PasoUnPeriodo( void ) { int pin_out; do { _outp(0x43,0xE2); pin_out= _inp(0x40) >> 7; } while(pin_out == 0); do { _outp(0x43,0xE2); pin_out= _inp(0x40) >> 7; } while(pin_out == 1); } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX void ActivaT2 ( void ) { unsigned char byte; byte = _inp(0X61)|0X01; _outp(0X61, byte);

} //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX void DesactivaT2 ( void ) { unsigned char byte; byte = _inp(0X61)&0XFE; _outp(0X61, byte);

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS

UNIVERSIDAD TECNOLGICA DEL PER FACULTAD DE INGENIERA ELCTRNICA

} //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX void ActivaOndaT2aParlante( void ) { unsigned char byte; byte = _inp(0X61)|0X02; _outp(0X61, byte);

} //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX void DesactivaOndaT2aParlante( void ) { unsigned char byte; byte = _inp(0X61)&0XFD; _outp(0X61, byte); } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS

Vous aimerez peut-être aussi