You are on page 1of 43

INSTITUTO TECNOLOGICO DE

OAXACA
TECNOLOGIA PROPIA E INDEPENDENCIA ECONOMICA


REPORTE DE PRACTICAS

MICROCONTROLADORES

SOLANO HERNNDEZ GUSTAVO
FRANCO GABRIEL CABALLERO.

CARRERA:
ING. ELECTRNICA


GRUPO: SEMESTRE:
E1A SEPTIMO






Oaxaca de Jurez, Oaxaca, /2013



PRACTICA No. I
SECUENCI A DE LEDS

Objetivo: Implementar el circuito mnimo basado en microcontrolador 16F84
para el desarrollo de varias aplicaciones didcticas. 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:
PIC16F84A
LEDs ROJOs
RESISTENCIA DE 10 K
Procedimiento
1) Armar el siguiente circuito elctrico basado en microcontrolador 16F84A,
adems conectar un dipswitch en el puerto RA0, RA1, RA2 Para ver el
comportamiento de los led de acuerdo a las 8 rutinas programadas claro
despus colocar las resistencias adecuadamente y conectar 8 LEDs en el
puerto RB0 hasta el RB7 consecutivamente.

2) Programar el microcontrolador utilizando el software MPLAB.
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F877
INCLUDE <P16F877.INC>

STATUS EQU 03H
PTOB EQU 06H
PTOC EQU 07H
INTCON EQU 0BH
SEC EQU 025H
REG1 EQU 026H
REG2 EQU 027H
REG3 EQU 028H

ORG 0H
GOTO INICIO

ORG 04H
GOTO PAUSA


INICIO BCF STATUS,6
BSF STATUS,5
CLRF PTOC
MOVLW B'11111111'
BCF STATUS,5
BSF INTCON,7 ;CONFIGURO
INTERRUPCION
BSF INTCON,3
BCF INTCON,0

CONTI CLRF PTOC
CLRF SEC
PREG1 BTFSS SEC,0
GOTO PREG2
GOTO S1
PREG2 BTFSS SEC,1
GOTO PREG3
GOTO S2
PREG3 BTFSS SEC,2
GOTO PREG4
GOTO S3
PREG4 BTFSS SEC,3
GOTO PREG1
GOTO S4

S1 MOVLW B'10101010'
MOVWF PTOC
CALL RETARDO
CLRF PTOC
CALL RETARDO
GOTO PREG1

S2 MOVLW B'11001100'
MOVWF PTOC
CALL RETARDO
ZZZ BTFSS SEC,1
GOTO PREG1
COMF PTOC,F
CALL RETARDO
GOTO ZZZ

S3 MOVLW B'00110000'
MOVWF PTOC
CALL RETARDO
XXX BTFSS SEC,2
GOTO PREG1
RLF PTOC
CALL RETARDO
GOTO XXX

S4 MOVLW B'00010000'
MOVWF PTOC
CALL RETARDO
WWW BTFSS SEC,3
GOTO PREG1
RRF PTOC
CALL RETARDO
GOTO WWW


PAUSA BCF INTCON,7
CHECA_BOTON
BTFSC PTOB,4
GOTO $+4
CALL ANTIRREBOTES
MOVLW B'00000001'
MOVWF SEC
BTFSC PTOB,5
GOTO $+4
CALL ANTIRREBOTES
MOVLW B'00000010'
MOVWF SEC
BTFSC PTOB,6
GOTO $+4
CALL ANTIRREBOTES
MOVLW B'00000100'
MOVWF SEC
BTFSC PTOB,7
GOTO $+4
CALL ANTIRREBOTES
MOVLW B'00001000'
MOVWF SEC
GOTO SALIDA

ANTIRREBOTES
BTFSS PTOB,4
GOTO ANTIRREBOTES
BTFSS PTOB,5
GOTO ANTIRREBOTES
BTFSS PTOB,6
GOTO ANTIRREBOTES
BTFSS PTOB,7
GOTO ANTIRREBOTES
RETURN

SALIDA BSF INTCON,7
BCF INTCON,0
retfie

RETARDO MOVLW 10
MOVWF REG1
TRES MOVLW 20
MOVWF REG2
DOS MOVLW 30
MOVWF REG3

