Sie sind auf Seite 1von 33

DEPARTAMENTO DE ELECTRICA Y ELECTRONICA

Octubre 2015 Febrero 2016

REA DE SISTEMAS DIGITALES


ASIGNATURA: MICROCONTROLADORES NRC: .
Laboratorio 3.1
Tema: Manejo de Interrupciones
Docente: Ing. Danny Sotomayor

Equipo #: 3

Integrantes:
1. Srta. Josselyn Valenzuela
2. Sr. Fernando Lara
3. Capt. Pal Machado

Bas
e

3.5

Informe

4.5

Funcionamien
to

2.0

Defensa

Aspectos de evaluacin
0.2 Fundamento terico
5
(Cdigos para inicializacin LCD )
0.2
5
Diagrama de bloques
0.5
0
Tabla de asignacin de variables
Diagrama de flujo
0.7
(Programa estructurado
5
Interrupciones)
0.7
5
Clculo de retardo por timer 0
0.5
0
Programa
0.2
5
Conclusiones
0.2
Diagrama electrnico
5
0.5
Presentacin del circuito
0
1.0 Inicializacin del LCD
Visualizacin de la temporizacin
1.0 en LCD
(HH:MM:SS)
1.0 Error de temporizacin.
Asignacin de funciones del
1.0 teclado
(Inicio, pausa, reestablecer)

Calificaci
n

1. Tema:

LABORATORIO N 3.1
Manejo de Interrupciones

2. Objetivos:
2.1.Objetivo General:

Identificar el funcionamiento del TMR0, y disear una configuracin adecuada


para implementar un programa orientado a la simulacin de un cronmetro.
Mostrar los resultados obtenidos a travs del uso de un LCD, identificando sus
cdigos de inicializacin, y cdigo base para su control y funcionamiento desde
el programa
3. Teora:
3.1. TMR0:
El Timer 0 es un mdulo temporizador/contador de 8 bits que cuenta con un preescalador programable tambin de 8 bits. Puede funcionar como temporizador o
como contador. En modo temporizador el valor del registro TMR0 se incrementa
con cada ciclo de instruccin (o cada X ciclos dependiendo del pre-escalador).
En modo contador el valor del registro TMR0 se incrementa en cada
flanco (ascendente o descendente) del pin RA4/T0CKI. En ambos casos al
desbordarse (pasar de 0xFF a 0x0) el registro TMR0 la bandera de interrupcin del
timer 0 (bit T0IF del registro INTCON) se pone a 1.
El modo temporizador se selecciona poniendo a cero el bit T0CS del
registro OPTION. Poniendo a uno ese bit el modulo trabaja en modo contador, en
este modo de operacin adems se debe seleccionar si el incremento se producir
en cada filo ascendente o descendente, al poner a cero el bit T0SE del registro
OPTION se selecciona el filo ascendente.
El pre-escalador es compartido por el Timer 0 y por el Watchdog. Se asigna a un
mdulo o a otro mediante el bit PSA del registro OPTION. Poniendo el bit a 1 el preescalador se asigna al Watchdog y ponindolo a 0 el pre-escalador se asigna
al Timer 0. El valor del pre-escalador se selecciona con los bits PS2:PS0 de la
siguiente manera:
PS2:P20

WDT

000

1:2

1:1

001

1:4

1:2

010

1:8

1:4

011

1:16

1:8

100

1:32

1:16

101

1:64

1:32

110
111

TMR0

1:128
1:256

1:64
1:128

Carga y temporizacin
En modo temporizador el Timer 0 incrementa su cuenta en cada ciclo de
instruccin. Este modo sirve para generar temporizaciones y bases de tiempo de la
misma forma que los retardos por software, sin embargo las temporizaciones con

el Timer 0 pueden ser ms exactas y adems se cuenta con la ventaja de que el


mdulo puede trabajar mediante interrupciones as que el programa puede
ejecutar otras instrucciones mientras se realiza la temporizacin.
La temporizacin que se puede obtener con este mdulo se obtiene de la siguiente
relacin:
Temporizacin = [(256 - precarga)*PS+2]*Tinstruccion
Donde:
precarga = Valor que se le asigna al registro TMR0 al comenzar la temporizacin
PS = Pre-escalador. Si esta asignado al watchdog tomar el valor de 1
Tinstruccin = 4/frecuencia de oscilacin y la temporizacin est dada en
segundos.
La temporizacin mxima utilizando el oscilador interno del pic 16f628 es:
Temp.max. = [(256 - 0)*256+2]*1uS = 65528uS
De modo que la temporizacin mxima que se puede tener con el es solamente
de65.538mS. Si se desea obtener una temporizacin distinta solo se debe escribir
en el registro TMR0 el valor de la precarga necesaria.
precarga = -[([Temporizacion/(4/fosc)]-2)/PS]+256
Donde, de nuevo, la temporizacin est dada en segundos.
Veamos un ejemplo de aplicacin: Se desea complementar el valor del puerto B
cada 50mS. Se estar revisando que se haya cumplido el tiempo de la
temporizacin checando la bandera T0IF. Utilizando la expresin de la precarga y
utilizando el pre-escalador ms grande (256) obtenemos el valor que necesitamos
cargar al registro TMR0 para obtener una temporizacin de 50mS.
precarga = -[([50mS/(4/4Mhz)]-2)/256]+256 = 60.69 60
3.2. INTERRUPCIONES
Una interrupcin es un aviso provocado por un mdulo del PIC, por un
cambio en el estado de un pin o un recordatorio de que ha pasado un cierto
tiempo. Como su nombre indica este aviso interrumpir la tarea que se est
haciendo en ese momento y pasaremos a ejecutar una rutina de servicio o
gestin de la interrupcin. Es importante familiarizarse con el manejo de
interrupciones, ya que nos evita poder manejar muchos tipos de eventos sin
estar pendientes de ello.

Interrupciones del PIC 16f877A


