report practic

55
INSTITUTO TECNOLOGICO DE OAXACA “TECNOLOGIA PROPIA E INDEPENDENCIA ECONOMICA” REPORTE DE PRACTICAS MICROCONTROLADORES SOLANO HERNÁNDEZ GUSTAVO FRANCO GABRIEL CABALLERO. CARRERA: ING. ELECTRÓNICA GRUPO: SEMESTRE: E1A SEPTIMO

Upload: solano-naols

Post on 27-Dec-2015

44 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Report Practic

INSTITUTO TECNOLOGICO DE OAXACA

“TECNOLOGIA PROPIA E INDEPENDENCIA ECONOMICA”

REPORTE DE PRACTICAS

MICROCONTROLADORES

SOLANO HERNÁNDEZ GUSTAVO FRANCO GABRIEL CABALLERO.

CARRERA: ING. ELECTRÓNICA

GRUPO: SEMESTRE: E1A SEPTIMO

Oaxaca de Juárez, Oaxaca, /2013

Page 2: Report Practic

PRACTICA No. I

SECUENCIA DE LED´S

Objetivo: Implementar el circuito mínimo basado en microcontrolador 16F84 para el desarrollo de varias aplicaciones didácticas. En este ejercicio se aplican como primera instancia una serie de rutinas, se verá el comportamiento de ello en el circuito (Corrimiento de Leds- ), asi con esto, demostramos el uso adecuado del microcontrolador PIC.

Materiales:

PIC16F84ALED´s –ROJOsRESISTENCIA DE 10 K

Procedimiento

1) Armar el siguiente circuito eléctrico basado en microcontrolador 16F84A, además conectar un dipswitch en el puerto RA0, RA1, RA2 Para ver el comportamiento de los led de acuerdo a las 8 rutinas programadas claro después colocar las resistencias adecuadamente y conectar 8 LED’s en el puerto RB0 hasta el RB7 consecutivamente.

Page 3: Report Practic

2) Programar el microcontrolador utilizando el software MPLAB.

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSCLIST P=16F877INCLUDE <P16F877.INC>

STATUS EQU 03HPTOBEQU 06HPTOCEQU 07HINTCON EQU 0BHSEC EQU 025HREG1EQU 026HREG2EQU 027HREG3EQU 028H

ORG 0HGOTO INICIO

ORG 04HGOTO PAUSA

INICIO BCF STATUS,6BSF STATUS,5CLRF PTOC

Page 4: Report Practic

MOVLW B'11111111'BCF STATUS,5BSF INTCON,7 ;CONFIGURO

INTERRUPCIONBSF INTCON,3BCF INTCON,0

CONTI CLRF PTOCCLRF SEC

PREG1 BTFSS SEC,0GOTO PREG2GOTO S1

PREG2 BTFSS SEC,1GOTO PREG3GOTO S2

PREG3 BTFSS SEC,2GOTO PREG4GOTO S3

PREG4 BTFSS SEC,3GOTO PREG1GOTO S4

S1 MOVLW B'10101010'MOVWF PTOCCALL RETARDOCLRF PTOCCALL RETARDOGOTO PREG1

S2 MOVLW B'11001100'MOVWF PTOCCALL RETARDO

ZZZ BTFSS SEC,1GOTO PREG1COMF PTOC,FCALL RETARDOGOTO ZZZ

S3 MOVLW B'00110000'MOVWF PTOCCALL RETARDO

Page 5: Report Practic

XXX BTFSS SEC,2GOTO PREG1RLF PTOCCALL RETARDOGOTO XXX

S4 MOVLW B'00010000'MOVWF PTOCCALL RETARDO

WWW BTFSS SEC,3GOTO PREG1RRF PTOCCALL RETARDOGOTO WWW

PAUSA BCF INTCON,7CHECA_BOTON

BTFSC PTOB,4GOTO $+4CALL ANTIRREBOTESMOVLW B'00000001'MOVWF SECBTFSC PTOB,5GOTO $+4CALL ANTIRREBOTESMOVLW B'00000010'MOVWF SECBTFSC PTOB,6GOTO $+4CALL ANTIRREBOTESMOVLW B'00000100'MOVWF SECBTFSC PTOB,7GOTO $+4CALL ANTIRREBOTESMOVLW B'00001000'MOVWF SECGOTO SALIDA

Page 6: Report Practic

ANTIRREBOTESBTFSS PTOB,4GOTO ANTIRREBOTESBTFSS PTOB,5GOTO ANTIRREBOTESBTFSS PTOB,6GOTO ANTIRREBOTESBTFSS PTOB,7GOTO ANTIRREBOTESRETURN

SALIDA BSF INTCON,7BCF INTCON,0retfie

RETARDO MOVLW 10MOVWF REG1

