Pic12f629 675

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 53

http://www.micropic.es/smf/index.php?PHPSESSID=3446cae14f501f4525c4cc4e49fc0808&board=2.

Datasheet en español: PIC12F629/675

Es importante decir que el único documento válido es el datasheet original de Microchip y que los
derechos les corresponden a ellos. A pesar del esfuerzo por ser lo más fiel posible al documento original
no descarto que haya algún tipo de error, ya sea tipográfico o de interpretación.

He solicitado autorización de Microchip para publicarlo a nivel personal en los Foros en los que participo
con mayor o menor frecuencia y solamente para los usuarios y/o visitantes de estos Foros llevé a cabo la
tarea. No he obtenido el permiso para un formato final en pdf como me hubiera gustado y desautorizo su
publicación -porque así lo expresa claramente Microchip (1)- en cualquier otra parte.

En todo caso, libro al Foro de todo tipo de responsabilidad y si algo se me ha pasado por alto y estoy
vulnerando las normas de propiedad de Microchip, agradecería se me informara para actuar en
consecuencia.

(1) Personal Use of Copyrighted Material: If you use Microchip copyrighted material solely for your
personal use you do not need Microchip’s written permission to use such material. However, distribution
or reproduction of such materials and images to others (including posting on a website) does require
Microchip’s written permission.
Son muchas las ocasiones en las que una lectura pausada de la hoja de datos del PIC (datasheet de ahora
en adelante) nos da la solución a ese problema que no conseguimos resolver en nuestro circuito, pero esa
lectura no siempre es tan clara como nos gustaría que fuese. El idioma (un gran escollo para muchos de
nosotros), la terminología empleada(1) y la poca profundidad a la hora de tocar ciertos temas consiguen
que sobre todo aquellos que están empezando no le presten la atención que requiere.

La intención de este tema es tratar de ayudar en lo posible a resolver esos escollos: el idiomático,
partiendo de la intención de ser lo más fiel posible al contenido del datasheet, y el estudio 'paso a paso' de
las características del PIC, de sus registros, periféricos...etc
En el caso de algunos temas que el datasheet no trata con demasiada profundidad trataré de
proporcionaros enlaces para que podáis ampliar conocimientos, de ser posible en español, y desde el
punto de partida de que no es la intención de este tema hacer todo el trabajo por vosotros porque es
vuestra inquietud, vuestras ganas de aprender, la mejor ayuda que puedo ofreceros. Google y nuestros
amados Foros son un excelente espacio para 'ese empujoncito' que a veces necesitamos. De igual manera,
son bastantes las Tablas de Datos presentes y como no tengo la intención de sobrecargar el Foro con cosas
que podéis ver sin esfuerzo en el datasheet, se hará referencia ya sea a su número de imagen, página o
capítulo donde se puede ver.

El datasheet del PIC con el que trabajemos debería estar siempre a mano. Para obtenerlo lo haremos
directamente de la web de Microchip y fijándonos siempre que sea la última versión la que tenemos, y
verificar igualmente si existen documentos de 'erratas' posteriores. Esto lo sabremos por la versión y las
fechas... (2)

Se ha elegido uno de los 'enanos' de Microchip para empezar: PIC12F629/675. A pesar de su tamaño tiene
muchas cosas que se encuentran en sus hermanos mayores y lo aprendido nos servirá posteriormente. Más
adelante se tratarán ciertas particularidades no presentes en este PIC, como pueden ser USART, SPI...etc.

No he seguido el orden establecido en los capítulos del datasheet si no el orden que sigo a la hora de
programar, de ahí que comience por la 'Palabra de configuración' (Configuration Word) que va al
principio de todos mis programas. Decir que programo en Basic y desconozco otros lenguajes de
programación, por ello cuando añada algún ejemplo será siempre bajo este lenguaje o añadiendo algún
ejemplo de ASM incluido en el datasheet

Agradezco que me informéis de cualquier error que se me haya pasado por alto.

Notas:
1 - Se mantendrá la terminología original en inglés para evitar confusiones. En otro tema aparte se creará
un glosario para que podáis consultar esa terminología.
2 - La referencia DS41190E se corresponde con la última versión del datasheet en este momento. Es
importante porque podría pasarnos que hubiera alguna actualización importante en la que se corrijan
errores con respecto a la versión que hemos descargado hace unos meses. De igual forma revisar
cualquier posible documento de erratas sobre el datasheet con el cual vayáis a trabajar. en el caso del
PIC12F629/675 no dejar de ver:
http://www.microchip.com/wwwproducts/Devices.aspx?DocName=en010114
Índice:

Características del PIC

Propiedades Especiales:
CONFIGURATION WORD
OSCILADOR
Los Modos de RESET

GPIO PORT

Módulo Timer0

Módulo Timer1

Interrupciones

Organización de la Memoria

Módulo Comparador

Memoria EEPROM

Convertidor A/D

PIC12F629/675

CPU RISC de alto rendimiento:


Sólo 35 instrucciones para aprender
Todas las instrucciones se ejecutan en un solo ciclo de reloj, excepto los saltos que requieren dos
Frecuencia de Operación de 0 a 20 MHz (DC a 200 nseg de ciclo de instrucción)
Posibilidad de Interrupciones
Pila (Stack) por hardware de 8 niveles
Modos de Direccionamiento Directos, Indirectos, y Relativos
Características especiales:
Opciones de oscilador Interno y externo
Oscilador interno de 4Mhz calibrado de fábrica a +/- 1%
Soporte para Oscilador externo a cristal y resonador
Tiempo de reacción tras el modo SLEEP: 5us (típico a 3.0V)
Ahorro de energía en el modo SLEEP
Amplio rango de voltaje - 2.0V a 5.5V
Rango de temperaturas Industrial y extendida
Power-on-Reset (POR) de bajo consumo
Power-up Timer (PWRT) y Oscilador Start-up Timer (OST)
Brown-out Detect (BOD)
Watchdog Timer(WDT) con oscilador independiente para una operación confiable
MCLR/pin de entrada, multiplexado
Interrupción por cambio de estado
Resistencias pull-up internas programables Individualmente
Protección de código Programable
Alta duración de FLASH/EEPROM
- 100,000 escrituras en memoria Flash
- 1,000,000 escrituras en EEPROM
- Flash/Data EEPROM Retención:> 40 años

Características de bajo consumo:


Corriente de Reserva (standby):
- 1 nA a 2.0V, típico
Corriente de operación:
- 8.5 uA a 32Khz, 2.0V, típico
- 100 uA a 1Mhz, 2.0V, típico
Corriente Watchdog Timer:
- 300 nA 2.0V, típico
CorrienteTimer1 :
4 uA a 32Khz, 2.0V, típico

Características de Periféricos:
6 entradas/salidas con control de dirección individual(*)
Alta corriente suministrada: 25mA
Módulo Comparador Analógico
Comparador de Voltaje Programable. Módulo (CVREF)
Entradas multiplexadas programables.
La salida del Comparador es accesible externamente
Módulo Convertidor Analógico/Digital (PIC12F675):
- Resolución de 10 bits
- Entrada de 4 canales programable
- Entrada de Referencia de Voltaje
Timer0: temporizador/contador de 8 bits con prescaler de 8 bits programable.
Timer1 Extendido:
- Temporizador/contador de 16 bytes con prescaler
- Modo de Entrada externo (External Gate Mode)
- Opción para usar OSC1 y OSC2 en modo de LP como oscilador de Timer1, si el modo INTOSC está
seleccionado
Programación en circuito (In-Circuit Serial Programming (ICSP)) vía dos pines

(*) GP3 puede funcionar como MCLR, como un pin de entrada con interrupción por cambio de estado o
como Vpp para la programación del PIC, pero no como pin de salida.
Esta imagen nos permite ver las pocas diferencias existentes entre ambos PICs, básicamente que el
12F675 está dotado de 4 canales A/D. estas diferencias serán puntualmente comentadas a lo largo del
tema:

y en la distribución de sus pines, una vista más detallada:

Diagrama de Bloques del PIC, con la descripción de sus pines y configuración interna. Podemos encontrar
información adicional en el Manual de Referencia (PIC Mid-Range Reference Manual (DS33023)) en la
web de Microchip.
Descripción detallada de los pines del PIC:
Esto es a mi entender el punto de partida necesario. Las primeras hojas del datasheet nos dirán si es la
elección correcta a nuestras necesidades. ¿dispone de un número suficiente de entradas/salidas? (en
adelante I/O), ¿necesitamos o sería muy conveniente disponer de un puerto serie por hardware?, ¿de un
puerto USB?, ¿de más memoria?... todo esto lo podemos ver en unas pocas páginas del datasheet.

A modo de un pequeño repaso:


AN0..AN3 = Entradas de los canales de los convertidores A/D
CIN+ y CN- = Entradas Comparador
COUT = Salida Comparador
CLKIN = Entrada de reloj /conexión oscilador RC
CLKOUT = Salida FOSC/4
GP0..GP5 = I/O bi-direccionales con pull-up programable e interrupción por cambio de estado.(*)
ICSPDAT = Pin de Datos para programación ICSP
ICSPCLK = Pin de Reloj para programación ICSP
INT = Interrupción Externa
T0CKI = Entrada reloj de TMR0
T1CKI = Reloj TMR1
T1G = TMR1 Gate
VREF = Voltaje de Referencia Externo

(*) No es así en el caso de GP3, que puede funcionar solo como entrada.
GP3 = entrada con interrupción por cambio de estado.
MCLR = Master Clear
VPP = Voltaje de programación
Bien, como introducción a los Registros del PIC creo que 'Configuration Bits' (capítulo 9.1 del datasheet)
es un buen punto de partida. Si bien es algo que podemos hacer a la hora de grabar el PIC seleccionando
las opciones adecuadas en el software de grabación en mi opinión es altamente recomendable añadirlo al
principio de nuestro programa. Según el lenguaje de programación hay diferentes sintaxis para hacerlo:

en ASM -> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
en CCS -> #FUSES XT,NOWDT,NOPROTECT,PUT
Como se puede ver, son bastante intuitivas ambas formas de hacerlo

en PSI -> Define CONF_WORD = 0x31a1


En el menú Options .. Configuration bits indicamos las opciones deseadas y nos da como resultado el
valor de CONF_WORD

en PBP -> @ DEVICE pic12F675, 0x31A1


Sin embargo, y aquí quería llegar, ¿cómo obtenemos ese valor para PBP?
Podemos recurrir a ejecutar el software de programación (Winpic800 por ejemplo), establecer las
opciones y tomar nota del valor que devuelve en la posición 0x2007 para posteriormente añadirlo a la
instrucción @ DEVICE pic12F675, valor. (ver que hay una diferencia en el valor devuelto: PSI = 0x31a1
y Winpic = 0x3FA1)
Para entender esta diferencia de valor y adentrarnos ya en el aprendizaje de los Registros, veamos la
siguiente imagen y su descripción:

bit 13-12  BG1:BG0: bits de calibración 'Bandgap' para voltaje de BOD  y POR (1)
                00 = Lowest bandgap
                11 = Highest bandgap
bit 11-9    No implementados: se leen como ‘0’
bit 8         /CPD: Data Code Protection bit(2)
                1 = Data memory code protection deshabilitada
                0 = Data memory code protection habilitada
bit 7         /CP: Code Protection bit(3)
                1 = Program Memory code protection deshabilitada
                0 = Program Memory code protection habilitada
bit 6         BODEN: Brown-out Detect Enable bit(4)
                1 = BOD habilitado
                0 = BOD deshabilitado
bit 5         MCLRE: GP3/MCLR pin function select(5)
                1 = GP3/MCLR pin function como MCLR
                0 = GP3/MCLR pin function como digital I/O, MCLR internamente llevada a VDD
bit 4         /PWRTE: Power-up Timer Enable bit
                1 = PWRT deshabilitado
                0 = PWRT habilitado
bit 3        WDTE: Watchdog Timer Enable bit
                1 = WDT habilitado
                0 = WDT deshabilitado
bit 2-0     FOSC2:FOSC0: Oscillator Selection bits
               111 = oscilador RC: CLKOUT en GP4/OSC2/CLKOUT, RC en GP5/OSC1/CLKIN
               110 = oscilador RC: I/O en GP4/OSC2/CLKOUT, RC en GP5/OSC1/CLKIN
               101 = oscilador INTOSC: CLKOUT en GP4/OSC2/CLKOUT, I/O en GP5/OSC1/CLKIN
               100 = oscilador INTOSC: I/O en GP4/OSC2/CLKOUT, I/O en GP5/OSC1/CLKIN
               011 = EC: I/O en GP4/OSC2/CLKOUT, CLKIN en GP5/OSC1/CLKIN
               010 = oscilador HS: cristal/resonador de alta frecuencia en GP4/OSC2/CLKOUT y
GP5/OSC1/CLKIN
               001 = oscilador XT: cristal/resonador en GP4/OSC2/CLKOUT y GP5/OSC1/CLKIN
               000 = oscilador LP: cristal de baja frecuencia en GP4/OSC2/CLKOUT y GP5/OSC1/CLKIN

