-
Controladores, microcontroladores, microprocesadores,
arquitectura interna de un microcontrolador
-
Memoria de programas, memoria de datos, líneas de
entrada y salida, recursos auxiliares, programación de microcontroladores
- El PIC 16F84, para que sirve?, organización de la memoria
-
Repertorio de instrucciones, circuitería básica
-
Nuestro primer programa
- Programación de PICs, despedida, bibliografía
El PIC 16F84
Para que sirve un PIC, organización de la memoria
El PIC es el microcontrolador que
fabrica la compañía Microchip. Aunque no son los microcontroladores que
más prestaciones ofrecen, en los últimos años han ganado mucho mercado,
debido al bajo precio de éstos, lo sencillo de su manejo y programación
y la ingente cantidad de documentación y usuarios que hay detrás de
ellos.
¿Para qué sirve un PIC?
Un PIC, al ser un microcontrolador
programable, puede llevar a cabo cualquier tarea para la cual haya sido
programado.
No obstante, debemos ser
conscientes de las limitaciones de cada PIC. Así, el 16F84, PIC que se tratará en este tutorial, no podrá
generar un PWM ni convertir señales analógicas en digitales, entre otras.
El 16F84
Se trata de un microcontrolador de 8
bits. Es un PIC de gama baja, cuyas características podemos resumir en:
- Memoria de 1K x 14 de tipo Flash
- Memoria de datos EEPROM de 64 bytes
- 13 líneas de E/S con control individual
- Frecuencia de funcionamiento máxima de 10 Mhz.
- Cuatro fuentes de interrupción
- Activación de la patita RB0/INT
- Desbordamiento del TMR0
- Cambio de estado en alguna patia RB4-RB7
- Fin de la escritura de la EEPROM de datos
- Temporizador/contador TMR0 programable de 8 bits
- Perro Guardián o WatchDog
Generalmente se encuentra encapsulado en formato
DIP18. A continuación puede apreciarse dicho encapsulado y una breve
descripción de cada una de las patitas: imagen:
- VDD: alimentación
- VSS: masa
- OSC1/CLKIN-OSC2/CLKOUT: conexión del oscilador
- VPP/MCLR: tensión de programación y reset
- RA0-RA3: líneas de E/S de la puerta A
- RA4: línea de E/S de la puerta A o entrada de
impulsos de reloj para TMR0
- RB0/INT: línea de E/S de la puerta B o petición de
interrupción
- RB1-RB7: líneas de E/S de la puerta B
Organización de la memoria
A continuación podemos ver la organización de la
memoria del 16F84:
Podemos comprobar como la memoria está
dividida en dos bancos (cada una de las columnas): banco 0 y banco 1.
Las primeras 12 posiciones de cada banco (00h-0Bh y 80h-8Bh) están
ocupadas por los Registros de Propósito Especial (Special Purpose
Registers). Estos registros, en los que entraremos en detalle más
adelante, son los encargados de controlar ciertas funciones específicas
del PIC.
Las 68 posiciones siguientes (0Ch-4Fh
y 8Ch-CFh) son los denominados Registros de Propósito General, del
inglés General Purpose Registers. Éstos son empleados para guardar
cualquier dato que necesitemos durante la ejecución del programa.
BANCO 0
-
TMR0: es un temporizador/contador de 8 bits. Puede
operar de dos modos distintos:
- Temporizador: el registro incrementa su
valor en cada ciclo de instrucción (Fosc/4).
- Contador: el registro incrementa su valor con cada impulso introducido
en la patita RA4/TOSKI.
En ambos casos, cuando el registro se desborda, es
decir, llega a su valor máximo (en este caso 2^8 = 256. Como el 0
también se cuenta, el máximo valor sería 255), empieza de nuevo a
contar a partir del 0, no sin antes informar de este evento a través
de la activación de un flag y/o una interrupción.
-
PCL: es el contador del programa. Indica la
dirección de memoria que se leerá a continuación. En algunas ocasiones,
como el empleo de las tablas, el uso de este registro es
imprescindible.
-
STATUS: registro de 8 bits que sirve para
configurar ciertos aspectos del PIC. En la siguiente figura se aprecia
la disposición de los bits de dicho registro:
|
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
|
IRP |
|
RP0 |
TO# |
PD# |
Z |
DC |
C |
- RP0: indica el banco de memoria con el que
se está trabajando. Cuando vale 0 se selecciona el Banco 0 y cuando
vale 1 el Banco 1.
-
PORTA: representación de la puerta A. Cada bit
representa una línea de E/S de la puerta A:
|
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
|
|
|
|
RA4 |
RA3 |
RA2 |
RA1 |
RA0 |
Como se puede comprobar, los tres
bits de mayor peso no representan ninguna línea de E/S, ya que la
puerta A sólo tiene 5 líneas de E/S
-
PORTB: lo mismo que la puerta A, pero en este caso
con 8 líneas de E/S
BANCO 1
-
TRISA: registro de 8 bits de configuración de la
puerta A. Si un bit se encuentra en 1, esa línea de E/S se configura
como entrada; si, en cambio, se encuentra a 0, se configura como
salida
-
TRISB: lo mismo que TRISA, pero referente a la
puerta B.
|
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
|
RB7 |
RB6 |
RB5 |
RB4 |
RB3 |
RB2 |
RB1 |
RB0 |
Finalmente cabe destacar el registro W, también
conocido como registro de trabajo (del inglés work) o acumulador. Es de
vital importancia ya que, entre otras, deberemos usarlo de registro
puente para llevar a cabo ciertas operaciones.
Enlaces relacionados
-
Programador de PICs y Memorias
-
Tutoriales de computadoras / ordenadores
- Sección de
PICs en nuestros Foros
- Microcontroladores PSOC
< Anterior Siguiente >
Recomendar este Tutorial a un amigo
|