Академический Документы
Профессиональный Документы
Культура Документы
No todos los PICs tiene exactamente los mismos bits de configuración, tampoco la misma
cantidad, sin embargo ciertos bits son comunes a la mayoría de ellos y son esos los que se
detallan en este artículo.
Algunos dispositivos usan solamente un bit (CP0) para determinar la protección de código
según la siguiente descripción:
1 = Protección de código deshabilitada
0 = Protección de código habilitada
Recomendaciones
Este bit está presente solamente cuando el dispositivo posee memoria EEPROM de datos,
adicionalmente a su memoria ROM (flash) de programa.
1 = Protección de código deshabilitada
0 = Protección de memoria EEPROOM de datos habilitada
* Bit de Habilitación de Reinicio por Apagón (Brown-out Reset Enable bit): BOREN
1 = BOR habilitado
0 = BOR deshabilitado
Recomendaciones
1 = PWRT desabilitado
0 = PWRT habilitado
Nota: Algunos microcontroladores PIC originales tienen invertida la polaridad de este bit.
Es un temporizador que permite retardar por cierto tiempo (como ejemplo, son 72 ms de
duración en el PIC16F628A) el encendido del microcontrolador como medida de
protección hasta que al fuente de alimentación se estabilice. (Algunas fuentes de
alimentación especialmente caseras pueden llegar a tener una rampa de acenso del valor de
su voltaje demasiado lenta).
Recomendaciones
Recomendaciones:
1 = WDT habilitado
0 = WDT desabilitado
1.while (!Serial_Disponible())
2.;
3.
4.caracter = Leer_Serial();
La lógica del algoritmo asume que tarde o temprano llegará el nuevo byte que uno espera,
pero ¿qué pasa si por alguna falla externa el nuevo byte nunca llega? El microcontrolador
se queda permanentemente bloqueado produciendo una falla catastrófica irrecuperable en la
aplicación. No por nada a este tipo de código se le llama "código de bloqueo", pues bloquea
al procesador temporalmente hasta que una determinada condición se cumple, pero puede
bloquearlo también permanentemente si la condición nunca se cumple; en este caso,
solamente un reinicio puede sacar al microcontrolador de su condición de bloqueo.
Por supuesto que para empezar, la mejor solución es evitar de entrada utilizar este tipo de
"código de bloqueo" en nuestros programas y dejar el "Perro Guardián" para otras
circunstancias más inesperadas, sin embargo usamos el mencionado ejemplo por su
simplicidad.
Recomendaciones
En sistemas sencillos que no requieran alta confiabilidad, o simplemente cuando uno está
en etapa de desarrollo y prueba, se puede dejar deshabilitado el "Perro Guardián". Es más
algunos recomiendan posponer la habilitación del mismo hasta las últimas etapas de
desarrollo del sistema y alguno expertos van más allá y recomiendan evitar siempre el uso
del "Perro Guardian" en el entendido de que uno debe prever en el desarrollo todas las
posibles fallas que pudieran ocurrir y no dejar que el uso del "Guardián" se convierta en
una "muleta" donde apoyar las malas prácticas de diseño. El uso del "Guardián" no es
obligatorio, sin embargo en mi opinión se deben combinar ambas estrategias: Prever en el
diseño las fallas que pudiera ocurrir proveyendo estrategias de recuperación de fallas en el
sistema y finalmente incluir también el "Perro Guardián" como una última línea de defensa.
Bits de Selección de Oscilador (Oscillator Selection bits): FOSC1..FOSC0
Recomendaciones
Algunos de los microcontroladores más nuevos traen un oscilador RC interno cuyo bit de
configuración está típicamente representado como:
Los símbolos usados en la directiva config hacen posible la configuración de cada bit con la
polaridad correcta, están definidos en el archivo incluido con la directiva #INCLUDE. Para
cada dispositivo se debe consultar específicamente los símbolos que están definidos y su
nomenclatura correcta.
Los siguientes son algunos de los símbolos sacados de los archivos de cabecera (header
files) de Microchip, hay que tomar en cuenta que no todos los símbolos está disponibles en
un determindo dispositivo.
Osciladores:
_RC_OSC
_EXTRC_OSC
_EXTRC_OSC_CLKOUT
_EXTRC_OSC_NOCLKOUT
_INTRC_OSC
_INTRC_OSC_CLKOUT
_INTRC_OSC_NOCLKOUT
_LP_OSC
_XT_OSC
_HS_OSC
Con este compilador se pueden especificar los bits de configuración usando también una
directiva CONFIG, veamos en el siguiente ejemplo:
01.#include <htc.h>
02.
03./* Palabra de configuracion para el PIC16F876A con el compilador PICC
v9.83 */
04.__CONFIG(LVP_OFF & BOREN_OFF & PWRTE_ON & WDTE_OFF & FOSC_INTOSCIO);
05.
06.void main(void)
07.{
08.// Resto del código
09.
10.}
Todos los símbolos para los bits de configuración se encuentran definidos también en los
archivos de inclusión de este compilador para cada dispositivo. En el caso del PIC16F628A
por ejemplo, éstos se encuentran definidos en el archivo "pic16f628.h" que se encuentra en
el directorio "include" del compilador y especifica los siguientes símbolos:
01.// Config Register: CONFIG
02.#define CONFIG 0x2007
03.// Oscillator Selection bits
04.// ER oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor on
RA7/OSC1/CLKIN
05.#define FOSC_ERCLK 0xFFFF
06.// ER oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor on
RA7/OSC1/CLKIN
07.#define FOSC_ERIO 0xFFFE
08.// INTRC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O
function on RA7/OSC1/CLKIN
09.#define FOSC_INTOSCCLK 0xFFFD
10.// INTRC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function
on RA7/OSC1/CLKIN
11.#define FOSC_INTOSCIO 0xFFFC
12.// EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN
13.#define FOSC_ECIO 0xFFEF
14.// HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and
RA7/OSC1/CLKIN
15.#define FOSC_HS 0xFFEE
16.// XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and
RA7/OSC1/CLKIN
17.#define FOSC_XT 0xFFED
18.// LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and
RA7/OSC1/CLKIN
19.#define FOSC_LP 0xFFEC
20.// Watchdog Timer Enable bit
21.// WDT enabled
22.#define WDTE_ON 0xFFFF
23.// WDT disabled
24.#define WDTE_OFF 0xFFFB
25.// Power-up Timer Enable bit
26.// PWRT disabled
27.#define PWRTE_OFF 0xFFFF
28.// PWRT enabled
29.#define PWRTE_ON 0xFFF7
30.// RA5/MCLR pin function select
31.// RA5/MCLR pin function is MCLR
32.#define MCLRE_ON 0xFFFF
33.// RA5/MCLR pin function is digital input, MCLR internally tied to VDD
34.#define MCLRE_OFF 0xFFDF
35.// Brown-out Reset Enable bit
36.// BOD Reset enabled
37.#define BOREN_ON 0xFFFF
38.// BOD Reset disabled
39.#define BOREN_OFF 0xFFBF
40.// Low-Voltage Programming Enable bit
41.// RB4/PGM pin has PGM function, low-voltage programming enabled
42.#define LVP_ON 0xFFFF
43.// RB4/PGM pin has digital I/O function, HV on MCLR must be used for
programming
44.#define LVP_OFF 0xFF7F
45.// Data Code Protection bit
46.// Data memory code protection off
47.#define CPD_OFF 0xFFFF
48.// Data memory code protected
49.#define CPD_ON 0xFEFF
50.// Code Protection bits
51.// Program memory code protection off
52.#define CP_OFF 0xFFFF
53.// 0400h-07FFh code protected
54.#define CP_50 0xEBFF
55.// 0200h-07FFh code protected
56.#define CP_75 0xD7FF
57.// 0000h-07FFh code protected
58.#define CP_ALL 0xC3FF
El formato de la directiva de configuración, así como los símbolos definidos pueden variar
de un compilador a otro, pero escencialmente son muy similares al ejemplo mencionado;
los detalles precisos se encuentran en los manuales de usuario respectivos de cada
compilador.