La familia Pic16F877A tiene 13 fuentes de interrupciones los de 28 pines y
14 los de 40 pines. Al aceptarse una interrupcin se salva el valor del PC
contador de programa en la pila y se carga aquel con el valor 0004h, que es
el Vector de Interrupcin. La mayora de los recursos o perifricos de que
disponen los Pic16F87x son capaces de ocasionar una interrupcin, si se
programan adecuadamente los bits de los registros que pasamos a describir
a continuacin.
1. Desbordamiento del TMR02.
2. Activacin de la patita de interrupcin RB0/INT3.
3. Cambio de estado de una de las cuatro patitas de ms peso del
puerto B4.
4. Finalizacin de la escritura de un byte en la EEPROM.

Registiro: OPTION_REG

El registro OPTION_REG contiene varios bits de control para configurar el pre - escalador del
Temporizador 0/WDT, el temporizador Timer0, la interrupcin externa y las resistencias pull-up
en el puerto PORTB.
RBPU - Port B Pull up Enable bit (resistencia Pull Up Puerto B)
1 - Desactivadas.
0 - Activadas.
INTEDG - Interrupt Edge Select bit (bit selector de flanco activo de la
interrupcin externa)
1 - Interrupcin por flanco ascendente en el RB0/INT.
0 - Interrupcin por flanco descendente en el RB0/INT.
T0CS - TMR0 Clock Source Select bit (bit selector de tipo de reloj para el
Timer0)
1 - Pulsos introducidos a travs del TOCKI (contador).
0 - Pulsos de reloj internos Fosc/4 (temporizador).
T0SE - TMR0 Source Edge Select bit (bit selector de tipo de flanco en TOCKI)
selecciona el flanco (ascendente o descendente) contado por el
temporizador Timer0 por el pin RA4/T0CKI.
1 - Incrementa en flanco descendente en el pin TOCKI.
0 - Incrementa en flanco ascendente en el pinTOCKI.
PSA - Prescaler Assignment bit asigna el pre-escalador (hay slo uno) al
temporizador o al WDT.
1 - Pre - escalador se le asigna al WDT.
0 - Pre - escalador se le asigna al temporizador Timer0.

Registro: INTCON
El registro INTCON es un registro legible y escribible que contiene las llaves
para habilitar las fuentes de interrupcin. Nota: las banderas de interrupcin
se setearn independientemente de la forma en que est seteado el
INTCON, pero si el GIE no est habilitado la interrupcin no se provocar.

Lgica de Interrupcin

INTCON Register (ADDRESS 0Bh, 8Bh, 10Bh, 18Bh)

bit 7

GIE: bit de interrupciones globales


1 = Habilita las interrupciones no enmascaradas.
0 = Deshabilita las interrupciones no enmascaradas.
PEIE: bit de Interrupciones perifricas
1 = Habilita las interrupciones perifricas no enmascaradas.
0 = Deshabilita las interrupciones perifricas no enmascaradas.
T0IE: bit de habilitacin de interrupciones por overflow del timer

bit 6
bit 5
0.
bit 4
bit 3
puerto B.
bit 2

bit 1

bit 0

1 = Habilita interrupciones por TMR0


0 = Deshabilita interrupciones por TMR0
INTE: bit de habilitacin de la interrupcin externa en RB0
1 = Habilita interrupciones externas en RB0
0 = Deshabilita interrupciones externas en RB0
RBIE: bit de habilitacin de interrupciones por cambios en el

1 = Habilita interrupciones por cambio en puertoB


0 = Deshabilita interrupciones por cambio en puertoB
T0IF: bit bandera de interrupcin por TMR0
1 = en el TMR0 ha ocurrido overflow (esta bandera debe volverse
a 0 en software)
0 = en el TMR0 no ha ocurrido overflow.
INTF: bit bandera de interrupcin externa en RB0
1 = ha ocurrido una interrupcin externa por RB0 (esta bandera
debe volverse a 0 en software)
0 = no ha ocurrido una interrupcin externa por RB0
RBIF: bit bandera de interrupcin por cambio en el puerto B
1 = Al menos una de las patas entre RB7:RB4 a cambiado de valor
(esta bandera debe vol
verse a 0 en software)
0 = Ninguna de las patas entre RB7:RB4 ha cambiado de valor

Registros del sistema de interrupcin


Al llegar la peticin de interrupcin, no significa que una interrupcin ocurrir
automticamente, puesto que debe ser habilitada por el usuario (por el programa)
tambin. Por esta razn, hay bits especiales utilizados para habilitar o deshabilitar
interrupciones. Es fcil de reconocerlos por las letras IE contenidas en sus nombres
(Interrupt Enable - Interrupcin habilitada). Adems, cada interrupcin se asocia
con otro bit denominado bandera que indica que una peticin de interrupcin ha
llegado sin verificar si est habilitada. Asimismo, se reconocen con facilidad por las
dos ltimas letras contenidas en sus nombres - IF (Interrupt Flag - Bandera de
interrupcin).

Registro PIE1
El registro PIE1 contiene los bits de habilitacin de interrupciones perifricas.