*******
Notas:
1: los bits de calibración de bandgap están programados de fábrica y se deben leer y guardar antes de
borrar el dispositivo. Tal como está especificado en 'PIC12F629/675 Programming Specification'. Estos
bits se reflejan en la exportación de la palabra de configuración. Las Herramientas de Desarrollo de
Microchip mantienen todos los bits de calibración a la configuración de fábrica.
2: Todos los datos contenidos en la EEPROM se borrarán cuando está desactivada la protección de
código.
3: Toda la Memoria de Programa, incluido el valor OSCCAL, se borrará cuando está desactivada la
protección de código.
4: Habilitar Brown-out Detect no habilita automáticamente Power-up Timer.
5: Cuando MCLR se declaró en los modos INTOSC o RC, se deshabilita el reloj del oscilador interno.
/: Indica 'negado' en el modo texto. 0 = habilitado, 1 = deshabilitado
*****

Ahora veamos bit a bit como llegar al punto de partida... el valor 0x31A1. Este valor hexadecimal se
corresponde en binario con 11-000-110100-001 (los guiones son para mayor claridad), y consultando la
tabla vemos que:
bandgap = 11 (Highest)
bits 11..9 = 000
/CPD = 1 (deshabilitado)
/CP = 1 (deshabilitado)
BODEN = 0 (deshabilitado)
MCLRE = 1 (funciona como MCLR)
/PWRTE = 0 (habilitado)
WDTE = 0 (deshabilitado)
FOSC2: FOSC0 = 001 (oscilador XT: cristal/resonador en OSC2 y OSC1)

¿y que pasaba con el valor 0x3FA1? Veamos este valor en binario: 11-111-110100-001 para apreciar que
solo cambian los bits 11..9 cuyo valor siempre se lee como '0' y por tanto a efectos de configuración
ambos valores proporcionan igual resultado.

Esta palabra de configuración de 14 bits se escribe durante el proceso de grabación del PIC y no se puede
modificar durante la ejecución del programa. Ocupa la posición reservada de memoria 0x2007.

Configuraciones de oscilador
TIPOS DE OSCILADOR
El PIC12F629/675 puede funcionar en ocho modos diferentes de oscilador. El usuario puede programar
tres bits de configuración (FOSC2:FOSC0) para seleccionar uno de estos ocho modos:
• LP - Cristal de Bajo Consumo
• XT - Cristal/Resonador
• HS - Cristal/Resonador de Alta Velocidad
• RC - Resistencia/Condensador Externa (2 modos)
• INTOSC - Oscilador Interno (2 modos)
• EC - Reloj Externo

OSCILADOR DE CRISTAL/RESONADOR CERÁMICO


En los modos XT, LP o HS un cristal/resonador cerámico se conecta a los pines OSC1 y OSC2 para
establecer la oscilación (ver la Figura 9-1). El diseño de oscilador del PIC12F629/675 requiere el uso de
un 'parallel cut crystal'. El uso de 'series cut crystal' (1) puede producir una frecuencia fuera de las
especificaciones del fabricante del cristal. (1) la traducción más cercana que consigo: 'modo de resonancia
paralelo o serie'
Cuando funciona en modo XT, LP o HS, el dispositivo puede tener una fuente de reloj externa en el pin
OSC1 (ver la Figura 9-2).

Nota: una mayor capacidad aumenta la estabilidad del oscilador pero también aumenta el tiempo de
puesta en marcha. Estos valores son una guía solamente. RS pueden requerirse en modo HS, así como
modo XT para evitar sobrecargar el cristal. Dado que cada cristal tiene sus propias características, el
usuario debe consultar con el fabricante del cristal para conocer los valores apropiados de los
componentes externos. 

RELOJ EXTERNO
Para aplicaciones donde un reloj está disponible ya en el circuito, podemos usarlo directamente con el
pic12f629/675 a condición de que esta fuente de reloj externa cumpla las especificaciones de AC/DC
listadas en la Sección 12.0
La figura 9-2 muestra como se debería configurar el circuito del reloj externo

OSCILADOR RC
Para aplicaciones donde no se necesite una temporización precisa, podemos usar la opción de oscilador
RC. La operación y la funcionalidad del oscilador RC depende de varias variables. La frecuencia está en
función de :
-Tensión de alimentación.
-Los valores de Resistencia (REXT) y Condensador (CEXT).
-La temperatura.
Se ha de tener presente también la tolerancia de R y C.
Dos opciones están disponibles para este modo de Oscilador, que permiten que GP4 sea usado como una
entrada/salida (I/O) de propósito general o como una salida FOSC/4.

OSCILADOR 4 MHZ INTERNO


Cuando está calibrado, el oscilador interno proporciona un Reloj de sistema (nominal) de 4 MHz. Ver
Especificaciones Eléctricas, en la Sección 12.0, para información sobre variación de voltaje y
temperatura.
Dos opciones están disponibles para este modo de Oscilador que permiten que GP4 sea usado como I/O
de propósito general o una salida FOSC/4.

Calibración del Oscilador Interno - Se tratará más adelante, junto con bandgap.

CLKOUT
Los dispositivos PIC12F629/675 se pueden configurar para proveer de una señal de reloj en los modos
INTOSC y RC.
Cuando está configurado, se obtiene la frecuencia del oscilador dividida por cuatro (FOSC/4) en la salida
del pin GP4/OSC2/CLKOUT. El FOSC/4 puede ser usado para test o para sincronizar otra lógica.

para ampliar información:


http://www.huarpe.com/electronica/osc/oscilador-xtal.html
http://en.wikipedia.org/wiki/Crystal_oscillator#Resonance_modes
http://ww1.microchip.com/downloads/en/DeviceDoc/33023a.pdf
Los Modos de RESET

Un RESET supone reiniciar o restablecer las condiciones de funcionamiento del PIC


El PIC12F629/675 diferencia entre varios modos de RESET:
Power-on Reset (POR)
Watchdog (WDT) durante un funcionamiento normal
Watchdog (WDT) durante el modo SLEEP
/MLCR durante un funcionamiento normal
/MLCR durante el modo SLEEP
Brown-out Detect (BOD)

El comportamiento del circuito y el estado de los registros afectados por un RESET son diferentes
dependiendo de la situación que se produzca. Algunos registros no se verán afectados en cualquier
condición de RESET; su estado es desconocido en Power-on Reset (POR) y no cambian en cualquier otro
modo de RESET. La mayoría de los demás registros se restablecen a un “estado de RESET ” en:
Power-on Reset
/MCLR Reset
WDT Reset
WDT Reset en modo SLEEP
Brown-out Detect (BOD) Reset 

No están afectados por un 'despertar ' (wake-up) de WDT, ya que se considera como la reanudación de
una operación normal. Es posible distinguir por software el origen del RESET. Para ello, basta con leer
los bits /TO y /PD del registro de estado (Status) ya que son activados o borrados según las situaciones de
RESET como se indica en la Tabla 9-4 al final de este post. Estos bits se utilizan en el software para
determinar la naturaleza del RESET. Para obtener una descripción completa de los Estados de RESET de
todos los registros, consultar la Tabla 9-7 en la página 59 del datasheet. Véase la Tabla 12-4 en la sección
'Electrical Specifications Section' para la especificación del ancho de pulso.
/MCLR
Se dispone de un pin destinado específicamente a ejecutar un RESET en el caso de una falla o cuando sea
necesario restablecer el sistema. Esta señal se aplica al pin /MCLR, cuya entrada está negada, por lo cual
tendremos que conectarlo a la alimentación positiva VDD si queremos que nuestro PIC funcione.
Esta entrada no sólo se activa de manera externa, si no que el propio PIC la ejecuta en las siguientes
ocasiones:
- La tensión de alimentación del PIC ha caído por debajo de los 2.2 V
- Si se acaba de encender el circuito y PWRT está activado, el PIC permanece en estado de RESET hasta
que la tensión se estabiliza.

Una opción de /MCLR interno se puede establecer activando el bit MCLRE en el registro 'Configuration
Word', /MCLR es llevado internamente a VDD. No se dispone de la opción pull-up en el pin /MCLR
El PIC12F629/675 dispone de un filtro de ruido en /MCLR Reset para detectar e ignorar pulsos pequeños
(provocados por ruido en la alimentación, electricidad estática, interferencias... por ejemplo).
Se debe tener en cuenta que un WDT Reset no lleva a /MCLR a un estado bajo.

Circuito recomendado por Microchip:

Si usamos la programación en circuito (ICSP) sucederá que al momento de grabar el PIC la tensión de
programación (Vpp = +/- 13V) llegará al resto del circuito, con lo que ello conlleva. Para evitarlo
añadiremos un diodo en serie con la resistencia en el circuito. En la imagen podemos ver también un
pulsador que lleva el pin a GND a través de una resistencia de 100 Ohms para forzar un RESET manual.
POWER-ON RESET (POR)
Mantiene al PIC en estado de RESET hasta que VDD haya alcanzado un nivel suficientemente alto para
su funcionamiento correcto. Para usar POR simplemente lleva el pin /MCLR a través de una resistencia a
VDD. Esto eliminará componentes RC externos generalmente necesarios para crear un Power-on Reset.
Un tiempo máximo de subida es necesario para VDD. Consulta las Especificaciones Eléctricas para
obtener detalles (véase la Sección 12.0).
Si está habilitado BOD, no se aplica la especificación de tiempo máximo de subida. La circuitería de
BOD mantendrá el dispositivo en RESET hasta que VDD alcance VBOD (se verá con Brown-out Detect
(BOD)). Cuando el dispositivo comienza su funcionamiento normal (sale de la condición de RESET), los
parámetros de operación del dispositivo (es decir, tensión, frecuencia, temperatura, etc.) deben cumplirse
para garantizar la operación. Si no se cumplen estas condiciones, el dispositivo se mantendrá en estado de
RESET hasta que se cumplan.
Nota: Power-on Reset no provoca un RESET interno cuando VDD decae.

POWER-UP TIMER (PWRT)


Power-up Timer proporciona un tiempo de espera fijo de 72ms (nominal) usado para que la alimentación
se estabilice, para POR o Brown-out Detect. El temporizador de Power-up opera con un oscilador RC
interno. El chip se mantiene en RESET mientras PWRT está activo. La demora de PWRT permite a VDD
alcanzar un nivel aceptable. Un bit de configuración, /PWRTE, puede deshabilitar (si está a 1) o habilitar
(si está a 0) Power-up Timer. Siempre debe estar habilitado Power-up Timer cuando está habilitado
Brown-out Detect. La demora de Power-up Timer variará de chip a chip y debido a:
Variaciones en la alimentación (VDD).
Cambios en la temperatura
Cambios del proceso.
Consulta los parámetros de DC para obtener detalles (sección 12.0).
OSCILADOR START-UP TIMER (OST)
Proporciona un retardo de 1024 ciclos de oscilador (desde la entrada de OSC1) después de la demora
PWRT. Esto asegura que el oscilador de cristal o resonador ha sido iniciado y estabilizado. OST se invoca
sólo para modos XT, LP y HS y sólo en Power-on Reset o un 'despertar' del modo SLEEP.

BROWN-OUT DETECT (BOD)


Los PIC12F629/675 tienen incorporado un circuito BROWN-OUT DETECT (BOD).Un bit de
configuración en el registro Configuration Word, BODEN, puede deshabilitar (si está a 0) o habilitar (si
está a 1) el circuito Brown-out Detect.
Monitoriza la alimentación, y si VDD cae por debajo de VBOD pero es mayor que el parámetro (TBOD)
(véase sección 12.0 Tabla 2.4 – página 96), Brown-out Detect forzará un RESET del dispositivo. Esto
ocurrirá independientemente del 'VDD slew-rate(*)'. No se garantiza un RESET si VDD cae por debajo
de VBOD pero es menor que el parámetro (TBOD).
(*) Se le define como la velocidad de cambio del voltaje de salida con respecto a las variaciones en el
voltaje de entrada (Wikipedia)

En cualquier RESET (Power-on, Brown-out, Watchdog, etc.), el chip permanecerá en RESET hasta que
VDD supere BVDD (consulte la figura 9-6). Power-up Timer se invocará, si está habilitado, y mantendrá
el chip en RESET durante 72ms adicionales. Si VDD cae por debajo de BVDD mientras se está
ejecutando Power-up Timer, el chip regresará a Brown-out Detect y se reiniciará Power-up Timer. Una
vez VDD se eleva por encima de BVDD, el Power-up Timer ejecutará un RESET de 72ms.
Nota: Brown-out Detect no habilita Power-up Timer si el bit /PWRTE en Configuration Word está
habilitado.
TIME-OUT SEQUENCE
Al recibir la alimentación, la secuencia de tiempo de espera es como sigue: en primer lugar, se invoca
PWRT una vez que POR ha terminado. A continuación, se activará OST. El tiempo de espera total variará
en función de la configuración del oscilador y el estado del bit /PWRTE. Por ejemplo, en modo de CE con
/PWRTE a 0 (PWRT deshabilitado), no habrá tiempo de espera en absoluto. La figura 9-7, la figura 9-8 y
la figura 9-9 del datasheet ilustran secuencias de tiempo de espera.
Dado que los intervalos de espera suceden en el pulso POR, si /MCLR se mantiene bajo durante
demasiado tiempo, los intervalos de espera expirarán. Si / MCLR pasa a un estado alto comenzará la
ejecución inmediatamente (ver la Figura 9-8). Esto es útil para propósitos de test  o para sincronizar más
de un dispositivo PIC12F629/675 en funcionamiento en paralelo.

