Anda di halaman 1dari 11

Implementacion de un cronometro con

alarma utilizando lenguajes MikroC y


Ensamblador
Escuela de Electrnica y Telecomunicaciones, Facultad de Ingeniera,
Universidad Nacional de Chimborazo,
Riobamba, Ecuador.
Samaniego Tello Ral Arturo
rast20@hotmail.com

Resumen: En el siguiente informe se describre el uso de


temporizadores especficamente el TMR0 para crear un
cronometro, el cual cuente con con 3 botones, mismos que
tienen las funciones de inicio, pausa y alarma
respectivamente.

I.

INTRODUCCIN:

El Timer0 es un temporizador/contador ascendente


de 8 bits, cuando trabaja con el reloj del PIC se le
suele llama temporizador y cundo los pulsos los
recibe de una fuente externa a travs de la patilla
RA4/TOCKI se le llama contador, pero digamos
que es el mismo perro con dos collares diferentes.
Para no liarnos con las patillas y el nombre de los
registros voy a mostrar los registros y patillas
implicadas solo en el TMR0 utilizando el
PIC16f84, aunque podra ser otro cualquiera ya
que este temporizador viene incorporado en todos
los PIC.

RA4/TOCKI: cuando el temporizador trabaje


como contador, los pulsos externos los recibir a
travs
de
esta
patilla.
OSC1/CLKIN y OSC2/CLKOUT: son para
conectar el oscilador que nos determinar a la
frecuencia que va a trabajar nuestro PIC, los dos
tipos de osciladores ms usados son el XT (cristal
de cuarzo) y el RC (resistencia y condensador).
Nota: cuando las patillas traen ms de una funcin
separadas por la barra del siete quiere decir que
segn la configuracin de los registros SFR que se
muestran ms abajo se utilizarn de una manera o
de otra.
Banco de registros especficos (SFR) del PIC
16f84A:

Patillaje:

Como podemos ver solo estn marcados de un


color diferente los que estn implicados en el

funcionamiento del TMR0, vamos a ver la funcin


que tienen:
TMR0: es un registro del que podemos leer el
valor del contador en tiempo real, pero tambin
podemos escribir en l y alterar el valor de conteo.
OPTION: los bits que estn en color verde son los
que estn implicados en la configuracin del
TIMER0

PS0, PS1 y PS2: Configuracin del