ADIE - A/D
Converter Interrupt Enable bit (bit de habilitacin de
interrupciones del convertidor A/D).
1 - Habilita la interrupcin ADC.
0 - Deshabilita la interrupcin ADC.
RCIE-Eusart
Receive Interrupt Enable bit (bit de habilitacin de
interrupciones de recepcin del EUSART).
1 - Habilita la interrupcin de recepcin del EUSART.
0 - Deshabilita la interrupcin de recepcin del EUSART.
TXIE-Eusart
Transmit Interrupt Enable bit (bit de habilitacin de
interrupciones de transmisin del EUSART).
1 - Habilita la interrupcin de transmisin del EUSART.
0 - Deshabilita la interrupcin de transmisin del EUSART.
SSPIE - Master Synchronous Serial Port (MSSP) Interrupt Enable bit - (bit de
habilitacin de la interrupcin del puerto serie sncrono maestro (MSSP)
habilita generar una peticin de interrupcin despus de cada transmisin
de datos por el mdulo de comunicacin serie sncrona (modo SPI o I2C).
1 - Habilita la interrupcin del MSSP.
0 - Deshabilita la interrupcin del MSSP.
CCP1IE - CCP1 Interrupt Enable bit (bit de habilitacin de la interrupcin del
mdulo 1 de Comparacin/Captura/PWM - CCP1) permite generar una
peticin de interrupcin en el mdulo CCP1 utilizado para procesamiento de
la seal PWM.
1 - Habilita la interrupcin CCP1.
0 - Deshabilita la interrupcin CCP1.
TMR2IE - TMR2 to PR2 Match Interrupt Enable bit (bit de habilitacin de la
interrupcin de igualdad entre TMR2 y PR2)
1 - Habilita la interrupcin de igualdad entre TMR2 y PR2.
0 - Deshabilita la interrupcin de igualdad entre TMR2 y PR2.
TMR1IE - TMR1 Overflow Interrupt Enable bit (bit de habilitacin de la
interrupcin de desbordamiento del temporizador Timer1) habilita generar
una peticin de interrupcin despus de cada desbordamiento en el registro
del temporizador Timer1, o sea el contador se pone a cero.

1 - Habilita la interrupcin de desbordamiento del temporizador Timer1.


0 - Deshabilita la interrupcin de desbordamiento del temporizador
Timer1.

Registro PIE2

El registro PIE2 tambin contiene varios bits de habilitacin de interrupciones.

OSFIE.- Oscillator Fail Interrupt Enable bit (bit de habilitacin de la


interrupcin de fallo en el oscilador)
1 - Habilita la interrupcin de fallo en el oscilador.
0 - Deshabilita la interrupcin de fallo en el oscilador.
C2IE - Comparator C2 Interrupt Enable bit (bit de habilitacin de la
interrupcin del comparador C2)
1 - Habilita la interrupcin del comparador C2.
0 - Deshabilita la interrupcin del comparador C2.
C1IE - Comparator C1 Interrupt Enable bit (bit de habilitacin de la
interupcin del comparador C1)
1 - Habilita la interrupcin del comparador C1
0 - Deshabilita la interrupcin del comparador C1.
EEIE - EEPROM Write Operation Interrupt Enable bit (bit de habilitacin de la
interrupcin de escritura en la memoria EEPROM)
1 - Habilita la interrupcin de escritura en la memoria EEPROM.
0 - Deshabilita la interrupcin de escritura en la memoria EEPROM.
BCLIE - Bus Collision Interrupt Enable bit (bit de habilitacin de la
interrupcin de colisin de bus)
1 - Habilita la interrupcin de colisin de bus.
0 - Deshabilita la interrupcin de colisin de bus.
ULPWUIE - Ultra Low-Power Wake-up Interrupt Enable bit (bit de habilitacin
de la interrupcin para salir del modo de ultra bajo consumo - la
reactivacin)
1 - Habilita la interrupcin para salir del modo de ultra bajo consumo.
0 - Deshabilita la interrupcin para salir del modo de ultra bajo consumo.
CCP2IE - CCP2 Interrupt Enable bit (bit de habilitacin de la interrupcin del
mdulo 2 de Comparacin/Captura/PWM (CCP2)
1 - Habilita la interrupcin del CCP2.
0 - Deshabilita la interrupcin del CCP2.
Registro PIR1
El registro PIR1 contiene los bits de banderas de interrupcin.

ADIF - A/D Converter Interrupt Flag bit (bit de bandera de la interrupcin


del convertidor A/D)
1 - Se ha completado una conversin A/D (el bit debe volverse a 0
por software)
0 - No se ha completado una conversin A/D o no ha empezado
RCIF - EUSART Receive Interrupt Flag bit (bit de bandera de la
interrupcin de recepcin del EUSART)

1 - El bfer de recepcin del EUSART est lleno. El bit se pone a


cero al leer el registro RCREG.
0 - El bfer de recepcin del EUSART no est lleno.
TXIF - EUSART Transmit Interrupt Flag bit (bit de la interrupcin de
transmisin del EUSART)
1 - El bfer de transmisin del EUSART est vaco. El bit se pone a
cero al esribir un dato en el registro TXREG.
0 - El bfer de transmisin del EUSART est lleno.
SSPIF - Master Synchronous Serial Port (MSSP) Interrupt Flag bit (bit de
bandera de la interrupcin de puerto serie sncrono maestro)
1 - Se ha cumplido la condicin de ocurrir una interrupcin del
MSSP al transmitir/ recibir los datos. Difieren dependiendo del
modo de operacin del MSSP (SPI o I2C). El bit debe ponerse a
cero por software antes de volver de la rutina de servicio de
interrupciones)
0 - No se ha cumplido ninguna condicin de ocurrir una
interrupcin del MSSP.
CCP1IF - CCP1 Interrupt Flag bit (bit de bandera de la interrupcin del
mdulo 1 de Comparacin/Captura/PWM (CCP1).
1 - Se ha cumplido la condicin de la interrupcin del CCP1 (CCP1
es una unidad para captar, comparar y generar una seal PWM).
Dependiendo del modo de operacin (modo captura o modo
comparacin), se produce una captura o la igualdad en la
comparacin. En ambos casos, el bit debe volverse a cero por
software. El bit no se utiliza en el modo PWM.
0 - No se ha cumplido la condicin de la interrupcin del CCP1.
TMR2IF - Timer2 to PR2 Interrupt Flag bit (bit de bandera de la
interrupcin de igual dad entre el temporizador Timer2 y el registro PR2)
1 - Se ha producido igualdad con el valor del TMR2 (registro de 8
bits del temporizador) y el valor del PR2. El bit debe ponerse a
cero por software antes de volver de la rutina de servicio de
interrupciones).
0 - No se ha producido igualdad con el valor del TMR2 y el valor
del PR2.
TMR1IF - Timer1 Overflow Interrupt Flag bit (bit de bandera de la
interrupcin de desbordamiento del temporizador Timer1)
1 - Se ha producido desbordamiento del Timer1. El bit debe
ponerse a cero por software.
0 - No se ha producido desbordamiento del Timer1.
Registro PIR2
El registro PIR2 contiene los bits de banderas da la interrupcin.

OSFIF - Oscillator Fail Interrupt Flag bit (bit de bandera de la interrupcin de


fallo en el oscilador)
1 - Se ha producido un fallo en el oscilador del sistema. La entrada de
reloj ha sido conmutada al oscilador interno INTOSC. El bit debe ponerse
a cero por software.
0 - El oscilador del sistema funciona correctamente.
C2IF - Comparator C2 Interrupt Flag bit (bit de bandera de la interrupcin
del comparador C2)

1 - La salida del comparador analgico C2 ha sido cambiada (el bit


C2OUT). El bit debe ponerse a cero por software.
0 - La salida del comparador analgico C2 no ha sido cambiada.
C1IF - Comparator C1 Interrupt Flag bit (bit de bandera de la interrupcin
del comparador C1)
1 - La salida del comparador analgico C1 ha sido cambiada (el bit
C1OUT). El bit debe ponerse a cero por software.
0 - La salida del comparador analgico C1 no ha sido cambiada.
EEIF - EE Write Operation Interrupt Flag bit (bit de bandera de la
interrupcin de la operacin de escritura en la memoria EEPROM)
1 - La operacin de escritura en la memoria EEPROM se ha completado.
El bit debe ponerse a cero por software.
0 - La operacin de escritura en la memoria EEPROM no se ha
completado o todava no se ha iniciado.
BCLIF - Bus Collision Interrupt Flag bit (bit de bandera de la interrupcin de
colisin de bus en el MSSP)
1 - Se ha producido una colisin de bus en el MSSP al ser configurado
para el modo maestro I2C. El bit debe ponerse a cero por software.
0 - No se ha producido colisin de bus en el MSSP.
ULPWUIF - Ultra Low-power Wake-up Interrupt Flag bit (bit de bandera de la
interrupcin para salir del modo de ultra bajo consumo - la reactivacin)
1 - Se ha cumplido la condicin de salir del modo de ultra bajo consumo.
El bit debe ponerse a cero por software.
0 - No se ha cumplido la condicin de salir del modo de ultra bajo
consumo.
CCP2IF - CCP2 Interrupt Flag bit (bit de la interrupcin del mdulo 2 de
Comparacin/Captura/PWM - CCP2)
1 - Se ha cumplido la condicin de la interrupcin del CCP2 (CCP2 es una
unidad para captar, comparar y generar una seal PWM). Dependiendo
del modo de operacin (modo captura o modo comparacin), se produce
una captura o la igualdad en la comparacin. En ambos casos, el bit debe
volverse a cero por software. El bit no se utiliza en el modo PWM.
0 - No se ha cumplido la condicin de la interrupcin del CCP2.
3.3. LCD:
El LCD (Liquid Crystal Dysplay) o pantalla de cristal lquido es un dispositivo empleado
para la visualizacin de contenidos o informacin de una forma grfica, mediante
caracteres, smbolos o pequeos dibujos dependiendo del modelo. Est gobernado por
un microcontrolador el cual dirige todo su funcionamiento.
En este caso vamos a emplear un LCD de 16x2, esto quiere decir que dispone de 2 filas
de 16 caracteres cada una. Los pxeles de cada smbolo o carcter, varan en funcin
de cada modelo.

Cmo es su conexionado?

En la siguiente imagen de Proteus se puede observar la estructura de sus pines.


Lo podemos dividir en los Pines de alimentacin, pines de control y los pines del bus
de datos bidireccional. Por lo general podemos encontrar adems en su estructura los
pines de nodo de led backlight y ctodo de led backlight.

Pines de alimentacin:

Vss: Gnd
Vdd: +5 voltios
Vee: corresponde al pin de contraste, lo regularemos con un
potencimetro de 10K conectado a Vdd.

Pines de control:
RS: Corresponde al pin de seleccin de registro de control de datos (0) o registro
de datos(1). Es decir el pin RS funciona paralelamente a los pines del bus de
datos. Cuando RS es 0 el dato presente en el bus pertenece a un registro de
control/instruccin. y cuando RS es 1 el dato presente en el bus de datos
pertenece
a
un
registro
de
datos
o
un carcter.
RW: Corresponde al pin de Escritura(0) o de Lectura(1). Nos permite escribir un
dato en la pantalla o leer un dato desde la pantalla.
E: Corresponde al pin Enable o de habilitacin. Si E(0) esto quiere decir que el
LCD no esta activado para recibir datos, pero si E(1) se encuentra activo y
podemos escribir o leer desde el LCD.
Pines de Bus de datos:
El Bus de datos bidireccional comprende desde los pines D0 a D7. Para realizar
la comunicacin con el LCD podemos hacerlo utilizando los 8 bits del bus de
datos(D0 a D7) o empleando los 4 bits mas significativos del bus de datos(D4 a
D7). En este caso vamos a explicar la comunicacin con el bus de 4 bits.
DDRAM y CGROM
Son las dos zonas de memoria del LCD.
La memoria DDRAM(Data Display Ram): corresponde a una zona de memoria
donde se almacenan los caracteres que se van a representar en pantalla. Es
decir es la memoria donde se almacenan los caracteres a mostrar con su
correspondiente posicin.
La memoria CGROM es una memoria interna donde se almacena una tabla con
los caracteres que podemos visualizar en el lcd. En la imagen podemos ver un
ejemplo de la tabla con un contenido de 192 caracteres.

Funcionamiento:

Instrucciones

Descripcin de los pines:

Cdigos

Cdigo para desplazar a la derecha

Cursor display shift

Cdigo para desplazar a la izquierda

Cursor display shift

Cursor para desplazar a la derecha

Cursor display shift

Limpiar

Clear display

Salto de lnea

Set dd ram

Cursor para desplazar a la izquierda

Cursor display shift

3.4. Teclado Matricial


Son los ms utilizados en el desarrollo de proyectos con microcontroladores
PIC y que tienen su aplicacin en el ingreso de datos de manera manual por
parte del usuario, en aquellos casos en que el empleo de pulsadores simples
no es lo ms apropiado, ya sea por la presentacin final del producto o por la
restriccin del nmero de lneas de entrada de los microcontroladores PIC.
El teclado matricial 4x4 est constituido por una matriz de pulsadores
dispuestos en filas (A,B,C,D) y columnas (1,2,3,4), con la intencin de reducir
el nmero de pines necesarios para su conexin. Las 16 teclas necesitan slo
8 pines del microcontrolador, en lugar de los 16 pines que se requeriran para
la conexin de 16 teclas independientes.

Su funcionamiento es muy sencillo, cuando se presiona una tecla, se conectan


internamente la fila y columna correspondientes; por ejemplo, al presionar la
tecla 7 se conectan la fila C y la columna 1. Si no hay ninguna tecla
presionada, las filas estn desconectadas de las columnas.
Un teclado matricial es un simple arreglo de botones conectados en filas y
columnas, de modo que se pueden leer varios botones con el mnimo nmero
de pines requeridos. Un teclado matricial 4x4 solamente ocupa 4 lneas de un
puerto para las filas y otras 4 lneas para las columnas, de este modo se
pueden leer 16 teclas utilizando solamente 8 lneas de un microcontrolador. Si
asumimos que todas las columnas y filas inicialmente estn en alto (1 lgico),
la pulsacin de un botn se puede detectar al poner cada fila a en bajo (0
lgico) y checar cada columna en busca de un cero, si ninguna columna est
en bajo entonces el 0 de las filas se recorre hacia la siguiente y as
secuencialmente.
4. Diagrama de Bloques:
4

Puerto B

PIC 16F628
(Decodificado
r)

ENTRADAS
6
(Teclado )

Puerto A

Puerto C
B

Puerto

PIC 16F877A
(Cronmetro)

SALIDAS
(LCD)

5. Tabla de Asociacin de Recursos:


Oscilador 4MHz
te
Descripcin
m
Configuracin de Puerto B como
1
salida
Configuracin del Puerto C como
2
entrada
Interrupcin del Timer 0 y inte
3
(Rb0)
Registro de Configuracin
4
Prescalar timer0
5
Registro timer 0
6
Configuracin de la variable seg
Configuracin de la variable
7
seg1
Configuracin de la variable
8
min1
Configuracin de la variable
9
hor1
Configuracin de la variable
10
bandera
Configuracin de la variable
11
binario_a
Configuracin de la variable
12
decena
Configuracin de la variable
13
unidad
Configuracin de la variable
14
dece
15
Configuracin de la variable unid
Configuracin de la variable
16
tecla
17
Configuracin de la variable unit

Oscilador
Smbolo

Valor

Accin

TRIS B

00H

Configuracin

TRIS C

FFH

Configuracin

INTCON

30H

Configuracin

OPTION_REG

C5H

Configuracin

TMR0
EQU SEG

.100
30H

Configuracin
Configuracin

EQU SEG1

31H

Configuracin

EQU MIN1

32H

Configuracin

EQU HOR1

33H

Configuracin

45H

Configuracin

48H

Configuracin

EQU Decena

4CH

Configuracin

EQU Unidad

4DH

Configuracin

EQU DECE

4EH

Configuracin

EQU UNID

4FH

Configuracin

EQU tecla

50H

Configuracin

EQU unit

51H

Configuracin

EQU
BANDERA
EQU
Binario_a

6. Registros de Configuracin:
Registro
TRISB
TRISC
OPTION_REG
INTCON
7. Diagrama de Flujo:

Valor
00H
FFH
C5H
30H

8. Clculo del retardo


Para esto se tiene que generar una interrupcin cada 10ms, para esto se utiliza un pre
escalar de 64, se carga en el TRM0 100 y el ciclo de instruccin tarda 1us lo que da un

tiempo de 9.984ms, lo que da un error de los 10ms estimados de 0.16%, este tiempo
compensaremos con el tiempo que se demora en ejecutar la instruccin.
Antes de completar las 99 cuentas necesarias para llegar al segundo la interrupcin
tarda 9us lo que da un tiempo de 0,989604 de segundo, pero en el salto de la cuenta
100 la interrupcin tarda 0,010004, lo que da un tiempo de 0,999608 lo que da un
error de 0,0392% en cada segundo y para disminuir este error este se compensa
cuando se cumple un minuto dando un error total de 0,0385%
CODIGO INTERRUPCION TMR0
TIMER_0
BCF INTCON, TMR0IF
INCF SEG, 1
MOVF SEG, 0
SUBLW .100
BTFSC STATUS, Z
GOTO INC_TI
GOTO OUT_TO
INC_TI
MOVLW 0X00
MOVWF SEG
INCF SEG1, 1
MOVF SEG1, 0
SUBLW .60
BTFSS STATUS, Z
GOTO OUT_TO
MOVLW 0X00
MOVWF SEG1
INCF MIN1, 1
MOVF MIN1, 0
SUBLW .60
BTFSS STATUS, Z
GOTO OUT_TO
MOVLW 0X00
MOVWF MIN1
INCF HOR1, 1
OUT_TO
MOVLW .100
MOVWF TMR0
RETFIE

2
1
1
1
1,2
2

2
1
1
1

1
1,2
2
1
1
1
1
1
1,2
1
1
1

1
1
2

9. Programa:

LIST
P=16F877A;TIPO
PROCESADOR

DE

INCLUDE
"P16F877A.INC"; LIBRERIAS DEL
REGISTRO DEL PIC

__CONFIG(0X3F71);GRABAR
DESDE EL PROGRAMA DEL PICKIT

;__________________________DEFINO
CONSTANTES_______________________
_____________

UnidadMil

EQU 0X4A

Centena

EQU 0X4B

Decena

EQU 0X4C

UnidadEQU 0X4D
RTR1

EQU 0X47

DECE EQU 0X4E

RTR2

EQU 0X48

UNID EQU 0X4F

EQU 0X20

TECLA EQU 0X50

EQU 0X21

INITE EQU 0X51

CONT1

EQU 0X22

ORG

CONT2

EQU 0X23

GOTO CONFIGURACION

DATO_LCD

EQU 0X27

LCD_RS

EQU 2

LCD_E

EQU 3

00H

ORG 0X04

;____INTERRUPCIONES
BTFSC INTCON, INTF

SEG EQU 0X30


GOTO P_TECLA
SEG1 EQU 0X31
BTFSC INTCON, TMR0IF

MIN1 EQU 0X32

GOTO TIMER_0
HOR1 EQU 0X33
RETFIE
P_TECLA
BANDERA

EQU 0X45

ACUMULADOR

EQU 0X46

Binario_b EQU 0X47


Binario_a

BCF INTCON, INTF

CALL RETRASO1

EQU 0X48
MOVLW 0x00

DecenaMil

EQU 0X49

MOVWF

INITE

SWAPF PORTB, 0

GOTO C_TECLA

ANDLW 0X0F

BCF INTCON, TMR0IE

MOVWF TECLA

GOTO F_TECLA

SUBLW 0x0F

C_TECLA

BTFSS STATUS, Z

MOVF TECLA, 0

GOTO S_TECLA

SUBLW 0x03

MOVLW 0XFF

BTFSS STATUS, Z

MOVWF INITE

GOTO F_TECLA

GOTO F_TECLA

BSF INTCON, TMR0IE


MOVLW .100

S_TECLA

MOVWF TMR0

MOVF TECLA, 0

GOTO F_TECLA

SUBLW 0x01
BTFSS STATUS, Z

F_TECLA

GOTO T_TECLA
MOVLW 0X00

RETFIE

MOVWF

SEG

MOVWF

SEG1

TIMER_0

MOVWF

MIN1

BCF INTCON, TMR0IF

MOVWF

HOR1

INCF SEG, 1

GOTO F_TECLA

MOVF SEG, 0

T_TECLA

SUBLW .100

MOVF TECLA, 0

BTFSC STATUS, Z

SUBLW 0x02

GOTO INC_TI

BTFSS STATUS, Z

GOTO OUT_TO

INC_TI
MOVLW 0X00

RETFIE

MOVWF SEG

;
__________CONFIGURACIN__________
_

INCF SEG1, 1

CONFIGURACION

MOVF SEG1, 0
SUBLW .60
BTFSS STATUS, Z
GOTO OUT_TO

CLRF

STATUS

BCF
STATUS,RP1
AL BANCO 0

BSF
STATUS,RP0
;SALTO AL BANCO 1
MOVLW

CALL LIMPIAR_LCDR

;REGRESO

0XFF

;ENTRADA

MOVWF
TRISB
;PUERTO C TECLADO

MOVLW 0X00
MOVWF SEG1
INCF MIN1, 1
MOVF MIN1, 0
SUBLW .60

MOVLW
;SALIDA

0X00

MOVWF
TRISC
;PUERTO B CONTROL Y DATOS
LCD

BTFSS STATUS, Z
GOTO OUT_TO

MOVLW 0X00

MOVLW
;SALIDA

0X00

MOVWF
TRISD
;PUERTO B CONTROL Y DATOS
LCD

MOVWF MIN1
INCF HOR1, 1

;MOVLW 0X8E

;b'10000000'

;MOVWF ADCON1
OUT_TO
MOVLW .100
MOVWF TMR0

;BCF

OPTION_REG,7 ;PULL UP

MOVLW
b'11000101'
;ASIGNACION PRESCALA 101 = 64

MOVWF OPTION_REG

MOVLW

MOVLW b'00110000'

CALL

MOVWF INTCON

MOVLW
CALL

ENVIARDATO_LCD

;REGRESO

BCF
STATUS,RP1
AL BANCO 0

;REGRESO

CALL

;MOVLW 0X01 ;b'00000101'

CALL

;MOVWF ADCON0

MOVLW
CALL

PORTC

CLRF

PORTB

CALL

CALL LIMPIAR_LCDR
;LIMPIAMOS EL LCD
;ESCRIBIMOS EN EL LCD
MOVLW

20H

CALL UBICAR_LCD
;UBICAMOS EL CURSOR
MOVLW
CALL

ENVIARDATO_LCD

MOVLW
CALL

''

''

ENVIARDATO_LCD

CALL

'O'

ENVIARDATO_LCD
''

ENVIARDATO_LCD

MOVLW
CALL

'R'

ENVIARDATO_LCD

MOVLW
CALL

'T'

ENVIARDATO_LCD

MOVLW
CALL

'E'

ENVIARDATO_LCD

MOVLW
CALL

'M'

ENVIARDATO_LCD

MOVLW

CALL INICIAR_LCD
;CONFIGURA EL LCD

'O'

ENVIARDATO_LCD

MOVLW
CLRF

'N'

ENVIARDATO_LCD

MOVLW

BCF
INTCON,T0IF
;CONTROL
DE TIMER0 DESBORDAMIENTO

'O'

ENVIARDATO_LCD

MOVLW
CALL

'R'

ENVIARDATO_LCD

MOVLW
BCF
STATUS,RP0
AL BANCO 0

'C'

'='

ENVIARDATO_LCD

MOVLW

')'

CALL

ENVIARDATO_LCD

MOVLW
CALL

;UBICAMOS
CONTADOR

PARA

IMPRIMIR

ENVIARDATO_LCD

MOVLW
CALL

CALL

INICIO

':' ;W=20

ENVIARDATO_LCD

MOVLW

____________MAIN___________________
_

'0' ;W=20

'0' ;W=20

ENVIARDATO_LCD

MOVLW
MOVLW 0x00

CALL

MOVWF Binario_b

MOVLW

MOVLW 0x00

CALL

MOVWF Binario_a

MOVLW

MOVLW 0x00

CALL

MOVWF SEG

MOVLW

MOVLW 0x00

CALL

'0' ;W=20

ENVIARDATO_LCD
'-' ;W=20

ENVIARDATO_LCD
'0' ;W=20

ENVIARDATO_LCD
'0' ;W=20

ENVIARDATO_LCD

MOVWF SEG1
MOVLW 0x00

MOVLW 0X00

MOVWF MIN1

MOVWF INITE

MOVLW 0x00
MOVWF HOR1

MOVLW b'10110000'
MOVWF INTCON

MOVLW
CALL

UBICAR_LCD

MOVLW
CALL

14H

'0' ;W=20

ENVIARDATO_LCD

INITE2

MOVF INITE, 0
SUBLW 0XFF
BTFSS STATUS, Z
GOTO INITE2

CALL

ENVIARDATO_LCD

MOVLW
MOVLW 0X00

CALL

MOVWF

SEG

MOVLW

MOVWF

SEG1

CALL

MOVWF

MIN1

MOVLW

MOVWF

HOR1

CALL

ENVIARDATO_LCD

MOVWF TMR0

CALL

MOVLW

20H

CALL UBICAR_LCD
;UBICAMOS EL CURSOR
MOVLW

''

''

CALL

ENVIARDATO_LCD

MOVLW

'C'

CALL

ENVIARDATO_LCD

MOVLW

''

ENVIARDATO_LCD

MOVLW
CALL

')'

ENVIARDATO_LCD

MOVLW
CALL

'='

ENVIARDATO_LCD

MOVLW
CALL

''

ENVIARDATO_LCD

MOVLW
CALL

'O'

ENVIARDATO_LCD

MOVLW
CALL

'R'

ENVIARDATO_LCD

MOVLW
CALL

'T'

ENVIARDATO_LCD

MOVLW

;ESCRIBIMOS EN EL LCD

'E'

ENVIARDATO_LCD

MOVLW

CALL

'M'

ENVIARDATO_LCD

MOVLW

CICLO

'O'

ENVIARDATO_LCD

MOVLW .100

CALL

'N'

'R'

CALL

ENVIARDATO_LCD

ENVIARDATO_LCD

MOVLW

'O'

MOVLW

14H

CALL

UBICAR_LCD

CALL

ENVIARDATO_LCD

MOVF HOR1, 0
MOVWF Binario_a

;MOVLW

CALL BINBCD

;CALL UBICAR_LCD

MOVLW '0'

MOVF SEG1, 0

ADDWF DECE, 0

MOVWF Binario_a

CALL

CALL BINBCD

ENVIARDATO_LCD

20H

MOVLW '0'

MOVLW '0'

ADDWF UNID, 0

ADDWF DECE, 0

CALL

CALL

ENVIARDATO_LCD

ENVIARDATO_LCD

MOVLW ':'

MOVLW '0'

CALL

ADDWF UNID, 0

ENVIARDATO_LCD

CALL
;MOVLW

ENVIARDATO_LCD

17H

;CALL UBICAR_LCD

MOVLW

MOVF MIN1, 0

CALL

MOVWF Binario_a

MOVLW

CALL BINBCD

CALL

MOVLW '0'

MOVLW

ADDWF DECE, 0

CALL

CALL

MOVLW

ENVIARDATO_LCD

MOVLW '0'
ADDWF UNID, 0
CALL

ENVIARDATO_LCD

MOVLW '-'

CALL

''

ENVIARDATO_LCD
''

ENVIARDATO_LCD
''

ENVIARDATO_LCD
'|'

ENVIARDATO_LCD

GOTO CICLO
;
____________TIMER0_________________
_

GOTO RAT3
SI NO ES CERO
EXTERNO

REPITE

;(2)
CICLO

RETURN
;(2) REGRESA
DE ESTA SUBRUTINA

;RETARDO
RETRASO
;EL RETRASO
TIENE UNA DEMORA DE 40us

;_____________LCD__________________

MOVLW .4 ;AQUI VA.5 ;255


;RUTINA PARA INICIALIZAR EL LCD

MOVWF RTR1

INICIAR_LCD
RAT1:

MOVLW .10
BSF
PORTC,LCD_E
;SE ACTIVA EL ENABLE DE LA
LCD

MOVWF RTR2
RAT2:

DECFSZ RTR2,1

CALL

RETRASO

GOTO RAT2
MOVLW
DECFSZ RTR1,1
GOTO RAT1
SI NO ES CERO
EXTERNO

CALL
REPITE

;(2)
CICLO

ENVIARSET_LCD

MOVLW
CALL

02H

28H;

ENVIARSET_LCD

RETURN

RETRASO1
;EL
RETRASO TIENE UNA DEMORA DE
40us
MOVLW .254 ;AQUI VA.5 ;255

MOVLW
06H
;PARA
CONFIGURAR QUE DISPLAY NO SE
DESPLAZA
Y
EL
CURSOS
INCREMENTA
CALL

ENVIARSET_LCD

MOVWF RTR1
RAT3:

MOVLW .254
MOVWF RTR2

RAT4:

DECFSZ RTR2,1
GOTO RAT4
DECFSZ RTR1,1

MOVLW
CURSOR 0EH

0CH
;PARA

CALL ENVIARSET_LCD
;PARA
ENCENDER
LA
PANTALLA,
ACTIVAR
CURSOR,PARPADEE EL CARACTER
CALL

LIMPIAR_LCDR

RETURN

;MANEJO CON LA PARTE ALTA DE


DATO

;LIMPIAR LCD

MOVLW

0FH

LIMPIAR_LCDR
MOVLW

ANDWF PORTC ,1
PARTE ALTA

01H

CALL

ENVIARSET_LCD

MOVF

CALL

RETRASO

ANDLW .240

CALL

;ENVIAR UN DATO

RETRASO

BSF
PORTC,LCD_E
PARA VALIDAR INGRESO

ENVIARDATO_LCD
PORTC,LCD_RS

CALL

DATO_LCD,0

IORWF PORTC,1

RETURN

BSF

;FILTRANDO

LCD_ENVIA_BYTE

RETURN

CALL

RETRASO

BCF

PORTC,LCD_E

CALL

RETRASO

;E=1

;E=0

;ENVIAR UNA INSTRUCCION


;MANEJO CON LA PARTE BAJA DE
DATO

ENVIARSET_LCD
BCF
PORTC,LCD_RS
RS=0 MODO INSTRUCCION
CALL

MOVLW

0FH

ANDWF PORTC,1

LCD_ENVIA_BYTE

SWAPF DATO_LCD,W

RETURN

ANDLW 0F0H
;SUBRUTINA
BYTES

PARA

ENVIAR

LOS

IORWF PORTC,1
CALL

RETRASO

LCD_ENVIA_BYTE
BSF
PORTC,LCD_E
PARA VALIDAR INGRESO
MOVWF

DATO_LCD

CALL

RETRASO

BCF
;E=0

PORTC,LCD_E

;E=1

CALL

RETRASO

movwf

UnidadMil

addwf UnidadMil,f
RETURN

addlw 0xE2

;UBICAR CURSOR

movwf

UBICAR_LCD

addlw 0x32

MOVWF
DATO_LCD+0
;DATO_LCD=W

movwf

MOVLW

movf
80H

MOVWF
DATO_LCD+1

0FH

IORWF
DATO_LCD+1,F
BTFSC DATO_LCD+0,4
BSF
DATO_LCD+1,6
MOVF DATO_LCD+1,W
CALL

Unidad
Binario_b,w

andlw 0x0F
addwf Centena,f

MOVF DATO_LCD+0,W
ANDLW

Centena

ENVIARSET_LCD

addwf Centena,f
addwf Unidad,f
addlw 0xE9
movwf

Decena

addwf Decena,f
addwf Decena,f
swapf Binario_a,w
andlw 0x0F
addwf Decena,f

RETURN

BINBCD:
;Rutina
swapf Binario_b,w
andlw 0x0F
addlw 0xF0

addwf Unidad,f
rlf

Decena,f

rlf

Unidad,f

comf

Unidad,f

rlf

Unidad,f

movf

Binario_a,w

andlw 0x0F

addwf Unidad,f

decf

UnidadMil,f

rlf

btfss

STATUS,C

goto

Lb3

UnidadMil,f

movlw

0x07

movwf

DecenaMil

movlw

0x0A

Lb1

Lb4
addwf UnidadMil,f
decf

DecenaMil,f

addwf Unidad,f

btfss

STATUS,C

decf

Decena,f

goto

Lb4

btfss

STATUS,C

goto

Lb1

Lb2

MOVF Unidad, 0
MOVWF UNID

addwf Decena,f

MOVF Decena, 0

decf

Centena,f

MOVWF DECE

btfss

STATUS,C

goto

Lb2

Lb3
addwf Centena,f

RETURN

END

10.Diagrama Electrnico:

OSCILADOR

MICROCONTROLADOR

C3

U1
13
14

22pF
2
3
4
5
6
7

X2
CRYSTAL

C4

8
9
10

22pF

RESET
RV2(2)

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

RV2
100%

RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7

1k

33
34
35
36
37
38
39
40

RC4
RC5
RC6
RC7
RC0
RC1
RC2
RC3

R9
RC7
1k

R10
RC6
1k

R11
RC5

15
16
17
18
23
24
25
26

1k
RS
E
D4
D5
D6
D7

19
20
21
22
27
28
29
30

PIC16F877A

R28(1)

RC0

RC1

RC2

RC3

RC4

R19(2)

R28

R19

R20

R21

R22

10k

10k

10k

10k

220

R23 R24 R25 R26 R27


100

330R

330R

330R

330R

C2
D17 D13 D14 D15 D16

X1

LED-BLUE
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN

22p

ON
C

D9

22p

C1

CRYSTAL

U2
16
15
4

DIODE

RA7/OSC1/CLKIN
RA6/OSC2/CLKOUT
RA5/MCLR

R18

RA0/AN0
RA1/AN1
RA2/AN2/VREF
RA3/AN3/CMP1
RA4/T0CKI/CMP2

RB0/INT
RB1/RX/DT
RB2/TX/CK
RB3/CCP1
RB4
RB5
RB6/T1OSO/T1CKI
RB7/T1OSI

1k

R18(1)
PIC16F627A

17
18
1
2
3
6
7
8
9
10
11
12
13

RC0
RC1
RC2
RC3
RC4

D10

DIODE

D11

DIODE

D12

DIODE

CIRCUITO RESET
LCD1
LM016L

Salidas
D0
D1
D2
D3
D4
D5
D6
D7
7
8
9
10
11
12
13
14

RS
RW
E
4
5
6

1
2
3

VSS
VDD
VEE

VCC

RV1

R1
10k

RS

86%

D4
D5
D6
D7

RESET

RV1(1)
1k

11.Conclusiones

La prctica realizada nos ayud a entender de mejor forma la sistematizacin


del esquema electrnico de un microprocesador, as mismo nos ayud a
entender la estructura de la programacin que se necesita para ejecutar la
operacin solicitada en la prctica.

Para la implementacin del retardo es necesario realizar ciclos anidados entre


s, lo que facilita la obtencin del retardo del tiempo propuesto.

Para establecer el diseo del sistema es necesario entender en forma correcta


los requerimientos dados en el problema, para esto se debe estructurar un
diagrama de flujo que nos facilite la configuracin y programacin en MPLAB.

La prctica realizada nos ayud a entender de mejor forma la sistematizacin


del esquema electrnico de un microprocesador, as mismo nos ayud a
entender la estructura de la programacin que se necesita para ejecutar la
operacin solicitada en la prctica.

Para la implementacin del retardo es necesario realizar ciclos anidados entre


s, lo que facilita la obtencin del retardo del tiempo propuesto.

El uso de LCD implica una configuracin especifica tomando en cuenta el uso


al que se va a destinar, esto nos permite optimizar recursos.

El microprocesador Pic16F877A tiene 14 interrupciones, y el contador de


programa en la pila se carga con el valor 0004h, que es el Vector de
Interrupcin.

El registro INTCON es un registro legible y escribible que contiene las llaves


para habilitar las fuentes de interrupcin. Si el GIE no est habilitado la
interrupcin no se provocar. El bit GIE habilita/deshabilita simultneamente
las interrupciones no enmascaradas.

Cabe destacar que los bits de cada bandera no se ponen a cero


automticamente, sino por el software, mientras que la ejecucin de la rutina

de interrupcin contina ejecutndose. Si no hacemos caso a este detalle,


ocurrir otra interrupcin inmediatamente despus de volver al programa
principal, aunque no hay ms peticiones de ejecucin.
Bibliografa:
Cuaderno de Microprocesadores.
Introduction to microcontrollers, Gunther Gridling, Bettina Weiss, 26 de febrero
de 2007.
The art of Assembly Language Programming.
http://www.circuitoselectronicos.org/2011/02/retardos-por-software-en-los.html

Das könnte Ihnen auch gefallen