POWER CONTROL (PCON) STATUS REGISTER


El registro PCON (dirección 8Eh) tiene dos bits. El Bit0 es BOD (Brown-out Detect). BOD es
desconocido para Power-on Reset. Se debe establecer por el usuario y comprobado en posteriores RESET
para confirmar si BOD = 0, que indica que un descenso (brown-out) ha ocurrido. El bit BOD STATUS no
tiene mayor importancia y no es necesariamente previsible si está deshabilitado el circuito de Brown-out
(estableciendo BODEN bit = 0 en Configuration Word).
El Bit1 es POR (Power-on Reset). Es un 0 en Power-on Reset y no se ve afectado. El usuario debe escribir
un 1 en este bit después de un Power-on Reset. En un RESET posterior, si POR es 0, indicará que se ha
producido un Power-on Reset (por ejemplo, VDD puede haber caído demasiado).

Mas información:
Ver los gráficos y tablas al final del capítulo 9 el datasheet, así como las Especificaciones Eléctricas en el
capítulo 12.

APPNote:
http://ww1.microchip.com/downloads/en/AppNotes/00607b.pdf
Mid-Range MCU Family Reference Manual. Debería estar en nuestro ordenador tal como lo está el
datasheet del PIC, ya que contiene información adicional a éste:
http://ww1.microchip.com/downloads/en/DeviceDoc/33023a.pdf

/CP y /CPD
Tanto la Memoria de Programa como la Memoria de Datos del PIC12629/675 pueden ser protegidas para
que no puedan ser leídas por otra persona. Esto no impide que el PIC funcione como siempre, lo único
que nos impide es leerlo.
Estas protecciones se seleccionan en el registro Configuration Word y por tanto no serán modificables en
tiempo de ejecución.
Hemos de tener cuidado con estas opciones y no activar la protección hasta tener la absoluta seguridad de
que el programa es la versión definitiva, porque una vez grabado el PIC con la protección activada no
podremos volver atrás.

Bandgap Calibration bits


00 = Lowest
01 = Mid low
10 = Mid high
11 = Highest
Sirven como configuración para Brown-out Detect y Power-on Reset. El datasheet menciona que son bits
preprogramados de fábrica y no se deben alterar.
La pregunta que me surge es ¿Cómo hago para mantener su valor de fábrica si no lo conozco?. Para
resolver esta pregunta basta con realizar una lectura del PIC desde el software del programador, y en
función del valor obtenido sabremos ese valor de bandgap.
He leído un PIC12F675 usando un programador GTP-USB+ y Winpic800 y la respuesta ha sido esta:
bandgap 00 = Lowest
Si recordamos que al principio del tema configuramos para oscilador XT, MCLRE on y PWRTE on y con
un bandgap = 11 (Highest) y obteníamos el valor 0x3FA1 ahora el valor obtenido es 0x0FA1. Así, según
el valor de bandgap leído tendríamos 0x0FA1, 0x1FA1, 0x2FA1 o 0x3FA1.
Trabajar con este software y este programador es realmente muy cómodo, ya que él mismo se encarga de
guardar el valor de bandgap y posteriormente restaurarlo al PIC. En aquellos casos que esto no sucede, si
hemos cambiado el valor de bandgap y no coincide con el del PIC en cuestión, nos lo advertirá mediante
un cuadro de diálogo bastante confuso buena parte de las veces.

Calibrar el Oscilador Interno (OSCCAL)


Una instrucción de calibración está programada en la última ubicación de la Memoria de Programa. Esta
instrucción es un RETLW XX, donde el literal es el valor de calibración. El literal se coloca en el registro
OSCCAL para establecer la calibración del oscilador interno. Para un mejor funcionamiento, usar un
condensador de desacoplo (por ejemplo 100nF) entre VDD y VSS del PIC, y lo más próximo posible a
sus conexiones.
Nota: al borrar el dispositivo se borrará también el valor preprogramado de calibración interna para el
oscilador interno. El valor de calibración debe guardarse antes de borrar el PIC, tal y como se especifica
en 'PIC12F629/675 Programming specification'. Las herramientas de desarrollo de Microchip mantienen
todos los bits de calibración a su configuración de fábrica.
Al igual que en el caso del bandgap, el programador GTP-USB+ lee el valor de calibración y
posteriormente lo restaura al momento de grabar el PIC. Pero esto no es así con todos los programadores
y dada la importancia de este valor, responsable de esa precisión del +/- 1% del oscilador interno, no
restaurarlo implica que la frecuencia se desviará en mayor o menor medida de los 4Mhz.
Con la lectura del PIC12F675 (mencionado en bandgap) he comprobado que el valor de la última posición
de memoria es 0x3448. Con mis primeros PICs de esta serie, programados con un TSE-20, procedía a su
lectura y escribía este valor en una pequeña etiqueta adhesiva que pegaba en la parte inferior del PIC...
Este valor es diferente de un PIC a otro, incluso entre PICs de la misma serie, de manera que no se puede
tomar como referencia para todos.
Mejor que andarse con etiquetas es guardar ese valor y restaurarlo mediante el o los comandos del
lenguaje de programación utilizado.

Un ejemplo en ASM es:

y la forma de hacerlo en PBP es mediante la instrucción 'DEFINE OSCCAL_1K'

Con esto doy por terminada (en principio al menos) la parte dedicada a Configuration Word o palabra de
configuración del PIC.

para ampliar información:


Dogflu66 creó un tema sobre el PIC12F675 en el Foro Todopic que merece nuestra atención:
http://www.todopic.com.ar/foros/index.php?topic=24123.msg195211#msg195211

GPIO PORT
Hay seis pines I/O de propósito general disponibles. Dependiendo de qué periféricos estén habilitados,
puede que algunos o todos los pines no estén disponibles como I/O de propósito general. En general,
cuando se habilita un periférico, el pin asociado no puede usarse como un pin I/O de propósito general. 

GPIO and the TRISIO Registers


GPIO es un puerto bidireccional de 6 bits. El correspondiente registro de dirección de datos es TRISIO.
Configurar un bit TRISIO (= 1) hará que el correspondiente GPIO sea una entrada (es decir, pondrá el
controlador de salida correspondiente en un modo de alta impedancia). Configurar un bit TRISIO (= 0)
hará que el correspondiente GPIO sea una salida (es decir, pondrá el contenido del latch de salida en el
pin seleccionado). La excepción es GP3, que sólo es de entrada y su bit TRISIO siempre se leerá como ‘ 1
’.

Leyendo el registro GPIO se lee el estado de los pines, del mismo modo que una acción de escritura
escribirá en el latch de puerto. Todas las operaciones son 'read-modify-write' (lectura-modificación-
escritura). Por lo tanto, una escritura en un puerto implica que se leen los pines de puerto, este valor es
modificado y, a continuación, escrito en el latch del puerto de datos.GP3 se lee como un 0 cuando
MCLREN = 1. El Registro TRISIO controla la dirección de los pines GP, incluso cuando se usan como
entradas analógicas. El usuario debe asegurar que los bits en el registro TRISIO se mantengan activados
al utilizarlos como entradas analógicas. Los pines I/O configurados como entradas analógicas siempre se
leen como 0.

Nota: Los Registros ANSEL(9Fh) y CMCON(19h) se deben inicializar para configurar los canales
analógicos como entradas digitales. Los pines configurados como entradas analógicas se leerán como 0.

bit 7-6: Sin implementar. Leídos como 0


bit 5-0: GPIO<5:0>: pines I/O de prpósito general
  1 = El pin del Puerto es >VIH
  0 = El pin del Puerto es <VIL

bit 7-6: Sin implementar. Leídos como 0


bit 5-0: TRISIO<5:0>: bits de Control I/O Tri-estado de propósito general
  1 = pin GPIO configurado como una entrada (tri-estado)
  0 = pin GPIO configurado como una salida
Note: TRISIO<3> siempre se lee como 1.

Funciones adicionales de los pines del PIC


Cada pin GPIO en el PIC12F629/675 tiene una opción de interrupción-por-cambio de estado y cada pin
GPIO, excepto GP3, tiene una opción 'weak pull-up' (resistencia pull-up interna).

WEAK PULL-UP
Cada uno de los pines GPIO, excepto GP3, tiene una opción 'weak pull-up' configurable individualmente.
Los bits de control WPUx habilitan o deshabilitan cada una de las pull-up. Consulta el registro 3-3. Cada
pull-upl se desactiva automáticamente cuando el pin de puerto está configurado como una salida. Los
pull-ups están deshabilitados en un Power-on Reset por el bit /GPPU (Registro OPTION_REG).

bit 7-6: Sin implementar. Leídos como 0


bit 5-4: WPU<5:4>: bits del Registro Weak Pull-up
  1 = Pull-up habilitado
  0 = Pull-up deshabilitado
bit 3: Sin implementar. Leído como 0
bit 2-0: WPU<2:0>: bits del Registro Weak Pull-up
  1 = Pull-up habilitado
  0 = Pull-up deshabilitado

Notas:
1 - /GPPU debe estar habilitado para que las pull-up internas lo estén también. Para ello, en el registro
'OPTION REGISTER (ADDRESS: 81h), el bit 7 ha de ser un 1
2 – Weak pull-up se deshabilita automáticamente si el pin está como salida (TRISIO = 0).

INTERRUPT-ON-CHANGE
Cada uno de los pines GPIO es configurable individualmente para una interrupción-por-cambio de estado.
Los bits de control IOC habilitan o deshabilitan la función de interrupción para cada pin. La interrupción-
por-cambio de estado está deshabilitada en un Power-on Reset.
Para habilitar la interrupción, los valores se comparan con el valor almacenado en la última lectura de
GPIO. La ‘no coincidencia’ con la última lectura establece un OR, para activar el GP Port Change
Interrupt flag bit (GPIF) en el Registro INTCON.

Esta interrupción puede 'despertar' al dispositivo del modo SLEEP. El usuario, en la 'Interrupt Service
Routine', puede borrar la interrupción de la siguiente manera:
- cualquier lectura o escritura de GPIO. Esto terminará la condición de no coincidencia.
- borrar el bit de bandera (flag bit) GPIF (Registro INTCON). Una condición de no coincidencia seguirá
activando el bit de bandera GPIF. Leyendo GPIO se pone fin a la condición de no coincidencia y permite
borrar el bit de bandera GPIF.
Nota: si debe realizarse un cambio en el pin I/O cuando una operación de lectura está siendo ejecutada
(comienzo de Q2 cycle), la bandera de interrupción GPIF no se puede establecer.

bit 7-6: Sin implementar. Leídos como 0


bit 5-0: IOC<5:0>: bit de Control GPIO para Interrupción-por-cambio de estado
  1 = Interrupción habilitada
  0 = Interrupción deshabilitada
Nota: Global interrupt enable (GIE) (Registro INTCON) debe estar habilitada para que se reconozcan las
interrupciones individuales.

Breve Descripción de los pines del PIC


Cada pin GPIO está multiplexado con otras funciones. Los pines y sus funciones combinadas se describen
de una manera resumida a continuación. Información específica sobre funciones tales como
Comparadores o Convertidor A/D se tratarán posteriormente en otras secciones.

GP0/AN0/CIN+
GP0 se puede configurar para una de las siguientes funciones:
- I/O de propósito general
- Entrada analógica del módulo A/D (PIC12F675 solamente)
- Entrada del módulo Comparador

GP1/AN1/CIN-/VREF
GP1 se puede configurar para una de las siguientes funciones:
- I/O de propósito general
- Entrada analógica del módulo A/D (PIC12F675 solamente)
- Entrada del módulo Comparador
- Entrada de referencia de voltaje para el módulo A/D (PIC12F675 solamente)

GP2/AN2/T0CKI/INT/COUT
GP2 se puede configurar para una de las siguientes funciones:
- I/O de propósito general
- Entrada analógica del módulo A/D (PIC12F675 solamente)
- Entrada de reloj para TMR0
- Una Interrupción externa 'edge triggered' (disparo por flanco)
- Salida digital del módulo Comparador

GP3/MCLR/VPP
GP3 se puede configurar para una de las siguientes funciones:
- Entrada de propósito general
- Como Master Clear Reset
- Alimentación para programación del PIC - Vpp

GP4/AN3/T1G/OSC2/CLKOUT
GP4 se puede configurar para una de las siguientes funciones:
- I/O de propósito general
- Entrada analógica del módulo A/D (PIC12F675 solamente)
- Entrada TMR1 (gate input)
- Conexión de cristal/resonador
- Salida de reloj

GP5/T1CKI/OSC1/CLKIN
GP5 se puede configurar para una de las siguientes funciones:
- I/O de propósito general
- Entrada de reloj TMR1
- Conexión de cristal/resonador
- Entrada de reloj

Consultar desde la figura 3-1 hasta la 3-5 (páginas 22..24) del datasheet para ver los diagramas de
conexionado de los pines.

MÓDULO TIMER0
El módulo temporizador/contador Timer0 tiene las siguientes características:
• temporizador/contador de 8 bits
• lectura y escritura
• prescaler de 8 bits programable
• selección de reloj interno o externo
• interrupción por desbordamiento (de FFh a 00h)
• selección de flanco (edge) para reloj externo.