preescaler. El preescaler es un divisor de
pulsos que est a la entrada del Timercontador. El prescaler divide el nmero de
pulsos que le entran al timer-contador o al
Wachtdog. El factor de divisin es el
siguiente (segn los valores de PS2, PS1 y
PS0 respectivamente

PSA: Bit de asignacin de prescaler. Si


est a "1" el prescaler se asigna a WDT
(Wachtdog), si est a "0" se asigna al
TMR0.
TOSE: Bit de seleccin del tipo de
flanco para el TMR0. A "1" se incrementa
TMR0 por flanco descendente de RA4, a
"0" se incrementa TMR0 por flanco
ascendente de RA4.
TOCS: Selecciona la entrada de reloj
de TMR0. A "1" la entrada de reloj de
TMR0 es por flanco de la patilla RA4, a
"0" la entrada de reloj de TMR0 es por
ciclo de reloj interno.

Pero el PIC tambin permite que se produzca una


interrupcin por desbordamiento del TMR0.
Cuando se produce una interrupcin el programa
abandona temporalmente lo que estaba haciendo

para atender la subrutina de interrupcin, pero


antes guarda en una regin especial de la memoria
llamada pila la direccin de la siguiente
instruccin de programa, para que cuando acabe la
subrutina de interrupcin pueda seguir ejecutando
el programa por donde se haba quedado.
El registro que configura todas las interrupciones
es el INTCON, como veis est mapeado en los dos
bancos, una cosa muy til cuando se trabaja en
ensamblador para no tener que cambiar de banco
constantemente para su configuracin, pero que en
C no es necesario saber ya que es el compilador el
que se encarga de gestionar esto de una manera
transparente para el programador.
Pues bien vamos a ver lo que significa cada uno de
los bits que estn implicados en la interrupcin por
el TMR0:

TOIF: solo se puede leer su valor, es


un Flag o bandera que se pone a 1 cuando
se produce un desbordamiento del TMR0,
(este o no este configurado para producir
una interrupcin). Cuando se trabaja en
Ensamblador, este bit hay que ponerlo a "0"
por programa, con CCS no tenemos que
preocuparnos por ello. (je, je,.. otra cosa
que nos ahorramos)

TOIE (Habilita la interrupcin por


desbordamiento de TMR0). Si este bit esta
a "1" la interrupcin por desbordamiento de
TMR0 es posible.

GIE (Habilita las interrupciones


globalmente). Este bit permite que
cualquier interrupcin sea posible. Para
poder usar cualquier interrupcin hay que
habilitarla globalmente e individualmente.
Bueno como veis hay varias variables que
podemos utilizar a nuestro antojo para utilizar este
recurso del PIC, la frmula que las relaciona es la
siguiente:

Y para ver como funciona todo esto con el


compilador CCS vamos hacer el siguiente
ejemplo:
Se trata de usar el Timer0 para generar una
interrupcin cada 32 ms utilizando el reloj interno
del microcontrolador. La funcin de interrupcin

se utilizar para hacer parpadear un Led en la


patilla RB7 del PIC.
Para ello vamos a utilizar en el circuito un cristal
de cuarzo de 4 MHz.
Si nos fijamos en la formula anterior tenemos
Interrupt_TMR0= 32 ms que es el valor que nos
da el ejemplo, tambin tenemos F.Oscilador = 4
MHz y nos quedan dos valores para tener resueltas
todas las variables de la ecuacin el valor TMR0
que ya hemos dicho que se puede sobrescribir su
valor en cualquier momento durante la ejecucin
del programa y el Prescaler, pues le damos el valor
que queramos al Prescaler por ejemplo 256 y
calculamos en la frmula el valor que tenemos que
escribir en el registro TMR0 para obtener los 32
ms:

II. OBJETIVOS
Objetivo General:
Disear e implementar un cronometro
utilizando la interrupcin tmr0.
Objetivos Especficos:

Implementar el contador
utilizando lenguaje C.

timer

Implementar el contador timer


utilizando lenguaje ensamblador.

Hacer la implementacin fsica y


demostracin del funcionamiento del
programa.

III.

fuente de reloj interno como la mayora de la otra ms


moderna PIC. Hay una parte 16F887 / Una alternativa que
tiene casi la misma funcionalidad que el 16F887A pero
tambin incluye un reloj interno como el 16F88 y 18F4550

adems de que tiene la tecnologa nanovatio.


MIKROC

Figura 3. Programacin de un Pic en MikroC


Este lenguaje es muy similar al C estndar, no obstante en
determinados aspectos difiere del ANSI estndar en algunas
caractersticas. Algunas de estas diferencias se refieren a las
mejoras, destinadas a facilitar la programacin de los
microcontroladores PIC, mientras que las dems son la
consecuencia de la limitacin de la arquitectura del hardware
de los PIC. Aqu vamos a presentar caractersticas especficas
del lenguaje mikroC en la programacin de los
microcontroladores PIC. El trmino C se utilizar para
referirse a las caractersticas comunes de los lenguajes C y
mikroC.

GLCD

MARCO TERICO

PIC 16F877A

Una pantalla grfica de cristal lquido o GLCD (acrnimo


Figura 2. Imagen Microcontrolador 16F877A

del ingls Graphic Liquid Crystal Display) es una pantalla


plana formada

El 16F877A es uno de los microcontroladores PIC ms


populares y es fcil ver por qu - se trata de una DIP pinout
de 40 pines y tiene muchos perifricos internos. La nica
desventaja que podra nivelar en ella es que no tiene una

por

una

matriz

de pxeles monocromos

colocados delante de una fuente de luz o reflectora. A menudo


se utiliza en dispositivos electrnicos de pilas, ya que utiliza
cantidades muy pequeas de energa elctrica, hay versiones

de pantallas con diferentes controladores embebidos, como el

Diagrama de bloques:

Samsung KS0107, Samsung KS0108 o el Toshiba T6963.

c).Simulacin
Paraverificar
quenuestro
programaest
funcionando
correctamente
losimulamos
enProteus.

Dispone de una memoria RAM interna del mismo tamao de


la capacidad que dispone la pantalla, por ejemplo si una
pantalla tiene un tamao de 128 pixeles de largo por 64
pixeles de alto (128x64) tiene una memoria RAM interna de
la misma capacidad (128x64).
Por lo general son manejados por microcontroladores para la

a).-Diseo

del
algoritmo y
modificacion
de
la
imagenes

configuracin y utilizacin de la misma.

Caractersticas nformado por una matriz de puntos


de visualizacin de 128 pixeles de largo por 64 pixeles
de alto.

Fcil manejo con microprocesadores de 8-Bits.

Bajo consumo.

Contiene dos controladores internos un KS0108B y

b).-Desarrollo
del codigoen
el idede
mikroc

KS0107B.

IV.

Figura 5. Diagrama de Bloque Metodolgico

METODOLOGA

PROGRAMACIN
Lenguaje MikroC
unsigned cnt;
int seg;
int minu;
int mind;
int inicio;
int pausa;
int alarma;
int tempu;
int tempd;

int alarmu;

int alarmd;