UNO DECFSZ REG3,1
GOTO UNO
DECFSZ REG2,1
GOTO DOS
DECFSZ REG1,1
GOTO TRES
RETURN


END



CONCLUSION
Esta primera prctica tuvo como objetivo encender en secuencia todos los leds
a travs del microcontrolador. En este programa no hay interaccin 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 funcin de dos seales de
entradas distintas, dependiendo de la programacin hecha previamente con el
microcontrolador 16F84 para el control de varios leds como es el caso de esta
segunda practica.
Introduccin:
Es muy frecuente tener que controlar una carga (motor, lmpara, etc.) desde
dos puntos situados a cierta distancia entre ellos. Es el clsico caso de una
habitacin con una instalacin conmutada en la que una lmpara se gobierna
desde dos interruptores colocados en posiciones distantes entre s. Desde
cualquiera de ellos, se puede gobernar el encendido o apagado de la lmpara.

Inicialmente, cuando ambos interruptores estn en reposo (a nivel 0) la
lmpara permanece apagada (a nivel 0). A partir de esta situacin, cada vez
que cambie el estado de cualquiera de los interruptores, tambin cambiar el
estado de la lmpara. La tabla de la verdad mostrada muestra los diferentes
estados lgicos del sistema a realizar.




Esquema Electrnico:

Materiales Necesarios:
AVX1206NP0220P
CRYSTAL
LED-RED
MINRES330R
PHYCO603NP027P
PIC16F84

Procedimiento :
bsf f,b : Pone a 0 el bi <<b>> del operando fuente <<f>>.
La instruccin bcf estado ,5 pone a 0 el bit 5 del registro ESTADO.
Goto etiqueta : Provoca un salto incondicional en la ejecucin del programa
hasta la instruccin que vaya precedida por el nombre de la etiqueta.
La instruccin goto inicio carga al PC o Contador de programa con la
direccin de la instruccin 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 usado
RADIX HEX ;Los valores se representan en hexadecimal
ORG 0 ;Comando que indica al ensam la direc de la memoria en donde se
; situara la instruccin siguiente
BSF 0X03, ;Pone 1 el bit 5 de ESTADO para direccionar el bnco 1 de la
mem ;de datos
MOVLW 0XFF ;CARGAMOS LA LI TERAL A W
MOVWF 0X05 ;CARGAMOS W A TRI SA
MOVLW 0X00 ;CARGAMOS W CON 0
MOVWF 0X06 ;CARGAMOS W A TRI SB
BSF 0X03,5
I NI CI O MOVF 0X05,0
ADDLW 2
MOVWF 0X06
GOTO I NI CI O
END

Conclusion.
Se aprendi la utilizacin del temporizador, para el control de prendido y
apagado de luces. Y a Analizar las instrucciones del programa para llegar a su
total comprensin. 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
MANEJ O DE I NTERRUPCI ONES
Objetivo:
El ejemplo pretende mostrar cmo, mediante el programa adecuado, es posible
resolver cualquier automatismo de tipo combinacional. Un nmero
determinado de salidas se activan en funcin de las combinaciones binarias
presentes en un nmero determinado de lneas de entrada.
Introduccin:
Con objeto de no emplear en el programa las direcciones numricas de los
registros que se usan, se asigna a cada uno de ellos una etiqueta identificativa
que facilita la comprensin del programa. Hay registros que se hallan en los
dos bancos de la memoria de datos, pero otros slo en uno.

La informacin que entra o sale por la Puerta A se implementa en la direccin
5 del banco 0, mientras que en esa direccin, pero del banco 1, se halla el
registro de configuracin de las lneas de E/S dela Puerta A. Usaremos la
etiqueta PUERTAA para ambos registros, pero accederemos a cada uno
segn 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 direccin 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 direccin 0 de la memoria de programa, en
dicha posicin habr que situar la primera instruccin. Al conectarse por
primera vez el microcontroladora la alimentacin se produce un Reset. La
direccin 0 se destina al Vector de Reset y en ella se sita la primera
instruccin del programa.





















Diagrama Electrnico:

Materiales Necesarios:
Button
Crystal
Led Yellow
MinRes10k
MinRes100R
MinRes330R
PHYCO603NPO27P
PIC16F84A
SW-SPST


