You are on page 1of 18

UNIVERSIDAD PRIVADA DEL VALLE

FACULTAD DE INFORMATICA Y ELECTRONICA


INGENIERIA ELECTRONICA
CAMPUS TIQUIPAYA

Evaluacin

MICROPROCESADORES II
Informe de Laboratorio N 3

INTERRUPCIONES Y TECLADOS
MATRICIALES
Grupo A
Estudiante: Ariel Adrin Carvajal Pardo
Docente: Msc. Ing. Gerson Prez Villarroel
Cochabamba 01 de Abril
Gestin I 2015
UNIVERSIDAD PRIVADA DEL VALLE
SERVICIOS DE LABORATORIO
LABORATORIOS DE DISEO ELECTRONICO II

PRACTICA N 3
INTERRUPCIONES Y TECLADOS MATRICIALES
1. OBJETIVOS.
Al finalizar la prctica el estudiante:
Ser capaz de manejar las distintas interrupciones en los microcontroladores PIC.

Manejar teclados matriciales para ampliar el rango de datos que se pueden introducir al
microcontrolador.

2. MARCO TEORICO
En los ltimos 40 aos, los adelantos investigativos en la ciencia y tecnologa han permitido
revolucionar al mundo con una serie de inventos e innovaciones en todas las reas del
saber. Uno de estos campos ms investigados y explotados es sin duda la electrnica.
La automatizacin industrial e incluso la domtica, que es la automatizacin del hogar, est
expandindose inmensurablemente; hoy en da se vive una era donde todo tiende a ser
automtico, con el fin de facilitar el curso de la vida de la humanidad. (Ledezma, 2010)
Set de Instrucciones
Hasta aqu, para poder iniciar a programar el Microcontrolador PIC 16F877, solo
necesitamos conocer el set de instrucciones el cual se presenta en la siguiente figura:
En l se puede ver el Mnemonico de las instruccin, sus operandos, descripcin, los ciclos
que toma su ejecucin, el Opcode y los bit que puede afectar cada operacin. Estn
clasificadas de acuerdo a su funcionamiento si estn dirigidas a Operaciones de Byte, de Bit
o de Literales y Control.

Es importante entender cada una de ellas y memorizarlas para poder programar de manera
ms eficiente el micro.
Este conjunto de instrucciones corresponden a la programacin ASM que es la ms comn,
la de ms bajo nivel, la que interacta directamente con el micro hacindolo ms eficiente en
tiempo de ejecucin, por eso es importante dominarlo aunque el objetivo sea programar en
lenguaje C, existir un momento en el que seguramente necesitaras saber Ensamblador,
adems
es
el
ideal
para
aprender
la
programacin
de
PIC's.
Este es el resumen de las instrucciones, la idea es tener una nocin de las instrucciones
para poder entender mejor nuestro primer programa; ms adelante veremos ms a detalle
cada una de las instrucciones para ver casos especficos en los que nos pueden servir. (S.,
2007)

3. MATERIALES

1 Multmetro Digital

Fuente de energa

Bread board
O
Protoboard

Resistencias de Diseo

Cables para Fuente

Microcontrolador 16F887A

LEDS

3 Display 7 Seg

Teclado Matricial

4. PROCEDIMIENTO.
Parte 3.1
Desarrollar un programa, para encender y apagar, consecutivamente, un LED cuando se produzca
un
cambio
de
nivel
en
el
pin
que
maneja
la
interrupcin
externa.
CODIGO
LIST P=16f877A
INCLUDE <P16F877A.INC>
ORG
NOP
goto
ORG
NOP
goto
INICIO
banksel
clrf

0X00
INICIO
0X04
INTERRUPCION
TRISB
TRISC

;BANCO1
;PUERTO C SALIDA

bsf
movlw
movwf
bsf

TRISB,0
;RB0 ENTRADA
0X90
;CONFIGURACION PARA INTERRUPCIONES
INTCON
OPTION_REG,INTEDG ;INTERRUPCION EN FLANCO DE SUBIDA

banksel
clrf