TRES MOVLW 20MOVWF REG2

DOS MOVLW 30MOVWF REG3

UNO DECFSZ REG3,1GOTO UNODECFSZ REG2,1GOTO DOSDECFSZ REG1,1GOTO TRESRETURN

END

CONCLUSION

Page 7: Report Practic

Esta primera práctica tuvo como objetivo encender en secuencia todos los leds a través del microcontrolador. En este programa no hay interacción con el usuario, el programa se graba en el microcontrolador e inmediatamente los leds se van encendiendo en secuencia de acuerdo a commo hayan sido programados.

PRACTICA No. II

CONTROL DE LUCES

Objetivo:

Realizar un programa que controle la salida en función de dos señales de entradas distintas, dependiendo de la programación hecha previamente con el microcontrolador 16F84 para el control de varios led´s como es el caso de esta segunda practica.

Introducción:

Es muy frecuente tener que controlar una carga (motor, lámpara, etc.) desde dos puntos situados a cierta distancia entre ellos. Es el clásico caso de una habitación con una instalación conmutada en la que una lámpara se gobierna desde dos interruptores colocados en posiciones distantes entre sí. Desde cualquiera de ellos, se puede gobernar el encendido o apagado de la lámpara.

Inicialmente, cuando ambos interruptores están en reposo (a nivel «0») la lámpara permanece apagada (a nivel «0»). A partir de esta situación, cada vez que cambie el estado de cualquiera de los interruptores, también cambiará el estado de la lámpara. La tabla de la verdad mostrada muestra los diferentes estados lógicos del sistema a realizar.

Page 8: Report Practic

Esquema Electrónico:

Page 9: Report Practic

Materiales Necesarios:

AVX1206NP0220PCRYSTALLED-REDMINRES330RPHYCO603NP027PPIC16F84

Procedimiento :

bsf f,b : Pone a 0 el bi <<b>> del operando fuente <<f>>.

La instrucción bcf estado ,5 pone a 0 el bit 5 del registro ESTADO.

Goto etiqueta : Provoca un salto incondicional en la ejecución del programa hasta la instrucción que vaya precedida por el nombre de la etiqueta.

La instrucción goto inicio carga al PC o Contador de programa con la dirección de la instrucción que vaya referenciada con la etiqueta Inicio, provocando la rotura de secuencia normal del programa.

CODIGO UTILIZADO:

LIST P=16f84 ;Comando que indica el PIC usadoRADIX HEX ;Los valores se representan en hexadecimal ORG 0 ;Comando que indica al ensam la direc de la memoria en donde se ; situara la instrucción siguienteBSF 0X03, ;Pone 1 el bit 5 de ESTADO para direccionar el bnco 1 de la mem ;de datosMOVLW 0XFF ;CARGAMOS LA LITERAL A WMOVWF 0X05 ;CARGAMOS W A TRISAMOVLW 0X00 ;CARGAMOS W CON 0MOVWF 0X06 ;CARGAMOS W A TRISBBSF 0X03,5

Page 10: Report Practic

INICIO MOVF 0X05,0ADDLW 2MOVWF 0X06GOTO INICIOEND

Conclusion.

Se aprendió la utilización del temporizador, para el control de prendido y apagado de luces. Y a Analizar las instrucciones del programa para llegar a su total comprensión. Una vez ensamblado mediante el Ensamblador MPASM, proceder a grabarlo en el PIC y comprobar su correcto funcionamiento en base a la tabla de la verdad anterior.

PRACTICA No. III

MANEJO DE INTERRUPCIONES

Objetivo:

El ejemplo pretende mostrar cómo, mediante el programa adecuado, es posible resolver cualquier automatismo de tipo combinacional. Un número determinado de salidas se activan en función de las combinaciones binarias presentes en un número determinado de líneas de entrada.

Introducción:

Con objeto de no emplear en el programa las direcciones numéricas de los registros que se usan, se asigna a cada uno de ellos una etiqueta identificativa que facilita la comprensión del programa. Hay registros que se hallan en los dos bancos de la memoria de datos, pero otros sólo en uno.

La información que entra o sale por la Puerta A se implementa en la dirección 5 del banco 0, mientras que en esa dirección, pero del banco 1, se halla el

Page 11: Report Practic

registro de configuración de las líneas de E/S dela Puerta A. Usaremos la etiqueta «PUERTAA» para ambos registros, pero accederemos a cada uno según el banco que esté activado en ese momento. Lo mismo haremos para los dos registros de la Puerta B, a los que denominaremos «PUERTAB» y se ubican en la dirección 6.