Procedimiento:
El PIC 16X84 admite interrupciones, una de ellas al activarse la patita
RBO/INT. Cuando se produce una interrupcin se guarda en la Pila el
contenido actual del PC (direccin de retorno) y el PC se carga con la
direccin 4, que es la destinada al Vector de Interrupcin. En este programa
no se usan interrupciones y por tanto la direccin 4 de la memoria de
programa se podra utilizar libremente, pero teniendo en cuenta que es muy
frecuente el uso de interrupciones, conviene que el programa de aplicacin no
invada dicha direccin y en consecuencia comience en la direccin 5. Para
iniciar el programa en la direccin del Reset 0 y al mismo tiempo situar la
primera instruccin en la direccin 5, se coloca en la direccin 0 una
instruccin de salto a la 5 de la siguiente forma: La primera instruccin tiene
como etiqueta inicio y el Ensamblador MPASM la situar en la direccin 5,
gracias a la directiva previa org 5. Para configurar las lneas 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 configuracin de la
Puerta A es la misma PUERTAA, el acceso a uno u otro se efecta segn el
banco de la memoria de datos que se halle activo. Para acceder a los registros
de configuracin 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 operacin se utiliza la
instruccin de complemento.

Cdigo Necesario:
STATUS EQU 0X03
OPTIONR EQU 0X81
TRISA EQU 0X85
PORTA EQU 0X05
TRISB EQU 0X86
PORTB EQU 0X06

INICIO

BSF STATUS,5 ;SE PASA AL BANCO 1 DE RAM
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 RAM
LOOP:
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 peridico. De esta manera, si el sistema por cualquier
motivo se bloqueara, el programa deja de ejecutarse y con ello la ejecucin de
la instruccin de refresco CLRWDT.
El WDT sigue su temporizacin hasta que sobrepase el intervalo de tiempo,
provocando un reinicio automtico del sistema sin intervencin humana de
ningn tipo.






PRACTICA No. IV
MANEJ O DE I NTERRUPTORES
Objetivo: Desarrollar un programa en el pic16f84A que nos ayude a comprender
el uso de las interrupciones en los Microcontroladores.

Introduccin:
Efectivamente, en ocasiones el control de una o varias salidas no depende del
estado lgico actual de las entradas, tambin depende de la secuencia de estados
lgicos 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 posicin de reposo y se desactive. Si ambos pulsadores
permanecen activados simultneamente, la alarma permanecer desactivada.













Esquema Electrnico:



Materiales Necesarios:
Para esta prctica necesitaremos de las siguientes herramientas:
Pic16f84A
Resistencias
Switchs
Alimentacin de 5V.
Leds
Equipo
Quemador de programas para el Microcontrolador.
Procedimiento:
Para la solucin del problema primero necesitamos plantearnos, el
desarrollo del cdigo 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 cdigo en cascada como el de
nuestro diagrama de flujo.






cdigo utilizado:
LIST P=16F84
RADIX HEX

W EQU 0
F EQU 1
TMR_OPT EQU 0X01 ;TMR0 EN BANCO 0 OPTION EN BANCO 1
ESTADO EQU 0X03
PUERTAA EQU 0X05 ;PA EN BANCO 0 TRISA EN BANCO1
PUERTAB EQU 0X06 ;PB EN BANCO 0 TRISB EN BANCO1
INTCON EQU 0X0B
CONTA EQU 0X10 ;CONTADOR AUXILIAR

ORG 0 ;VECTOR DE RESET
GOTO INICIO
ORG 4 ;VECTOR DE INTERRUPCION
GOTO INTER ;SALTA A COMIENZO DE RUTINA DE INTERRUPCION
ORG 5