Diagrama de bloques del módulo de Timer0 y el prescaler compartido con el WDT.

Funcionamiento del Timer0


El Timer0 puede funcionar de dos formas: como contador de pulsos externos o como temporizador para
calcular intervalos de tiempo. En el caso de que dicha señal provenga del reloj interno, el Timer0 se
utiliza para generar interrupciones periódicas a través de una cuenta programada. En este modo podemos
temporizar eventos.
En el caso de que dicha señal sea de una fuente externa, es especialmente útil para contar el número de
pulsos que dicha señal genera en el tiempo ya que cada pulso de dicha señal incrementa el TMR0.

El modo Temporizador de Timer0 se selecciona desactivando el bit de T0CS (OPTION_REG <5>). En


este modo, el módulo de Timer0 se incrementa con cada ciclo de instrucción (o cada x ciclos dependiendo
del  prescaler). Si TMR0 está activado, el incremento se inhibe para los dos ciclos de instrucción
siguientes. El usuario puede solucionar esto escribiendo un valor ajustado en el registro de TMR0.
El modo Contador se establece activando el bit de T0CS (OPTION_REG <5>). En este modo,
incrementará el módulo de Timer0 ya sea en un flanco ascendente (rising edge) o un flanco descendente
(falling edge) del pin GP2/T0CKI. La transición está determinada por el bit de control del flanco de
origen (T0SE) - (OPTION_REG <4>). Limpiando el bit T0SE se selecciona el flanco ascendente,
mientras que al ponerlo en alto se selecciona un flanco descendente.
En ambos casos al desbordarse (pasar de 0xFF a 0×0) el registro TMR0, la bandera de interrupción del
Timer0 (bit T0IF del registro INTCON) se pone a 1.
Nota: el modo Contador tiene requisitos especiales para el reloj externo. Información adicional en el 'PIC
Mid-Range Reference Manual (DS33023)' -
http://ww1.microchip.com/downloads/en/DeviceDoc/33023a.pdf

Interrupción en Timer0
Una interrupción del Timer0 se genera cuando el registro del contador/temporizador de TMR0 se
desborda (de FFh a 00h). Este desbordamiento activa el bit T0IF. La interrupción puede ser enmascarada
borrando el bit de T0IE (INTCON <5>). El bit de T0IF (INTCON <2>) debe desactivarse por software
por la rutina de interrupción del módulo Timer0 antes de que se vuelva a activar esta interrupción. La
interrupción de Timer0 no puede despertar al PIC del modo SLEEP ya el temporizador está apagado
durante este modo.

Usando Timer0 con un reloj externo


Cuando no se utiliza prescaler, la entrada de reloj externo es la misma que la salida del prescaler. La señal
conectada a TOCKI es muestreada durante los ciclos Q2 y Q4 del reloj interno, por ello es necesario que
permanezca en alto al menos por 2 Tosc más un pequeño retardo de 20nseg y lo mismo en bajo. (es decir,
señales demasiado rápidas no se detectarán).

Nota: Los registros ANSEL(9Fh) y CMCON(19h) deben ser inicializados para configurar un canal
analógico como una entrada digital. Los pines configurados como entradas analógicas son leídos como '0'.
El registro ANSEL está definido para el PIC12F675.

Bits implicados en Option Register:

bit 6 INTEDG: Bit de selección de interrupción por flanco


  1 = Interrupción por flanco ascendente (rising edge) en pin GP2/INT
  0 = Interrupción por flanco descendente (falling edge) en pin GP2/INT
bit 5 T0CS: TMR0 Bit de selección de origen de reloj
  1 = Transición en pin GP2/T0CKI
  0 = Ciclo de instrucción interna (CLKOUT)
bit 4 T0SE: TMR0 Bit de selección de origen del flanco
  1 = Se incrementa en una transición alto-a-bajo en pin GP2/T0CKI
  0 = Se incrementa en una transición bajo-a-alto en pin GP2/T0CKI
bit 3 PSA: Bit de asignación del prescaler
  1 = Prescaler está asignado al WDT
  0 = Prescaler está asignado al módulo TIMER0
bit 2-0 PS2:PS0: Bits de selección Ratio-Prescaler

Prescaler
Un contador de  8 bits está disponible como prescaler para el módulo Timer0, o como un postscaler para
el Watchdog Timer. Para simplificar, se hará referencia a este contador como “prescaler” . La asignación
de prescaler está controlada en el software por el bit de control PSA (OPTION_REG <3>). Un 0 en el bit
PSA asignará el prescaler a Timer0. Los valores de prescaler son seleccionables a través de los bits de
PS2:PS0 (OPTION_REG <2:0>).
El prescaler no se puede leer o escribir. Cuando se asigna al módulo Timer0, todas las instrucciones que 
escriban en el registro TMR0 (por ejemplo, CLRF 1 MOVWF 1, BSF 1, x.... etc.) borrarán el prescaler.
Cuando está asignado a WDT, una instrucción de CLRWDT borrará el prescaler junto con el Watchdog
Timer.

Cambiando la asignación del prescaler


La asignación del prescaler está totalmente bajo el control del software (es decir, se puede cambiar “sobre
la marcha” durante la ejecución del programa).
Nota: Para evitar un RESET imprevisto, la siguiente secuencia de instrucciones (ejemplo 4 - 1) se debe
ejecutar al cambiar la asignación prescaler de Timer0 a WDT. Para cambiar el prescaler de WDT al
módulo TMR0, usa la secuencia del ejemplo 4.2. esta precaución se debe tomar siempre que WDT esté
deshabilitado.

para más información:


http://micropic.wordpress.com/2007/06/24/temporizador-timer-0/
un ejemplo en Mikrobasic (a pesar de ser para otro PIC está muy bien documentado):
http://www.jvmbots.com/viewtopic.php?t=188

MÓDULO TIMER1 CON 'GATE CONTROL' (Entrada de Control)

El PIC12F629/675 dispone de un temporizador de 16 bits. El Timer1 tiene las siguientes características:


• temporizador/contador de 16 bits (TMR1H:TMR1L)
• lectura y escritura
• selección de reloj interno o externo
• opera en modo sincrónico o asíncrono
• interrupción por desbordamiento (de FFFFh a 0000h)
• Wake-up (despertar) por desbordamiento (modo asíncrono)
• entrada de habilitación opcional externa (/T1G)
• oscilador LP opcional
El Registro de Control de Timer1 (T1CON), mostrado en el registro 5-1, se utiliza para
habilitar/deshabilitar y seleccionar las diversas características del módulo Timer1.

Diagrama de bloques básico del módulo Timer1:

Modos de operación del Timer1


Timer1 puede operar en uno de los tres modos:
• temporizador de 16 bits con prescaler
• contador sincrónico de 16 bits
• contador asíncrono de 16 bit
En el modo Temporizador, Timer1 se incrementa con cada ciclo de instrucción. En el modo Contador,
Timer1 se incrementa en el flanco de subida de la entrada externa de reloj T1CKI. En suma, el reloj del
modo Contador se puede sincronizar con el reloj del sistema microcontrolador o ejecutar
asincrónicamente.
En los módulos de Contador y Temporizador, el reloj del temporizador/contador puede ser habilitado por
la entrada /T1G. Si es necesario un oscilador reloj externo (y el microcontrolador está utilizando el
INTOSC sin CLKOUT), Timer1 puede utilizar el oscilador LP como una fuente de reloj.
Nota: en el modo Contador, un flanco de bajada ha de ser registrado por el contador antes del primer
incremento del flanco de subida

Interrupción Timer1
Los registros (TMR1H:TMR1L) de Timer1 se incrementan hasta FFFFh y vuelven a 0000h. Cuando el 
Timer1 vuelve a 0, se habilita el bit de la bandera de interrupción (PIR1 <0>). Para habilitar la
interrupción, se deben configurar estos bits:
• Timer1 bit de interrupción habilitada (PIE1 <0>)
• PEIE bit (INTCON <6>)
• GIE bit (INTCON <7>). La interrupción se borra desactivando la TMR1IF en la rutina de servicio de
interrupción.
Nota: Los registros (TMR1H:TMR1L) y el bit TMR1IF deberían limpiarse antes de habilitar las
interrupciones.
Prescaler Timer1
El Timer1 tiene cuatro opciones de prescaler permitiendo 1, 2, 4 u 8 divisiones del reloj de entrada. Los
bits de T1CKPS (T1CON <5:4>) controlan el contador de prescale. El contador de prescale no se puede
leer ni escribir directamente; sin embargo, el contador de prescaler está desactivado en una escritura en
TMR1H o TMR1L.

bit 7:   Sin implementar, leído como 0


bit 6:   TMR1GE: bit de habilitación de Timer1 Gate
  si TMR1ON = 0 el bit se ignora
  si TMR1ON = 1
    1 = Timer1 está en ON si el pin /T1G está en estado bajo
    0 = Timer1 está en ON
bit 5-4: T1CKPS1:T1CKPS0: bits selección de la entrada de reloj Prescale para Timer1
  11 = 1:8 valor Prescale
  10 = 1:4 valor Prescale
  01 = 1:2 valor Prescale
  00 = 1:1 valor Prescale
bit 3:   T1OSCEN: bit de control para habilitar el Oscilador LP
  si  INTOSC sin CLKOUT está activo:
    1 = Oscilador LP habilitado como reloj de Timer1
    0 = Oscilador LP deshabilitado
  de lo contrario, el bit se ignora
bit 2: /T1SYNC: bit de control de sincronización de la entrada de reloj externa de Timer1
  TMR1CS = 1
    1 = No sincronizado
    0 = Sincronizado
  TMR1CS = 0 el bit se ignora. Timer1 usa el reloj interno
bit 1: TMR1CS: Selección de la fuente de reloj para Timer1
  1 = Reloj externo en pin T1OSO/T1CKI (en el flanco de subida)
  0 = Reloj interno (FOSC/4)
bit 0: TMR1ON: bit habilitación Timer1
  1 = Habilita Timer1
  0 = Detiene Timer1

Timer1: Operación en Modo Contador Asíncrono


Si el bit de control /T1SYNC (T1CON <2>) está habilitado, la entrada de reloj externa no está
sincronizada. El temporizador sigue un incremento asíncrono a la fase del reloj interno. El temporizador
seguirá ejecutándose durante el modo SLEEP y puede generar una interrupción por desbordamiento, que
despertará al procesador.
Nota: Los Registros ANSEL(9Fh) y CMCON(19h) se deben inicializar para configurar los canales
analógicos como entradas digitales. Los pines configurados como entradas analógicas se leerán como 0.

Leyendo y Escribiendo Timer1 en Modo Contador Asíncrono


La lectura de TMR1H o TMR1L, mientras se ejecuta el temporizador desde un reloj asíncrono externo,
asegura una lectura válida (tener cuidado con el hardware). Sin embargo, el usuario debe tener en cuenta
que leer el temporizador de 16 bits en dos registros de 8 bits plantea algunos problemas, ya que se puede
desbordar el temporizador entre las lecturas.
Para las escrituras, se recomienda que el usuario simplemente detenga el temporizador y escriba los
valores deseados. Una contención de la escritura puede suceder en los registros del temporizador,
mientras el registro está  incrementándose. Esto puede producir un valor impredecible en el registro del
temporizador.
Nota:
Leer los valores de 16 bits requiere atención. Los ejemplos 12-2 y 12-3 en el 'PIC® Mid-Range MCU
Family Reference Manual (DS33023)' muestran cómo leer y escribir el Timer1 cuando se ejecuta en
modo asíncrono.

Oscilador Timer1
Un circuito oscilador de cristal está integrado entre los pines OSC1 (entrada) y OSC2 (salida). Se habilita
activando el bit de control T1OSCEN (T1CON <3>). El oscilador es un oscilador de baja potencia
nominal de hasta 37 kHz., que sigue ejecutándose durante el modo SLEEP. Un cristal 32 kHz. es lo
deseado. La Tabla 9-2 del datasheet muestra la selección de condensadores para el oscilador Timer1.

El oscilador Timer1 se comparte con el oscilador LP. Por tanto, Timer1 puede utilizar este modo sólo
cuando el reloj del sistema se deriva del oscilador interno. De la misma forma que en el caso del oscilador
LP, el usuario debe proporcionar un retraso por software para garantizar la puesta en marcha adecuada del
oscilador.

Mientras está habilitado, TRISIO4 y TRISIO5 están activados. GP4 y GP5 ‘se leen 0’ y TRISIO4 y
TRISIO5 ‘1’.

Nota: el oscilador requiere un tiempo de puesta en marcha y estabilización antes de usarse. Así,
T1OSCEN debe activarse y establecerse un retardo adecuado antes de habilitar Timer1.

Timer1 en Modo SLEEP


Timer1 solo puede funcionar en el modo SLEEP cuando trabaja en el modo de Contador Asíncrono. En
este modo, una fuente externa de cristal o reloj puede utilizarse para incrementar el contador. Para
configurar el temporizador para activar el dispositivo:
• Timer1 debe estar en ON (T1CON <0>)
• bit TMR1IE (PIE1 <0>) debe estar habilitado
• bit PEIE (INTCON <6>) debe estar habilitado
El dispositivo se despertará en un desbordamiento. Si el bit GIE (INTCON <7>) se activa, el dispositivo
se despertará y saltará a la rutina de servicio de interrupción en un desbordamiento.

