Está en la página 1de 21

“Año del Bicentenario: 200 años de independencia”

UNIVERSIDAD NACIONAL DE INGENIERÍA


FACULTAD DE INGENIERÍA MECÁNICA

SISTEMAS EMBEBIDOS
MT136
LABORATORIO N°2

Docente:
BECERRA FELIPE, JOSE LUIS

Alumno Código Firma


Alcantara Tacora, Bruno Alexis 20181089C

Sección
B

2020-2
FUNDAMENTO TEÓRICO
El Registro TMR0
El PIC 16 F 877 /A contiene un contador de 8 bits (TMR 0 ubicado en la
dirección 0 x 1 de la memoria de datos Este contador se incrementa con pulsos
de reloj que se aplican al pin RA 4 /TOCKI o de acuerdo a una señal interna
proveniente del reloj de instrucciones del uC ( 4 La razón de incremento se
puede determinar por un pre escalador (divisor de frecuencia) localizado en el
registro OPTION 0 x 81 Este contador activa un flag de desbordamiento (T 0
IF ubicado en el INTCON) cuando la cuenta pasa de FFH a 00 H, generando
una interrupción.

Como temporizador TMR0


El contenido del TMR 0 es incrementado con una cadencia regular y
programable directamente por el hardware del PIC.

el registro TMR0 es incrementado por el hardware interno del PIC al mismo


tiempo que se ejecuta el programa.
Una vez alcanzado el valor 255 el registro TMR 0 es puesto a cero
automáticamente reemprendiendo entonces el conteo no desde el valor
originariamente cargado sino desde cero.

2
El Registro TMR0 (Bloques)

Manejo del TMR0

3
Ejemplo de funcionamiento Prescaler:

Cálculo de tiempo con TMR0

Interrupciones
Una interrupción consiste en una detención del programa en curso para
realizar una determinada rutina que atienda la causa que ha provocado la
interrupción.
Cuando se termina, se retorna al programa principal en el punto en que se
abandonó.

4
¿Por qué son útiles las interrupciones?
Interrupciones: Causas (Fuentes)
➢ Interrupción externa (RB0/INT)
➢ Rebosamiento TMR0, TMR1 y TMR2
➢ Cambio de estado del puerto B (RB7 RB4)
➢ Convertidor A/D concluye la conversión
➢ La interfaz SCI síncrono transmite o recibe
➢ Puerto Serie asíncrono
➢ Puerto paralelo secundario. Se lee o se escribe
Interrupciones: Fases
1. Se activa una posible causa de interrupción El señalizador de dicha
causa, el bit de permiso correspondiente y el global para todas las
interrupciones ( están a nivel alto
2. Para evitar que se produzca otra interrupción mientras dura el
tratamiento de la que se ha aceptado, el bit GIE se pone a 0
3. El valor actual del PC se guarda en la Pila
4. El PC se carga con el valor 0004 h, que es el del vector de interrupción
5. La rutina de interrupción comienza explorando el valor de los
señalizadores, para determinar la causa que la ha provocado
6. Según la causa de la interrupción, la rutina se bifurca a la subrutina
correspondiente
7. Se borran los señalizadores por software, antes de realizar el retorno
8. Cuando se llega a la última instrucción de la rutina de interrupción,
que es la de RETFIE, se carga en el PC el valor que inicialmente se
guardo en la Pila y se pone el bit GIE=1

5
Interrupciones: Secuencia
1. Al iniciar el programa se salta todo el bloque de inicio y fin de
interrupción con la instrucción GOTO PP (Ir al Programa Principal)
2. La interrupción ocurre en cualquier momento del programa Cuando se
activa el bit ENABLE de la interrupción, esta puede ocurrir en
cualquier momento
3. Al ocurrir la interrupción el PC automáticamente va a la dirección 0 x
04 de la memoria de programa El valor del PC de donde ocurre la
interrupción se guarda en la Pila
4. La rutina de interrupción comienza guardando W, STATUS y PCLATH
a valores temporales y luego se va a rutina_int
5. En la rutina_int se explora el valor de los señalizadores, para
determinar la causa que la ha provocado y una vez terminado esta
rutina programada se va a Salir_interrupcion
6. Se va a una parte del programa en donde se recuperan los valores de
W, STATUS y PCLATH y luego de usa la instrucción retfie para salir
de la interrupción
7. Al salir de la interrupción se recuperan los valores de PC guardados en
la Pila y el programa continua donde se quedó

6
Interrupción con el TMR0 (Generar IntTMR0 de 10ms)

7
Interrupción con el TMR0(Generar IntTMR0 de 10ms 20Mhz)

8
OBJETIVOS
✓ El objetivo de este laboratorio N°2 es Generar un contador de 0 a 9 en
el puerto C usando un display de 7segmentos, con un delay de 1
segundo. El cual deberá cumplir con las siguientes condiciones: Si B0=
0 Ascendente, Si B0= 1 Descendente.
✓ También debemos Generar un led oscilante con periodo 100 ms en el
puerto D0.
✓ Generar una señal por Timer0 en el puerto D1 de Periodo 20ms.
✓ Generar una salida oscilatoria en el puerto D2 según exista un flanco
de bajada en B0 (Interrupción)
✓ Generar las siguientes salidas:
Interrupción puerto B del 4 al 7
D4 cambia si se da un flanco de bajada en B4
D5 cambia si se da un flanco de subida en B5
D6 cambia si se da un flanco de bajada en B6
D7 cambia si se da un flanco de subida en B7

DESCRIPCIÓN Y EXPLICACIÓN DE LOS RESULTADOS:


Ecuación del Timer0.

9
Diagrama de flujo de su programa.

10
11
12
Código del programa comentado.

13
14
15
16
17
18
Simulación en proteus con osciloscopio.

19
20
Aspectos resaltantes del desarrollo de la experiencia.
• Se puede resaltar la importancia del uso de tablas y delays.
Conclusiones
❖ Se concluye que Para el manejo de tablas en microcontroladores se debe
tener en cuenta básicamente el manejo del puntero de programa.
❖ Se concluye que una de las principales utilidades de las subrutinas es
el manejo de tiempos. Se pueden manejar delays o temporizadores en
uC ya que se conoce el tiempo que demora cada instrucción.

21

También podría gustarte