INICIO
BSF ESTADO,5 ;SELECCION DEL BANCO 1
CLRF PUERTAB ;CONFIGURACION PUERTA B COMO
SALIDA
MOVLW b00000011 ;CONF RA0, RA1 COMO ENTRADAS
MOVWF PUERTAA
MOVLW b00000111
MOVWF TMR0_OPT
BCF ESTADO,5 ;BANCO 0
MOVLW b10100000 ;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 DECIMALES
BUCLE BTFSC PUERTAA,0 ;EXPLORA RA0 Y BRINCA SI 0, SALTA A
;RA0_1
GOTO RA0_1
BCF PUERTAB,0 ;SI RA0 = RB0 = 0
GOTO RALX ;A EXPLORAR RA1
RA0_1 BSF PUERTAB,0 ;SI RA0 = 1 SE SACA POR RB0 UN 1
RALX 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 BUCLE2
RA1_1 BSF PUERTAB,1 ;SI RA1 = 1, RB1 = 1
BUCLE2 GOTO BUCLE ;BUCLE INDEFINIDO, SE SALE POR
INTER
INTER DECFSZ CONTA,1 ;RSI. DECREMENTA CONTA Y BRINCO SI
0
GOTO SEGUIR
CONTA_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 SEGUIR
RB7_1 BCF PUERTAB,7 ;SI RB7 = 1, SE INVIERTE
SEGUIR MOVLW b10100000 ;SE RESTAURA INTCON
MOVWF INTCON
MOVLW 0X0C
MOVWF TMR_OPT ;SE RECARGA TMR0 CON 12
RETFIE
END

INTERRUPCIONES
LIST P=16F84

RADIX HEX

W EQU 0
F EQU 1
ESTADO EQU 0X03
PUERTAA EQU 0X05
PUERTAB EQU 0X06
INTCON EQU 0X0B

ORG 0

GOTO INICIO

ORG 4

GOTO INTER

ORG 5
INICIO BSF ESTADO,5 ;BANCO 1
MOVLW b00000000
MOVWF PUERTAA ;PUERTA A SALIDA
MOVLW b11111111
MOVWF PUERTAB ;PUERTA B ENTRADAS
BCF ESTADO,5 ;BANCO 0

CLRF PUERTAA
CLRF PUERTAB

MOVLW b10011000 ;SE ACTIVA GIE, INT EXT E INT X CAM DE PB
MOVWF INTCON
BUCLE GOTO BUCLE

INTER BTFSS INTCON,0 ;EXPLORA FLAG DE IN POR CAMBIO RB4
RB7
GOTO PARAR
GOTO ALARMA
ALARMA CLRF PUERTAB
MOVLW b10011000 ;se activan GIE INT EXTERNA
MOVWF INTCON ;E INT POR CAMBIO DE PB
BUZZER BSF PUERTAA,0
NOP
BCF PUERTAA,0
BSF PUERTAA,1
NOP
BCF PUERTAA,1
GOTO BUZZER
PARAR CLRF PUERTAA
BCF PUERTAB,0
MOVLW b10011000 ;SE ACTIVA GIE, INT EXTERNA E INT POR
;CAMBIO DE PB
MOVWF INTCON
GOTO BUCLE
END

Simulacin:





Conclusion.
He comprendido muchas instrucciones para utilizar el pic 16f84A
entre ellas est la de controlar distintas rutinas con los Leds y a
interrumpir las mismas con la instruccin de interrupcin.

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 prctica necesitaremos de las siguientes herramientas:
MATERIALES
Pic16f84A
Resistencias
Switchs
Alimentacin de 5V.
Una pantalla LCD o un display de 7 segmentos.
Un Teclado.
EQUIPO
Quemador de programas para el microcontrolador
Protoboard
DESARROLLO
Para la solucin del problema primero necesitamos plantearnos, el desarrollo
del cdigo 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 cdigo en cascada como el de nuestro
diagrama de flujo.
















Cdigo
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
REGRESAR
VALOR AL
LCD
NO
SI

list p=16f84
#include <p16f84.inc> ;archivo de
encabezado por Microchip
;
;ESTE PROGRAMA EMULA UN
74C922 DECODIFICADOR DE
TECLADO
;
CONTFIL EQU 0x12 ;Contador de
Filas
CONTCOL EQU 0x13 ;Contador
de Columnas
COLKBD EQU 0x14 ;DATO EN
COLUMNAS
Temp EQU 0x15
R1 EQU 0x16 ;Variable para
Retardo
R2 EQU 0x17 ;Variable para
Retardo
R3 EQU 0x18 ;Variable para
Retardo
R4 EQU 0x19 ;Variable para
Retardo
COUNT EQU 0x1A
CHAR EQU 0x1B
;Almacenamiento temporal SCAN
AUX 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 0x00
MAIN
BANK1
CLRF TRISA
BANK0
CLRF PORTA
NOP
NOP
Muestre
BCF OE
RUSCAN
CALL SCAN
XORLW 0x00 ;espera una Tecla
BTFSC _z
GOTO Muestre
MOVWF PORTA
MOVLW .50
MOVWF COUNT
LOOPSCAN
CALL DEL5MS
DECFSZ COUNT,1
GOTO LOOPSCAN
GOTO RUSCAN
;****************************
*****************************
***************