Una vez asignadas las etiquetas a los registros y elementos que maneja el programa, se pasa a delimitar el mapa de la memoria del programa. Como tras realizarse un Reset el PC apunta la dirección 0 de la memoria de programa, en dicha posición habrá que situar la primera instrucción. Al conectarse por primera vez el microcontroladora la alimentación se produce un Reset. La dirección 0 se destina al Vector de Reset y en ella se sitúa la primera instrucción del programa.

Diagrama Electrónico:

Page 12: Report Practic

Materiales Necesarios:

ButtonCrystalLed –YellowMinRes10kMinRes100RMinRes330RPHYCO603NPO27PPIC16F84ASW-SPST

Procedimiento:

Page 13: Report Practic

El PIC 16X84 admite interrupciones, una de ellas al activarse la patita RBO/INT. Cuando se produce una interrupción se guarda en la Pila el contenido actual del PC (dirección de retorno) y el PC se carga con la dirección 4, que es la destinada al Vector de Interrupción. En este programa no se usan interrupciones y por tanto la dirección 4 de la memoria de programa se podría utilizar libremente, pero teniendo en cuenta que es muy frecuente el uso de interrupciones, conviene que el programa de aplicación no invada dicha dirección y en consecuencia comience en la dirección 5. Para iniciar el programa en la dirección del Reset 0 y al mismo tiempo situar la primera instrucción en la dirección 5, se coloca en la dirección 0 una instrucción de salto a la 5 de la siguiente forma: La primera instrucción tiene como etiqueta «inicio» y el Ensamblador MPASM la situará en la dirección 5, gracias a la directiva previa org 5. Para configurar las líneas de la Puerta A como entradas y las de la Puerta B como salidas hay que cargar el registro de configuraciones de la Puerta A con unos y el de la Puerta B con ceros. Aunque la etiqueta que hace referencia al registro de datos y al de configuración de la Puerta A es la misma «PUERTAA», el acceso a uno u otro se efectúa según el banco de la memoria de datos que se halle activo. Para acceder a los registros de configuración hay que poner a l el bit 5 del registro ESTADO.Cuando un interruptor está cerrado introduce un nivel bajo y como se desea que el diodo led correspondiente se encienda, es necesario complementar dicho bit para que los diodos, que se encienden por nivel alto, respondan al enunciado del proyecto. Para esta operación se utiliza lainstrucción de complemento.

Código Necesario:

STATUS EQU 0X03OPTIONR EQU 0X81TRISA EQU 0X85PORTA EQU 0X05TRISB EQU 0X86PORTB EQU 0X06

INICIO

BSF STATUS,5 ;SE PASA AL BANCO 1 DE RAM

Page 14: Report Practic

CLRF TRISA ;SE PROGRAMA EL PUERTO A COMO SALIDA MOVLW 0XF MOVWF TRISB ;PARTE ALTA COMO SALIDA Y BAJA COMO ENTRADA BCF OPTIONR,7 ;SE HABILITAN RESISTENCIAS DEL PULL UP BCF STATUS,5 SE PASA AL BANCO CERO DE RAMLOOP: COMF PORB,0 ;SE LEE EL PUERTO B,SE COMPLETA SU VALOR Y EL PASA A W. MOVWF PORTA ; SE PASA RESULTADO DE W AL PUERTO A GOTO LOOP ;EJECUTA UN CICLO INFINITO END

Conclusiones.En aplicaciones reales es muy interesante mencionar el empleo del WDT y su correspondiente refresco periódico. De esta manera, si el sistema por cualquier motivo se bloqueara, el programa deja de ejecutarse y con ello la ejecución de la instrucción de refresco CLRWDT.El WDT sigue su temporización hasta que sobrepase el intervalo de tiempo, provocando un reinicio automático del sistema sin intervención humana de ningún tipo.

PRACTICA No. IV

Page 15: Report Practic

MANEJO DE INTERRUPTORES

Objetivo: Desarrollar un programa en el pic16f84A que nos ayude a comprender el uso de las interrupciones en los Microcontroladores.

Introducción:

Efectivamente, en ocasiones el control de una o varias salidas no depende del estado lógico actual de las entradas, también depende de la secuencia de estados lógicos que se produjeron sobre esas entradas. El ejemplo propuesto trata de gobernar un zumbador de alarma mediante dos pulsadores: ON y OFF. Cuando se activa durante un breve espacio de tiempo el pulsador ON, la alanna se activa y permanece activada aunque dicho pulsador se desactive. Sí se activa el pulsador OFF, la alarma se desconecta y se mantiene en este estado aunque el pulsador OFF vuelva a la posición de reposo y se desactive. Si ambos pulsadores permanecen activados simultáneamente, la alarma permanecerá desactivada.

Esquema Electrónico:

Page 16: Report Practic

Materiales Necesarios:

Para esta práctica necesitaremos de las siguientes herramientas:

Pic16f84A Resistencias Switchs Alimentación de 5V. Led´s Equipo Quemador de programas para el Microcontrolador.

Procedimiento:

Page 17: Report Practic

Para la solución del problema primero necesitamos plantearnos, el desarrollo del código de nuestro programa, para esto necesitamos tener visualizada la estructura de nuestro diagrama de flujo que es el siguiente:

Diagrama de Flujo

Posteriormente necesitamos crear un código en cascada como el de nuestro diagrama de flujo.

Page 18: Report Practic

código utilizado:

LIST P=16F84RADIX HEX

W EQU 0F EQU 1TMR_OPT EQU 0X01 ;TMR0 EN BANCO 0 OPTION EN BANCO 1ESTADO EQU 0X03PUERTAA EQU 0X05 ;PA EN BANCO 0 TRISA EN BANCO1PUERTAB EQU 0X06 ;PB EN BANCO 0 TRISB EN BANCO1INTCON EQU 0X0B CONTA EQU 0X10 ;CONTADOR AUXILIAR

ORG 0 ;VECTOR DE RESETGOTO INICIOORG 4 ;VECTOR DE INTERRUPCIONGOTO INTER ;SALTA A COMIENZO DE RUTINA DE INTERRUPCIONORG 5

INICIO BSF ESTADO,5 ;SELECCION DEL BANCO 1 CLRF PUERTAB ;CONFIGURACION PUERTA B COMO SALIDA MOVLW b‘00000011’ ;CONF RA0, RA1 COMO ENTRADAS MOVWF PUERTAA MOVLW b‘00000111’ MOVWF TMR0_OPT BCF ESTADO,5 ;BANCO 0 MOVLW b‘10100000’ ;SE PERMITE INTERRUPCION DEL TMR0 Y LA ;GLOBAL (GIE)

MOVWF INTCON MOVLW 0X10 MOVWF CONTA ;SE CARGA CONTA CON 16 DECIMALES MOVLW 0X0C MOVWF TMR0_OPT ;SE CARGA TMR0 CON 12 DECIMALESBUCLE BTFSC PUERTAA,0 ;EXPLORA RA0 Y BRINCA SI 0, SALTA A ;RA0_1 GOTO RA0_1

Page 19: Report Practic

BCF PUERTAB,0 ;SI RA0 = RB0 = 0 GOTO RALX ;A EXPLORAR RA1RA0_1 BSF PUERTAB,0 ;SI RA0 = 1 SE SACA POR RB0 UN 1RALX BTFSC PUERTAA,1 ;EXAMINA RAL Y BRINCO SI 0 GOTO RA0_1 ;SALTA SI RA1 = 1 BCF PUERTASB,1 ;SI RA1 = 0, RB1 = 0 GOTO BUCLE2RA1_1 BSF PUERTAB,1 ;SI RA1 = 1, RB1 = 1BUCLE2 GOTO BUCLE ;BUCLE INDEFINIDO, SE SALE POR INTERINTER DECFSZ CONTA,1 ;RSI. DECREMENTA CONTA Y BRINCO SI 0 GOTO SEGUIRCONTA_0 MOVLW 0X10 ;SI CONTA = 0 SE CARGA MOVWF CONTA BTFSC PUERTAB,7 ;SI RB7 = 0, BRINCO GOTO RB7_1 BSF PUERTAB,7 ;SI RB7 = 0 SE INVIERTE GOTO SEGUIRRB7_1 BCF PUERTAB,7 ;SI RB7 = 1, SE INVIERTESEGUIR MOVLW b‘10100000’ ;SE RESTAURA INTCON MOVWF INTCON MOVLW 0X0C MOVWF TMR_OPT ;SE RECARGA TMR0 CON 12 RETFIEEND

INTERRUPCIONES

LIST P=16F84

RADIX HEX

W EQU 0F EQU 1ESTADO EQU 0X03PUERTAA EQU 0X05PUERTAB EQU 0X06INTCON EQU 0X0B

Page 20: Report Practic

ORG 0

GOTO INICIO

ORG 4

GOTO INTER

ORG 5INICIO BSF ESTADO,5 ;BANCO 1 MOVLW b‘00000000’ MOVWF PUERTAA ;PUERTA A SALIDA MOVLW b‘11111111’ MOVWF PUERTAB ;PUERTA B ENTRADAS BCF ESTADO,5 ;BANCO 0

CLRF PUERTAA CLRF PUERTAB

MOVLW b‘10011000’ ;SE ACTIVA GIE, INT EXT E INT X CAM DE PB MOVWF INTCONBUCLE GOTO BUCLE

