CAPÍTULO II (parte 2)
El MICROCONTROLADOR PIC12F675 DE LA INDUSTRIA
MICROCHIP
Registros de Funciones Especiales (Special Function Registers,
SFR)
Los Registros
de Funciones Especiales son utilizados por la CPU y las funciones periféricas para controlar la operación deseada
del dispositivo. Estos registros son estáticos (inamovibles) en la memoria RAM, y están ubicados distribuidos en
dos bancos de memoria; como se muestra a continuación:
BANCO
0
|
BANCO
1
|
||
00h
|
Indirect Addresing
|
Indirect Addresing
|
80h
|
01h
|
TMRO
|
OPTION_REG
|
81h
|
02h
|
PCL
|
PCL
|
82h
|
03h
|
STATUS
|
STATUS
|
83h
|
04h
|
FSR
|
FSR
|
84h
|
05h
|
GPIO
|
TRISIO
|
85h
|
06h
|
86h
|
||
07h
|
87h
|
||
08h
|
88h
|
||
09h
|
89h
|
||
0Ah
|
PCLATH
|
PCLATH
|
8Ah
|
0Bh
|
INTCON
|
INTCON
|
8Bh
|
0Ch
|
PIR1
|
PIE1
|
8Ch
|
0Dh
|
8Dh
|
||
0Eh
|
TMR1L
|
PCON
|
8Eh
|
0Fh
|
TMR1L
|
8Fh
|
|
10h
|
T1CON
|
OSCCAL
|
90h
|
11h
|
91h
|
||
12h
|
92h
|
||
13h
|
93h
|
||
14h
|
94h
|
||
15h
|
WPU
|
95h
|
|
16h
|
IOC
|
96h
|
|
17h
|
97h
|
||
18h
|
98h
|
||
19h
|
CMCON
|
VRCON
|
99h
|
1Ah
|
EEDATA
|
9Ah
|
|
1Bh
|
ERADR
|
9Bh
|
|
1Ch
|
EECON1
|
9Ch
|
|
1Dh
|
EECON2
|
9Dh
|
|
1Eh
|
ADRESH
|
ADRESL
|
9Eh
|
1Fh
|
ADCON0
|
ANSEL
|
9Fh
|
20h
-
5Fh
|
Registros
de propósito general (64 bytes)
|
Accesos
desde 20h-5Fh
|
A0h
-
DFh
|
60h
-
7Fh
|
Rango
de memoria no implementado
|
Rango
de memoria no implementado
|
E0h
-
FFh
|
BANCO
0
|
BANCO
1
|
||
En lo
adelante nos ocuparemos en la descripción de los registros más importantes para
trabajar con PicBasic, ya que este
lenguaje de programación no requiere, como en el caso del lenguaje Assembler, del conocimiento estricto de
los registros del microcontrolador. No quiere decir esto que el programador no
vea necesario el conocer con amplitud el dispositivo que utilizará en su
diseño. Cuanto más sabemos del funcionamiento de un dispositivo, tanto más podríamos
aprovechar sus recursos con eficiencia. La mejor manera de conocer un chip es
estudiando la hoja de datos (datasheet) de su fabricante, en donde se
encontrarán detalladas todas las informaciones referentes.
CONFIG:
CONFIGURATION WORD (ADDRESS: 2007h)
|
|||||||||||||
BG1
|
BG0
|
-
|
-
|
-
|
CPD
|
CP
|
BODEN
|
MCLRE
|
PWRTE
|
WDTE
|
FOSC2
|
FOSC1
|
FOSC0
|
Bit 13
|
Bit 12
|
Bit 11
|
Bit 10
|
Bit 9
|
Bit
8
|
Bit 7
|
Bit
6
|
Bit
5
|
Bit
4
|
Bit
3
|
Bit
2
|
Bit
1
|
Bit
0
|
Los tres bits
FOSC0, FOSC1 y FOSC2 permiten
seleccionar el tipo de oscilador que se va a usar, ya sea RC, a cristal o
resonador, o una señal proveniente de un oscilador exterior. De acuerdo al
código de tres dígitos que se configure se obtendrá lo siguiente:
111 = oscilador RC: Función CLKOUT en el pin GP4/OSC2/CLKOUT, RC en GP5/OSC1/CLKIN
110 = oscilador RC: funcionalidad E/S en el pin GP4/OSC2/CLKOUT, RC en GP5/OSC1/CLKIN
101 = oscilador INTOSC: Función CLKOUT en GP4 pin/OSC2/CLKOUT, la función de E/S en GP5/OSC1/CLKIN
100 = oscilador INTOSC: la función S en GP4 pin/OSC2 / CLKOUT, la función de E/E/S en GP5/OSC1/CLKIN
011 = CE: funcionalidad E/S en el pin GP4/OSC2/CLKOUT, CLKIN en GP5/OSC1/CLKIN
010 = oscilador HS: Alta velocidad de cristal/resonador en GP4/OSC2/ LKOUT y GP5/OSC1/CLKIN
001 = oscilador XT: Cristal/resonador en GP4/OSC2/CLKOUT y GP5/OSC1/CLKIN
000 = oscilador LP: cristal de baja potencia en GP4/OSC2/CLKOUT y GP5/OSC1/CLKIN
WDTE (Watchdog
Timer Enable) Con 1 lógico se habilita
el temporizador del perro guardián, el cual provocará un reset cada cierto
tiempo, según se haya programado, para impedir
que el programa se ‘cuelgue’; es decir, que no entre en un bucle infinito que
no lleve a nada. Generalmente se deja sin función por lo delicado de su uso.
PWRTE (Power Up
Timer Enable) Con 0 lógico se
habilita el temporizador de encendido, el cual, luego de ser energizado, mantiene
inactivo el microcontrolador por unos 72 milisegundos.
MCLRE (Master
Clear Enable) Habilitador de limpiador maestro, que con 1 lógico se activa para que el pin GP3
funcione como master clear; y con 0
el pin GP3 funciona como entrada digital.
BODEN (Brown-out
Detect Enable) Se activa con 1
lógico para permitir un reset (reposición) automático cuando el voltaje
de alimentación del dispositivo cae por debajo de lo previsto por el
fabricante. Es conveniente que su uso vaya acompañado con la activación del
PWRTE, para que también se provoque un retardo del encendido.
CP (Code
Protection, código de protección) y CPD
(Code Protection Data, código de
protección de datos) son dos bits que se activan con 0 lógico para proteger de sabotaje el código. También se puede
activar o desactivar a través del software del dispositivo programador.
BG1 y BG0 son los bits de calibración de banda prohibida de tensión para BOD y POR. Con 00 se elige menor tensión de banda prohibida (Lowest bandgap voltage), y con 11 se elige mayor tensión de banda prohibida (Highest bandgap voltaje).
Para trabajar
con PicBasic es suficiente hacer lo que
se muestra en este ejemplo:
Observemos que
el programa arranca realizando primero los arreglos necesarios en el registro CONFIG; y se digita ASM (assembler) para indicar que
a continuación se escribirá en lenguaje Assembler y no en Basic
como se supone requiere el software editor. Ahí se declara, separando por coma,
que el dispositivo al cual se instalará el programa es el PIC12F675, que el
oscilador RC (resistor-capacitor) es interno y sin salida exterior, que el
perro guardián (Watchdog) estará apagado, y que estarán encendidos el master
clear, el power timer y la protección del código. Para volver al
lenguaje Basic se escribe ENDASM (fin
del assembler).
CMCON:
REGISTRO CONTROL DEL COMPARADOR (DIRECCIÓN: 19h)
|
|||||||
-
|
COUT
|
-
|
CINV
|
CIS
|
CM2
|
CM1
|
CM0
|
Bit 7
|
Bit
6
|
Bit
5
|
Bit
4
|
Bit
3
|
Bit
2
|
Bit
1
|
Bit
0
|
Al registro CMCON (control del comparador), ubicado
en la dirección 19h del banco 0, se le carga el número 7 decimal (00000111 en
numeración binaria) para desactivar el uso del comparador operacional. Esto se hace
para impedir que interfiera en el funcionamiento compartido de los pines 5, 6 y
7 del chip. En la gráfica de abajo encontramos los ocho modos de configuración disponibles.
El modo seleccionado es el número siete (111), el último color naranja, porque desconecta
totalmente el comparador y que, para eliminar interferencias, aterriza sus entradas.
Cuando el comparador
está en uso, el bit 3 del registro CMCON,
(CIS, comparator input switch)
es el interruptor que se utiliza para seleccionar con ‘0’
la entrada inversora de señal (GP1/CIN-) o con ‘1’ la entrada no inversora de señal (GP0/CIN+) en los modos 5
(101 en binario) y 6 (110 en binario) solamente.
Colocando
un cero en el bit 4 (CINV, comparator output inversión)
la salida del comparador no es invertida; en cambio, si en su lugar se coloca un
uno, la salida sufre una inversión de
fase.
El
bit 6, COUT (comparator output)
permite leer (no escribir) el resultado de la salida del comparador. Por tanto,
Cuando CINV = 0: Cuando CINV
= 1:
1 = VIN+ > VIN- 1 = VIN+
< VIN-
0 = VIN+ < VIN 0 = VIN+
> VIN
En el registro
TRISIO se configuran los pines del microcontrolador
como entradas (cargando un uno) o como
salidas (cargando un cero). En el ejemplo
se ha cargado 11111011 (en decimal:
251) para activar como salida sólo el
pin 5, GP2. Las demás quedan como entradas.
TRISIO:
REGISTRO TRIESTADOS CONTROL DE LOS PINES GPIO
(DIRECCIÓN:
85h)
|
|||||||
-
|
-
|
TRISIO5
|
TRISIO4
|
TRISIO3
|
TRISIO2
|
TRISIO1
|
TRISIO0
|
Bit 7
|
Bit
6
|
Bit
5
|
Bit
4
|
Bit
3
|
Bit
2
|
Bit
1
|
Bit
0
|
Configurar este
registro en Basic no es necesario si
se usan las instrucciones Low
y High, como se muestra en el ejemplo,
ya que estas convierten el pin automáticamente como salida. La diferencia está en
que, si se configuran previamente los pines que funcionarán como entradas y como
salidas, se puede usar, indiferentemente, el modo directo GPIO.2 = 0 en lugar de Low GPIO.2
y GPIO.2 = 1 en lugar de High GPIO.2 que demandan menos recursos
de memoria.
Otro modo para
poner en nivel bajo o en nivel alto una salida, o todas las salidas simultáneamente
del microcontrolador que estamos estudiando (PIC12F675), es cargando directamente el código correspondiente en el
registro GPIO que controla el estado
lógico de los pines; como muestra el ejemplo, en este caso para eliminar la posibilidad
de que un pin inicie en alto por error.
GPIO:
REGISTRO CONTROL GPIO
(DIRECCIÓN:
05h)
|
|||||||
-
|
-
|
GPIO5
|
GPIO4
|
GPIO3
|
GPIO2
|
GPIO1
|
GPIO0
|
Bit 7
|
Bit
6
|
Bit
5
|
Bit
4
|
Bit
3
|
Bit
2
|
Bit
1
|
Bit
0
|
Observe bien
que todos los comentarios y aclaraciones del programa están precedidos por una coma
(,) o por punto y coma (;) para indicarle al compilador que
esos renglones no son parte de la edición del programa.
Configurar el
registro ANSEL es de vital importancia
para hacer que los pines funcionen como digitales o como analógicos.
ANSEL: REGISTRO SELECTOR PINES ANALÓGICOS/DIGITALES
(DIRECCIÓN:
9Fh)
|
|||||||
-
|
ADCS2
|
ADCS1
|
ADCS0
|
ANS3
|
ANS2
|
ANS1
|
ANS0
|
Bit 7
|
Bit
6
|
Bit
5
|
Bit
4
|
Bit
3
|
Bit
2
|
Bit
1
|
Bit
0
|
Aplicando 1 lógico desde el bit 0 (ANS0) hasta el bit 3 (ANS3) de dicho registro
se configuran como entradas analógicas los pines 3, 5, 6 y 7 del
microcontrolador, siempre que se hayan configurado en TRISIO como entradas. Y si se coloca 0 lógico se configuran como entradas o salidas digitales.
Del bit 4 al bit 6 se selecciona la frecuencia del reloj de conversión A/D (analógico/digital)
aplicando un número binario de 3 bits conforme a las siguientes opciones:
ADCS<2:0> (Bits
selectores del reloj de conversión A/D)
000 = Fosc/2
001 = Fosc/8
010 = Fosc/32
x11 = FRC (Reloj derivado de un
oscilador RC interno = 500 kHz máximo)
100 = Fosc/4
101 = Fosc/16
110 = Fosc/64
Nótese que a
excepción de la opción x11 cuya
frecuencia de reloj para el convertidor A/D proviene del oscilador RC interno
(si no se usa cristal, sólo este oscilador RC), las demás opciones son producto de
dividir por un múltiplo de 2 la frecuencia del oscilador a cristal (cuando se
usa dicho oscilador).
Ya configurados
los registros que necesitamos, se crea una etiqueta INICIO: como un punto de partida y de retorno de la rutina de ejecución
del programa. Observe que puede elegir cualquier nombre corto, en cualquier idioma
siempre que no sea una instrucción Basic, y a la cual se le agregan dos puntos (:) al final. En Assembler no son necesarios
los dos puntos.
Las explicaciones
de la rutina que procura encender y apagar un diodo LED por el pin 5 del microcontrolador están bastantes claras. Tanto
en lenguaje PicBasic como en Assembler se coloca END al final del programa para que el compilador
entienda que ahí termina todo, que no hay nada más.
El siguiente esquema presenta las conexiones necesarias para hacer funcionar el microcontrolador parpadeando
un diodo emisor de luz (LED) por el pin
5 (GPIO 2).



No hay comentarios:
Publicar un comentario