DEL5MS
MOVLW .12
MOVWF R1
MOVLW 7
MOVWF R2
MOVLW 1
MOVWF R3
MOVLW 1
MOVWF R4
LOOPDEL5
DECFSZ R1,F
GOTO LOOPDEL5
DECFSZ R2,F
GOTO LOOPDEL5
DECFSZ R3,F
GOTO LOOPDEL5
DECFSZ R4,F
GOTO LOOPDEL5
NOP
RETURN
;****************************
*****************************
******
;RETORNA W=00 NO HAY
TECLA OPRIMIDA,
;RETORNA W=COD SI TECLA
OPRIMIDA.
;****************************
*****************************
*****
SCAN
BANK1
MOVLW 0x0F ;el puerto que lee
teclado <0:3> filas (in)
MOVWF TRISB
BANK0
MOVLW 0x01
MOVWF CONTCOL
MOVLW 0x7F
MOVWF COLKBD
RSTFIL
CLRF CONTFIL ;RESET CONT
FILAS
MOVF COLKBD,W
MOVWF PORTB ;COLOCAR UN
CERO EN COLUMNAS
nop
nop
nop
MOVF PORTB,W ;LEER FILAS
DE TECLADO
MOVWF AUX
RLF AUX,F
RLF AUX,F
RLF AUX,F
RLF AUX,F
TESTFIL
RLF AUX,F
BTFSS _c
GOTO ACERTADO
INCF CONTFIL,F
MOVF CONTFIL,W
XORLW 0x04
BTFSS _z
GOTO TESTFIL
BSF _c
RRF COLKBD,F ;rotacion del cero
a colocar
INCF CONTCOL,F
MOVF CONTCOL,W
XORLW 0x05
BTFSS _z
GOTO RSTFIL
RETLW 0x00
ACERTADO
MOVF CONTFIL,W
XORLW 0x00
BTFSC _z
GOTO ESCERO
MOVLW 0x00
MUL
ADDLW 0x04
DECFSZ CONTFIL
GOTO MUL
SUMACOL
ADDWF CONTCOL,W
CALL TABKBD
RETURN
TABKBD
addwf PCL,F
retlw 0 ;invlido
retlw 0x10
retlw 0x11
retlw 0x12
retlw 0x13
retlw 0x14
retlw 0x15
retlw 0x16
retlw 0x17
retlw 0x18
retlw 0x19
retlw 0x1A
retlw 0x1B
retlw 0x1C
retlw 0x1D
retlw 0x1E
retlw 0x1F
ESCERO
MOVLW 0x00
GOTO SUMACOL
end
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.








PRACTICA No VI
OBJETIVO
Desarrollar un programa que nos entregue valores a partir de una tabla en el
pic 16F84A
PLANTEAMIENTO
Para esta prctica necesitaremos de las siguientes herramientas:
Materiales
Pic16f84A
Resistencias
Switchs
Alimentacin de 5V.
Dos displays de 7 segmentos
Dos transistores NPN
Equipo
Quemador de programas para el microcontrolador
Protoboard
DESARROLLO
Para la solucin del problema primero necesitamos plantearnos, el
desarrollo del cdigo 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






















Posteriormente necesitamos crear un cdigo en cascada como el de nuestro
diagrama de flujo.
Cdigo

list p=16f84a
include<p16f84.inc>
COLOCAR DATO 1 EN EL P.
CONT2-1 CONT2
RETARDO DE APAGADO
INHABILITAR Q2
HABILITAR Q1
VALOR CONT 2
RETARDO DE DIGITO
HABILITAR Q2
COLOCAR DATO 2 EN EL P
RETARDO DE APAGADO
INHABILITAR Q1
RETARDO DE DIGITO
CONT2=
0
RETORNAR


#define BANK0 bcf STATUS,RP0
#define BANK1 bsf STATUS,RP0
Cont2 equ 0x0D
Dato1 equ 0x0E
Dato2 equ 0x0F
Del1 equ 0x10

