lac l5g1 0811011 0620761

9
UNIVERSIDAD TECNOLÓGICA DEL PERÚ FACULTAD DE INGENIERIA ELECTRÓNICA LABORATORIO DE ARQUITECTURA DE COMPUTADORAS LABORATORIO N° 5 TEMA: TIMER 8254 CODIGO APELLIDOS Y NOMBRES NOTA 0620761 0811011 Tuesta Rios Ulises Peña Caceres Jonathan HORARIO PC FECHA OBSERVACIONES

Upload: jonathan-pena

Post on 23-Oct-2015

202 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LAC L5G1 0811011 0620761

UNIVERSIDAD TECNOLÓGICA DEL PERÚFACULTAD DE INGENIERIA ELECTRÓNICA

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS

LABORATORIO N° 5

TEMA:TIMER 8254

CODIGO APELLIDOS Y NOMBRES NOTA

06207610811011

Tuesta Rios Ulises Peña Caceres Jonathan

HORARIO PC FECHA

OBSERVACIONES

Mayo 2013

Page 2: LAC L5G1 0811011 0620761

UNIVERSIDAD TECNOLÓGICA DEL PERÚFACULTAD DE INGENIERÍA ELCTRÓNICA

TEMPORIZADOR (TIMER)

Revisión de conceptos teóricos

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS 2

Page 3: LAC L5G1 0811011 0620761

UNIVERSIDAD TECNOLÓGICA DEL PERÚFACULTAD DE INGENIERÍA ELCTRÓNICA

/**********************************************************************PROGRAMA QUE PRESENTA UN RELOJ DE TIEMPO REAL QUE SE VISUALIZA EN LAESQUINA SUPERIOR IZQUIERDA DE LA PANTALLA. SE UTILIZA EL TIMER 8254COMO 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; /*Cuenta para 20 Hz*/ _outp( 0x43, 0XB6 ); /*Envío de la palabra de control*/ nibble = cuenta; _outp( 0x42, nibble ); /*Envío de la parte baja de la cuenta*/ nibble = cuenta >> 8; _outp( 0x42, nibble ); /*Envío de la parte alta de la cuenta*/ nibble = _inp( 0x61 ) | 0x01; _outp( 0x61, nibble ); /*Se habilita sólo el gate del contador 2*/ /* Fin programación del timer */ do { do { _outp( 0x43, 0xE8 ); /*Read Back=11101000 (latchear Status)*/ pin_out = _inp( 0x42 ) >> 7; /*se filtra bit 7 del STATUS*/ } while( pin_out == 0 );

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS 3

Page 4: LAC L5G1 0811011 0620761

UNIVERSIDAD TECNOLÓGICA DEL PERÚFACULTAD DE INGENIERÍA ELCTRÓNICA

do { _outp( 0x43,0xE8); /*Read Back=11101000 (latchear Status)*/ pin_out = _inp( 0x42 ) >> 7; /*se filtra bit 7 del STATUS*/ } while( pin_out == 1 );

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

if( veinteava == 20 ) { veinteava = 0; s++; } if( s == 60 ) { s = 0; m++; } if( m == 60 ) { m = 0; h++; } if( h == 24 ) { 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 pequeño 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"//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvoid ConfigT0( int Frec );void ConfigT2( int Frec );void PasoUnPeriodo( void );void ActivaT2( void );void DesactivaT2( void );void ActivaOndaT2aParlante( void );void DesactivaOndaT2aParlante( void );//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXint 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.

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS 4

Page 5: LAC L5G1 0811011 0620761

UNIVERSIDAD TECNOLÓGICA DEL PERÚFACULTAD DE INGENIERÍA ELCTRÓNICA

bResult = InitializeWinIo(); if( ! bResult) { printf("Error during initialization of WinIo.\n"); return 1; }

ConfigT0( 41 ); /*41 Hz*/ DesactivaOndaT2aParlante(); /*Parlante no emite ningùn tono*/ ActivaT2(); /*T2 listo para trabajar*/

while(1) { if( kbhit() ) /* Establecer si el usuario usó el teclado... */ { c = getch(); /*... sólo en ese caso, se captura tecla. */ if( c == 27 ) /* Verificar si se presionó [ESC]... */ { break; /*... en cuyo caso se sale del lazo prinicpal. */ } for( i = 0; i < 8; i++ ) /* Comprobar si se presionó alguna tecla de piano */ { if( c == Tecla[i] ) break; } if( i != 8 ) { ConfigT2( Frec[i] ); /* Configurar tono según tecla presionada..*/ ActivaOndaT2aParlante();/*... activar parlante... */ Cont = 41; /*... 41 pulsos = 1 segundo */ } } if( Cont != 0 ) { PasoUnPeriodo(); /* Comprobar el paso de un pulso..*/ 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;}

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS 5

Page 6: LAC L5G1 0811011 0620761

UNIVERSIDAD TECNOLÓGICA DEL PERÚFACULTAD DE INGENIERÍA ELCTRÓNICA

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvoid ConfigT0( int Frec ){

unsigned char byte;int frec;_outp(0X43, 0X36); frec = (1193182/Frec);byte = frec;_outp(0X40, byte); byte = frec>>8; _outp(0X40, byte);

}//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvoid 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);

}//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvoid 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);

}//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvoid ActivaT2 ( void ){

unsigned char byte;byte = _inp(0X61)|0X01;

_outp(0X61, byte);

}//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS 6

Page 7: LAC L5G1 0811011 0620761

UNIVERSIDAD TECNOLÓGICA DEL PERÚFACULTAD DE INGENIERÍA ELCTRÓNICA

void DesactivaT2 ( void ){

unsigned char byte;byte = _inp(0X61)&0XFE;

_outp(0X61, byte);

}//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvoid ActivaOndaT2aParlante( void ){

unsigned char byte;byte = _inp(0X61)|0X02;

_outp(0X61, byte);

}//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvoid DesactivaOndaT2aParlante( void ){

unsigned char byte;byte = _inp(0X61)&0XFD;

_outp(0X61, byte);

}//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

LABORATORIO DE ARQUITECTURA DE COMPUTADORAS 7