Está en la página 1de 26

“Año de la lucha contra la corrupción y la impunidad”

UNIVERSIDAD NACIONAL DE INGENIERÍA


Facultad de Ingeniería Mecánica

LABORATORIO N°2

Contador,Interrupciones TMR0, RB0 & RBI


Curso: Sistemas embebidos (MT - 136)
Profesor: Ing. Oliden Martinez, José
Sección: A
Integrantes del Grupo – Código UNI:
Lévano Hernández Carlos Samuel 20135001J
Martínez Romero Claudia 20184510A

2021 – II
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

INTRODUCCIÓN

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ó.

Implementación del TMR0, RB0 y RBI


2
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

INDICE

1. OBJETIVOS
2. PROBLEMA
3. DIAGRAMA DE FLUJO
4. CÓDIGO ASSEMBLER
5. SIMULACIÓN
6. CONCLUSIONES

Implementación del TMR0, RB0 y RBI


3
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

1. OBJETIVOS
 Implementar un circuito con interrupción TMR0 habilitado.
 Implementar un circuito con interrupción RB0 habilitado.
 Implementar un circuito con interrupción RBI (4-7) habilitado.
 Aprender sobre interrupciones en el microcontrolador PIC16F877A.

Implementación del TMR0, RB0 y RBI


4
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

2. FUNDAMENTOS TEÓRICOS

3. PROBLEMA

 Visualizar un contador de números de 0 a 9 en el puerto C usando un


display de 7seg, cadencia de 1 segundo usando Delay (Programa
principal). Trabajar con un cristal de 20MHz. Si B0= 1 Ascendente, Si B0= 0
Descendente
 Generar un led oscilante T/2=100ms en D0 (T= Periodo)
 Generar una señal por Timer0 en D1 de Periodo 20ms
 Generar una salida oscilatoria en D2 según exista un flanco de bajada y un
flanco de subida en B0 (Interrupción). Notar que debe haber un cambio en
D2 en cada flanco (subida o bajada) de B0.
 Generar las siguientes salidas: Interrupción puerto B del 4 al 7
 D4 cambia por cada flanco de bajada en B4
 D5 cambia por cada flanco de subida en B5
 D6 cambia por cada flanco de bajada en B6
 D7 cambia por cada flanco de subida en B7

Implementación del TMR0, RB0 y RBI


5
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

4. DIAGRAMA DE FLUJO

INICIO

Configuración:
Puerto D: OUT
Puerto C: OUT
Puerto B: INT
Registro OPTION_REG
Registro INCON
Variables:
digito
cnt1
cnt2
PUERTO_B
VERIF
REF

Registro TMR0 = .60

display

FIN

Implementación del TMR0, RB0 y RBI


6
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

Implementación del TMR0, RB0 y RBI


7
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

Implementación del TMR0, RB0 y RBI


8
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

Implementación del TMR0, RB0 y RBI


9
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

Rut_interrupcion

T0IF=0 Int_TMR0

INTF=0 Int_RB0

RBIF=0 Int_RBI

T0IF=0

INTF=0

RBIF=0

Salir_interrupcion

Implementación del TMR0, RB0 y RBI


10
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

Int_TMR0

Int_RB0
Registro TMR0 = .60

RD1=1 RD2=1

RD1 = 0 RD1 = 1 RD2 = 0 RD2 = 1

Salir Int_TMR0 Salir Int_RB0

Implementación del TMR0, RB0 y RBI


11
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

Int_RBI

PUERTO_B=PORTB

VERIF=XOR(PUERTO_B,REF)

REF=PUERTO_B

VERIF4=0 PUERTO_B4=0 RD4=0 RD4=1

RD4=0

VERIF5=0 PUERTO_B5=1 RD5=0 RD5=1

RD5=0

VERIF6=0 PUERTO_B6=1 RD6=0 RD6=1

RD6=0

VERIF7=0 PUERTO_B7=0 RD7=0 RD7=1

RD7=0

Salir Int_RBI

Implementación del TMR0, RB0 y RBI


12
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

5. CÓDIGO ASSEMBLER

;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Configuracion inicial ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;

list p=16f877A
#include <p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF &
_PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Definicion de variables ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;

cnt1 EQU 0x20


cnt2 EQU 0x21
digit EQU 0x22
PUERTO_B EQU 0X23
VERIF EQU 0X24
REF EQU 0x25
w_temp EQU 0x70
st_temp EQU 0x71
pc_temp EQU 0x72