INTER BTFSS INTCON,0 ;EXPLORA FLAG DE IN POR CAMBIO RB4 RB7 GOTO PARAR GOTO ALARMAALARMA CLRF PUERTAB MOVLW b‘10011000’ ;se activan GIE INT EXTERNA MOVWF INTCON ;E INT POR CAMBIO DE PBBUZZER BSF PUERTAA,0 NOP BCF PUERTAA,0 BSF PUERTAA,1 NOP BCF PUERTAA,1 GOTO BUZZERPARAR CLRF PUERTAA BCF PUERTAB,0

Page 21: Report Practic

MOVLW b‘10011000’ ;SE ACTIVA GIE, INT EXTERNA E INT POR ;CAMBIO DE PB MOVWF INTCON GOTO BUCLEEND

Simulación:

Page 22: Report Practic

Conclusion.

He comprendido muchas instrucciones para utilizar el pic 16f84A entre ellas está la de controlar distintas rutinas con los Led’s y a interrumpir las mismas con la instrucción de interrupción.

PRACTICA No. V

LCD CON DISPLAY

OBJETIVO

Desarrollar un programa en el pic16f84A para aprender a conectar un LCD o display con un teclado.

PLANTEAMIENTO

Para esta práctica necesitaremos de las siguientes herramientas:

MATERIALES

Pic16f84A

Resistencias

Switchs

Alimentación de 5V.

Una pantalla LCD o un display de 7 segmentos.

Un Teclado.

EQUIPO

Quemador de programas para el microcontrolador

Protoboard

DESARROLLO

Page 23: Report Practic

Para la solución del problema primero necesitamos plantearnos, el desarrollo del código de nuestro programa, para esto necesitamos tener visualizada la estructura de nuestro diagrama de flujo que es el siguiente:

Diagrama de Flujo

Posteriormente necesitamos crear un código en cascada como el de nuestro diagrama de flujo.

Código

list p=16f84

CHECAR SI SE OPRIMIÓ UNA TECLA

¿SE OPRIMIÓ UNA TECLA?

RETRAER REGLONES PARA ENCONTRAR LA

POSICION DELA QUE SE OPRIMIÓ

DESCIFRAR O DECODIFICAR QUE TECLA SE OPRIMIÓ

REGRESARVALOR AL

LCD

NO

SI

Page 24: Report Practic

#include <p16f84.inc> ;archivo de encabezado por Microchip®;;ESTE PROGRAMA EMULA UN 74C922 DECODIFICADOR DE TECLADO;CONTFIL EQU 0x12 ;Contador de FilasCONTCOL EQU 0x13 ;Contador de ColumnasCOLKBD EQU 0x14 ;DATO EN COLUMNASTemp EQU 0x15R1 EQU 0x16 ;Variable para RetardoR2 EQU 0x17 ;Variable para RetardoR3 EQU 0x18 ;Variable para RetardoR4 EQU 0x19 ;Variable para RetardoCOUNT EQU 0x1ACHAR EQU 0x1B ;Almacenamiento temporal SCANAUX EQU 0x1C ;Variable Auxiliar#define _z STATUS,2#define _c STATUS,0#define OE PORTA,4#define BANK0 bcf STATUS,RP0#define BANK1 bsf STATUS,RP0;;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

ORG 0x00MAINBANK1CLRF TRISABANK0CLRF PORTANOPNOPMuestreBCF OERUSCANCALL SCANXORLW 0x00 ;espera una TeclaBTFSC _zGOTO MuestreMOVWF PORTAMOVLW .50MOVWF COUNTLOOPSCANCALL DEL5MSDECFSZ COUNT,1GOTO LOOPSCANGOTO RUSCAN;************************************************************************

DEL5MSMOVLW .12MOVWF R1MOVLW 7MOVWF R2MOVLW 1MOVWF R3MOVLW 1

Page 25: Report Practic

MOVWF R4LOOPDEL5DECFSZ R1,FGOTO LOOPDEL5DECFSZ R2,FGOTO LOOPDEL5DECFSZ R3,FGOTO LOOPDEL5DECFSZ R4,FGOTO LOOPDEL5NOPRETURN;***************************************************************;RETORNA W=00 NO HAY TECLA OPRIMIDA,;RETORNA W=COD SI TECLA OPRIMIDA.;**************************************************************SCANBANK1MOVLW 0x0F ;el puerto que lee teclado <0:3> filas (in)MOVWF TRISBBANK0MOVLW 0x01MOVWF CONTCOLMOVLW 0x7FMOVWF COLKBDRSTFILCLRF CONTFIL ;RESET CONT FILAS

