Title: Microcontroladores
1Microcontroladores
2Conociendo 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
3Diagrama del PIC16F84A
4Memoria
5Registros
- Para configurar al PIC, debemos modificar algunos
registros especiales STATUS, OPTION_REG, INTCON,
TRISA, TRISB - Para manejar el I/O están los registros PORTA,
PORTB - Todo registro es de 8 bits (1 Byte)
6Timer
- Qué cuenta el Timer?
- El timer puede ser configurado de distintas
maneras para que vaya más rápido o más lento,
pero con ciertos lÃmites. - Un segundo para el timer es mucho tiempo, aún
cuando esté configurado para ir lo más lento
posible.
7Componentes 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
8Cómo 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 estarÃa 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 cuántas 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
-
9Cómo contar 1 segundo?
- Pero este timer es un registro igual que todos
los otros, por lo tanto tiene sólo 8 bits con lo
que solamente puede contar hasta 255.
Qué se puede hacer?
10Cómo contar 1 segundo?
Contar 15625 es lo mismo que contar 125 veces
125, con la diferencia de que el número 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.
11Cómo contar 1 segundo?
Para que el timer sólo 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 restándole 1 cada
vez y cuando el registro llegue a 0, sabemos que
ya pasó un segundo.
Pero Cómo sabemos que el timer dio una vuelta?
12Interrupciones
- Para reconocer que algo ha pasado, se usan las
interrupciones, por ejemplo para cuando el timer
se da la vuelta. - - Interrupción de Timer- Interrupción de
RB0/int- Interrupción de RB4-gtRB7 - - Interrupción de EE Write Complete
13Un ejemplo Interrupción 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) interrupción de
timer. - Después de que se leyó un 1 (hay interrupción de
timer), se debe escribir un cero con el programa
14Funcionamiento
- Un PIC nuevo viene vacÃo, no hace nada
- Para decirle al microcontrolador lo que queremos
que haga, necesitamos escribir un programa en el
computador y grabárselo en la memoria - Se puede grabar y volver a grabar muchas veces
distintos programas en el mismo PIC16F84A
15Pasos para grabar un programa
- Ir a un PC y escribir el código en ASSEMBLER
- Compilar el archivo
- Conectar el PIC a un programador de PICs que se
conecta al PC - Grabar el archivo compilado al PIC
16Funcionamiento
- Ahora que ya tenemos el programa en el PIC,
podemos sacarlo y ponerlo en el circuito - Al alimentar con corriente al PIC, veremos cómo
ejecuta las acciones que le dijimos que hiciera
en el programa - Con esto se ahorra mucho trabajo
17Instrucciones 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".
18Instrucciones 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.
19Instrucciones en ASSEMBLER
GOTO k El programa salta a una dirección con el
nombre "k". (etiqueta) CALL k Llamada de una
Subrutina con el nombre k. (requiere un RETURN al
final de la subrutina)
20Instrucciones en ASSEMBLER
RETFIE Retorno de llamado a interrupción. RETURN
Retorno desde una subrutina
21Instrucciones 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
22Instrucciones en ASSEMBLER
CLRF f Borra el registro f. Esta instrucción
borra un registro especifico. CLRW Borra el
registro W. Esta instrucción borra el registro
"W" solamente.
23Instrucciones en ASSEMBLER
DECFSZ f,d Esta instrucción decrementa en una
sola unidad el registro "f" en la cual si el
registro "f" queda igual a cero entonces salta
una lÃnea
INCFSZ f,d Esta instrucción incrementa en una
sola unidad el registro "f" en la cual si el
registro "f" queda igual a cero entonces salta a
una lÃnea
24Registros
STATUSOPTION_REGINTCONTRISATRISBPORTAPORTBT
IMER0
25Registros
Por ejemplo, si queremos tener interrupciones de
timer debemos configurar el registro INTCON de la
siguiente manera 1 0 1
0 0 0 0 0
Eso se consigue con el siguiente código
MOVLW 10100000MOVWF INTCON
26Registros 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 equ h0C registro extra A
REGB equ h0D registro extra B
REGC equ h0E registro extra C
REGD equ h0F registro extra D
REGE equ h10 registro extra E
... ... ... ...