PORTB
PORTC

BUCLE
NOP
goto
INTERRUPCION
bcf
btfss
goto OFF
bcf
retfie

;BANCO0
;LIMPIAMOS SALIDAS

BUCLE

INTCON,1
PORTC,0
PORTC,0

;BAJAMOS LA BANDERA DE INTERRUPCION


;C0=1?
;NO, PRENDER
;SI, APAGAMOS
;SALIMOS DE LA INTERRUPCION

OFF
bsf
retfie

PORTC,0

END
SIMULACION

U1
13
14
2
3
4
5
6
7
8
9
10
1

OSC1/CLKIN
OSC2/CLKOUT

RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD

RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RE0/AN5/RD
RC1/T1OSI/CCP2
RE1/AN6/WR
RC2/CCP1
RE2/AN7/CS
RC3/SCK/SCL
RC4/SDI/SDA
MCLR/Vpp/THV
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
PIC16F877A

33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30

R1
220

R2
220

D1
LED-BIRY

LAYOUT

Parte 3.2
Realizar un programa, que realice un juego de luces, de encendido secuencial de un LED de
izquierda a derecha. La velocidad de la secuencia debe poder variar aumentando o disminuyendo
segn se vayan presionando dos pulsadores conectados a dos pines configurados como
interrupciones externas.
CODIGO
list p=16f877A
include <p16f877A.inc>
AUX EQU 0X19
RAP
EQU 0X18
LENT EQU 0X17
ORG
nop
goto
ORG
nop
goto

0X00
_INICIO
0X04
_VERIFICA

_INICIO
bsf
STATUS,RP0
;Ir banco 1
bcf
STATUS,RP1
clrf
TRISD
;PD salida
movlw b'00001111'
movwfTRISB
movlw 0X90
;CONFIGURACION PARA INTERRUPCIONES
movwfINTCON
bsf
OPTION_REG,INTEDG ;INTERRUPCION EN FLANCO DE SUBIDA

movlw
movwf

.125
PR2

bcf
STATUS,RP0
bcf
STATUS,RP1
movlw b'01001011'
movwf
T2CON
clrf
TMR2
clrf
PORTB
clrf
PORTA
movlw .0
movwfRAP
movlw .50
movwfLENT
_DUERME
nop
goto

;Valor a escribir en el registro de configuracin


;Configuracion de las cuantas del PR2
;Ir banco 0

;TMR2=0 inicializamos el contador en cero

_DUERME

_SECUENCIA1
movlw b'01010101'
movwfPORTD
call _RETARDO_025
call _VERIFICA
movlw b'10101010'
movwfPORTD
call _RETARDO_025
call _VERIFICA
goto _SECUENCIA1
_VERIFICA
bcf
btfsc
goto
btfsc
goto
btfsc
call
btfsc
call

INTCON,1
PORTB,0
_SECUENCIA1
PORTB,1
_SECUENCIA2
PORTB,2
_MASRAPIDO
PORTB,3
_MASLENTO

;SE PRENDE LED DEL BIT 0

;SE PRENDE LED DEL BIT 1

;BAJAMOS LA BANDERA DE INTERRUPCION

retfie
_SECUENCIA2
movlw b'00110011'
movwfPORTD
call _RETARDO_025
call _VERIFICA
movlw b'11001100'

;SE PRENDE LED DEL BIT 2

;SE PRENDE LED DEL BIT 3

movwfPORTD
call _RETARDO_025
goto _SECUENCIA2
_MASRAPIDO
movlw .5
addwf RAP
movlw .4
subwf LENT
decfszLENT,F
return
goto _FIN2
return
_MASLENTO
movlw .5
addwf LENT
movlw .4
subwf RAP
decfszRAP,F
return
goto _FIN1
return
_FIN1
movlw .5
subwf LENT
movlw .5
addwf RAP
return
_FIN2
movlw .5
addwf LENT
movlw .5
subwf RAP
return
_RETARDO_025
movf LENT,W
movwfAUX
_ESPERA1
clrf
TMR2
bcf
PIR1, TMR2IF
bsf
T2CON, TMR2ON
_ESPERA
btfss PIR1, TMR2IF