MOVF COLKBD,WMOVWF PORTB ;COLOCAR UN CERO EN COLUMNASnopnopnopMOVF PORTB,W ;LEER FILAS DE TECLADOMOVWF AUXRLF AUX,FRLF AUX,FRLF AUX,FRLF AUX,FTESTFILRLF AUX,FBTFSS _cGOTO ACERTADOINCF CONTFIL,FMOVF CONTFIL,WXORLW 0x04BTFSS _zGOTO TESTFILBSF _cRRF COLKBD,F ;rotacion del cero a colocarINCF CONTCOL,FMOVF CONTCOL,WXORLW 0x05BTFSS _zGOTO RSTFILRETLW 0x00ACERTADOMOVF CONTFIL,WXORLW 0x00BTFSC _z

Page 26: Report Practic

GOTO ESCEROMOVLW 0x00MULADDLW 0x04DECFSZ CONTFILGOTO MULSUMACOLADDWF CONTCOL,WCALL TABKBDRETURNTABKBDaddwf PCL,Fretlw 0 ;inválidoretlw 0x10retlw 0x11retlw 0x12retlw 0x13retlw 0x14retlw 0x15retlw 0x16retlw 0x17retlw 0x18retlw 0x19retlw 0x1Aretlw 0x1Bretlw 0x1Cretlw 0x1Dretlw 0x1Eretlw 0x1FESCEROMOVLW 0x00GOTO SUMACOLend

Page 27: Report Practic

RESULTADO

Como resultado obtenemos el siguiente circuito, mostrado en proteus.

CONCLUSION

Ahora podemos conectar un teclado y un LCD o un display al pic y utilizarlo para realizar secuencias y en otras practicas.

Page 28: Report Practic

PRACTICA No VI

OBJETIVO

Desarrollar un programa que nos entregue valores a partir de una tabla en el pic 16F84A

PLANTEAMIENTO

Para esta práctica necesitaremos de las siguientes herramientas:

Materiales

Pic16f84A

Resistencias

Switchs

Alimentación de 5V.

Dos displays de 7 segmentos

Dos transistores NPN

Equipo

Quemador de programas para el microcontrolador

Protoboard

DESARROLLO

Para la solución del problema primero necesitamos plantearnos, el desarrollo del código de nuestro programa, para esto necesitamos tener visualizada la estructura de nuestro diagrama de flujo que es el siguiente:

Diagrama de Flujo

DISPLAY

INHABILITAR TRANSISTORES

VALOR CONT 2

Page 29: Report Practic

Posteriormente necesitamos crear un código en cascada como el de nuestro diagrama de flujo.

Código

list p=16f84ainclude<p16f84.inc>#define BANK0 bcf STATUS,RP0#define BANK1 bsf STATUS,RP0

COLOCAR DATO 1 EN EL P.

CONT2-1 CONT2

RETARDO DE APAGADO

INHABILITAR Q2

HABILITAR Q1

RETARDO DE DIGITO

HABILITAR Q2

COLOCAR DATO 2 EN EL P

RETARDO DE APAGADO

INHABILITAR Q1

RETARDO DE DIGITO

CONT2=0

RETORNAR

Page 30: Report Practic

Cont2 equ 0x0DDato1 equ 0x0EDato2 equ 0x0FDel1 equ 0x10

Del2 equ 0x11;DisplayinicioBANK1clrf TRISA ;puerto A como salidaclrf TRISB ;puerto B como salida

BANK0movlw 0x03 ;inhabilita transistoresmovwf PORTA;movlw .10 ;valor de repeticionesmovwf Cont2movlw .0movwf Dato1movlw .0movwf Dato2LoopDisp;;Sacar al puerto el Dato 1 por un tiempo específico;movf Dato1,0 ;Dato para decodificarcall Tabla ;Decodificación del datomovwf PORTB ;Dato decodificado a puertobcf PORTA,0 ;Habilita Q dato 1;bsf PORTA,1call RetDig ;Retardo de dígitobsf PORTA,0 ;Inhabilita Q dato 1nop ;Retardo de apagadonopnopnop

Page 31: Report Practic

;;Sacar al puerto el Dato 2 por un tiempo específico;movf Dato2,0 ;Dato para decodificarcall Tabla ;Decodificación del datomovwf PORTB ;Dato decodificado a puertobcf PORTA,1 ;Habilita Q dato 2;bsf PORTA,0call RetDig ;Retardo de dígitobsf PORTA,1 ;Inhabilita Q dato 2nop ;Retardo de apagadonopnopnop;decfsz Cont2,1 ;Decrementa Cont2, elude sig. sí cerogoto LoopDisp ;Repite cicloreturn inicioTablaaddwf PCL,1retlw 0x3f ;Cuando el dígito es 0retlw 0x4F ;Cuando el dígito es 1retlw 0x12 ;Cuando el dígito es 2retlw 0x06 ;Cuando el dígito es 3retlw 0x4C ;Cuando el dígito es 4retlw 0x6D ;Cuando el dígito es 5retlw 0x20 ;Cuando el dígito es 6retlw 0x78 ;Cuando el dígito es 7retlw 0x00 ;Cuando el dígito es 8retlw 0x04 ;Cuando el dígito es 9retlw 0x08 ;Cuando el dígito es Aretlw 0x60 ;Cuando el dígito es Bretlw 0x31 ;Cuando el dígito es Cretlw 0x42 ;Cuando el dígito es Dretlw 0x30 ;Cuando el dígito es Eretlw 0x38 ;Cuando el dígito es F;

