Professional Documents
Culture Documents
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
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
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
_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
retfie
_SECUENCIA2
movlw b'00110011'
movwfPORTD
call _RETARDO_025
call _VERIFICA
movlw b'11001100'
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
_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'
INTCON
b'01000110'
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
;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
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
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
A
8
5
2
0
9
6
3
B
F
E
D
C
_NOREBOTE
movlw .7
movwfAUX
_RETARDO
call _BARRIDO
decfszAUX,F
goto _RETARDO
return
_TECLA
movlw 0XF0
xorwf PORTB,W
btfsc STATUS,Z
goto _SALIR
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
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
_FILA0
clrw
goto
_FILA3
_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
btfss PORTB,5
goto _COL2
btfss PORTB,6
goto _COL1
_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