goto _ESPERA
decfsz
AUX,F
goto _ESPERA1
bcf
T2CON, TMR2ON
return
END
SIMULACION

U1
13
14
2
3
4
5
6
7
8
9
10

OSC1/CLKIN
OSC2/CLKOUT

RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD

RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RE0/AN5/RD
RC1/T1OSI/CCP2
RE1/AN6/WR
RC2/CCP1
RE2/AN7/CS
RC3/SCK/SCL
RC4/SDI/SDA
MCLR/Vpp/THV
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
PIC16F877A

33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30

0
0
0
0

0
1
0
1
0
1
0
1

LAYOUT

Parte 3.3
Realizar un programa que permita introducir datos de tres cifras por medio de un teclado matricial.
Los datos deben ser visualizarse, desplazndose de izquierda a derecha, en tres displays
conectados a un solo puerto.
CODIGO
LIST P=16f877A
INCLUDE <P16F877A.INC>
D_IZQ
EQU 0X20
D_CENTRO EQU 0X21
D_DCHA
EQU 0X22
LEIDO
EQU 0X23
AUX
EQU 0X24
W_tmp
EQU 0X25
STATUS_tmp
EQU 0X26
PCLATH_tmp
EQU 0X27
ORG

0X00
nop
goto

ORG

_INICIO
0X04

nop
btfss INTCON,RBIF
retfie
movwfW_tmp
swapf STATUS,W
banksel
TRISA
movwfSTATUS_tmp
movfwPCLATH
movwfPCLATH_tmp
call _NOREBOTE
goto _TECLA

; SI ENTRAMOS POR ERROR,ESTO NOS HARA SALIR


; GUARDAMOS EL CONTEXTO DEL PROGRAMA

; SALTAMOS A LA RUTINA DE BUSQUEDA

_INICIO
banksel
clrf
movlw
movwf
movlw
movwf
movlw
movwf
clrw
movlw
Y TIMER
movwf
movlw
Y TIMER
movwf
movlw
movwf

;PUERTO B ENTRADA
;PUERTO D SALIDA

b'10001000'

;CONFIGURACION PARA INTERRUPCIONES Y PULL UP

INTCON
b'01000110'

;CONFIGURACION PARA INTERRUPCIONES Y PULL UP

OPTION_REG
.217
TMR0

banksel
movlw
movwf
clrf
clrf
movlw
movwf
movwf
movwf
_SLEEP
nop
call
goto

TRISB
TRISD
.6
ADCON1
b'11111000'
TRISA
b'11110000'
TRISB
TRISD

PORTA
b'00000111'
PORTA
PORTD
PORTB
b'00111111'
D_IZQ
D_CENTRO
D_DCHA

;BANCO1
;PUERTO D SALIDA

;INTERRUPCION EN FLANCO DE SUBIDA

;BANCO0

_BARRIDO
_SLEEP

_BARRIDO
movfwAUX
bcf
bsf
bsf

PORTA,2
PORTA,1
PORTA,0

call _TABLA
movwfAUX
movfwD_CENTRO
movwfD_IZQ
movfwD_DCHA
movwfD_CENTRO

; ENCENDEMOS EL DISPLAY D_DCHA


;D_CENTRO OFF
;D_IZQ OFF

movfwAUX
movwfD_DCHA
movfwD_DCHA
movwfPORTD
call _ESPERA
bsf
PORTA,2
nop
nop

;D_DCHA OFF

bcf
PORTA,1
movfwD_CENTRO
movwfPORTD
call _ESPERA
bsf
PORTA,1
nop
nop

;D_CENTRO ON

bcf
PORTA,2
movfwD_IZQ
movwfPORTD
call _ESPERA
bsf
PORTA,2
nop
nop
return

;D_IZQ ON

_TABLA
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw

addwf PCL,F
b'00111111'
b'00000110'
b'01011011'
b'01001111'
b'01100110'
b'01101101'
b'01111101'
b'00000111'
b'01111111'
b'01101111'
b'01110111'
b'11111111'
b'00111001'
b'01011110'
b'01111001'
b'01110001'

_BUSCA
addwf PCL,F
retlw 0X07
retlw 0X04
retlw 0X01

;D_CENTRO OFF

;D_IZQ

OFF

;CONT ES EL CONTADOR DEL PROGRAMA


;SE INTRODUCE EL NUMERO 0
;SE INTRODUCE EL NUMERO 1
;SE INTRODUCE EL NUMERO 2
;SE INTRODUCE EL NUMERO 3
;SE INTRODUCE EL NUMERO 4
;SE INTRODUCE EL NUMERO 5
;SE INTRODUCE EL NUMERO 6
;SE INTRODUCE EL NUMERO 7
;SE INTRODUCE EL NUMERO 8
;SE INTRODUCE EL NUMERO 9
;SE INTRODUCE LA LETRA A
;SE INTRODUCE LA LETRA B
;SE INTRODUCE LA LETRA C
;SE INTRODUCE LA LETRA D
;SE INTRODUCE LA LETRA E
;SE INTRODUCE LA LETRA F
;CONT ES EL CONTADOR DEL PROGRAMA
;CODIGO DEL CARACTER
7
;CODIGO DEL CARACTER
4
;CODIGO DEL CARACTER
1

retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
_ESPERA
clrf
movlw
movwf
_ESPERA1
btfss
goto
return

0X0A
0X08
0X05
0X02
0X00
0X09
0X06
0X03
0X0B
0X0F
0X0E
0X0D
0X0C

;CODIGO DEL CARACTER


;CODIGO DEL CARACTER
;CODIGO DEL CARACTER
;CODIGO DEL CARACTER
;CODIGO DEL CARACTER
;CODIGO DEL CARACTER
;CODIGO DEL CARACTER
;CODIGO DEL CARACTER
;CODIGO DEL CARACTER
;CODIGO DEL CARACTER
;CODIGO DEL CARACTER
;CODIGO DEL CARACTER
;CODIGO DEL CARACTER

A
8
5
2
0
9
6
3
B
F
E
D
C

;SUBRUTINA DE RETARDO PARA 5ms


INTCON
.217
TMR0
INTCON,T0IF
_ESPERA1

_NOREBOTE
movlw .7
movwfAUX
_RETARDO
call _BARRIDO
decfszAUX,F
goto _RETARDO
return
_TECLA
movlw 0XF0
xorwf PORTB,W
btfsc STATUS,Z
goto _SALIR

;INSTRUCCION PARA SALIR SI ENTRAMOS


;A LA INTERRUPCION POR "LIBERAR"

movfwPORTB
movwfLEIDO
bsf
STATUS,RP0
;PASAMOS AL BANCO 1
movlw b'00001111' ;PONEMOS RB4 A RB7 CONO SALIDAS
movwfTRISB
;Y RB3 A RB0 CONO ENTRADAS
bcf
STATUS,RP0
;BANCO 0
movfwLEIDO
movwfPORTB
nop
nop

;CARGAMOS EL VALOR LEIDO EN W


;CICLOS PARA QUE SE EXTABLEZCA PORTB

btfss PORTB,0
goto _FILA0

;BUSCAMOS 0 EN LA FILA0

btfss PORTB,1
goto _FILA1

;BUSCAMOS 0 EN LA FILA1

btfss PORTB,2
goto _FILA2

;BUSCAMOS 0 EN LA FILA2

goto

;EL CERO TENDRA QUE ESTAR AQUI

_FILA0
clrw
goto

_FILA3

;SI EL 0 ESTA AQUI SE CARGA CEROS


_COLUMNA

_FILA1
movlw 0X01 ;SI EL 0 ESTA AQUI SE CARGA 1
goto _COLUMNA
_FILA2
movlw 0X02 ;SI EL 0 ESTA AQUI SE CARGA 2
goto _COLUMNA
_FILA3
movlw 0X03 ;SI EL 0 ESTA AQUI SE CARGA 3
goto _COLUMNA
_COLUMNA
btfss PORTB,4
goto _COL3