Del2 equ 0x11
;Display
inicio
BANK1
clrf TRISA ;puerto A como salida
clrf TRISB ;puerto B como salida

BANK0
movlw 0x03 ;inhabilita transistores
movwf PORTA
;
movlw .10 ;valor de repeticiones
movwf Cont2
movlw .0
movwf Dato1
movlw .0
movwf Dato2
LoopDisp
;
;Sacar al puerto el Dato 1 por un tiempo especfico
;
movf Dato1,0 ;Dato para decodificar
call Tabla ;Decodificacin del dato
movwf PORTB ;Dato decodificado a puerto
bcf PORTA,0 ;Habilita Q dato 1
;bsf PORTA,1
call RetDig ;Retardo de dgito
bsf PORTA,0 ;Inhabilita Q dato 1
nop ;Retardo de apagado
nop


nop
nop
;
;Sacar al puerto el Dato 2 por un tiempo especfico
;
movf Dato2,0 ;Dato para decodificar
call Tabla ;Decodificacin del dato
movwf PORTB ;Dato decodificado a puerto
bcf PORTA,1 ;Habilita Q dato 2
;bsf PORTA,0
call RetDig ;Retardo de dgito
bsf PORTA,1 ;Inhabilita Q dato 2
nop ;Retardo de apagado
nop
nop
nop
;
decfsz Cont2,1 ;Decrementa Cont2, elude sig. s cero
goto LoopDisp ;Repite ciclo
return inicio
Tabla
addwf PCL,1
retlw 0x3f ;Cuando el dgito es 0
retlw 0x4F ;Cuando el dgito es 1
retlw 0x12 ;Cuando el dgito es 2
retlw 0x06 ;Cuando el dgito es 3
retlw 0x4C ;Cuando el dgito es 4
retlw 0x6D ;Cuando el dgito es 5
retlw 0x20 ;Cuando el dgito es 6
retlw 0x78 ;Cuando el dgito es 7
retlw 0x00 ;Cuando el dgito es 8
retlw 0x04 ;Cuando el dgito es 9
retlw 0x08 ;Cuando el dgito es A
retlw 0x60 ;Cuando el dgito es B
retlw 0x31 ;Cuando el dgito es C
retlw 0x42 ;Cuando el dgito es D
retlw 0x30 ;Cuando el dgito es E


retlw 0x38 ;Cuando el dgito es F
;
RetDig
movlw 2
movwf Del1
Loop1
movlw .100
movwf Del2
Loop2
decfsz Del2,F
goto Loop2
decfsz Del1,F
goto Loop1
return
end

RESULTADO
Como resultado obtenemos el siguiente circuito, mostrado en proteus.

CONCLUSIONES


Aprendimos a llamar valores a travs de la instruccin de una tabla en la
programacin 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 solucin del problema primero necesitamos plantearnos, el
desarrollo del cdigo de nuestro programa, para esto necesitamos tener
visualizada la estructura de nuestro diagrama de flujo que es el siguiente:
Diagrama de Flujo





Materiales
Para esta prctica necesitaremos de las siguientes herramientas:
Materiales
Pic16f84A
Resistencias
Switchs
Alimentacin de 5V.
Leds
Equipo
Quemador de programas para el microcontrolador
Protoboard

Esquema Electrnico:




Cdigo utilizado:

LIST P=16F48

STATUS EQU 0X03
PORTA EQU 0X05
PORTB EQU 0X06
INTCON EQU 0X0B
OPTIONR EQU 0X81
TRISA EQU 0X85
TRISB 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 INSTRUC
GOTO INICIO
ORG 0X04 ;INDICA ENSAMB DIREC DE MEM DE SIG INSTRUC

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




;PROGRAMA PRINCIPAL
INICIO
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

Simulacin:



Conclusin:

Encender y apagar un LED como respuesta a un estmulo de interrupcin
Determinar la forma en que debe colocarse el cdigo en el programa fuente
para aceptar y atender una rutina de interrupcin. Profundizamos ms acerca
del manejo de las interrupciones y su uso en la elaboracin de un circuito que
utilice detener el programa que se est ejecutando.





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 cmo el usuario lo vaya
introducienndo.
PLANTEAMIENTO
Para esta prctica necesitaremos de las siguientes herramientas:
Materiales
Pic16f84A
Resistencias
Switchs
Alimentacin de 5V.
Display de 7 segmentos.
Teclado.
Equipo
Quemador de programas para el microcontrolador
Protoboard