para más información:


http://micropic.wordpress.com/2007/06/24/temporizador-timer-1/

Las Interrupciones
Una interrupción es un evento que hace que el microcontrolador deje de ejecutar la tarea que está
realizando para atender dicho acontecimiento y luego regrese y continúe la tarea que estaba realizando
antes de que se presentara la interrupción. El PIC12F629/675 tiene 7 fuentes de interrupción:
• Interrupción externa GP2/INT
• Interrupción por desbordamiento de TMR0
• Interrupción por cambio lógico de GPIO
• Interrupción comparador
• Interrupción A/D (sólo PIC12F675)
• Interrupción por desbordamiento de TMR1
• Interrupción EEPROM Data Write

El registro de Control de Interrupción (INTCON) y el registro de Interrupción de Periférico (PIR)


registran solicitudes de interrupción individuales en bits de bandera (flag bits). En el registro INTCON
también se pueden habilitar bits de interrupción individual y global.

Un bit de de interrupción global, GIE (INTCON <7>) permite habilitar (si está activado)  o deshabilitar
(si está desactivado) todas las interrupciones. Las interrupciones pueden ser deshabilitadas a nivel
individual a través de sus correspondientes bits en el registro INTCON y registro PIE. GIE está
desactivado en RESET.

El retorno desde la instrucción de interrupción, RETFIE, abandona la rutina de interrupción, así como
activa el bit GIE, que rehabilita las interrupciones.

Las siguientes banderas de interrupción figuran en el registro INTCON:


• INT - pin interrupción
• GP port – interrupción por cambio
• TMR0 – interrupción por desbordamiento

Las banderas de interrupción de periférico figuran en el registro especial PIR1. Los bits de habilitación de 
interrupciones correspondientes figuran en el registro especial PIE1.

Las siguientes banderas de interrupción figuran en el registro PIR:


• EEPROM Data Write interrupción
• Interrupción A/D
• Interrupción comparador
• Interrupción por desbordamiento de Timer1

Cuando una interrupción es atendida:


• GIE se desactiva para deshabilitar cualquier otra interrupción
• La dirección de retorno se coloca en la pila
• PC se carga con 0004h

Una vez en la Rutina del Servicio de Interrupción, se pueden determinar los orígenes de la interrupción
sondeando los bits de la bandera de interrupción. Deben desactivarse en el software antes de rehabilitar
las interrupciones para evitar interrupciones recursivas de  GP2/INT.
Para eventos de interrupción externos, como el pin INT, o interrupción por cambio en el puerto GP, la
latencia de interrupción será de tres o cuatro ciclos de instrucción. La latencia exacta depende de cuando
el evento de interrupción se produce (véase la figura 9-11 – pág 63). La latencia es la misma para
instrucciones de uno o dos ciclos. Una vez en la Rutina del Servicio de Interrupción, se pueden determinar
los orígenes de la interrupción sondeando los bits de la bandera de interrupción. Deben desactivarse en el
software antes de rehabilitar las interrupciones para evitar varias solicitudes de interrupción.

Notas:
1 - los bits de la bandera de interrupción están establecidos, independientemente del estado de su
correspondiente máscara de bit o el bit GIE.
2 - Cuando se ejecuta una instrucción que borra el bit GIE, las interrupciones que estén pendientes de
ejecución en el próximo ciclo se ignoran. Las interrupciones que se omitieron siguen pendientes para ser
atendidas cuando el bit GIE se establezca de nuevo.

GP2/INT INTERRUPT
La Interrupción externa en el pin GP2/INT se activa por flanco (edge-triggered); ya sea por flanco
ascendente (rising) si el bit INTEDG  (OPTION <6>) está a 1, o flanco descendente (falling), si el bit
INTEDG está a 0. Cuando un flanco válido aparece en el pin GP2/INT, se establece el bit INTF
(INTCON <1>). Se puede deshabilitar esta interrupción si ponemos a 0 el bit de control INTE (INTCON
<4>). El bit INTF debe desactivarse por software en la Rutina del Servicio de Interrupción antes de
rehabilitar esta interrupción. La interrupción de GP2/INT puede despertar al procesador del modo SLEEP
si el bit INTE fue previamente establecido para entrar en este modo. El estado del bit GIE decide si el
procesador salta al vector de interrupción siguiente al despertar o no. Se verán más adelante los detalles
sobre el modo SLEEP. Consultar la figura 9-13 para conocer el tiempo de 'wake-up' (despertar) del modo
SLEEP tras una interrupción de GP2/INT.
Nota: Los Registros ANSEL(9Fh) y CMCON(19h) se deben inicializar para configurar los canales
analógicos como entradas digitales. Los pines configurados como entradas analógicas se leerán como 0.

TMR0 INTERRUPT
Un desbordamiento del registro TMR0 (FFh → 00 h) activará el bit T0IF (INTCON <2>). La interrupción
puede habilitarse o deshabilitarse activando o limpiando el bit T0IE (INTCON <5>).

GPIO INTERRUPT
Un cambio de entrada en GPIO activa el bit GPIF (INTCON <0>). La interrupción puede habilitarse o
deshabilitarse activando o limpiando el bit GPIE (INTCON <3>). Además los pines individuales pueden
ser configurados mediante el registro IOC.
Nota: si un cambio en el pin I/O debería ocurrir cuando la operación de lectura está siendo ejecutada
(inicio del Q2 cycle), entonces la bandera de interrupción GPIF podría no activarse.
COMPARATOR INTERRUPT
Se verá cuando se trate el Módulo Comparador.

A/D CONVERTER INTERRUPT


Después de una conversión es completa, se activa el indicador ADIF (PIR <6>). La interrupción puede
habilitarse o deshabilitarse activando o limpiando el bit ADIE (PIE <6>). Se tratará con más detalle en el
Módulo A/D..

Registros implicados en las Interrupciones. Se verán con más detalle posteriormente:

Ver las figuras 9-10 y 9-11 del datasheet.

Guardar contexto durante las Interrupciones


Durante una interrupción, sólo el valor que devuelve PC se guarda en la pila. Normalmente, los usuarios
quieren guardar registros clave durante una interrupción, por ejemplo, el registro W y el registro
STATUS. Esto debe aplicarse en el software. En el ejemplo 9-2 se almacena y restaura el registro
STATUS y el registro W. El registro de usuario, STATUS_TEMP, debe definirse en ambos Bancos y se
deben definir así mismo los desplazamientos desde la dirección base del Banco (por ejemplo, W_TEMP
se define en 0x20 en el Banco 0 y también debe definirse en 0xA0 en el Banco 1). El registro de usuario,
STATUS_TEMP, debe definirse en el Banco 0. El ejemplo 9-2:
• Almacena el registro W
• Almacena el registro STATUS en el Banco 0
• Ejecuta el código ISR
• Restaura el registro STATUS (y el bit de selección de Banco)
• Restaura el registro W

Watchdog Timer (WDT)


Es un oscilador RC interno, que no requiere componentes externos. Este oscilador RC es independiente
del oscilador RC externo del pin CLKIN y de INTOSC, lo que significa que se ejecutará el WDT incluso
si se ha detenido el reloj en los pines OSC1 y OSC2 del dispositivo (por ejemplo, mediante la ejecución
de una instrucción SLEEP). Su función es evitar bloqueos del PIC (que haya entrado en un bucle sin fin o
que por malfuncionamiento se haya quedado bloqueado, por ejemplo) y ejecutar un RESET para la vuelta
a un funcionamiento normal del mismo.
En un funcionamiento normal, si el tiempo WDT expira se genera un RESET en el dispositivo. Si está en
modo SLEEP, al expirar WDT el dispositivo se despierta y continúa con el funcionamiento normal. El
WDT puede desactivarse permanentemente poniendo a '0' el bit de configuración WDTE (Registro
Configuration Word)).

Período WDT
WDT tiene un período de tiempo de espera nominal de 18ms, (sin prescaler). Los períodos de tiempo de
espera varían con la temperatura, VDD y las variaciones de proceso de parte a parte (ver especificaciones
DC). Si se desean períodos de tiempo de espera más largos, un prescaler con un ratio de división de hasta
1:128 se puede asignar a WDT bajo control del software escribiendo en 'OPTION Register' . Por lo tanto,
el período de tiempo de espera máximo que puede alcanzarse es de 2,3 segundos.
Para poder eliminar un eventual bloqueo del PIC durante la ejecución del programa principal, se inserta
en él una instrucción especial, la cual pone a cero en intervalos regulares el WDT, no permitiéndole llegar
al final de su temporización.
Las instrucciones CLRWDT y SLEEP desactivan el WDT y el prescaler, si están asignadas a WDT y
evitan que se alcance el final de la temporización y se genere un RESET.
El bit /TO en el registro STATUS se deshabilitará si WDT expira.
 
Consideraciones sobre la programación de WDT
Debería tenerse en cuenta que en la peor de las condiciones (es decir, VDD = mínima, temperatura =
Max., máximo. WDT prescaler) pueden pasar varios segundos antes de que el tiempo de WDT expire.
Power-Down Mode (SLEEP)
El Power-Down Mode o SLEEP Mode, es un estado particular de funcionamiento del PIC, utilizado para
reducir el consumo de corriente en los momentos que no realiza ninguna tarea o está a la espera de un
suceso externo. Al ejecutar una instrucción SLEEP se entra en Power-Down Mode.
Si está habilitado el Watchdog Timer:
• el WDT se limpiará pero se mantiene corriendo
• el bit /PD en el registro STATUS se desactiva
• el bit /TO se activa
• el controlador del oscilador se desconecta
• los puertos I/O mantienen el estado que tenían antes de que se ejecutara SLEEP (conducción alto, bajo,
o alta-impedancia).
Para un menor consumo en este modo, todos los pines I/O deberían estar ya sea a VDD, o VSS, sin
circuitería externa que consuma corriente de los pines I/O, y los Comparadores y CVREF deberían estar
deshabilitados. Los pines I/O que estén en estado de alta-impedancia deben ser llevados a un nivel alto o
bajo externamente para evitar cambios en la corriente causados por entradas flotantes. La entrada de
T0CKI debería igualmente estar en VDD o VSS para un menor consumo de corriente. Debería
considerarse el uso de resistencias pull-ups internas en GPIO.
El pin /MCLR debe estar a un nivel lógico alto (VIHMC).
Nota: Se debe tener en cuenta que un RESET generado por WDT no lleva a /MCLR a un estado bajo
Wake-up from SLEEP (Despertar del Modo SLEEP)
El dispositivo puede despertar del modo SLEEP por alguno de los siguientes eventos:
- entrada de RESET externo en pin /MCLR
- Watchdog Timer Wake-up (si se habilitó WDT)
- Interrupción en pin GP2/INT, interrupción por cambio de estado GPIO, o interrupción de un periférico.

El primer evento provocará un RESET del dispositivo. Los dos siguientes se consideran una continuación
de la ejecución del programa. Los bits /TO y /PD del registro STATUS pueden utilizarse para determinar
la causa del RESET. El bit /PD, que está habilitado en un funcionamiento normal, se borra cuando se
invoca el modo SLEEP. El bit /TO  está desactivado si ocurrió un WDT Wake-up.

Cuando se está ejecutando la instrucción SLEEP, la siguiente instrucción (PC + 1) es pre-fetched. Para
que el dispositivo se despierte a través de un evento de interrupción, el bit de habilitar interrupción
correspondiente debe activarse. Wake-up es independiente del estado del bit GIE. Si el bit GIE está
deshabilitado, el dispositivo continúa la ejecución en la instrucción siguiente a la instrucción SLEEP. Si el
bit GIE está habilitado, el dispositivo ejecuta la instrucción después de la instrucción SLEEP, después
salta a la dirección de interrupción (0004h). En los casos donde la ejecución de la siguiente instrucción de
SLEEP no es deseable, el usuario debería poner un NOP después de la instrucción SLEEP.
El WDT se borra cuando el dispositivo se despierta del modo SLEEP, independientemente de la fuente
del 'despertar'.

Nota: si las interrupciones globales están deshabilitadas (GIE está deshabilitado), pero cualquier fuente de
interrupción tiene su bit de interrupción habilitado y los correspondientes bits de la bandera de
interrupción activados, el dispositivo se despertará inmediatamente del modo SLEEP. La instrucción
SLEEP se ejecuta completamente.

ORGANIZACIÓN DE LA MEMORIA

Memoria de Programa
El PIC12F629/675 tiene un contador de programa de 13 bits capaz de direccionar un espacio de memoria
de programa de 8 Kx14. Sólo el primer 1 Kx14 (0000h - 03FFh) para los dispositivos de PIC12F629/675
está físicamente implementado. Acceder a una ubicación por encima de estos límites causará una vuelta
(wrap around) al primer 1 Kx14. El vector de RESET está en 0000h y el vector de Interrupción en 0004h.
Memoria de Datos
La memoria de datos (véase la figura 2-2 del datasheet) se divide en dos bancos, que contienen los
registros de Propósito General y los registros de Función Especial. Los registros de Función Especial se
encuentran en las 32 primeras posiciones de cada banco. Las posiciones 20h-5Fh son para los registros de
Propósito General, implementados como RAM estática, y se asignan a través de ambos bancos. El resto
de la RAM no está implementada y devuelve ‘ 0 ’ cuando se lee. RP0 (STATUS <5>) es el bit de
selección del Banco.
• RP0 = 0, se selecciona Banco 0
• RP0 = 1, se selecciona Banco 1

