ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Sistemas con Microprocesador.

israelriveraTrabajo12 de Abril de 2016

43.606 Palabras (175 Páginas)369 Visitas

Página 1 de 175

Reporte Examen 1: Piano con Timer

Erick Alonso Anaya Martínez. Matrícula: 112951

Fredy Fernando Álvarez Sánchez. Matrícula: 109311

e-mail: Fredy_bat@hotmail.com

Ingeniería en Sistemas Digitales y Comunicaciones

UACJ, IIT, Departamento De Ingeniería Eléctrica y Computación

Materia: Sistemas con Microprocesador, Catedrático: Dr. Juan de Dios Cota Ruiz

16 de marzo de 2015

1. Introducción

1.1. Temporizadores

El temporizador es una herramienta del microprocesador que incrementa el registro contador cada ciclo de maquina(la temporización se produce contando los ciclos maquina hasta sobrepasar el valor prefijado). El AT89LP6440 tiene cuatro modos de funcionamiento para sus timers 0 y 1, contador de ancho variable, auto recarga de 16 bits, auto recarga de 8 bits, y dos contadores de 8 bits.

2. Desarrollo teórico

2.1. Interrupciones

            Una interrupción es un evento que hace que el microcontrolador deje de ejecutar la tarea que está realizando para atender dicho acontecimiento y luego regrese y continúe la tarea que estaba realizando antes de que se presentara la interrupción. Las interrupciones son útiles para ahorrar energía, ya que se pueden utilizar para despertar el microprocesador de modo standby cada vez que se presente la interrupción y posteriormente se puede poner al microprocesador en modo standby nuevamente. El AT89LP6440 tiene 12 fuentes de interrupción:

  • 2 interrupciones externas
  • 3 interrupciones por timers
  • 1 por puerto serial
  • 1 por comparador analógico
  • 1 por captura/comparación
  • 1 por [pic 1]
  • 1 por SPI
  • 1 por GPIF(7-0)
  • 1 por ADC

Las interrupciones por timer se ejecutan cada tick-period que se calcula según el modo que se quiere utilizar, en esta ocasión se utiliza el modo 1 para generar la interrupción por timer, que es la de 16 bits con auto recarga, que tiene la siguiente fórmula:

Tick_period= [pic 2]

Donde RH1 y RL1 son dos registros de 1 byte cada uno que trabajan juntos para crear un numero de comienzo donde va contar hasta 65535 donde se va a desbordar y producir una interrupción que se va estar ejecutando mientras esté activado el timer. El inverso de esta fórmula dividido entre dos nos da la frecuencia que se necesita para cada frecuencia que se necesita. , de donde se despeja Val, que es el valor que va entrar a RL1  y RH1.
[pic 3][pic 4]

2.2. Registros de Interrupciones  

        Es necesario habilitar las interrupciones que se desean utilizar en el programa, esto se hace a través del registro de habilitación de interrupciones, se pone el registro que se quiere habilitar a '1'. 

Registro IE (Interrupt Enable)

EA

EC

ET2

ES

ET1

EX1

ET0

EX0

EX0 - Interrupción externa 0
ET0 - Timer 0
EX1 - Interrupción externa 1
ET1 - Timer 1
ES - Puerto Serial
ET2 - Timer 2
EC - Comparador analógico
EA - Enable All


Registro IE2(Interrupt Enable 2)

 -

 -

-

ETW

EADC

ESPI

ECC

EGP

EGP-Interrupción de propósito general

ECC-Interrupción por captura y comparación

ESPI-Interface serial SPI

EADC-Convertidor analógico digital

ETW- interface serial[pic 5]

TCON
A través de este registro podemos configurar de qué forma se activaran las interrupciones, en este caso estamos trabajando con interrupciones externas, podemos configurar la interrupción para que se active por nivel o por flanco de bajada, a través de la manipulación de los bits de este registro, en este caso estamos trabajando con flanco de bajada, por lo tanto ponemos IT0 y IT1 en '1' para trabajar con flanco de bajada en las interrupciones externas INT0, INT1 respectivamente.

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

  GPI(General Purpose Interrupt)