DESARROLLO
Para la solucin del problema primero necesitamos plantearnos, el desarrollo
del cdigo de nuestro programa, para esto necesitamos tener visualizada la
estructura de nuestro diagrama de flujo que es el siguiente:




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
REGRESAR
VALOR AL
LCD
NO
SI





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 Filas
CONTCOL EQU 0x13 ;Contador
de Columnas
COLKBD EQU 0x14 ;DATO EN
COLUMNAS
Temp EQU 0x15
R1 EQU 0x16 ;Variable para
Retardo
R2 EQU 0x17 ;Variable para
Retardo
R3 EQU 0x18 ;Variable para
Retardo
R4 EQU 0x19 ;Variable para
Retardo
COUNT EQU 0x1A
CHAR EQU 0x1B
;Almacenamiento temporal
SCAN
AUX 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 0x00
MAIN
BANK1
CLRF TRISA
BANK0
CLRF PORTA
NOP
NOP
Muestre
BCF OE
RUSCAN
CALL SCAN
XORLW 0x00 ;espera una Tecla
BTFSC _z
GOTO Muestre
MOVWF PORTA
MOVLW .50
MOVWF COUNT
LOOPSCAN
CALL DEL5MS
DECFSZ COUNT,1



GOTO LOOPSCAN
GOTO RUSCAN
;************************************
************************************

DEL5MS
MOVLW .12
MOVWF R1
MOVLW 7
MOVWF R2
MOVLW 1
MOVWF R3
MOVLW 1
MOVWF R4
LOOPDEL5
DECFSZ R1,F
GOTO LOOPDEL5
DECFSZ R2,F
GOTO LOOPDEL5
DECFSZ R3,F
GOTO LOOPDEL5
DECFSZ R4,F
GOTO LOOPDEL5
NOP
RETURN
;************************************
***************************
;RETORNA W=00 NO HAY
TECLA OPRIMIDA,
;RETORNA W=COD SI TECLA
OPRIMIDA.
;************************************
**************************
SCAN
BANK1
MOVLW 0x0F ;el puerto que lee
teclado <0:3> filas (in)
MOVWF TRISB
BANK0
MOVLW 0x01
MOVWF CONTCOL
MOVLW 0x7F
MOVWF COLKBD
RSTFIL
CLRF CONTFIL ;RESET CONT
FILAS
MOVF COLKBD,W
MOVWF PORTB ;COLOCAR
UN CERO EN COLUMNAS
nop
nop
nop
MOVF PORTB,W ;LEER FILAS
DE TECLADO
MOVWF AUX
RLF AUX,F
RLF AUX,F
RLF AUX,F
RLF AUX,F
TESTFIL
RLF AUX,F
BTFSS _c
GOTO ACERTADO
INCF CONTFIL,F
MOVF CONTFIL,W
XORLW 0x04
BTFSS _z
GOTO TESTFIL
BSF _c



RRF COLKBD,F ;rotacion del
cero a colocar
INCF CONTCOL,F
MOVF CONTCOL,W
XORLW 0x05
BTFSS _z
GOTO RSTFIL
RETLW 0x00
ACERTADO
MOVF CONTFIL,W
XORLW 0x00
BTFSC _z
GOTO ESCERO
MOVLW 0x00
MUL
ADDLW 0x04
DECFSZ CONTFIL
GOTO MUL
SUMACOL
ADDWF CONTCOL,W
CALL TABKBD
RETURN
TABKBD
addwf PCL,F
retlw 0 ;invlido
retlw 0x10
retlw 0x11
retlw 0x12
retlw 0x13
retlw 0x14
retlw 0x15
retlw 0x16
retlw 0x17
retlw 0x18
retlw 0x19
retlw 0x1A
retlw 0x1B
retlw 0x1C
retlw 0x1D
retlw 0x1E
retlw 0x1F
ESCERO
MOVLW 0x00
GOTO SUMACOL
end





Como resultado obtenemos el siguiente circuito, en proteus.


CONCLUSION
Esta vez aprendimos a conectar un teclado y a mandar estos valores a travs 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.