Post on 12-Jan-2016
description
UNIVERSIDAD PRIVADA DEL VALLEFACULTAD DE INFORMATICA Y ELECTRONICAINGENIERIA ELECTRONICA CAMPUS TIQUIPAYA
MICROPROCESADORES II
Informe de Laboratorio Nº 3
INTERRUPCIONES Y TECLADOS MATRICIALES
Grupo “A”
Estudiante: Ariel Adrián Carvajal Pardo
Docente: Msc. Ing. Gerson Pérez Villarroel
Cochabamba 01 de Abril
Gestión I – 2015
Evaluación
UNIVERSIDAD PRIVADA DEL VALLE
SERVICIOS DE LABORATORIO
LABORATORIOS DE DISEÑO ELECTRONICO II
PRACTICA Nº 3
INTERRUPCIONES Y TECLADOS MATRICIALES
1. OBJETIVOS.
Al finalizar la práctica 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 años, los adelantos investigativos en la ciencia y tecnología han permitido revolucionar al mundo con una serie de inventos e innovaciones en todas las áreas del saber. Uno de estos campos más investigados y explotados es sin duda la electrónica.
La automatización industrial e incluso la domótica, que es la automatización del hogar, está expandiéndose inmensurablemente; hoy en día se vive una era donde todo tiende a ser automático, 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 instrucción, sus operandos, descripción, los ciclos que toma su ejecución, el Opcode y los bit que puede afectar cada operación. Están clasificadas de acuerdo a su funcionamiento si están 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 más eficiente el micro.
Este conjunto de instrucciones corresponden a la programación ASM que es la más común, la de más bajo nivel, la que interactúa directamente con el micro haciéndolo más eficiente en tiempo de ejecución, por eso es importante dominarlo aunque el objetivo sea programar en lenguaje C, existirá un momento en el que seguramente necesitaras saber Ensamblador, además es el ideal para aprender la programación de PIC's.
Este es el resumen de las instrucciones, la idea es tener una noción de las instrucciones para poder entender mejor nuestro primer programa; más adelante veremos más a detalle cada una de las instrucciones para ver casos específicos en los que nos pueden servir. (S.,2007)
3. MATERIALES
1 Multímetro Digital
Fuente de energía
Bread boardO
Protoboard
Resistencias de Diseño
Cables para Fuente
Microcontrolador 16F887A
LEDS
3 Display 7 Seg
Teclado Matricial
4. PROCEDIMIENTO.
Parte 3.1Desarrollar un programa, para encender y apagar, consecutivamente, un LED cuando se produzca un cambio de nivel en el pin que maneja la interrupción externa.
CODIGO
LIST P=16f877AINCLUDE <P16F877A.INC>
ORG 0X00NOPgoto INICIOORG 0X04NOPgoto INTERRUPCION
INICIObanksel TRISB ;BANCO1clrf TRISC ;PUERTO C SALIDA
bsf TRISB,0 ;RB0 ENTRADAmovlw 0X90 ;CONFIGURACION PARA INTERRUPCIONESmovwf INTCONbsf OPTION_REG,INTEDG ;INTERRUPCION EN FLANCO DE SUBIDA
banksel PORTB ;BANCO0clrf PORTC ;LIMPIAMOS SALIDAS
BUCLENOPgoto BUCLE
INTERRUPCIONbcf INTCON,1 ;BAJAMOS LA BANDERA DE INTERRUPCIONbtfss PORTC,0 ;¿C0=1?goto OFF ;NO, PRENDERbcf PORTC,0 ;SI, APAGAMOSretfie ;SALIMOS DE LA INTERRUPCION
OFFbsf PORTC,0retfie
END
SIMULACION
RA0/AN02
RA1/AN13
RA2/AN2/VREF-/CVREF4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RE0/AN5/RD8
RE1/AN6/WR9
RE2/AN7/CS10
OSC1/CLKIN13
OSC2/CLKOUT14
RC1/T1OSI/CCP216
RC2/CCP117
RC3/SCK/SCL18
RD0/PSP019
RD1/PSP120
RB7/PGD40
RB6/PGC39
RB538
RB437
RB3/PGM36
RB235
RB134
RB0/INT33
RD7/PSP730
RD6/PSP629
RD5/PSP528
RD4/PSP427
RD3/PSP322
RD2/PSP221
RC7/RX/DT26
RC6/TX/CK25
RC5/SDO24
RC4/SDI/SDA23
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI15
MCLR/Vpp/THV1
U1
PIC16F877A
R1220
R2
220
D1
LED-BIRY
LAYOUT
Parte 3.2Realizar 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 según se vayan presionando dos pulsadores conectados a dos pines configurados como interrupciones externas.
CODIGO
list p=16f877Ainclude <p16f877A.inc>
AUX EQU 0X19RAP EQU 0X18LENT EQU 0X17
ORG 0X00nopgoto _INICIOORG 0X04nopgoto _VERIFICA
_INICIO
bsf STATUS,RP0 ;Ir banco 1bcf STATUS,RP1clrf TRISD ;PD salidamovlwb'00001111'movwfTRISBmovlw0X90 ;CONFIGURACION PARA INTERRUPCIONESmovwfINTCONbsf OPTION_REG,INTEDG ;INTERRUPCION EN FLANCO DE SUBIDA
movlw .125 ;Valor a escribir en el registro de configuración movwf PR2 ;Configuracion de las cuantas del PR2
bcf STATUS,RP0 ;Ir banco 0bcf STATUS,RP1movlwb'01001011'
movwf T2CONclrf TMR2 ;TMR2=0 inicializamos el contador en ceroclrf PORTBclrf PORTAmovlw.0movwfRAPmovlw.50movwfLENT
_DUERMEnopgoto _DUERME
_SECUENCIA1
movlwb'01010101' ;SE PRENDE LED DEL BIT 0movwfPORTDcall _RETARDO_025call _VERIFICAmovlwb'10101010' ;SE PRENDE LED DEL BIT 1movwfPORTDcall _RETARDO_025call _VERIFICAgoto _SECUENCIA1
_VERIFICAbcf INTCON,1 ;BAJAMOS LA BANDERA DE INTERRUPCIONbtfsc PORTB,0goto _SECUENCIA1btfsc PORTB,1goto _SECUENCIA2btfsc PORTB,2call _MASRAPIDObtfsc PORTB,3call _MASLENTO
retfie
_SECUENCIA2
movlwb'00110011' ;SE PRENDE LED DEL BIT 2movwfPORTDcall _RETARDO_025call _VERIFICAmovlwb'11001100' ;SE PRENDE LED DEL BIT 3
movwfPORTDcall _RETARDO_025goto _SECUENCIA2
_MASRAPIDO
movlw.5addwf RAPmovlw.4subwf LENTdecfszLENT,Freturngoto _FIN2return
_MASLENTO
movlw.5addwf LENTmovlw.4subwf RAPdecfszRAP,Freturngoto _FIN1return
_FIN1movlw.5subwf LENTmovlw.5addwf RAPreturn
_FIN2movlw.5addwf LENTmovlw.5subwf RAPreturn
_RETARDO_025
movf LENT,WmovwfAUX
_ESPERA1clrf TMR2bcf PIR1, TMR2IFbsf T2CON, TMR2ON
_ESPERAbtfss PIR1, TMR2IF
goto _ESPERA decfsz AUX,F goto _ESPERA1bcf T2CON, TMR2ONreturn
END
SIMULACION
RA0/AN02
RA1/AN13
RA2/AN2/VREF-/CVREF4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RE0/AN5/RD8
RE1/AN6/WR9
RE2/AN7/CS10
OSC1/CLKIN13
OSC2/CLKOUT14
RC1/T1OSI/CCP216
RC2/CCP117
RC3/SCK/SCL18
RD0/PSP019
RD1/PSP120
RB7/PGD40
RB6/PGC39
RB538
RB437
RB3/PGM36
RB235
RB134
RB0/INT33
RD7/PSP730
RD6/PSP629
RD5/PSP528
RD4/PSP427
RD3/PSP322
RD2/PSP221
RC7/RX/DT26
RC6/TX/CK25
RC5/SDO24
RC4/SDI/SDA23
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI15
MCLR/Vpp/THV1
U1
PIC16F877A
01010101
0000
1
LAYOUT
Parte 3.3Realizar un programa que permita introducir datos de tres cifras por medio de un teclado matricial. Los datos deben ser visualizarse, desplazándose de izquierda a derecha, en tres displays conectados a un solo puerto.
CODIGOLIST P=16f877AINCLUDE <P16F877A.INC>D_IZQ EQU 0X20D_CENTRO EQU 0X21D_DCHA EQU 0X22LEIDO EQU 0X23AUX EQU 0X24W_tmp EQU 0X25STATUS_tmp EQU 0X26PCLATH_tmp EQU 0X27
ORG 0X00
nopgoto _INICIO
ORG 0X04nopbtfss INTCON,RBIF ; SI ENTRAMOS POR ERROR,ESTO NOS HARA SALIRretfiemovwfW_tmp ; GUARDAMOS EL CONTEXTO DEL PROGRAMAswapf STATUS,Wbanksel TRISAmovwfSTATUS_tmpmovfwPCLATHmovwfPCLATH_tmpcall _NOREBOTEgoto _TECLA ; SALTAMOS A LA RUTINA DE BUSQUEDA
_INICIObanksel TRISB ;BANCO1clrf TRISD ;PUERTO D SALIDAmovlw .6movwf ADCON1movlw b'11111000'movwf TRISAmovlw b'11110000'movwf TRISB ;PUERTO B ENTRADAclrw TRISD ;PUERTO D SALIDA
movlw b'10001000' ;CONFIGURACION PARA INTERRUPCIONES Y PULL UP Y TIMER
movwf INTCONmovlw b'01000110' ;CONFIGURACION PARA INTERRUPCIONES Y PULL
UP Y TIMERmovwf OPTION_REG ;INTERRUPCION EN FLANCO DE SUBIDAmovlw .217movwf TMR0
banksel PORTA ;BANCO0movlw b'00000111'movwf PORTAclrf PORTDclrf PORTBmovlw b'00111111'movwf D_IZQmovwf D_CENTROmovwf D_DCHA
_SLEEPnopcall _BARRIDOgoto _SLEEP
_BARRIDOmovfwAUX
bcf PORTA,2 ; ENCENDEMOS EL DISPLAY D_DCHAbsf PORTA,1 ;D_CENTRO OFFbsf PORTA,0 ;D_IZQ OFF
call _TABLAmovwfAUX
movfwD_CENTROmovwfD_IZQ
movfwD_DCHAmovwfD_CENTRO
movfwAUXmovwfD_DCHA
movfwD_DCHAmovwfPORTDcall _ESPERAbsf PORTA,2 ;D_DCHA OFFnopnop
bcf PORTA,1 ;D_CENTRO ONmovfwD_CENTROmovwfPORTDcall _ESPERAbsf PORTA,1 ;D_CENTRO OFFnopnop
bcf PORTA,2 ;D_IZQ ONmovfwD_IZQmovwfPORTDcall _ESPERAbsf PORTA,2 ;D_IZQ OFFnopnopreturn
_TABLA addwf PCL,F ;CONT ES EL CONTADOR DEL PROGRAMAretlw b'00111111' ;SE INTRODUCE EL NUMERO 0retlw b'00000110' ;SE INTRODUCE EL NUMERO 1retlw b'01011011' ;SE INTRODUCE EL NUMERO 2retlw b'01001111' ;SE INTRODUCE EL NUMERO 3retlw b'01100110' ;SE INTRODUCE EL NUMERO 4retlw b'01101101' ;SE INTRODUCE EL NUMERO 5retlw b'01111101' ;SE INTRODUCE EL NUMERO 6retlw b'00000111' ;SE INTRODUCE EL NUMERO 7retlw b'01111111' ;SE INTRODUCE EL NUMERO 8retlw b'01101111' ;SE INTRODUCE EL NUMERO 9retlw b'01110111' ;SE INTRODUCE LA LETRA Aretlw b'11111111' ;SE INTRODUCE LA LETRA Bretlw b'00111001' ;SE INTRODUCE LA LETRA Cretlw b'01011110' ;SE INTRODUCE LA LETRA Dretlw b'01111001' ;SE INTRODUCE LA LETRA Eretlw b'01110001' ;SE INTRODUCE LA LETRA F
_BUSCAaddwf PCL,F ;CONT ES EL CONTADOR DEL PROGRAMAretlw 0X07 ;CODIGO DEL CARACTER 7retlw 0X04 ;CODIGO DEL CARACTER 4retlw 0X01 ;CODIGO DEL CARACTER 1
retlw 0X0A ;CODIGO DEL CARACTER Aretlw 0X08 ;CODIGO DEL CARACTER 8retlw 0X05 ;CODIGO DEL CARACTER 5retlw 0X02 ;CODIGO DEL CARACTER 2retlw 0X00 ;CODIGO DEL CARACTER 0retlw 0X09 ;CODIGO DEL CARACTER 9retlw 0X06 ;CODIGO DEL CARACTER 6retlw 0X03 ;CODIGO DEL CARACTER 3retlw 0X0B ;CODIGO DEL CARACTER Bretlw 0X0F ;CODIGO DEL CARACTER Fretlw 0X0E ;CODIGO DEL CARACTER Eretlw 0X0D ;CODIGO DEL CARACTER Dretlw 0X0C ;CODIGO DEL CARACTER C
_ESPERA ;SUBRUTINA DE RETARDO PARA 5msclrf INTCONmovlw .217movwf TMR0
_ESPERA1btfss INTCON,T0IFgoto _ESPERA1return
_NOREBOTEmovlw.7movwfAUX
_RETARDOcall _BARRIDOdecfszAUX,Fgoto _RETARDOreturn
_TECLA
movlw0XF0 ;INSTRUCCION PARA SALIR SI ENTRAMOSxorwf PORTB,W ;A LA INTERRUPCION POR "LIBERAR"btfsc STATUS,Zgoto _SALIR
movfwPORTBmovwfLEIDObsf STATUS,RP0 ;PASAMOS AL BANCO 1movlwb'00001111' ;PONEMOS RB4 A RB7 CONO SALIDASmovwfTRISB ;Y RB3 A RB0 CONO ENTRADASbcf STATUS,RP0 ;BANCO 0
movfwLEIDO ;CARGAMOS EL VALOR LEIDO EN WmovwfPORTBnop ;CICLOS PARA QUE SE EXTABLEZCA PORTBnop
btfss PORTB,0 ;BUSCAMOS 0 EN LA FILA0goto _FILA0
btfss PORTB,1 ;BUSCAMOS 0 EN LA FILA1goto _FILA1
btfss PORTB,2 ;BUSCAMOS 0 EN LA FILA2goto _FILA2
goto _FILA3 ;EL CERO TENDRA QUE ESTAR AQUI
_FILA0clrw ;SI EL 0 ESTA AQUI SE CARGA CEROSgoto _COLUMNA
_FILA1movlw0X01 ;SI EL 0 ESTA AQUI SE CARGA 1goto _COLUMNA
_FILA2movlw0X02 ;SI EL 0 ESTA AQUI SE CARGA 2goto _COLUMNA
_FILA3movlw0X03 ;SI EL 0 ESTA AQUI SE CARGA 3goto _COLUMNA
_COLUMNAbtfss PORTB,4 ;SI RB4 A 0 ES QUE ERA LA COLUMNA 4goto _COL3 ;VAMOS A COMPLETAR EL CODIGO
btfss PORTB,5 ;SI RB4 A 0 ES QUE ERA LA COLUMNA 4goto _COL2 ;VAMOS A COMPLETAR EL CODIGO
btfss PORTB,6 ;SI RB4 A 0 ES QUE ERA LA COLUMNA 4goto _COL1 ;VAMOS A COMPLETAR EL CODIGO
_COL0goto _CODIGO
_COL1iorlw b'00000100'goto _CODIGO
_COL2iorlw b'00001000'goto _CODIGO
_COL3iorlw b'00001100'goto _CODIGO
_CODIGOcall _BUSCAmovwfAUX
_SALIRmovfwPCLATH_tmpmovwfPCLATHswapf STATUS_tmp,Wmovwf STATUSswapf W_tmp,Fswapf W_tmp,Wgoto _BARRIDO
END
LAYOUT
SIMULACION
RA0/AN02
RA1/AN13
RA2/AN2/VREF-/CVREF4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RE0/AN5/RD8
RE1/AN6/WR9
RE2/AN7/CS10
OSC1/CLKIN13
OSC2/CLKOUT14
RC1/T1OSI/CCP216
RC2/CCP1 17
RC3/SCK/SCL18
RD0/PSP019
RD1/PSP120
RB7/PGD 40RB6/PGC 39
RB538
RB437
RB3/PGM36
RB2 35RB1
34RB0/INT
33
RD7/PSP7 30RD6/PSP6 29RD5/PSP5
28RD4/PSP4
27RD3/PSP3
22RD2/PSP2 21
RC7/RX/DT 26RC6/TX/CK 25
RC5/SDO24
RC4/SDI/SDA23
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI15
MCLR/Vpp/THV1
U1
PIC16F877A
1 2 3
654
8 9
=
7
++CON 0
A
B
C
D
1 2 43
Q1BC557 Q2
BC557
Q3BC557
R14.7K
R24.7K R3
4.7K
R4
1.2KR5
1.2K
R6
1.2K
R6(2)
1
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 opción, 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 botón fue la que el usuario apretó. Además de esto se debe definir qué tipo de lógica se utilizara para poder detectar el carácter que el usuario apretó, por ejemplo el de comparaciones sucesivas, o el de cambio de líneas altas por las bajas, y así poder determinar que tecla fue presionada.
6. CONCLUSIONES
Tras finalizar la práctica 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 práctica de laboratorio.
7. WEBGRAFÍA
Ledezma, J. H., 2010. BANCO DE TESIS. [En línea] Available at: http://dpicuto.edu.bo/tesis/facultad-nacional-de-ingenieria/carrera-de-ingenieria-electrica-y-electronica/1746-diseno-e-implementacion-de-un-controlador-logico-programable-mediante-el-microcontrolador-16f877a.html[Último acceso: 11 marzo 2015].
S., I., 2007. PIC 16F877. [En línea] Available at: http://picmicrocontroller877.blogspot.com/2007/08/set-de-instrucciones.html[Último acceso: 11 Marzo 2015].