;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Vector predefinido ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0x00
nop
goto main

;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Vector interrupcion ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0x04

begin_int: ; Guardar contexto


movwf w_temp
movf STATUS,W
movwf st_temp
movf PCLATH,W
movwf pc_temp
goto Rut_Interrupcion

Salir_Interrupcion: ; Recuperar contexto


movf pc_temp,W
movwf PCLATH
movf st_temp,W
movwf STATUS
movf w_temp,W
retfie

;;;;;;;;;;;;;;;;;;;;;;;;;;;

Implementación del TMR0, RB0 y RBI


13
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM
; Rutina Principal ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;

main:
bsf STATUS,RP0 ; Banco1
clrf TRISD ; PORTD output
clrf TRISC ; PORTC output
movlw 0xFF
movwf TRISB ; PORTB input
movlw b'01000111'
movwf OPTION_REG

bcf STATUS,RP0 ; Banco 0


clrf PORTD ; PORTD
clrf PORTC ; PORTC

movlw b'11111000'
movwf INTCON
movlw d'60'
movwf TMR0

display:
movf digit,w
call tabla
movwf PORTC
call delay_1s
btfsc PORTB,0
goto DESC
goto ASC

DESC:
movlw 0x00
xorwf digit,w
btfsc STATUS,Z
goto digit_9
decf digit,F
goto display

digit_9:
movlw 0x09
movwf digit
goto display

ASC:
movlw 0x09
xorwf digit,w
btfsc STATUS,Z
goto digit_0
incf digit,F
goto display

digit_0:
clrf digit
goto display

Implementación del TMR0, RB0 y RBI


14
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM
tabla:
addwf PCL,F
retlw 0xFC ; 0 en código 7 segmentos
retlw 0x60 ; 1 en código 7 segmentos
retlw 0xDA ; 2 en código 7 segmentos
retlw 0xF2 ; 3 en código 7 segmentos
retlw 0x66 ; 4 en código 7 segmentos
retlw 0xB6 ; 5 en código 7 segmentos
retlw 0xBE ; 5 en código 7 segmentos
retlw 0xE0 ; 7 en código 7 segmentos
retlw 0xFE ; 8 en código 7 segmentos
retlw 0xF6 ; 9 en código 7 segmentos

delay_25ms:
movlw d'166'
movwf cnt1
loop1:
movlw d'251'
movwf cnt2
loop2:
decfsz cnt2,F
goto loop2
decfsz cnt1,F
goto loop1
return

delay_100ms:
call delay_25ms
call delay_25ms
call delay_25ms
call delay_25ms
return

delay_200ms_D0:
bsf PORTD,0
call delay_100ms
bcf PORTD,0
call delay_100ms
return

delay_1s:
call delay_200ms_D0
call delay_200ms_D0
call delay_200ms_D0
call delay_200ms_D0
call delay_200ms_D0
return

;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Rutina Interrupcion ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
Rut_Interrupcion:
btfsc INTCON,T0IF
goto Int_TMR0
btfsc INTCON,INTF

Implementación del TMR0, RB0 y RBI


15
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM
goto Int_RB0
btfsc INTCON,RBIF
goto Int_RBI
goto Salir_rut

;Interrupción TMR0
Int_TMR0:
movlw d'60'
movwf TMR0
btfss PORTD,1
goto D1_0
goto D1_1
D1_0:
bsf PORTD,1
goto Salir_rut
D1_1:
bcf PORTD,1
goto Salir_rut

;Interrupción RB0
Int_RB0:
btfss PORTD,2
goto D2_0
goto D2_1
D2_0:
bsf PORTD,2
goto Salir_rut
D2_1:
bcf PORTD,2
goto Salir_rut

;Interrupción RBI (RB4-RB7)


Int_RBI:
movf PORTB,0
movwf PUERTO_B
xorwf REF,0
movwf VERIF
movf PUERTO_B,0
movwf REF
goto VERIF_4
VERIF_4:
btfsc VERIF,4
goto B_RB4
goto VERIF_5
VERIF_5:
btfsc VERIF,5
goto B_RB5
goto VERIF_6
VERIF_6:
btfsc VERIF,6
goto B_RB6
goto VERIF_7
VERIF_7:
btfsc VERIF,7
goto B_RB7
goto Salir_rut