if (alarma==1){

void interrupt() {

alarma=0;

if (TMR0IF_bit) {
cnt++;

while (alarma==0){
// increment counter

TMR0IF_bit = 0;

if ( PORTB.B1 == 1){

// clear TMR0IF

minu++;

TMR0 = 96;

Delay_ms(200);
}

if ( PORTB.B2 == 1){

alarma=1;
}

void main() {

if (minu>=10){

seg=0;

mind++;

minu=0;

minu=0;

mind=0;

OPTION_REG = 0x84;
TRISB = 00000111;
TRISD = 0;

// PORTB is output
// PORTB is output

PORTD = 0xFF;

// Initialize PORTB

TRISC = 0;

// PORTB is output

PORTC = 0xFF;

// Initialize PORTB

TMR0 = 96;

// Timer0 initial value

INTCON = 0xA0;
cnt = 0;

// Assign prescaler to TMR0

// Enable TMRO interrupt

// Initialize cnt

if (mind>=6){
minu=0;
mind=0;
}
PORTD=minu;
PORTC=mind;
}
alarmu=minu;
alarmd=mind;

PORTD=minu;

minu=0;

PORTC=mind;

mind=0;

while(1){

PORTD=0;

if ( PORTB.B2 == 1){

PORTC=0;

alarma=1;

alarma=0;

Delay_ms(500);

Delay_ms(500);

if ( PORTB.B0 == 1){

Delay_ms(500);

inicio=1;

PORTD=minu;

if (inicio==1) {

PORTC=mind;

do {

pausa=0;

if (cnt >= 400) {

seg++;
cnt = 0;

if (cnt>200){
// Reset cnt

RB4_bit=1;

if ( PORTB.B1 == 1){

if (cnt<200){

pausa=1;

RB4_bit=0;

if (pausa ==1){

if (seg>=5){

RB6_bit=1;

minu++;

pausa=0;

seg=0;

Delay_ms(200);

tempu=minu;

if (minu>=10){

tempd=mind;

mind++;

while(pausa==0){

minu=0;

PORTD=minu;

PORTC=mind;

if (mind>=6){

if ( PORTB.B1 == 1){

minu=0;

pausa=1;

mind=0;

Delay_ms(500);

PORTD=minu;

PORTD=15;

PORTC=mind;

PORTC=15;

} while(1);

if ( PORTB.B1 == 1){

pausa=1;

goto INICIO
Lenguaje Ensambrador

org 05h

list p=16f877a
#include <p16f877a.inc>

INICIO

__CONFIG h'3FBA'

clrf inicia

;Variables para el DELAY

clrf pause

#define Led PORTB, 4

BSF STATUS,RP0

;Ir banco 1

#define Ledp PORTB, 6

BCF STATUS,RP1

valor1 equ h'21'

CLRF TRISA

inicia equ h'22'

MOVLW b'11000111'
TMR0

;PORTA salida
;Configuracin del modulo

pause equ h'23'


MOVWF OPTION_REG ;Preescaler = 128
tempd equ h'24'
clrf PORTB ;Limpia los posibles valores actuales de
PORTB

tempu equ h'25'


CONTA EQU 0x20
CONTA en direccin 0x20 hexadecimal

;Variable

movlw 0x0F ;Entradas y Salidas para PORTB


movwf TRISB ;Configura TRISB <- W
clrf PORTD

CERO

EQU

0x00 ;0
clrf PORTC

UNO

EQU

;Limpia puertos B y D

0x01 ;1
bsf STATUS,RP0

DOS

EQU

0x02 ;2

TRES

EQU

0x03 ;3

bcf STATUS,RP1 ;Cambio al Banco 1


movlw h'0'
CUATRO EQU
CINCO EQU
SEIS

EQU

SIETE EQU

0x04 ;4
movwf TRISD

;Configura Puerto D como salida

movwf TRISC

;Configura Puerto C como salida

movwf TRISB

;Configura Puerto B como salida

0x05 ;5

0x06 ;6
0x07 ;7
bcf STATUS,RP0 ;Regresa al Banco 0

OCHO

EQU

0x08 ;8
btfsc PORTB, 0 ;Salta si RB0 = 1 presionado

NUEVE EQU

0x09 ;9
goto START
goto INICIO

;RB0 = 0, continua apagado


;Encender Led

;Variable contador
START
contador equ h'24'
clrf contador ;Inicializa contador de decenas
clrf PORTC
org 0h

LOOP

movwf PORTD

btfsc PORTB, 0 ;Salta si RB0 = 1 presionado

call dels

incf inicia,1
bsf

Led

;Encender Led

movlw SEIS

btfsc inicia, 1

movwf PORTD

goto numeros

call dels

numeros
movlw CERO
movwf PORTD

movlw SIETE
;Ciclo que muestra las unidades

movwf PORTD
call dels

call dels
movlw OCHO
movwf PORTD
movlw UNO

call dels

movwf PORTD
call dels

movlw NUEVE
movwf PORTD

movlw DOS

call dels

movwf PORTD
call dels
incf contador,1 ;Incrementa contador de decenas
movlw TRES

;Verifica si contador=10

movwf PORTD

movlw h'A'

call dels

xorwf contador,w
btfsc STATUS,Z ;z=0?

movlw CUATRO

goto START

;NO, entonces contador=10, reinicia.

movwf PORTD

;SI, entonces contador!=10, sigue

call dels

;el conteo

movlw CINCO

UNIDADES

movlw h'0'
xorwf contador,w
btfsc STATUS,Z ;Verifica si contador=1;

;Muestra Decenas en el Display


PRINT0:

goto PRINT0

movlw CERO
movwf PORTC

movlw h'1'
xorwf contador,w

goto LOOP
PRINT1:

btfsc STATUS,Z ;Verifica si contador=1;

movlw UNO

goto PRINT1

movwf PORTC
goto LOOP

movlw h'2'

PRINT2:

xorwf contador,w

movlw DOS

btfsc STATUS,Z ;Verifica si contador=2;

movwf PORTC

goto PRINT2

goto LOOP
PRINT3:

movlw h'3'

movlw TRES

xorwf contador,w

movwf PORTC

btfsc STATUS,Z ;Verifica si contador=3;

goto LOOP

goto PRINT3

PRINT4:
movlw CUATRO

movlw h'4'

movwf PORTC

xorwf contador,w

goto LOOP

btfsc STATUS,Z ;Verifica si contador=4;

PRINT5:

goto PRINT4

movlw CINCO
movwf PORTC

movlw h'5'

goto LOOP

xorwf contador,w
btfsc STATUS,Z ;Verifica si contador=5;
goto PRINT5

dels
btfsc PORTB, 0 ;Salta si RB0 = 1 presionado
incf inicia,1

btfsc inicia, 1

goto pausa

goto INICIO
MOVF valor1,W
LA VARIABLE

;AGARRA EL VALOR DE

bcf Led
CALL retardo

;PAUSA DE 1 SEGUNDO

retardo
* Preescaler

;T = 4 * Tosc * Valor de TMR0

btfsc PORTB, 1 ;Salta si RB0 = 1 presionado


incf pause,1

MOVLW d'64'
CONTA para 1 segundo

btfsc pause, 0

;Cargar el valor de

MOVWF CONTA

bsf Led
CALL retardo

;PAUSA DE 1 SEGUNDO

INCF valor1,F

;INCREMENTE VARIBALE A

1
MOVF valor1,W
VARIABLE

;W SE CARGA CON LA

XORLW .5

;COMPARA SI A LLEGADO A

10

espera1
CLRF INTCON
interrupciones

;Deshabilitar

MOVLW d'102'
TMR0 para 122 cuentas

;Cargar el valor de

MOVWF TMR0

;(Complemento)

BTFSS INTCON,T0IF

;Esperar desborde del

espera

BTFSS STATUS,Z
LLEGADO
GOTO dels
CLRW
CLRF valor1
VARIBALE

;CHEKADOR SI A
TMR0
;BUCLE

GOTO espera

;SI LLEGA A 10 RESETEA W

DECFSZ CONTA,F
;Decrementar el registro CONTA hasta cero

;TAMBIEN LIMPIA LA

GOTO espera1

pausa

;Si no es cero: ir a espera1

RETURN

;retorno de

call
bsf

Ledp

GOTO retardo
bsf

Ledp

GOTO retardo
btfsc PORTB, 1 ;Salta si RB1 = 1 presionado
incf pause,1
btfsc pause, 1
return

end
SIMULACIN

VII.
V.

CONCLUSIONES Y RECOMENDACIONES

CONCLUSIONES:

El uso de glcd es de gran ayuda al momento de


crear una interfaz ms amigable con el usuario.
Para crear animaciones es necesario tomar en
cuenta la secuencia y los tiempos de transicin.

RECOMENDACIONES:

Para hallar el cdigo hex de cada imagen es


aconsejable utilizar el editor integrado de imgenes
GLCD de mikroc .

Al momento de seleccionar la imgenes escoger


aquella que permitan ser convertidas a un formato
bmp monocromatico.

VI.

BIBLIOGRAFA:
http://es.scribd.com/doc/44252680/LCD16X2#scribd
http://www.mikroe.com/chapters/view/80/capitulo2-programacion-de-los-microcontroladores/

http://es.wikipedia.org/wiki/
Microcontrolador

BIOGRAFA:

Ral Samaniego, naci en Quito Ecuador el 29 de Octubre


de 1985. Realiz sus estudios Secundarios en el Colegio
Experimental Pedro Vicente Maldonado. Actualmente se
encuentra estudiando en quinto semestre de Ingeniera en
Electrnica y Telecomunicaciones de la Universidad
Nacional de Chimborazo.

Anda mungkin juga menyukai