Nota: los bits de STATUS <7:6>, IRP y RP1, están reservados y se deberían mantener siempre a '0'

Archivo del Registro de Propósito General


Está organizado como 64x8 en el PIC12F629/675. Cada registro es accedido, ya sea directa o
indirectamente, a través del Archivo de Selección de Registro (File Select Register – FSR). Véase la
sección 2.4 del datasheet.

Registros de Función Especial


Son registros utilizados por la CPU y funciones periféricas para controlar la operación deseada del
dispositivo (véase tabla 2-1 en el datasheet). Estos registros son RAM estático. Los registros especiales
pueden clasificarse en dos grupos: núcleo y periférico. Los registros de la función especial asociados con
el 'núcleo' se describen en esta sección. Aquellos relativos al funcionamiento de las características de los
periféricos se describen en su sección correspondiente.

Registro STATUS
El registro STATUS contiene:
• el estado aritmético de la ALU (Unidad Aritmético Lógica)
• el estado de RESET
• los bits de selección de Banco para la memoria de datos (SRAM)

El registro STATUS puede ser el destino para cualquier instrucción, como cualquier otro registro. Si el
registro STATUS es el destino de una instrucción que afecta a los bits Z, DC o  C, entonces la escritura a
estos tres bits es deshabilitada. Estos bits son activados o borrados de acuerdo a la lógica del dispositivo.
Además, los bits /TO y /PD no son de escritura. Por lo tanto, el resultado de una instrucción con el
registro STATUS como destino puede ser diferente a lo que se pretende.
Por ejemplo, con CLRF STATUS se borrarán los tres bits superiores y se activa el bit Z. Esto deja al
registro de STATUS como 000u u1uu (donde u = sin cambios (unchanged)).
Se recomienda, por lo tanto, que sólo instrucciones BCF, BSF, SWAPF y MOVWF se utilicen para
modificar el registro STATUS, porque estas instrucciones no afectan a los bits de STATUS. Para conocer
otras instrucciones que no afectan a bits del registro STATUS, consulta  'Instruction Set Summary'.

Notas:
1: los bits IRP y RP1 (STATUS <7:6>) no son utilizados por el PIC12F629/675 y deben mantenerse a 0.
No se recomienda el uso de estos bits, ya que esto puede afectar la compatibilidad con productos futuros.
2: Los bits C y DC funcionan como 'Borrow y Digit Borrow out bit', respectivamente, en las restas.
Consulta las instrucciones SUBLW y SUBWF para ejemplos.
bit 7: IRP: este bit está reservado y debería mantenerse a 0
bit 6: RP1: este bit está reservado y debería mantenerse a 0
bit 5: RP0: bit de Selección de Banco (usado para direccionamiento directo)
  0 = Banco 0 (00h - 7Fh)
  1 = Banco 1 (80h - FFh)
bit 4: /TO: bit Time-out
  1 = Después del encendido (power-up), o una instrucción CLRWDT o SLEEP
  0 = Sucedió un WDT time-out
bit 3: /PD: bit Power-down
  1 = Después de power-up o una instrucción CLRWDT
  0 = Por ejecutarse una instrucción SLEEP
bit 2: Z: bit Zero
  1 = El resultado de una operación aritmética o lógica es 0
  0 = El resultado de una operación aritmética o lógica es diferente de 0
bit 1: DC: bit Digit carry/borrow (Dígito de acarreo). En instrucciones ADDWF, ADDLW, SUBLW,
SUBWF
  1 = Un acarreo del 4º bit menos significativo (bit 3) ha sucedido
  0 = No ha habido acarreo
  Para '/borrow', la polaridad está invertida
bit 0: C: bit Carry/borrow (Acarreo). En instrucciones ADDWF, ADDLW, SUBLW, SUBWF
  1 = Un acarreo del bit más significativo ha sucedido
  0 = No ha habido acarreo
Nota: para '/borrow', la polaridad está invertida. Una resta se ejecuta sumando el complemento a 2 del
segundo operando. En instrucciones de rotación (RRF, RLF) este bit se carga ya sea con el bit de mayor o
menor peso del registro de origen.
Nota: 'borrow' = 'tomar prestado', en un sentido de resta

Registro OPTION
Es un registro de lectura/escritura con varios bits de control para configurar:
• TMR0/WDT prescaler
• Interrupción externa en GP2/INT
• TMR0
• Resistencias pull-up en GPIO

bit 7 /GPPU: Bit de habilitación de GPIO Pull-up


  1 = Pull-ups deshabilitadas
  0 = Pull-ups habilitadas
bit 6 INTEDG: Bit de selección de interrupción por flanco
  1 = Interrupción por flanco ascendente (rising edge) en pin GP2/INT
  0 = Interrupción por flanco descendente (falling edge) en pin GP2/INT
bit 5 T0CS: TMR0 Bit de selección de origen de reloj
  1 = Transición en pin GP2/T0CKI
  0 = Ciclo de instrucción interna (CLKOUT)
bit 4 T0SE: TMR0 Bit de selección de origen del flanco
  1 = Se incrementa en una transición alto-a-bajo en pin GP2/T0CKI
  0 = Se incrementa en una transición bajo-a-alto en pin GP2/T0CKI
bit 3 PSA: Bit de asignación del prescaler
  1 = Prescaler está asignado al WDT
  0 = Prescaler está asignado al módulo TIMER0
bit 2-0 PS2:PS0: Bits de selección Ratio-Prescaler

Nota: para lograr una asignación de prescaler 1:1 para TMR0, asignar el prescaler al WDT estableciendo
el bit PSA a ‘1’ (OPTION <3>). Véase la sección prescaler en el Módulo Timer0.

Registro INTCON
Es un registro de lectura/escritura, que contiene los diversos bits de bandera para el desbordamiento del
registro TMR0, cambio de estado del puerto GPIO y las interrupciones externas del pin GP2/INT.
Nota: los bits de la bandera de interrupción se establecen cuando se produce una condición de
interrupción, independientemente del estado de su correspondiente bit de habilitación o del bit de
habilitación global, GIE (INTCON <7>). El usuario debe asegurarse de que los bits de las
correspondientes banderas de interrupción estén a 0 antes de habilitar una interrupción.

bit 7 GIE: bit de habilitación de las Interrupciones Globales


  1 = habilita interrupciones
  0 = deshabilita todas las interrupciones
bit 6 PEIE: bit de habilitación de las Interrupciones de Periféricos
  1 = habilita las interrupciones
  0 = deshabilita las interrupciones
bit 5 TOIE: bit de Interrupción por Desbordamiento de TMR0
  1 = habilita la interrupción de TMR0
  0 = deshabilita la interrupción de TMR0
bit 4 INTE: bit de habilitación de la Interrupción Externa de GP2/INT
  1 = habilita la interrupción de GP2/INT
  0 = deshabilita la interrupción de GP2/INT
bit 3 GPIE: bit de Interrupción por Cambio de Estado en GPIO (1)
  1 = habilita la interrupción por cambio de estado
  0 = deshabilita la interrupción
bit 2 T0IF: bit de bandera de Interrupción por Desbordamiento de TMR0 (2)
  1 = hubo desbordamiento de TMR0 (debe limpiarse vía software)
  0 = no hubo desbordamiento
bit 1 INTF: bit de bandera de Interrupción Externa en GP2/INT
  1 = ocurrió una interrupción externa en GP2/INT (debe limpiarse vía software)
  0 = no hubo interrupción externa en GP2/INT
bit 0 GPIF: bit de bandera de Interrupción por cambio de estado del Puerto
  1 = cuando alguno de los pines GP5:GP0 ha cambiado de estado (debe limpiarse vía software)
  0 = no hubo cambio de estado en GP5:GP0

Notas:
(1) el Registro IOC debe estar igualmente habilitado para habilitar la interrupción por cambio de estado.
(2) el bit T0IF se activa cuando TIMER0 se desborda. TIMER0 no cambia en un RESET y se debería
inicializar antes limpiando el bit T0IF.

Registro PIE1
Este registro contiene los bits que habilitan las interrupciones.
Nota: para habilitar cualquier interrupción periférica debe establecerse el bit PEIE (INTCON <6>).

bit 7 EEIE: bit de habilitación de Escritura EE Completada


  1 = habilita la interrupción
  0 = deshabilita la interrupción
bit 6 ADIE: bit de habilitación de Interrupción del Convertidor A/D (12F675 solamente)
  1 = habilita la interrupción A/D
  0 = deshabilita la interrupción A/D
bit 5-4 Sin implementar, se leen como 0
bit 3 CMIE: bit de habilitación de Interrupción del Comparador
  1 = habilita la interrupción del Comparador
  0 = deshabilita la interrupción del Comparador
bit 2-1 Sin implementar, se leen como 0
bit 0 TMR1IE: bit de habilitación Desbordamiento TMR1
  1 = habilita Desbordamiento TMR1
  0 = deshabilita Desbordamiento TMR1

Registro PIR1
Este registro contiene los bits de bandera de interrupción.
Nota: los bits de la bandera de interrupción se establecen cuando se produce una condición de
interrupción, independientemente del estado de su correspondiente bit de habilitación o del bit de
habilitación global, GIE (INTCON <7>). El usuario debe asegurarse de que los bits de las
correspondientes banderas de interrupción estén a 0 antes de habilitar una interrupción.

bit 7 EEIF: bit de bandera de Interrupción de la Operación de Escritura EEPROM


  1 = operación de escritura completada (debe limpiarse vía software)
  0 = la operación de escritura no ha terminado o no ha dado comienzo
bit 6 ADIF: bit de bandera de Interrupción del Convertidor A/D (12F675 solamente)
  1 = la conversión se ha completado (debe limpiarse vía software)
  0 = la conversión no ha terminado
bit 5-4 Sin implementar, se leen como 0
bit 3 TMR1IF: bit de bandera de Interrupción Desbordamiento TMR1
  1 = registro TMR1 ha desbordado (debe limpiarse vía software)
  0 = no hubo desbordamiento de TMR1

Registro PCON
El registro Power Control (PCON) contiene los bits de bandera que nos permiten diferenciar entre:
• Power-on Reset (POR)
• Brown-out Detect (BOD)
• Watchdog Timer Reset (WDT)
• MCLR Reset Externo

bit 7-2 Sin implementar, se leen como 0


bit 1 /POR: bit de Estado Power-on Reset
  1 = no ocurrió un Power-on Reset
  0 = hubo un Power-on Reset (debe ser activado vía software después de que ocurra)
bit 0 /BOD: bit de Estado Brown-out Detect
  1 = no ocurrió un Brown-out Detect
  0 = hubo un Brown-out Detect (debe ser activado vía software después de que ocurra)

Registro OSCCAL
Es usado para calibrar el Oscilador Interno de 4Mhz. Tiene 6 bits para ajustar la frecuencia hacia arriba o
hacia abajo para lograr eses 4Mhz.

bit 7-2 CAL5:CAL0: 6 bits de Calibración del Oscilador


  111111 = máxima frecuencia
  100000 = media frecuencia
  000000 = mínima frecuencia
bit 1-0 Sin implementar, se leen como 0

MÓDULO COMPARADOR
Los PIC12F629/675 tienen un módulo comparador analógico. Las entradas del comparador son
multiplexadas en los pines GP0 y GP1. Hay una referencia de tensión del comparador (Comparator
Voltage Reference) que puede aplicarse también a una entrada del comparador. En suma, se puede
configurar GP2 como la salida del comparador.
El Registro de Control del Comparador (CMCON) contiene los bits para controlar el comparador:

bit 7 Sin implementar, se lee como 0


bit 6 COUT: bit de salida del Comparador
  cuando CINV = 0:
    1 = VIN+ > VIN-
    0 = VIN+ < VIN-
  cuando CINV = 1:
    1 = VIN+ < VIN-
    0 = VIN+ > VIN-
bit 5 Sin implementar, se lee como 0
bit 4 CINV: bit de salida invertida del Comparador
  1 = salida invertida
  0 = salida no invertida
bit 3 CIS: bit de cambio de entrada del Comparador
  cuando CM2:CM0 = 110 o 101:
    1 = VIN+ conectado a CIN+
    0 = VIN- conectado a CIN-
bit 2-0 CM2:CM0: bits del Modo Comparador
se verá posteriormente su configuración (Figure 6-2)

Operación de Comparación
Una sencilla comparación se muestra en la figura 6-1, junto con la relación entre los niveles de entrada
analógicos y la salida digital. Cuando la entrada analógica en VIN+ es menor que la entrada analógica
VIN-, la salida del comparador es un nivel digital bajo. Cuando la entrada analógica en VIN+ es mayor
que la entrada analógica en VIN-, la salida del comparador es un nivel digital alto. Las áreas sombreadas
de la salida del comparador representan incertidumbres debidas a desplazamientos y tiempo de respuesta.
Nota: para usar los pines CIN+ y CIN- como entradas analógicas, los bits apropiados deben ser
programados en el registro CMCON (19 h).
La polaridad de la salida del comparador puede ser invertida activando el bit CINV (CMCON <4>).
Borrar este bit CINV resulta en una salida no-invertida.