Page 32: Report Practic

RetDigmovlw 2movwf Del1Loop1movlw .100movwf Del2Loop2decfsz Del2,Fgoto Loop2decfsz Del1,Fgoto Loop1returnend

RESULTADO

Como resultado obtenemos el siguiente circuito, mostrado en proteus.

CONCLUSIONES

Page 33: Report Practic

Aprendimos a llamar valores a través de la instrucción de una tabla en la

programación del microcontrolador y mostrarlo en un display de 7

segmentos.

PRACTICA No. VII

MANEJO DE INTERRUPCIONES

Objetivo: Desarrollar un programa para interrumpir el encendido en un led, en el pic 16f84a.

DESARROLLO

Para la solución del problema primero necesitamos plantearnos, el desarrollo del código de nuestro programa, para esto necesitamos tener visualizada la estructura de nuestro diagrama de flujo que es el siguiente:

Diagrama de Flujo

Page 34: Report Practic

Materiales

Para esta práctica necesitaremos de las siguientes herramientas:

MaterialesPic16f84A ResistenciasSwitchsAlimentación de 5V.Led´sEquipoQuemador de programas para el microcontrolador Protoboard

Esquema Electrónico:

Page 35: Report Practic

Código utilizado:

LIST P=16F48

STATUS EQU 0X03PORTA EQU 0X05PORTB EQU 0X06INTCON EQU 0X0BOPTIONR EQU 0X81TRISA EQU 0X85TRISB EQU 0X86

#DEFINE LED PORTA,0#DEFINE BANK1 BSF STATUS,5#DEFINE BANK0 BCF STATUS,5

ORG 0 ;INDICA ENSAM LA DIREC DE MEM DE SIG INSTRUCGOTO INICIO ORG 0X04 ;INDICA ENSAMB DIREC DE MEM DE SIG INSTRUC

INTRERRUPCIONBTFSS INTCON,1 ;ES INTERRUPCION INT?RETFIE ;RETORNA DE INTERRUPCION Y GIE=1BTFSC PORTA,0 ;PROBAR ESTADO ACTUAL DEL LEDGOTO PRENDER ; VA A ENCENDER EL LED APAGAR BSF PORTA,0 ;APAGA EL LED GOTO ESPERAPRENDERBCF PORTA,0 ;ENCIENDE EL LEDESPERABTFSS PORTB,0 ;ESPERA A QUE SE SUELTE EL PULSADORGOTO ESPERA BCF INTCON,1 ;BORRA BANDERA INT RETFIE ;RETORNA DE INTERRRUP Y GIE=1

Page 36: Report Practic

;PROGRAMA PRINCIPALINICIO BANK1 ;SELECCION DEL BANCO 1 BCF TRISA,0 ;SELECCION PORTA, 0 BANK0 ;SELECCION DEBANCO 0 BSF PORTA,0 ;APAGAR LED;PROGRAMACION DE INTERRUPCION BSF INTCON,4 ;ACTIVAR INTERRUPCION INT BANK1 ;SELECCION BANCO 1 BCF OPTIONR,6 ;SELEC FLANCO DE BAJADA EN EL PIN BANK0 BSF INTCON,7 ;HABILITAR INTERRUP GLOBALES GOTO $ ;QUEDA A LA ESPERA DE INTERRUPCION END

Page 37: Report Practic

Simulación:

Conclusión:

Encender y apagar un LED como respuesta a un estímulo de interrupción Determinar la forma en que debe colocarse el código en el programa fuente para aceptar y atender una rutina de interrupción. Profundizamos más acerca del manejo de las interrupciones y su uso en la elaboración de un circuito que utilice detener el programa que se está ejecutando.

Page 38: Report Practic

PRACTICA No. VIII

TECLADO CON DISPLAY

OBJETIVO

Desarrollar un programa en el pic16f84A que utilice un teclado y muestre los valores en un display o un LCD, dependiendo de cómo el usuario lo vaya introducienndo.

PLANTEAMIENTO

Para esta práctica necesitaremos de las siguientes herramientas:

Materiales

Pic16f84A

Resistencias

Switchs

Alimentación de 5V.

Display de 7 segmentos.

Teclado.

Equipo

Quemador de programas para el microcontrolador

Protoboard

DESARROLLO