Este tipo de interrupción sirve para tener 8 diferentes interrupciones que trabajan de la misma forma que las funciones externas, solamente que tienen sus propios registros de funcionamiento, cualquier interrupción por el puerto 1 activa esta interrupción, así que se tiene que leer el registro GPIF para revisar cual bandera fue la que se activó y así determinar por cual pin se activó la interrupción.   
Se tienen que configurar tres registros para utilizar la interrupción de propósito general:
GPMOD, GPLS, GPIEN y para poder utilizarlos se tiene que leer el GPIF para saber por cual entrada se produjo la interrupción.
 
El GPMOD sirve para declarar si la interrupción se va activar por nivel o por flanco, en 0 es por nivel, en 1 es por flanco. El GPLS sirve para declarar por alto o bajo, es decir, por nivel alto o bajo, o por flanco de bajada o subida. En cero es bajo y uno es para alto. Finalmente, el GPIEN sirve para activar la interrupción, se pone '1' para activar cada una que se quiere utilizar.
Interrupción por timer
Para trabajar con interrupción con el timer, se trabajan con los siguientes registros: Registro IE, con el bit ET0 y ET1 para los timers 0 y 1, también se necesita activar EA para activar todas las interrupciones.
En el TCON se activa TR0 o TR1 para activar el timer 0, 1 respectivamente.
TMOD(Timer Mode) Se utiliza para configurar el timer como temporizador o contador, activación por hardware o software, y el modo que se va a usar.

G1

C/T1

T1M1

T1M0

G0

C/T0

T0M1

T0M0

G1= Gate 1, 0= activación por software, 1= activación por hardware
C/T1= Temporizador= 0, contador=1
T1M1= Se usa junto con T1M0 para configurar el código, este es el bit mayor
T1M0= Se usa junto con T1M1, es el bit menor
00= Modo 0
01= Modo 1
10= Modo 2
11= Modo 3
G0= Gate 0, lo mismo pero para el timer 0
C/T0= Igual que C/T1 pero para timer 0
T0M1= Igual que T1M1 pero para timer 0
T0M0= Igual que T1M0 pero para timer 0

2.3. Prioridad en las interrupciones

        Se le puede asignar prioridad a las interrupciones que se están utilizando en el programa, esto se hace a través de una combinación de 2 bits entre dos registros, IP, IPH para asignar prioridad a los bits del registro IE, y IP2, IP2H para asignar prioridad a los bits del registro IE2.

IP(Interrupt Priority Register)

IP0D

PC

PT2

PS

PT1

PX1

PT0

PX0


IPH(Interrupt Priority High Register)

IP1D

PCH

PT2H

PSH

PT1H

PX1H

PT0H

PX0H

Ej. para la configuración de prioridad para interrupción externa 0(EX0)

PX0H

 PX0

 Prioridad

0

0

0 (Menor prioridad)

0

1

1

1

0

2

1

1

3 (Mayor prioridad)

Si tienen la misma prioridad, se ejecutan en el orden que están los bits en la tabla.


2.4. Pasos para el proceso de interrupción

1. Definir/declarar la función de interrupción.
Para utilizar una función de interrupción se debe declarar una función que tiene el siguiente formato:

void identificador(void) interrupt #int 

Donde:
identificador.- Es un nombre dado por el usuario a la función.
interrupt.- Es una palabra reservada que utiliza
μVision para las interrupciones.
#int,- es el número correspondiente a esa interrupción que representa una dirección, correspondiente a las siguientes tablas:

[pic 6]
donde cada dirección corresponde a un numero de interrupción(#int).

...

Descargar como (para miembros actualizados) txt (73 Kb) pdf (543 Kb) docx (974 Kb)
Leer 174 páginas más »
Disponible sólo en Clubensayos.com