Tabla completa que muestra el estado de salida frente a las condiciones de entrada y el bit de polaridad:.

Configuración del Comparador


Hay ocho modos de operación para la comparación.
El Registro CMCON se utiliza para seleccionar el modo. La figura 6-2 muestra los ocho modos posibles.
El Registro TRISIO controla la dirección de datos de los pines para cada modo de comparación. Si el
modo Comparador cambia, el nivel de salida de la comparación puede no ser válido por un período
específico de tiempo. Consulta las especificaciones en la sección 12.0.
Nota: las interrupciones del Comparador deberían estar deshabilitadas durante un cambio de modo del 
Comparador. De lo contrario, puede producirse una falsa interrupción.
Consideraciones en la conexión de una entrada Analógica
Un circuito simplificado para una entrada analógica se muestra a continuación. Al estar los pines
analógicos conectados a una salida digital, se disponen diodos de protección conectados a VDD y VSS.
La entrada  analógica, por lo tanto, debe estar entre VSS y VDD. La presencia de diodos de protección en
las entradas impide que la tensión supere en más de 0,6V la tensión VDD o que se sitúe 0,6V por debajo
de VSS. Una impedancia máxima de 10 KΩ se recomienda para las fuentes analógicas. Cualquier
componente externo conectado a un pin de entrada analógica, como un condensador o un diodo Zener,
debería tener muy poca corriente de fuga.
Salida Comparador
La salida del Comparador, COUT, se lee mediante el registro CMCON. Este bit es de sólo lectura. La
salida del Comparación puede ser también directamente dirigida al pin GP2 en tres de los ocho modos
posibles, como se mostró en la figura 6-2. Cuando está en uno de estos modos, la salida en GP2 es
asíncrona al reloj interno. En la figura 6-4 se muestra el diagrama de bloques de salida de comparación.
El bit TRISIO <2> funciona como una salida enable/disable (habilita/deshabilita) para el pin GP2
mientras el Comparador está en un modo de salida.

Notas:
1-cuando se lee el registro GPIO, todos los pines configurados como entradas analógicas se leerán como
un ‘ 0 ’. Los pines configurados como entradas digitales convertirán una entrada analógica de acuerdo con
la especificación de entrada TTL.
2- Niveles analógicos en cualquier pin definido como una entrada digital, pueden causar que el buffer de
entrada consuma más corriente de la especificada.

Referencia Comparador
El módulo Comparador también permite la selección de una referencia de voltaje internamente generada
para una de las entradas del Comparador. La señal de referencia interna es usada para cuatro de los ocho
modos del Comparator. El registro VRCON, Registro 6-2, controla el módulo de referencia de voltaje
mostrado en la Figura 6-5.
Configuración de la Referencia de Voltaje
La referencia de voltaje puede dar salida a 32 niveles de voltaje diferentes, 16 en la parte alta y 16 en la
baja.

Las ecuaciones siguientes determinan los voltajes de salida:


VRR = 1 (low range): CVREF = (VR3:VR0 / 24) x VDD
VRR = 0 (high range): CVREF = (VDD / 4) + (VR3:VR0 x VDD / 32)

Exactitud/Error en la Referencia de Voltaje


Un rango completo de VSS a VDD no se puede realizar debido a la construcción del módulo. Los
transistores en el tope y el fondo de la red de escala de resistencia (la Figura 6-5) impiden a CVREF
acercarse a VSS o VDD. La Referencia de Voltaje se toma de VDD y por lo tanto, la salida CVREF
cambia con fluctuaciones en VDD. Un test de la exactitud absoluta de la Referencia de Voltaje del
Comparator se puede encontrar en la Sección 12.0.

Tiempo de Respuesta del Comparador


El tiempo de respuesta es el tiempo mínimo, después de seleccionar una nueva referencia de voltaje o
fuente de entrada, antes de que la salida del Comparador tenga un nivel válido. Si la referencia interna 
cambia, el retardo máximo del voltaje interno de referencia debe ser considerado cuando se usan las
salidas del Comparador. Por otra parte, se debería usar el retardo máximo de los Comparadores (Tabla 12-
7).

Operación Durante el Modo SLEEP


Si el Comparador y la referencia de voltaje están habilitados antes de entrar en el modo SLEEP,
permanecerán activos durante este modo. Esto da como resultado corrientes de SLEEP más altas, como se
muestra en las especificaciones de power-down. La corriente adicional consumida por el Comparador y la
referencia de voltaje se muestran por separado en las especificaciones. Para minimizar el consumo
mientras se está en el modo SLEEP, se desconecta el Comparador, CM2:CM0 = 111, y la referencia de
voltaje, VRCON <7> = 0.
Si el Comparator está habilitado durante el modo SLEEP, una interrupción despertará al dispositivo. Si el
dispositivo despierta del modo SLEEP, los contenidos de los registros CMCON y VRCON no se verán
afectados.

Efectos de un RESET
Un RESET del dispositivo fuerza a los registros CMCON y VRCON a sus estados de RESET. Esto fuerza
al  módulo Comparador al estado 'Comparator Reset mode', CM2:CM0 = 000 y al voltaje de referencia a
su  estado deshabilitado. Así, todas las entradas potenciales son entradas analógicas con el Comparador y
el voltaje de referencia deshabilitados para un consumo de corriente lo más pequeña posible.

Registro VRCON:

bit 7  VREN: habilitar bit CVREF


    1 = CVREF circuito encendido
    0 = CVREF circuito apagado, no hay drenaje IDD
bit 6  Sin implementar. Se lee como '0'
bit 5  VRR: bit de selección de rango CVREF
    1 = Low range  (rango bajo)
    0 = High range (rango alto)
bit 4  Sin implementar. Se lee como '0'
bit 3-0 VR3:VR0: selección del valor CVREF 0 ≤ VR [3: 0] ≤ 15
    cuando VRR = 1: CVREF = (VR3:VR0 / 24) * VDD
    cuando VRR = 0: CVREF = VDD/4 + (VR3:VR0 / 32) * VDD

Interrupciones en el Comparador
La bandera de interrupción del Comparador se establece siempre que hay un cambio en el valor de salida
del Comparador. Será necesario mantener vía software la información sobre el estado de los bits de salida,
así como la lectura de CMCON <6>, para determinar el cambio actual ocurrido. El bit CMIF, PIR1 <3>,
es el indicador (la bandera) de interrupción del Comparador. Este bit se debe restablecer por software
llevándolo a ‘ 0 ’. Ya que también es posible escribir un '1' en este registro, se puede iniciar una
interrupción simulada.
Los bits CMIE (PIE1 <3>) y PEIE (INTCON <6>) deben activarse para permitir la interrupción. Además,
también debe activarse el bit GIE. Si cualquiera de estos bits se borran, la interrupción no estará
habilitada, aunque todavía se establecerá el bit CMIF si se produce una condición de interrupción.
El usuario, en la Rutina del Servicio de Interrupción, puede borrar la interrupción de la siguiente manera:
a) cualquier lectura o escritura de CMCON. Esto terminará la condición de no coincidencia
b) limpiando el bit de bandera CMIF.
Una condición de no coincidencia mantendrá activo el bit de bandera CMIF. La lectura de CMCON
pondrá fin a la condición de no coincidencia y permitirá borrar el bit de bandera CMIF.
Nota: si se produce un cambio en el registro CMCON (COUT) cuando una operación de lectura está
siendo ejecutada (inicio de Q2 cycle), el CMIF (PIR1 <3>) no puede establecer la bandera de
interrupción.

Registros asociados al módulo Comparador:


Memoria de Datos EEPROM
La memoria de datos EEPROM se puede leer y escribir durante una operación normal (rango completo de
VDD). Esta memoria no está mapeada directamente en el espacio del archivo de registro. En su lugar, es 
indirectamente direccionada a través de los Registros de Función Especial (SFR). Hay cuatro SFRs
utilizados para leer y escribir esta memoria:
• EECON1
• EECON2 (no es un registro implementado físicamente)
• EEDATA
• EEADR

EEDATA contiene los 8 bits de datos de lectura y escritura, y EEADR contiene la dirección de acceso a la
ubicación de la EEPROM. Los PIC12F629/675 tienen 128 bytes de datos EEPROM con un rango de
direccionamiento de 0h a 7Fh.
La memoria de datos EEPROM permite la lectura y escritura de bytes. La escritura de un byte
automáticamente borra la ubicación y escribe el nuevo dato (borra antes de escribir). La clasificación de la
memoria de datos EEPROM está preparada para elevados ciclos de borrado y escritura. El tiempo de
escritura está controlado por un temporizador interno. El tiempo de escritura varía con la tensión y la
temperatura, así como de un chip a otro. Consulta las especificaciones de AC para límites exactos.

Cuando la memoria de datos tiene protección de código, la CPU puede continuar leyendo y escribiendo
los datos de la memoria EEPROM. El programador del dispositivo no puede acceder a esta memoria.
Información adicional sobre la EEPROM de datos está disponible en el manual de referencia PIC®Mid-
Range, (DS33023).

bit 7-0 EEDATn: valor del Byte a leer o escribir desde la EEPROM de datos

bit 7 Sin implementar: debería estar a 0


bit 6-0 EEADR: especifica una de las 128 localizaciones para operaciones de Lectura/Escritura de la
EEPROM
EEADR
El registro EEADR puede direccionar hasta un máximo de 128 bytes de datos EEPROM. Sólo siete de los
ocho bits en el registro (EEADR<6:0 >) son necesarios. Se ignora el MSb (bit 7).
El bit superior siempre debe ser ‘0’ para seguir siendo compatible con dispositivos que tengan más
memoria de datos EEPROM.

Registros EECON1 Y EECON2


EECON1 es el registro de control con cuatro bits bajos físicamente implementados. Los cuatro bits
superiores  están sin implementar y se leen como '0's.
Los bits de control RD y WR inician la lectura y escritura, respectivamente. Estos bits no se pueden
borrar, tan sólo activarse, vía software. Se borran por hardware al completarse una operación de la lectura
o escritura. La incapacidad para borrar el bit WR por software previene una accidental terminación
prematura de una operación de escritura.
El bit WREN, cuando está activado, permitirá una operación de escritura. En Power-up, el bit WREN está
borrado. El bit WRERR está activado cuando una operación de escritura es interrumpida por un MCLR
Reset, o un WDT Time-out Reset durante una operación normal. En estas situaciones, a seguir de un
RESET, el usuario puede comprobar el bit WRERR, borrarlo y volver a escribir la ubicación. Los datos y
la dirección se borrarán, por lo tanto, los registros EEDATA y EEADR tendrán que ser reinicializados.
El bit de bandera de interrupción EEIF en el registro PIR1 se establece cuando se completa la escritura.
Este bit debe desactivarse por software. EECON2 no es un registro físico. La lectura de EECON2 leerá
todos como '0'. El registro EECON2 se utiliza exclusivamente en la secuencia de escritura  de datos en la
EEPROM.

bit 7-4 Sin implementar: Se leen como '0'


bit 3 WRERR: bit de bandera EEPROM error
    1 = una operación de escritura terminada prematuramente (cualquier MCLR Reset o WDT Reset
durante una operación normal o BOD detectado)
    0 = operación de escritura terminada
bit 2 WREN: bit de habilitación de escritura EEPROM
    1 = permite ciclos de escritura
    0 = inhibe escritura de datos
bit 1 WR: bit de Control de Escritura
    1 = inicia un ciclo de escritura (El bit es borrado por hardware una vez la escritura finaliza. El bit WR
puede únicamente activarse, no borrarse, por software)
    0 = el ciclo de escritura de datos EEPROM se ha completado
bit 0 RD: bit de Control de Escritura
    1 = inicia una lectura EEPROM (La lectura toma un ciclo. RD se borra por hardware. El bit RD puede
únicamente activarse, no borrarse, por software)
    0 = no inicia una lectura EEPROM

Leyendo la Memoria de Datos EEPROM


Para leer una posición de la memoria de datos, el usuario debe escribir la dirección en el registro EEADR
y, a continuación, activar el bit de control RD (EECON1<0>), como se muestra en el ejemplo 8-1. Los
datos están disponibles, en el siguiente ciclo, en el registro EEDATA. Por lo tanto, puede leerse en la
siguiente instrucción. EEDATA mantiene este valor hasta otra lectura, o hasta que se escribe por el
usuario (durante una operación de escritura).

Escribiendo en la Memoria de Datos EEPROM


Para escribir en una posición de la EEPROM, el usuario en primer lugar debe escribir la dirección en el
registro EEADR y los datos al registro EEDATA. A continuación, el usuario debe seguir una secuencia
específica para iniciar la escritura de cada byte, como se muestra en el ejemplo 8-2.

