Está en la página 1de 26

Microcontroladores

PIC16F84A

Conociendo al PIC16F84A
Posee 18 pines, de los cuales 13 son de I/O Memoria para guardar programas Timer/Contador interno 4 fuentes de interrupciones a la CPU Memoria EEPROM

Diagrama del PIC16F84A

Memoria

Registros
Para configurar al PIC, debemos modificar algunos registros especiales: STATUS, OPTION_REG, INTCON, TRISA, TRISB Para manejar el I/O estn los registros PORTA, PORTB Todo registro es de 8 bits (1 Byte)

Timer
Qu cuenta el Timer? El timer puede ser configurado de distintas maneras para que vaya ms rpido o ms lento, pero con ciertos lmites. Un segundo para el timer es mucho tiempo, an cuando est configurado para ir lo ms lento posible.

Componentes del Timer


Prescaler: Ac podemos seleccionar que el tiempo se vaya incrementando a la misma velocidad que se leen las instrucciones (si tiene el valor 1) o si queremos configurarlo a nuestra medida (si tiene el valor 0). Prescaler Rate Select (P.R.S.): Si el prescaler queda configurado con valor 0, ac podemos seleccionar la velocidad a la cual queremos que se mueva el timer.
El prescaler y el prescaler rate select se configuran en el registro OPTION_REG

Cmo contar 1 segundo?


La frecuencia original que le llega al timer es de 1Mhz. 1Mz = 1000000 Hz Si elegimos un P.R.S de 64, entonces la frecuencia que le estara llegando al timer ser de: F = 1000000 / 64 = 15625 Hz Como F = 1 / T, entonces T = 0.000064 segundos

Cada 0.000064 segundos se aumenta en uno el timer. Entonces si queremos saber cuntas veces tiene que aumentar para que demore 1 segundo tenemos: 0.000064 * x = 1 segundo
x = 15625 Se necesita que el timer aumente 15625 veces

Cmo contar 1 segundo?


Pero este timer es un registro igual que todos los otros, por lo tanto tiene slo 8 bits con lo que solamente puede contar hasta 255.

Qu se puede hacer?

Cmo contar 1 segundo?


Contar 15625 es lo mismo que contar 125 veces 125, con la diferencia de que el nmero 125 s cabe en el registro del timer. Entonces la idea es contar hasta 125 en el timer y ocupar un registro extra para ir contando las veces que hacemos eso. Cuando lleguemos a 125 en el registro extra, ha pasado exactamente un segundo.

Cmo contar 1 segundo?


Para que el timer slo cuente 125, tenemos que hacer que su valor inicial sea 130 (de 130 a 255 hay 125)
Asimismo, al registro extra lo tenemos que inicializar con 125, para ir restndole 1 cada vez y cuando el registro llegue a 0, sabemos que ya pas un segundo. Pero Cmo sabemos que el timer dio una vuelta?

Interrupciones
Para reconocer que algo ha pasado, se usan las interrupciones, por ejemplo para cuando el timer se da la vuelta.
Interrupcin Interrupcin Interrupcin Interrupcin de de de de Timer RB0/int RB4->RB7 EE Write Complete

Un ejemplo Interrupcin de Timer


Hay que activarla con el bit 5 del registro INTCON (poner un 1) El bit 2 del registro INTCON nos dice si hay (se lee un 1) o no hay (se lee un 0) interrupcin de timer. Despus de que se ley un 1 (hay interrupcin de timer), se debe escribir un cero con el programa

Funcionamiento
Un PIC nuevo viene vaco, no hace nada Para decirle al microcontrolador lo que queremos que haga, necesitamos escribir un programa en el computador y grabrselo en la memoria Se puede grabar y volver a grabar muchas veces distintos programas en el mismo PIC16F84A

Pasos para grabar un programa


Ir a un PC y escribir el cdigo en ASSEMBLER Compilar el archivo Conectar el PIC a un programador de PICs que se conecta al PC Grabar el archivo compilado al PIC

Funcionamiento
Ahora que ya tenemos el programa en el PIC, podemos sacarlo y ponerlo en el circuito Al alimentar con corriente al PIC, veremos cmo ejecuta las acciones que le dijimos que hiciera en el programa Con esto se ahorra mucho trabajo

Instrucciones en ASSEMBLER
BCF f,b Coloca en Cero un determinado Bit. Este comando pone en Cero el Bit "b" del registro "f".
BSF f,b Coloca en uno determinado Bit. Este comando Pone en 1 el Bit "b" del registro "f".

Instrucciones en ASSEMBLER
BTFSC f,b Prueba el Bit b del registro f . Este comando prueba el Bit "b" del registro "f" y salta una linea si f,b est en 0. BTFSS f,b Prueba el Bit b del registro f. Este comando prueba el Bit "b" del registro "f" y salta una linea si est en 1.

Instrucciones en ASSEMBLER
GOTO k El programa salta a una direccin con el nombre "k". (etiqueta)
CALL k Llamada de una Subrutina con el nombre k. (requiere un RETURN al final de la subrutina)

Instrucciones en ASSEMBLER

RETFIE Retorno de llamado a interrupcin.

RETURN Retorno desde una subrutina

Instrucciones en ASSEMBLER
MOVLW k Se carga el registro "W" con el contenido del literal "k
MOVWF f Copia el contenido del registro "W" al registro f

Instrucciones en ASSEMBLER
CLRF f Borra el registro f. Esta instruccin borra un registro especifico.
CLRW Borra el registro W. Esta instruccin borra el registro "W" solamente.

Instrucciones en ASSEMBLER
DECFSZ f,d Esta instruccin decrementa en una sola unidad el registro "f" en la cual si el registro "f" queda igual a cero entonces salta una lnea INCFSZ f,d Esta instruccin incrementa en una sola unidad el registro "f" en la cual si el registro "f" queda igual a cero entonces salta a una lnea

Registros
STATUS OPTION_REG INTCON TRISA TRISB PORTA PORTB TIMER0
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Registros
Por ejemplo, si queremos tener interrupciones de timer debemos configurar el registro INTCON de la siguiente manera: 1
Bit 7

0
Bit 6

1
Bit 5

0
Bit 4

0
Bit 3

0
Bit 2

0
Bit 1

0
Bit 0

Eso se consigue con el siguiente cdigo: MOVLW MOVWF 10100000 INTCON

Registros Extra
Se pueden crear registros adicionales que pueden ser usados libremente por el usuario. stos son de 8 bits al igual que todos los que hemos visto hasta ahora. Se tienen que definir en la parte inicial del programa de la siguiente forma:
REGA REGB REGC REGD REGE ... equ equ equ equ equ ... h0C h0D h0E h0F h10 ... ;registro extra A ;registro extra B ;registro extra C ;registro extra D ;registro extra E ...

También podría gustarte