Вы находитесь на странице: 1из 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 de Timer
- Interrupcin de RB0/int
- Interrupcin de RB4->RB7
- Interrupcin de 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 0 1 0 0 0 0 0
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Eso se consigue con el siguiente cdigo:
MOVLW 10100000
MOVWF 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 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
... ... ... ...

Вам также может понравиться