La escritura no iniciará si la secuencia anterior no se sigue exactamente (escribir 55h en EECON2,


escribir AAh en EECON2 y activar el bit WR) para cada byte. Se recomienda encarecidamente que las
interrupciones se deshabiliten durante este segmento de código. Un contador de ciclo se ejecuta durante la
secuencia necesaria. Cualquier número que no sea igual a los ciclos necesarios para ejecutar la secuencia
impedirá que los datos se escriban en la EEPROM.
Además, se debe activar el bit WREN en EECON1 para habilitar la escritura. Este mecanismo impide
escrituras accidentales de datos en la EEPROM debido a una errante (inesperada) ejecución de código. El
usuario debe mantener el bit WREN a 0 en todo momento, excepto cuando se actualiza la EEPROM. El
bit WREN  no se borra por hardware.
Después de que se haya iniciado una secuencia de escritura, borrar el bit WREN no afectará a este ciclo
de escritura. El bit WR no podrá activarse a menos que el bit WREN esté activado.
Al final del ciclo de escritura, el bit WR será borrado por hardware y se activa el bit de bandera EE de
interrupción de escritura completada (EEIF). El usuario puede habilitar esta interrupción o sondear este
bit. El bit EEIF del registro (PIR<7>) debe ser borrado por software.

Verificar Escritura
Dependiendo de la aplicación, buenas prácticas de programación pueden dictar que el valor que se escribe
en la EEPROM de datos deba ser verificado (ver ejemplo 8-3) para confirmar la escritura del valor
deseado.
Usando la EEPROM de Datos
La memoria de datos EEPROM es una matriz de bytes direccionables de alta-resistencia, que se ha
optimizado para el almacenamiento de información con cambios frecuentes (por ejemplo, las variables de
programa u otros datos que se actualizan con frecuencia).
Frecuentes cambios de los valores normalmente se actualizarán más a menudo que las especificaciones
D120 o D120A. Si esto no es el caso, debe realizarse una actualización de la matriz. Por esta razón, las
variables que cambian con poca frecuencia (como constantes, ID, calibración, etc.) deberían ser
almacenadas en la memoria de programa FLASH.

Protección contra falsas Escrituras


Hay condiciones en las que el dispositivo no debe escribir datos a la memoria EEPROM. Para proteger
contra las falsas Escrituras EEPROM, se han construido diversos mecanismos. En Power-up, se borra
WREN. Además, el Power-up Timer (72 ms de duración) previene de escrituras en la EEPROM.
La secuencia de inicio de escritura y el bit WREN juntos ayudan a prevenir una escritura accidental
durante:
• Brown-out
• Problemas de energía
• Mal-funcionamiento del software

Memoria de datos EEPROM con CODE PROTECT


La Memoria de Datos puede tener protección de código programando el bit CPD a ‘0’.
Cuando la memoria de datos tiene protección de código, la CPU es capaz de leer y escribir datos en la
EEPROM. Se recomienda proteger el código de la memoria de programa (CP) cuando se protege el
código de  la memoria de datos (CPD). Esto impide que cualquier persona programe ceros sobre el código
existente (que se ejecutará como NOPs) para llegar a una rutina añadida, programada en posiciones no
utilizadas de la memoria de programa, que sacará el contenido de la memoria de datos. Programar
posiciones que no se utilizan a ‘0’ también ayudará a prevenir que la protección del código de la memoria
de datos sea alterada.

Nota(1): EECON2 no es un registro físico.


Módulo Convertidor Analógico-Digital (A/D) – (solamente PIC12F675)
El convertidor analógico-digital (A/D) permite la conversión de una señal analógica de entrada a una
representación binaria de 10 bits. El PIC12F675 tiene cuatro entradas analógicas, multiplexadas a un
circuito de captura y mantenimiento (sample and hold).
La salida de la captura y mantenimiento (sample and hold) está conectada a la entrada del convertidor. El
convertidor genera un resultado binario vía aproximaciones sucesivas y almacena ese resultado en un
registro de 10 bits. La referencia de voltaje para la conversión es seleccionada vía software a VDD o a una
tensión aplicada por el pin VREF. En la figura 7-1 se muestra el diagrama de bloque del A/D en el
PIC12F675.

Operación y Configuración del Módulo A/D


Hay dos registros disponibles para controlar la funcionalidad del módulo A/D:
1. ADCON0 (registro 7-1)
2. ANSEL (registro 7-2)

Pines del Puerto A/D


Los bits ANS3:ANS0 (ANSEL<3:0>) y los bits TRISIO controlan del funcionamiento de los pines del
puerto A/D. Activar los correspondientes bits de TRISIO para establecer el controlador de salida de pin en
su estado de alta impedancia. Asimismo, activar el correspondiente bit ANS para deshabilitar el búfer de
entrada digital. Nota: Tensiones analógicas en cualquier pin que se define como una entrada digital
pueden causar que el búfer de entrada consuma una corriente excesiva.

Selección de Canal
Hay cuatro canales analógicos en el PIC12F675, de AN0 a AN3. Los bits CHS1:CHS0 (ADCON0<3:2>)
controlan que canal está conectado al circuito de captura y mantenimiento (sample and hold).

Voltaje de Referencia
Hay dos opciones para la tensión de referencia del convertidor A/D: se utiliza VDD, o se utiliza un voltaje
analógico aplicado a VREF. El bit VCFG (ADCON0<6>) controla la selección de referencia de voltaje.
Si se activa el VCFG, la tensión en el pin VREF es la referencia, de lo contrario, la referencia es VDD.

Conversión CLOCK
El ciclo de conversión A/D requiere 11 TAD. La fuente de la conversión de reloj es seleccionable vía
software  mediante los bits ADCS (ANSEL<6:4>). Hay siete opciones de reloj posible:
• FOSC/2
• FOSC/4
• FOSC/8
• FOSC/16
• FOSC/32
• FOSC/64
• FRC (oscilador RC interno)
Para la correcta conversión, se debe seleccionar el reloj de conversión A/D (1/TAD) para garantizar un
mínimo TAD de 1.6 us. La Tabla 7-1 muestra unos pocos cálculos de TAD para frecuencias
seleccionadas.
Nota: TAD = Tiempo de Adquisición

Notas:
Las celdas sombreadas están fuera del rango recomendado.
1: La fuente RC tiene un tiempo de TAD típico de 4 μs para VDD > 3.0V.
2: Estos valores violan el tiempo de TAD mínimo requerido.
3: Para tiempos más rápidos de conversión, se recomienda la selección de otra fuente de reloj.
4: Cuando la frecuencia del dispositivo es mayor que 1Mhz, la fuente de reloj RC sólo se recomienda si la
conversión se realizará durante el Modo SLEEP.

Iniciando una Conversión


Se inicia la conversión A/D activando el bit GO/DONE (ADCON0<1>). Cuando la conversión se
completa, el Módulo A/D:
• borra el bit GO/DONE
• activa la bandera ADIF (PIR1<6>)
• genera una interrupción (si están habilitadas)

En el caso de que una conversión deba ser abortada, puede borrarse el bit GO/DONE por software. Los
registros ADRESH:ADRESL no se actualizarán si la conversión A/D no se completa del todo. En su
lugar, los registros ADRESH:ADRESL mantendrán el valor de la conversión anterior. Después de una
conversión abortada, se requiere un retraso de  2 TAD antes de que se pueda iniciar una nueva
adquisición. Tras la demora, una adquisición se inicia automáticamente en el canal seleccionado.
Nota: el bit GO/DONE no debería activarse en la misma instrucción que enciende el Módulo A/D.

Salida de la Conversión
La Conversión A/D puede realizarse en dos formatos: desplazamiento a la izquierda o a la derecha. El bit
ADFM (ADCON0<7>) controla el formato de salida. La figura 7-2 muestra los formatos de salida.
Registro ADCON0:

bit 7 ADFM: bit de selección del formato de salida A/D


    1 = justificado a la derecha
    0 = justificado a la izquierda
bit 6 VCFG: bit Referencia de Voltaje
    1 = pin VREF
    0 = VDD
bit 5-4 sin implementar: se leen como '0'
bit 3-2 CHS1:CHS0: bit de selección del canal analógico
    00 = canal 0 (AN0)
    01 = canal 1 (AN1)
    10 = canal 2 (AN2)
    11 = canal 3 (AN3)
bit 1 GO/DONE: bit de estado de la Conversión A/D
    1 = ciclo de conversión A/D en progreso. Activar este bit inicia el ciclo de conversión A/D. Este bit se
borra automáticamente por hardware cuando la conversión A/D se ha completado
    0 = conversión A/D completada, o no en progreso
bit 0 ADON: bit de estado de la Conversión A/D
    1 = módulo de conversión A/D en funcionamiento
    0 = el Convertidor A/D está apagado y no consume corriente de funcionamiento

Registro ANSEL:

bit 7 sin implementar: leído como '0'


bit 6-4 ADCS<2:0>: bits de selección de reloj en la conversión A/D
    000 = FOSC/2
    001 = FOSC/8
    010 = FOSC/32
    x11 = FRC (derivado del reloj de un oscilador interno dedicado = máximo 500 Khz)
    100 = FOSC/4
    101 = FOSC/16
    110 = FOSC/64
bit 3-0 ANS3:ANS0: bits de selección analógica. (determina una función analógica o digital en los pines
AN<3:0> respectivamente)
    1 = entrada analógica; el pin se asigna como entrada analógica (1)
    0 = entrada/salida digital; el pin se asigna al puerto o a una función especial

Nota 1: Activar un pin como entrada analógica deshabilita automáticamente el circuito de entrada digital,
resistencias pull-up, e interrupción por cambio de estado. El correspondiente bit TRISIO debe ser
establecido como entrada para permitir el control externo de tensión en el pin.

Requisitos para una adquisición A/D


Para que el convertidor A/D reúna su exactitud especificada, la carga del condensador de mantenimiento
(CHOLD) debe alcanzar plenamente el nivel de tensión de entrada del canal. El modelo de entrada
analógica se muestra en la figura 7-3. La impedancia de origen (RS) y la impedancia del interruptor de
muestreo interno (sampling switch) (RSS) afectan directamente al tiempo necesario para cargar el
condensador CHOLD. La impedancia de muestreo (RSS) varía según el voltaje del dispositivo (VDD),
consulta la figura 7-3. La impedancia máxima recomendada para fuentes analógicas es 10KΩ. Tal
como se disminuye la impedancia, puede disminuirse el tiempo de adquisición. Después de que el canal
de entrada analógico es seleccionado (cambiado), esta adquisición debe hacerse antes de que se pueda
iniciar la conversión.
Para calcular el tiempo mínimo de adquisición, se pueden utilizar las ecuaciones 7-1. Esta ecuación asume
que se usa un error de ½ LSb (1024 pasos para el A/D). El error ½ LSb es el máximo permitido para que
el A/D cumpla la resolución especificada. Para calcular el tiempo mínimo de adquisición, TACQ,
consulta el manual de referencia PIC®Mid-Range (DS33023).

Notas:
1: La tensión de referencia (VREF) no tiene efecto en la ecuación, ya que se cancela la salida.
2: La carga del condensador de mantenimiento(CHOLD) no es descargada después de cada conversión.
3: La impedancia máxima recomendada para fuentes analógicas es de 10KΩ. Esto es necesario para
cumplir con la especificación de fugas del pin.
Funcionamiento del Módulo A/D durante el modo SLEEP
El módulo convertidor A/D puede funcionar durante el modo SLEEP. Esto requiere que el origen de reloj
se establezca al oscilador RC interno. Cuando se selecciona el origen de reloj RC, el A/D espera una
instrucción antes de comenzar la conversión. Este permite que la instrucción de SLEEP sea ejecutada,
eliminando así la mayor parte del ruido de conmutación de la conversión. Cuando la conversión se
completa, el bit GO/DONE se limpia, y el resultado se carga en los registros ADRESH:ADRESL. Si la
interrupción  A/D está habilitada, el dispositivo despierta del modo SLEEP. Si las interrupciones A/D
están deshabilitadas, el módulo A/D es apagado, aunque el bit ADON permanezca activado.
Cuando el reloj A/D es otro que RC, una instrucción SLEEP hace que la conversión en marcha sea
abortada, y el módulo A/D es apagado. El bit ADON permanece activado.

Efectos de un RESET
Un RESET del dispositivo fuerza a todos los registros a su estado de RESET. Así que el módulo A/D es
apagado y cualquier conversión pendiente es abortada. Los registros ADRESH:ADRESL permanecen sin
cambios.

Aquí termina el tema dedicado al datasheet del PIC12F629/675. Posteriormente se verán Módulos propios
de sus hermanos mayores (serie 16Fxxx) e igualmente se crearán temas destinados a poner en práctica lo
aprendido.

Las hojas de datos o datasheet son un elemento importante en el aprendizaje y en el trabajo con el PIC,
pero no son el único elemento a tener en cuenta. Son bastantes las cuestiones que se tratan de una manera
bastante 'escasa' y por ello, y porque no era la intención de este tema profundizar en esas cuestiones, es
importante consultar también otra documentación para ampliar conocimientos.
De igual manera, son bastantes las Tablas de Datos presentes en la hoja de datos o datasheet y como no es
mi intención sobrecargar el Foro con cosas que podéis ver sin esfuerzo en el datasheet, se han evitado.

Se ha creado un tema para Dudas y Consultas. Muchas gracias por todo vuestro apoyo

También podría gustarte