Implementación del TMR0, RB0 y RBI


16
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

;Interrupcion RB4
B_RB4:
btfsc PUERTO_B,4
goto B_RD4
goto VERIF_5
B_RD4:
btfss PORTD,4
goto RD4_0
goto RD4_1
RD4_0:
bsf PORTD,4
goto VERIF_5
RD4_1:
bcf PORTD,4
goto VERIF_5

;Interrupcion RB5
B_RB5:
btfss PUERTO_B,5
goto B_RD5
goto VERIF_6
B_RD5:
btfss PORTD,5
goto RD5_0
goto RD5_1
RD5_0:
bsf PORTD,5
goto VERIF_6
RD5_1:
bcf PORTD,5
goto VERIF_6

;Interrupcion RB6
B_RB6:
btfss PUERTO_B,6
goto B_RD6
goto VERIF_7
B_RD6:
btfss PORTD,6
goto RD6_0
goto RD6_1
RD6_0:
bsf PORTD,6
goto VERIF_7
RD6_1:
bcf PORTD,6
goto VERIF_7

;Interrupcion RB7
B_RB7:
btfsc PUERTO_B,7
goto B_RD7
goto Salir_rut
B_RD7:

Implementación del TMR0, RB0 y RBI


17
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM
btfss PORTD,7
goto RD7_0
goto RD7_1
RD7_0:
bsf PORTD,7
goto Salir_rut
RD7_1:
bcf PORTD,7
goto Salir_rut

;Restauración de Flags
Salir_rut:
bcf INTCON,T0IF
bcf INTCON,INTF
bcf INTCON,RBIF
goto Salir_Interrupcion
END

;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Final del programa ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
END

6. SIMULACIÓN

Estado Inicial: (Interrupción por TMR0)

Implementación del TMR0, RB0 y RBI


18
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

Se aprecia aproximadamente que por cada 10 ondas cuadradas completas de


RD1, se muestra 1 onda cuadrada completa de RD0 lo cual tiene sentido ya
que el periodo de uno es 10 veces el otro.
Se da un cambio en RB0, por flanco de subida: (Interrupción por RB0)

Se aprecia un cambio en RD2, donde del estado activo se convierte en


apagado.

Implementación del TMR0, RB0 y RBI


19
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

Se da un cambio en RB0, por flanco de bajada:

No sucedió nada. La salida RD2 se mantuvo constante.


Se da un cambio en RB0, por flanco de subida:

Se activa la salida RD2. Esto se debe a que la interrupción en RB0 está


programada por flanco de subida. Si sucede el cambio por flanco de bajada, no

Implementación del TMR0, RB0 y RBI


20
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

sucederá nada en RD2, pero si sucede el cambio por flanco de subida, ED2
cambiará de estado.
Ahora veremos la interrupción por RBI (RB4-RB7):
La siguiente tabla nos permite captar los cambios que permiten la interrupción.
Cambio de Flanco Cambio de Estado
RB4 bajada RD4
RB5 subida RD5
RB6 Bajada RD6
RB7 Subida RD7
Se mostrarán los cambios que se dan por sus respectivos flancos. Solo
activaremos y desactivaremos una entrada para cada caso.

Caso RB4 - flanco de bajada: (RD4: cambio de estado)

Caso RB4 - flanco de constante: (RD4: constante)

Implementación del TMR0, RB0 y RBI


21
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

Caso RB5 - flanco de subida: (RD5: constante)

Implementación del TMR0, RB0 y RBI


22
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

Caso RB5 - flanco de bajada: (RD5: cambio de estado)

Caso RB6 - flanco de bajada: (RD6: constante)

Implementación del TMR0, RB0 y RBI


23
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

Caso RB6 - flanco de subida: (RD6: cambio de estado)

Caso RB7 - flanco de subida: (RD7: cambio de estado)

Implementación del TMR0, RB0 y RBI


24
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

Caso RB7 - flanco de bajada: (RD7: cambio de estado)

Implementación del TMR0, RB0 y RBI


25
UNIVERSIDAD NACIONAL DE INGENIERÍA
Facultad de Ingeniería Mecánica - FIM

7. CONCLUSIONES
Para resolver el problema de leer simultáneamente las cuatro entradas RB
del 4 al 7, se utilizó la operación lógica XOR entre el valor actual y con un
valor guardado.

Implementación del TMR0, RB0 y RBI


26

También podría gustarte