Para la solución del problema primero necesitamos plantearnos, el desarrollo del código de nuestro programa, para esto necesitamos tener visualizada la estructura de nuestro diagrama de flujo que es el siguiente:

Page 39: Report Practic

Diagrama de Flujo.

.

CHECAR SI SE OPRIMIÓ UNA TECLA

¿SE OPRIMIÓ UNA TECLA?

RETRAER REGLONES PARA ENCONTRAR LA

POSICION DELA QUE SE OPRIMIÓ

DESCIFRAR O DECODIFICAR QUE TECLA SE OPRIMIÓ

REGRESARVALOR AL

LCD

NO

SI

Page 40: Report Practic

CODIGO

list p=16f84#include <p16f84.inc> ;archivo de encabezado por Microchip®;;ESTE PROGRAMA EMULA UN 74C922 DECODIFICADOR DE TECLADO;CONTFIL EQU 0x12 ;Contador de FilasCONTCOL EQU 0x13 ;Contador de ColumnasCOLKBD EQU 0x14 ;DATO EN COLUMNASTemp EQU 0x15R1 EQU 0x16 ;Variable para RetardoR2 EQU 0x17 ;Variable para RetardoR3 EQU 0x18 ;Variable para RetardoR4 EQU 0x19 ;Variable para RetardoCOUNT EQU 0x1ACHAR EQU 0x1B ;Almacenamiento temporal SCANAUX EQU 0x1C ;Variable Auxiliar#define _z STATUS,2

#define _c STATUS,0#define OE PORTA,4#define BANK0 bcf STATUS,RP0#define BANK1 bsf STATUS,RP0;;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ORG 0x00MAINBANK1CLRF TRISABANK0CLRF PORTANOPNOPMuestreBCF OERUSCANCALL SCANXORLW 0x00 ;espera una TeclaBTFSC _zGOTO MuestreMOVWF PORTAMOVLW .50MOVWF COUNTLOOPSCANCALL DEL5MSDECFSZ COUNT,1

Page 41: Report Practic

GOTO LOOPSCANGOTO RUSCAN;************************************************************************

DEL5MSMOVLW .12MOVWF R1MOVLW 7MOVWF R2MOVLW 1MOVWF R3MOVLW 1MOVWF R4LOOPDEL5DECFSZ R1,FGOTO LOOPDEL5DECFSZ R2,FGOTO LOOPDEL5DECFSZ R3,FGOTO LOOPDEL5DECFSZ R4,FGOTO LOOPDEL5NOPRETURN;***************************************************************;RETORNA W=00 NO HAY TECLA OPRIMIDA,;RETORNA W=COD SI TECLA OPRIMIDA.;**************************************************************SCANBANK1

MOVLW 0x0F ;el puerto que lee teclado <0:3> filas (in)MOVWF TRISBBANK0MOVLW 0x01MOVWF CONTCOLMOVLW 0x7FMOVWF COLKBDRSTFILCLRF CONTFIL ;RESET CONT FILASMOVF COLKBD,WMOVWF PORTB ;COLOCAR UN CERO EN COLUMNASnopnopnopMOVF PORTB,W ;LEER FILAS DE TECLADOMOVWF AUXRLF AUX,FRLF AUX,FRLF AUX,FRLF AUX,FTESTFILRLF AUX,FBTFSS _cGOTO ACERTADOINCF CONTFIL,FMOVF CONTFIL,WXORLW 0x04BTFSS _zGOTO TESTFILBSF _c

Page 42: Report Practic

RRF COLKBD,F ;rotacion del cero a colocarINCF CONTCOL,FMOVF CONTCOL,WXORLW 0x05BTFSS _zGOTO RSTFILRETLW 0x00ACERTADOMOVF CONTFIL,WXORLW 0x00BTFSC _zGOTO ESCEROMOVLW 0x00MULADDLW 0x04DECFSZ CONTFILGOTO MULSUMACOLADDWF CONTCOL,WCALL TABKBDRETURNTABKBDaddwf PCL,Fretlw 0 ;inválidoretlw 0x10retlw 0x11retlw 0x12retlw 0x13retlw 0x14retlw 0x15retlw 0x16retlw 0x17retlw 0x18retlw 0x19

retlw 0x1Aretlw 0x1Bretlw 0x1Cretlw 0x1Dretlw 0x1Eretlw 0x1FESCEROMOVLW 0x00GOTO SUMACOLend

Page 43: Report Practic

Como resultado obtenemos el siguiente circuito, en proteus.

CONCLUSION

Esta vez aprendimos a conectar un teclado y a mandar estos valores a través del pic 16F877 que recoge los datos y los manda a un decodificador para mostrar el resultado en un display de 7 segmentos dependiendo de lo que el usuario vaya introduciendo.