;SI RB4 A 0 ES QUE ERA LA COLUMNA 4


;VAMOS A COMPLETAR EL CODIGO

btfss PORTB,5
goto _COL2

;SI RB4 A 0 ES QUE ERA LA COLUMNA 4


;VAMOS A COMPLETAR EL CODIGO

btfss PORTB,6
goto _COL1

;SI RB4 A 0 ES QUE ERA LA COLUMNA 4


;VAMOS A COMPLETAR EL CODIGO

_COL0
goto

_CODIGO

_COL1
iorlw b'00000100'
goto _CODIGO
_COL2
iorlw b'00001000'
goto _CODIGO
_COL3
iorlw b'00001100'
goto _CODIGO

_CODIGO
call _BUSCA
movwfAUX
_SALIR
movfwPCLATH_tmp
movwfPCLATH
swapf STATUS_tmp,W
movwf
STATUS
swapf W_tmp,F
swapf W_tmp,W
goto _BARRIDO
END
LAYOUT

ON

+
4

D
13
14
2
3
4
5
6
7
8
9
10
1

OSC1/CLKIN
OSC2/CLKOUT

RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD

RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RE0/AN5/RD
RC1/T1OSI/CCP2
RE1/AN6/WR
RC2/CCP1
RE2/AN7/CS
RC3/SCK/SCL
RC4/SDI/SDA
MCLR/Vpp/THV
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7

C
1

U1
33
34
35
36
37
38
39
40

SIMULACION

15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30

PIC16F877A

R2

R1

R3

4.7K

4.7K

4.7K
R6(2)

R6
1.2K

Q1
BC557

R4
R5

Q2

Q3
BC557

1.2K

BC557

1.2K

5. CUESTIONARIO.
1. Explicar las diferencias de las interrupciones en los PIC de gama media y gama alta.
Las interrupciones entre los PICS de gama media y gama alta se diferencian de la manera
en que en los de Gama alta se pueden realizar interrupciones el cualquiera de las
pulsaciones de los distintos puertos, en cambio, los de gama baja nicamente pueden ser
activados en el puerto de salida que tienen activadas esta opcin, por ejemplo en el PIC

usado en el laboratorio el puerto B es el nico puerto que puede recibir las interrupciones
externas
2. Explicar las distintas formas que existen para conectar un teclado matricial a un
microcontrolador.
Para poder conectar un teclado matricial a un microcontrolador, por ejemplo tomando como
base el PIC usado en el laboratorio, se deben encender las resistencias pull-up del puerto B
para que estas nos ayuden a diferenciar que tipo de botn fue la que el usuario apret.
Adems de esto se debe definir qu tipo de lgica se utilizara para poder detectar el carcter
que el usuario apret, por ejemplo el de comparaciones sucesivas, o el de cambio de lneas
altas por las bajas, y as poder determinar que tecla fue presionada.
6. CONCLUSIONES
Tras finalizar la prctica de laboratorio se lograron los objetivos que eran manejar las
distintas interrupciones en los microcontroladores PIC.
Manejar teclados matriciales
para ampliar el rango de datos que se pueden introducir al microcontrolador. Habiendo
culminados los objetivos que se buscaban cubrir se da por terminada esta prctica de
laboratorio.
7. WEBGRAFA

Ledezma, J. H., 2010. BANCO DE TESIS. [En lnea]


Available at: http://dpicuto.edu.bo/tesis/facultad-nacional-de-ingenieria/carrera-deingenieria-electrica-y-electronica/1746-diseno-e-implementacion-de-un-controlador-logicoprogramable-mediante-el-microcontrolador-16f877a.html
[ltimo acceso: 11 marzo 2015].

S., I., 2007. PIC 16F877. [En lnea]


Available at: http://picmicrocontroller877.blogspot.com/2007/08/set-de-instrucciones.html
[ltimo acceso: 11 Marzo 2015].

You might also like