teclado inteligente con program ad or pic de 16f628a

39

Upload: jose-neira-ramos

Post on 10-Mar-2015

269 views

Category:

Documents


9 download

TRANSCRIPT

Programador de 16F628A 

 

Efectivamente, los microcontroladores en general, y los de la empresa Microchip en particular, necesitan de un circuito electrónico auxiliar que nos permita transferirles desde el ordenador el programa que hemos escrito para ellos. Hay muchas maneras de encarar este problema, y en general se suele utilizar alguno de los puertos disponibles en cualquier ordenador para este fin. Así es que en el 

mercado es posible conseguir “quemadores” de PICs con conexión para puerto USB, paralelo o serie (RS‐232). Por razones de simplicidad en el diseño y por ser seguramente una de las alternativas más económicas, es que en este artículo vamos a explicar paso a paso como construir el programador JDM, con conexión serial. No solo nos permitirá grabar datos en los micros más comunes, de 8, 18, 28 y 40 pines, sino que también lo podremos utilizar para grabar y leer varios tipos de memorias. 

Los microcontroladores de Microchip (PICs) se programan mediante un protocolo tipo serie. Se necesitan dos tensiones de alimentación para poder llevar a cabo la programación: una de 4.5v a 5.5v (VDD) y otra comprendida entre 12v y 14v (VPP), que es la que indica al PIC que va a ser programado, para que el cambie la función que realizan los pines I/O implicados en la programación. Los pines implicados en la programación varían de un microcontrolador a otro, pero en general, los de un mismo numero de pines (8, 18, etc.) tienen las mismas patitas asignadas a la programación, lo que nos permite construir programadores que sirvan para mas de un PIC. En el caso del 16F84A, 16F628A y casi todos los PIC más populares de 18 pines, se utilizan los siguientes pines durante la programación, y son los que se indican en la tabla al final de esta página. Es muy recomendable leer la hoja de datos de Microchip sobre este tema (son unas 16 

paginas, y lo encuentran en los links que recomendamos en este articulo) dado que es conveniente conocer el mecanismo implicado en la programación (tiempos, señales, etc). El documento se refiere específicamente a la familia 16F8x, pero los demás no difieren demasiado de lo allí expuesto. Con estos conceptos en mente, podemos pasar a la construcción de nuestro circuito programador, que será el encargado de transferir el programa que escribamos en la PC a la memoria FLASH del PIC. Esta es una memoria no volátil, de bajo consumo, que se puede escribir y borrar en el circuito integrado (al igual que las EEPROM). Microchip comercializa dos microcontroladores prácticamente iguales que sólo se diferencian en que la memoria de programa de uno de ellos es tipo EEPROM y la del otro tipo Flash. Se trata del PIC16C84 y el PIC16F84, respectivamente.  Además de esta memoria, casi todos los PICs también disponen de una memoria de datos de lectura y escritura no volátil, (esta del tipo EEPROM). De esta forma, un corte en el suministro de la alimentación no ocasiona la pérdida de la información, que está disponible al reiniciarse el programa. Por ejemplo, el 16F84 dispone de 64 bytes de memoria EEPROM para contener datos, y los programas que creemos pueden leer y escribir en ella. 

 

Pines utilizados durante la grabación.  

La construcción de un programador de PICs puede ser un proyecto muy simple o muy complicado, de acuerdo a las características que necesitemos incluir en el. En nuestro caso, dado que estamos desarrollando un circuito que sea lo mas didáctico posible, vamos a intentar mantener las cosas lo mas simples posible. Si nos damos una vueltita por internet, vamos a ver infinidad de circuitos programadores, algunos con alimentación externa y otros no, por puerto serial, paralelo o USB, para un solo modelo de PIC o para varios, etc. El programador que construiremos se conoce como “JDM”, por las iniciales de su creador (Jens Dyekjær Madsen). Existen muchas variantes de el, pero básicamente todas tienen características muy similares. Es un circuito muy simple, pero que tiene varias ventajas que lo hacen muy interesante:  >Se conecta al puerto serie, que generalmente en cualquier PC esta disponible. >Existe software gratis para utilizarlo, incluso bajo DOS, LINUX y por supuesto Windows (incluido WinXP) >Sirve para programar varios modelos de PICS (PIC12C5XX, 12C67X, 24CXX, 16C55X, 16C61, 16C62X, 16C71, 16C71X, 16C8X, 16F8X entre otros ) y también para leer/escribir varios chips de memoria (24Cxx ). Otros microcontroladores también pueden ser programados mediante un adaptador. >Dispone del conector ICSP (In‐Circuit Serial Programming) para la programación de microcontroladores sin necesidad de desmontarlos de su placa de circuito impreso. >No necesitamos de una fuente de alimentación externa, ya que se alimenta 

directamente del puerto de la PC. >Su costo es muy bajo, los componentes necesarios difícilmente nos cuesten mas de 3 o 4 u$s y son muy fáciles de conseguir.  Una aclaración importante antes de seguir adelante: el hecho de que el programador se conecte a un puerto serie RS‐232 de la PC no significa que el protocolo utilizado para comunicar la PC y la placa del programador sea este, de hecho se puede adaptar este circuito para conectarlo al puerto paralelo e incluso USB. Como dijimos antes, los tiempos, y las señales necesarias para programar los PICs dependen de un protocolo especifico desarrollado por Microchip, por lo que utilizamos el puerto como vehiculo para llevar los bits al PIC y para obtener las tensiones necesarias para la programación, pero utilizando un programa y un protocolo especifico para esta tarea.  En las imágenes que acompañan este artículo encontraran el esquema eléctrico y el trazado del circuito impreso necesario para montar todos los componentes. La forma de construir un circuito impreso de manera muy fácil y rápida, con resultados excelentes, está explicada al detalle en un artículo de NeoTeo.  Una vez que tengamos el circuito impreso listo, agujereado y bien limpio (libre de gratitud), procedemos a soldar los componentes. Son unos pocos y no debería haber problemas. Es preferible soldar primero los puentes, el zócalo para el PIC, y luego los demás componentes, teniendo cuidado de respetar el sentido en que colocamos los diodos, transistores y los condensadores, si no el programador no funcionara. Deberemos decidir si usamos una ficha DB9 o DB25, y soldar un cable plano de al menos 5 hilos de aproximadamente un metro de largo entre la plaqueta y la ficha, por supuesto teniendo cuidado de no equivocarnos con la numeración de los pines (ver recuadro para conocer la disposición de pines de ambos conectores). Como ocurre con cualquier proyecto de este tipo, y más si lo vamos a conectar a un puerto de nuestro ordenador, conviene revisar concienzudamente que todas las conexiones sean correctas, y que al soldar no hayamos hecho algún “puente” que pueda darnos dolores de cabeza. 

   

Posición de los componentes en la plaqueta.  

Circuito impreso.  

4 diodos 1N4148 1 diodo Zener de 8.2v 1 diodo Zener de 5.1v 1 capacitor electrolítico de 100uF x 40v 1 capacitor electrolítico de 22uF x 16v 2 transistores BC547B 1 resistencia de 10k, ¼ de watt 1 resistencia de 1.5k, ¼ de watt. 1 zócalo de 18 pines  Además necesitamos un trozo de cable plano de al menos 5 hilos, un conector DB‐9 o DB‐25 según sea el que tengamos en la PC, y opcionalmente un conector tipo molex de 8 pines para la programación “in circuit”. El impreso lo construiremos como ya hemos visto en otras notas, o bien podemos usar un trozo de circuito impreso del que se emplea para construir prototipos, que ya tiene dibujadas las islas y los agujeros hechos, y solo tenemos que soldar puentes para “crear” nuestro diseño.  

 

Posición de los chips en el zócalo.  

Es capaz de grabar y leer prácticamente todos los PICs y casi todos los tipos de memorias que hay en el mercado. Podemos bajarlo gratuitamente de la pagina de su autor (ver links) , de donde elegiremos la versión “IC‐Prog Software 1.05D Multi‐Lingual” y si estamos usando Windows NT o XP también necesitaremos descargar un driver especial, que también encontraremos en ese sitio y al que deberemos descomprimir en la misma carpeta donde hayamos puesto el IC‐Prog. En la misma página hay un excelente archivo de ayuda, en español, que deberíamos leer para usar sin problemas el programa. Es importante seleccionar el programador JDM en la opción “Ajustes” ‐> “Tipo Hardware” ya que si no será imposible grabar nada. En dicha pantalla de opciones figura un control deslizable con el nombre “Retardo I/O”. Este valor es la demora entre cada dato enviado al PIC. Cuando mas pequeño, menos tardaremos en grabar el programa, pero de acuerdo a la PC que tengamos no podremos hacerlo demasiado pequeño. 10 es un buen valor, y se pueden ir haciendo pruebas con valores mas pequeños. Cuando veamos que la grabación falla, volvemos al valor que funciono y lo dejamos así. No hay mucho mas para decir de este sencillo programa, y después de haber grabado un par de microcontroladores lo usaremos con confianza y seguridad. Por supuesto, también puede ser utilizado para el proceso inverso, es decir, leer el contenido de un 

microcontrolador. Esto solo será posible si al momento de grabarlo no se utilizo la opción de proteger su contenido, en cuyo caso solo podrá ser borrado y grabado pero no leído.  

 

IC‐PROG, el software de grabación.  

El programa, desde el punto de vista del PIC es una serie más o menos larga de “0” y “1”. Como seria sumamente complicado programar de esa manera, se utiliza un ASM provisto por Microchip (u otros lenguajes de alto nivel, principalmente C y Basic) que al compilarse genera un archivo con extensión .HEX que es el que se carga con la ayuda del IC‐PROG y el programador en el microcontrolador. A lo largo de esta serie de notas iremos explicando como construir nuestros propios programas de alto nivel, y como convertirlos en ASM.  Utilizaremos una versión de BASIC, lo que significa que será muy fácil de aprender a sacar el jugo a estos chip, ya que es un lenguaje muy sencillo de aprender y probablemente muchos lectores en algún momento hayan hecho algún programa en su ordenador utilizando uno de los tantos dialectos de BASIC disponibles. La idea es que desde NeoTeo brindemos lo necesario para que el aficionado aprenda a utilizar estos chips, que hacen de la electrónica digital un hobby apasionante. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Teclado inteligente de 15 teclas, con PIC16F628A 

Veremos como construir un teclado de 15 teclas, con su propio microcontrolador. 

Además de las posibilidades que presenta como, por ejemplo, periférico de entrada de 

datos en un ordenador, puede ser utilizado en conjunto con alguno de los "trainers" 

(para micros de 18 pines o 40 pines), a los que se unirá mediante un cable plano de 10 

vías.  

Este proyecto puede resultar interesante para estudiantes y hobbystas, o cualquiera 

que este iniciándose en el mundo de los microcontroladores PIC. Se ha incluido el 

código fuente completo en PIC BASIC (de PIC SIMULATOR IDE) de manera que pueda 

comenzar a utilizarse sin necesidad de programar nada.  

 

El compañero ideal para este modulo es del display LCD, ya que con una placa central, un módulo LCD y este teclado se pueden realizar proyectos que requieran interacción con el usuario, tales como alarmas, temporizadores, cronómetros, y cualquier otro que necesita de algún menú en pantalla o de ingreso de datos. 

 

Generalmente, cuando necesitamos un teclado para nuestros proyectos recurrimos a 

una de dos alternativas: o utilizamos un pin del microcontrolador por tecla, o bien 

creamos una matriz de teclas de "n" x "m", utilizando para ello "n" x "m" pines. Si 

necesitáramos un teclado de 15 teclas, en el mejor de los casos se necesitan 8 pines (n 

= 4 y m = 4). No siempre tenemos tantos pines disponibles.  

La primera alternativa tiene la clara desventaja de requerir un muy elevado número de 

pines I/O, que generalmente es un recurso escaso. El segundo caso, el de la matriz, es 

más eficiente en el uso de pines, sirva como ejemplo el caso de un teclado de 4x4 

teclas que se puede leer con solo 8 pines.  

Pero existe una alternativa más, y consiste en crear un teclado “inteligente”, con su 

propia lógica de control, y que nos entregue directamente un código correspondiente 

a la tecla pulsada. Esto, además de resultar económico en el uso de los recursos I/O del 

microcontrolador principal, simplifica su programación, ya que el teclado entrega un 

código correspondiente a la tecla pulsada, sin tener que preocuparnos de estar 

censando continuamente la matriz para determinar que tecla se pulso  

Este código puede ser del tipo serial (vía RS‐232, por ejemplo) o bien paralelo, donde 

se utilizan mas cantidad de conductores.  

En este proyecto veremos como construir un teclado de 15 teclas, con un PIC16F628A 

(o su hermano menor PIC16F627A) como elemento central, un zumbador para oír un 

pitido cada vez que pulsamos una tecla, y un LED que indicara que el teclado se 

encuentra alimentado. La salida de este teclado será un código de 4 bits que 

representa la tecla presionada, o bien “0000” si no se ha presionado ninguna. 

 

 

 

 

 

Hardware 

Como se puede ver en el esquema, el hardware es extremadamente simple: 

 

Solo utilizamos 15 pulsadores, unos pocos resistores, un transistor para manejar el 

buzzer y un microcontrolador como "cerebro" del módulo.  

Debido a que el control de los tiempos con una muy alta precisión no es necesario en 

este proyecto, hemos ahorrado el cristal y sus condensadores accesorios, y empleado 

el oscilador interno del microcontrolador, funcionando a 4 MHz.  

 

Placa PCB 

Como siempre, comenzaremos realizando el circuito impreso (aprende Como construir 

tus propios PCB), para luego realizar las perforaciones necesarias. Puede darse el caso 

de que los pines de los pulsadores sean algo mas gruesos que los de los demás 

componentes, así que deberemos utilizar una broca adecuada, generalmente de 1.2 

mm de diámetro.  

 

 

 

 

Montaje 

Montaremos primero los puentes, seguiremos por los resistores y zócalo para el microcontrolador, y por ultimo las teclas, buzzer y LED. No esta de más repasar las soldaduras por si se ha producido algún cortocircuito en el montaje.  

 

Cable y conector 

Una vez comprobado esto, procedemos a construir el cable plano, que servirá para unir entre si cualquier par de módulos de los que veremos en estos artículos. De hecho, conviene tener varios de ellos a mano, y este es un buen momento de armarlos a todos. En la foto se ve claramente como montar las fichas sobre el cable, de manera que sea simétrico y se puede conectar el modulo central o el periférico en cualquiera de sus extremos 

 

 

 

Este conector, como dijimos compatible con el modulo central del articulo anterior, dispones de cuatro pines de datos, que llamaremos “A”, “B”, “C”, y “D”. 

 

SOFTWARE 

Realizado en en PIC BASIC (del PIC SIMULATOR IDE), el programa que debemos cargar 

en el microcontrolador se encarga de leer la matriz de teclas, generar el pitido y 

colocar el código de 4 bits en el conector de salida.  

Al presionar una tecla, el software genera un código de acuerdo a la tabla de la pagina 

siguiente, y pone en “0” o en “1” estos pines, indicando que tecla se presiono. La 

combinación “0000” se utiliza para indicar que no se ha presionado ninguna tecla, por 

lo que dicho pulsador puede no incluirse en el proyecto, o bien utilizarla como on‐off 

del buzzer o alguna función similar. Por defecto, el buzzer toca una nota diferente por 

tecla, lo que puede resultar útil como “realimentación auditiva” de que efectivamente 

se produjo el contacto de la tecla.  

La rutina TONOKEY del programa que veremos a continuación es la encargada de 

hacer sonar el buzzer con la frecuencia correspondiente a cada tecla, que se carga en 

la variable FREQ en cada una de las rutinas cuyo nombre es de la forma OUTDATAxxx, 

en las que además de elegir la frecuencia en cuestión, se carga cada una de las 

variables A, B, C y D con los valores adecuados para que el microcontrolador los 

publique en los pines del puerto de expansión. Esto se realiza con los códigos de la 

siguiente tabla:  

 

ABCD   Tecla  

0000   No se presiono ninguna tecla 

0001   0  

0010   1  

0011   2  

0100   3  

0101   4  

0110   5  

0111   6  

1000   7  

1001   8  

1010   9  

1011   *  

1100   #  

1101   A  

1110   B  

1111   C  

 

 

 

 

Código Fuente del programa: 

'Versión 1.0 teclado 16 teclas + Buzz 'MICRO: 16F627A o 16F628A, Oscilador intRC '------------------------------------- ' '----- CONFIGURO PUERTOS----- PORTA = 0 CMCON = 7 'Configuro A como Digital I/O ' 'Configuro el portA: TRISA.0 = 1 'Entrada (Teclado) TRISA.1 = 1 'Entrada (Teclado) TRISA.2 = 1 'Entrada (Teclado) TRISA.3 = 1 'Entrada (Teclado) TRISA.4 = 0 'Salida TRISA.5 = 0 'Salida TRISA.6 = 0 'Salida TRISA.7 = 0 'Salida (buzz) ' 'Configuro el portB: TRISB.0 = 0 'Salida (Teclado) TRISB.1 = 0 'Salida (Teclado) TRISB.2 = 0 'Salida (Teclado) TRISB.3 = 0 'Salida (Teclado) TRISB.4 = 0 'Salida (BIT A DATA OUT) TRISB.5 = 0 'Salida (BIT B DATA OUT)

TRISB.6 = 0 'Salida (BIT C DATA OUT) TRISB.7 = 0 'Salida (BIT D DATA OUT) ' '------VARIABLES------------------ 'Defino constantes: Symbol fila1 = PORTB.0 Symbol fila2 = PORTB.1 Symbol fila3 = PORTB.2 Symbol fila4 = PORTB.3 Symbol out_a = PORTB.4 Symbol out_b = PORTB.5 Symbol out_c = PORTB.6 Symbol out_d = PORTB.7 Symbol colu1 = PORTA.0 Symbol colu2 = PORTA.1 Symbol colu3 = PORTA.2 Symbol colu4 = PORTA.3 Symbol buzz = PORTA.7 'Buzzer ' 'Variables Dim i As Byte Dim t1 As Byte 'Numero de milisegundos que se mantiene el dato en DATAOUT Dim freq As Word 'Frecuencia/2 ' '----COMIENZA EL PROGRAMA EN SI----- 'Inicializo las variables: fila1 = 0 fila2 = 0 fila3 = 0 fila4 = 0 buzz = 0 'Apagado t1 = 50 'duracion tono teclas freq = 3000 'Frecuencia/2 PORTB = 0 ' Gosub outdata0000 ' 'Suena un tono Gosub tonokey ' loop: 'Bucle principal del programa 'Recorro la matriz del teclado, poniendo de a una las 'filas en 1, y viendo si las columnas están en 1. Si 'es así, es que hay una tecla presionada. ' 'FILA 1 fila1 = 1 If colu1 = 1 Then Gosub outdata7 If colu2 = 1 Then Gosub outdata8 If colu3 = 1 Then Gosub outdata9 fila1 = 0

'fila 2 fila2 = 1 If colu1 = 1 Then Gosub outdata4 If colu2 = 1 Then Gosub outdata5 If colu3 = 1 Then Gosub outdata6 If colu4 = 1 Then Gosub outdatap3 fila2 = 0 'fila 3 fila3 = 1 If colu1 = 1 Then Gosub outdata1 If colu2 = 1 Then Gosub outdata2 If colu3 = 1 Then Gosub outdata3 If colu4 = 1 Then Gosub outdatap2 fila3 = 0 'fila 4 fila4 = 1 If colu1 = 1 Then Gosub outdataaste If colu2 = 1 Then Gosub outdata0 If colu3 = 1 Then Gosub outdatanume If colu4 = 1 Then Gosub outdatap1 fila4 = 0 ' Goto loop 'Repite eternamente End ' tonokey: 'Tono al presionar las teclas. For i = 1 To t1 buzz = 1 WaitUs freq buzz = 0 WaitUs freq Next i WaitMs 100 Gosub outdata0000 Return ' 'Pone en 0000 la salida OUTDATA outdata0000: out_a = 0 out_b = 0 out_c = 0 out_d = 0 Return ' outdatap1: out_a = 1 out_b = 1 out_c = 0 out_d = 1 freq = 500 Gosub tonokey Return

' outdatap2: out_a = 1 out_b = 1 out_c = 1 out_d = 0 Gosub tonokey Return ' outdatap3: out_a = 1 out_b = 1 out_c = 1 out_d = 1 freq = 800 Gosub tonokey Return ' outdata0: out_a = 0 out_b = 0 out_c = 0 out_d = 1 freq = 1138 Gosub tonokey Return ' outdata3: out_a = 0 out_b = 1 out_c = 0 out_d = 0 freq = 953 Gosub tonokey Return ' outdata2: out_a = 0 out_b = 0 out_c = 1 out_d = 1 freq = 1016 Gosub tonokey Return ' outdata1: out_a = 0 out_b = 0 out_c = 1 out_d = 0 freq = 1087 Gosub tonokey

Return ' outdata6: out_a = 0 out_b = 1 out_c = 1 out_d = 1 freq = 989 Gosub tonokey Return ' outdata5: out_a = 0 out_b = 1 out_c = 1 out_d = 0 freq = 1003 Gosub tonokey Return ' outdata4: out_a = 0 out_b = 1 out_c = 0 out_d = 1 freq = 1123 Gosub tonokey Return ' outdata9: out_a = 1 out_b = 0 out_c = 1 out_d = 0 freq = 1030 Gosub tonokey Return ' outdata8: out_a = 1 out_b = 0 out_c = 0 out_d = 1 freq = 1094 Gosub tonokey Return ' outdata7: out_a = 1 out_b = 0 out_c = 0 out_d = 0

freq = 1164 Gosub tonokey Return ' outdatanume: out_a = 1 out_b = 1 out_c = 0 out_d = 0 freq = 1075 Gosub tonokey Return ' outdataaste: out_a = 1 out_b = 0 out_c = 1 out_d = 1 freq = 1209 Gosub tonokey Return

 

 

 

 

 

 

 

 

 

 

¿Porque Usar el 16F628A en vez del PIC 16F84A? 

 

Es muy probable que sea porque hay miles de ejemplos en Internet y en libros y 

revistas para el 16F84A, debido a que hace años que se diseña sobre él, como 

procesador básico, y es uno de los primeros de Microchip Inc. 

Pero el PIC16F84A se ha vuelto obsoleto. No lo digo yo, lo ha dicho su fabricante, 

aunque ahora quitó de su sitio toda referencia a este tema y parece respaldar al 84A 

como componente totalmente actual. 

 

¿Lo reemplazamos? 

¿De la amplia gama de micro controlador de Microchip, una lista que a veces marea, 

qué podríamos elegir? 

 

Se utiliza el PIC 16F628A (y opcionalmente el hermanito PIC 16F627A, con la mitad de 

memoria) en gran parte de los proyectos, excepto cuando las prestaciones de este 

micro controlador no son suficientes para la función requerida. 

 

Pero no es capricho: veamos las razones 

La razón principal de la elección —y es por esto que se recomienda— es que es pata a 

pata compatible con el PIC 16F84A. Y los programas son directamente compatibles, 

con la única salvedad de que la memoria RAM se encuentra en otra dirección. 

Transformar un programa hecho para el PIC 16F84A para utilizarlo en el PIC 16F628A 

es una cosa de segundos. Y a nivel de hardware, sólo hay que desenchufar uno y 

enchufar el otro. 

 

 

El PIC 16F84A puede estar muy bien como elección para comenzar, pero la única razón 

que va quedando para hacerlo es que la mayoría de los ejemplos de programa y de 

circuito que se encuentran por allí están realizados sobre él. En base a lo dicho en el 

párrafo anterior, entonces el PIC 16F628A es igual de elegible, ya que es un reemplazo 

prácticamente directo de nuestro famoso microcontrolador "de batalla". ¿Pero por 

qué cambiar, si ambos están disponibles en el mercado? Por una razón muy simple: el 

PIC 16F628A tiene más memoria de programa (el doble), más RAM, más EEPROM, más 

modos de uso, más timers, y más prestaciones, incluyendo un puerto serie 

implementado por hardware... y el PIC 16F628A, por lo menos en Argentina, cuesta 

menos... ¿Por qué no cambiar, entonces? 

 

COMPARACIÓN 

    16F84A 16F628A  

Memoria programa   1K 2K 

Memoria datos   68 bytes 224 bytes  

EEPROM   64 bytes 128 bytes  

Timers   1 3 

PWM   ‐ 1 

Reg. comparación/captura  ‐ sí 

Comparadores   ‐ 2 

Referencias de voltaje   ‐ 1 

Oscilador interno reloj   ‐ 37 KHz / 4 MHz  

Patas usables E/S   13 16 

Programación a bajo voltaje ‐ sí 

Precio en Buenos Aires (Cika)  us$ 3,51 (4 MHz)us$ 7,02 (20 MHz)  

u$s 3 (20 MHz)  

Una pequeña nota final: en la inicialización del PIC16F628A, si no se utilizan los 

comparadores, conviene poner estas dos líneas:  

    movlw b'00000111'   ; Deshabilita comparadores. Es     movwf CMCON    ; conveniente en el PIC 16F628A 

Se deben inhibir los comparadores porque sus entradas son iniciadas en modo 

analógico. 

M PIC16F8XEEPROM Memory Programming Specification

This document includes the programming specifications for the following devices:

• PIC16F83

• PIC16CR83• PIC16F84• PIC16CR84

• PIC16F84A

1.0 PROGRAMMING THE PIC16F8X

The PIC16F8X devices are programmed using a serialmethod. The Serial mode will allow these devices to beprogrammed while in the user’s system. This allows forincreased design flexibility. This programming specifi-cation applies to only the above devices in allpackages.

1.1 Hardware Requirements

The PIC16F8X devices require one programmablepower supply for VDD (4.5V to 5.5V) and a VPP of 12Vto 14V. Both supplies should have a minimum resolu-tion of 0.25V.

1.2 Programming Mode

The Programming mode for the PIC16F8X devicesallows programming of user program memory, datamemory, special locations used for ID, and the config-uration word. On PIC16CR8X devices, only dataEEPROM and CDP can be programmed.

Pin Diagram

RA1RA0OSC1/CLKINOSC2/CLKOUTVDDRB7RB6RB5RB4

RA2RA3

RA4/T0CKIMCLR

VSSRB0/INT

RB1RB2RB3

•123456789

181716151413121110

PIC

16F8X

PDIP, SOIC

TABLE 1-1: PIN DESCRIPTIONS (DURING PROGRAMMING): PIC16F8X

Pin NameDuring Programming

Function Pin Type Pin Description

RB6 CLOCK I Clock Input

RB7 DATA I/O Data Input/Output

MCLR VTEST MODE P(1) Program Mode Select

VDD VDD P Power Supply

VSS VSS P Ground

Legend: I = Input, O = Output, P = Power

Note 1: In the PIC16F8X, the programming high voltage is internally generated. To activate the Programmingmode, high voltage needs to be applied to MCLR input. Since the MCLR is used for a level source, thismeans that MCLR does not draw any significant current.

2002 Microchip Technology Inc. DS30262E-page 1

PIC16F8X

2.0 PROGRAM MODE ENTRY

2.1 User Program Memory Map

The user memory space extends from 0000h to 1FFFh(8 Kbytes), of which 1 Kbyte (0000h - 03FFh) is physi-cally implemented. In actual implementation, theon-chip user program memory is accessed by the lower10 bits of the PC, with the upper 3 bits of the PCignored. Therefore, if the PC is greater than 03FFh, itwill wrap around and address a location within thephysically implemented memory (see Figure 2-1).

In Programming mode, the program memory spaceextends from 0000h to 3FFFh, with the first half(0000h-1FFFh) being user program memory and the

second half (2000h-3FFFh) being configuration mem-ory. The PC will increment from 0000h to 1FFFh andwrap to 0000h, or 2000h to 3FFFh and wrap around to2000h (not to 0000h). Once in configuration memory,the highest bit of the PC stays a ‘1’, thus always point-ing to the configuration memory. The only way to pointto user program memory is to reset the part andre-enter Program/Verify mode, as described inSection 2.3.

In the configuration memory space, 2000h-200Fh arephysically implemented. However, only locations2000h through 2007h are available. Other locations arereserved. Locations beyond 2000Fh will physicallyaccess user memory (see Figure 2-1).

FIGURE 2-1: PROGRAM MEMORY MAPPING

0h

3FFh400h

1FFFh2000h

ID Location

ID Location

ID Location

ID Location

Reserved

Reserved

Reserved

Configuration Word

2000

2001

2002

2003

2004

2005

2006

2007

2008h

3FFFh

Not Implemented

Not Implemented

Implemented

Implemented1FFh

Not Implemented

Not Implemented

Implemented

Implemented

0.5K Word 1K Word

200Fh

Reserved Reserved

DS30262E-page 2 2002 Microchip Technology Inc.

PIC16F8X

2.2 ID Locations

A user may store identification information (ID) in fourID locations, mapped in addresses 2000h through2003h. It is recommended that the user use only thefour Least Significant bits of each ID location. The IDlocations read out in an unscrambled fashion after codeprotection is enabled. It is recommended that ID loca-tion is written as “11 1111 1000 bbbb”, where“bbbb” is ID information.

2.3 Program/Verify Mode

The Program/Verify mode is entered by holding pinsRB6 and RB7 low, while raising MCLR pin from VIL toVIHH (high voltage). Once in this mode, the user pro-gram memory and the configuration memory can beaccessed and programmed in serial fashion. RB6 andRB7 are Schmitt Trigger inputs in this mode.

The sequence that enters the device into the Program-ming/Verify mode places all other logic into the RESETstate (the MCLR pin was initially at VIL). This meansthat all I/O are in the RESET state (high impedanceinputs).

The normal sequence for programming is to use theload data command to set a value to be written at theselected address. Issue the “begin programming com-mand” followed by “read data command” to verify andthen, increment the address.

2.3.1 SERIAL PROGRAM/VERIFY OPERATION

The RB6 pin is used as a clock input pin, and the RB7pin is used for entering command bits and datainput/output during serial operation. To input a com-mand, the clock pin (RB6) is cycled six times. Eachcommand bit is latched on the falling edge of the clockwith the Least Significant bit (LSb) of the commandbeing input first. The data on pin RB7 is required tohave a minimum setup and hold time (see AC/DCspecifications in Table 5-1), with respect to the fallingedge of the clock. Commands that have data associ-ated with them (read and load) are specified to have aminimum delay of 1 µs between the command and thedata. After this delay, the clock pin is cycled 16 timeswith the first cycle being a START bit and the last cyclebeing a STOP bit. Data is also input and output LSbfirst.

Therefore, during a read operation, the LSb will betransmitted onto pin RB7 on the rising edge of the sec-ond cycle, and during a load operation, the LSb will belatched on the falling edge of the second cycle. A min-imum 1 µs delay is also specified between consecutivecommands.

All commands are transmitted LSb first. Data words arealso transmitted LSb first. The data is transmitted onthe rising edge and latched on the falling edge of theclock. To allow for decoding of commands and reversalof data pin configuration, a time separation of at least1 µs is required between a command and a data word(or another command).

The available commands (Load Configuration andLoad Data for Program Memory) are discussed in thefollowing sections.

Note: Do not allow excess time when transition-ing MCLR between VIL and VIHH; this cancause spurious program executions tooccur. The maximum transition time is

1TCY + TPWRT (if enabled) +1024 TOSC (for LP, HS and XT modes only)

where TCY is the Instruction Cycle Time,TPWRT is the Power-up Timer Period, andTOSC is the Oscillator Period (all values inµs or ns). For specific values, refer to the ElectricalCharacteristics section of the Device DataSheet for the particular device.

2002 Microchip Technology Inc. DS30262E-page 3

PIC16F8X

2.3.1.1 Load Configuration

After receiving this command, the program counter(PC) will be set to 2000h. By then applying 16 cycles tothe clock pin, the chip will load 14-bits in a “data word,”as described above, to be programmed into the config-uration memory. A description of the memory mappingschemes of the program memory for normal operationand Configuration mode operation is shown inFigure 2-1. After the configuration memory is entered,the only way to get back to the user program memoryis to exit the Program/Verify Test mode by taking MCLRbelow VIL.

2.3.1.2 Load Data for Program Memory

After receiving this command, the chip will load in a14-bit “data word” when 16 cycles are applied, asdescribed previously. A timing diagram for the load datacommand is shown in Figure 5-1.

TABLE 2-1: COMMAND MAPPING FOR PIC16F83/CR83/F84/CR84

Command Mapping (MSb ... LSb) Data

Load Configuration 0 0 0 0 0 0 0, data (14), 0

Load Data for Program Memory 0 0 0 0 1 0 0, data (14), 0

Read Data from Program Memory 0 0 0 1 0 0 0, data (14), 0

Increment Address 0 0 0 1 1 0

Begin Erase Programming Cycle 0 0 1 0 0 0

Load Data for Data Memory 0 0 0 0 1 1 0, data (14), 0

Read Data from Data Memory 0 0 0 1 0 1 0, data (14), 0

Bulk Erase Program Memory 0 0 1 0 0 1

Bulk Erase Data Memory 0 0 1 0 1 1

TABLE 2-2: COMMAND MAPPING FOR PIC16F84A

Command Mapping (MSb ... LSb) Data

Load Configuration X X 0 0 0 0 0, data (14), 0

Load Data for Program Memory X X 0 0 1 0 0, data (14), 0

Read Data from Program Memory X X 0 1 0 0 0, data (14), 0

Increment Address X X 0 1 1 0

Begin Erase Programming Cycle 0 0 1 0 0 0

Begin Programming Only Cycle 0 1 1 0 0 0

Load Data for Data Memory X X 0 0 1 1 0, data (14), 0

Read Data from Data Memory X X 0 1 0 1 0, data (14), 0

Bulk Erase Program Memory X X 1 0 0 1

Bulk Erase Data Memory X X 1 0 1 1

DS30262E-page 4 2002 Microchip Technology Inc.

PIC16F8X

FIGURE 2-2: PROGRAM FLOW CHART - PIC16F8X PROGRAM MEMORY

Start

Set VDD = VDDP

Program Cycle

Read Data Command

Data Correct?Report

ProgrammingFailure

All LocationsDone?

Verify allLocations @

VDDMIN

Data Correct?

Verify allLocations @

VDDMAX

Data Correct?

Done

IncrementAddress

Command

Report VerifyError @VDDMIN

Report VerifyError @VDDMAX

Load DataCommand

BeginProgramming

Command

Wait 8 ms - PIC16F84A

PROGRAM CYCLE

No

No

No

No

Wait 20 ms - All Others

2002 Microchip Technology Inc. DS30262E-page 5

PIC16F8X

FIGURE 2-3: PROGRAM FLOW CHART - PIC16F8X CONFIGURATION MEMORY

Program ID

Start

LoadConfiguration

Data

Location? Program CycleRead Data Command

Data Correct?Report

ProgrammingFailure

IncrementAddress

Command

Address = 0x2004?

IncrementAddress

Command

IncrementAddress

Command

IncrementAddress

Command

ProgramCycle

(Config. Word)

Set VDD = VDDMAX

Read Data CommandData Correct?

Set VDD = VDDMAX

Read Data CommandData Correct?

Report ProgramConfigurationWord Error

Done

Yes

No

No

Yes

YesNo

No

Yes

Yes

No

DS30262E-page 6 2002 Microchip Technology Inc.

PIC16F8X

2.3.1.3 Load Data for Data Memory

After receiving this command, the chip will load in a14-bit “data word” when 16 cycles are applied. How-ever, the data memory is only 8-bits wide, and thus,only the first 8-bits of data after the START bit will beprogrammed into the data memory. It is still necessaryto cycle the clock the full 16 cycles, in order to allow theinternal circuitry to reset properly. The data memorycontains 64 words. Only the lower 8 bits of the PC aredecoded by the data memory, and therefore, if the PCis greater than 0x3F, it will wrap around and address alocation within the physically implemented memory.

2.3.1.4 Read Data from Program Memory

After receiving this command, the chip will transmitdata bits out of the program memory (user or configu-ration) currently accessed, starting with the second ris-ing edge of the clock input. The RB7 pin will go intoOutput mode on the second rising clock edge, and itwill revert back to Input mode (hi-impedance) after the16th rising edge. A timing diagram of this command isshown in Figure 5-2.

2.3.1.5 Read Data from Data Memory

After receiving this command, the chip will transmitdata bits out of the data memory starting with the sec-ond rising edge of the clock input. The RB7 pin will gointo Output mode on the second rising edge, and it willrevert back to Input mode (hi-impedance) after the 16thrising edge. As previously stated, the data memory is8-bits wide, and therefore, only the first 8 bits that areoutput are actual data.

2.3.1.6 Increment Address

The PC is incremented when this command isreceived. A timing diagram of this command is shownin Figure 5-3.

2.3.1.7 Begin Erase/Program Cycle

A load command must be given before every beginprogramming command. Programming of the appro-priate memory (configuration memory, user programmemory or data memory) will begin after this commandis received and decoded. An internal timing mechanismexecutes an erase before write. The user must allow forboth erase and programming cycle times for program-ming to complete. No “end programming” command isrequired.

2.3.1.8 Begin Programming

This command is available only on the PIC16F84A.A load command must be given before every beginprogramming command. Programming of the appro-priate memory (configuration memory, user programmemory or data memory) will begin after this commandis received and decoded. An internal timing mechanismexecutes a write. The user must allow for programcycle time for programming to complete. No “end pro-gramming” command is required.

This command is similar to the ERASE/PROGRAMCYCLE command, except that a word erase is notdone. It is recommended that a bulk erase be per-formed before starting a series of programming onlycycles.

2002 Microchip Technology Inc. DS30262E-page 7

PIC16F8X

2.3.1.9 Bulk Erase Program Memory

After this command is performed, the next programcommand will erase the entire program memory.

To perform a bulk erase of the program memory, thefollowing sequence must be performed.

For PIC16F84A, perform the following commands:

1. Do a “Load Data All ‘1’s” command2. Do a “Bulk Erase User Memory” command3. Do a “Begin Programming” command

4. Wait 10 ms to complete bulk erase

If the address is pointing to the configuration memory(2000h - 200Fh), then both the user memory and theconfiguration memory will be erased. The configurationword will not be erased, even if the address is pointingto location 2007h.

For PIC16CR83/CR84 and PIC16F84, perform thefollowing commands:

1. Issue Command 2 (write program memory)2. Send out 3FFFH data

3. Issue Command 1 (toggle select even rows)4. Issue Command 7 (toggle select even rows)5. Issue Command 8 (begin programming)

6. Delay 10 ms7. Issue Command 1 (toggle select even rows)8. Issue Command 7 (toggle select even rows)

2.3.1.10 Bulk Erase Data Memory

To perform a bulk erase of the data memory, the follow-ing sequence must be performed.

For PIC16F84A, perform the following commands:

1. Do a “Load Data All ‘1’s” command2. Do a “Bulk Erase Data Memory” command

3. Do a “Begin Programming” command4. Wait 10 ms to complete bulk erase

For PIC16CR83/CR84 and PIC16F84, perform thedata memory:

5. Send out 3FFFH data6. Issue Command 1 (toggle select even rows)7. Issue Command 7 (toggle select even rows)

8. Issue Command 8 (begin data)9. Delay 10 ms10. Issue Command 1 (toggle select even rows)

11. Issue Command 7 (toggle select even rows)

2.4 Programming Algorithm Requires Variable VDD

The PIC16F8X devices use an intelligent algorithm.The algorithm calls for program verification at VDDMIN,as well as VDDMAX. Verification at VDDMIN ensuresgood “erase margin”. Verification at VDDMAX ensuresgood “program margin”.

The actual programming must be done with VDD in theVDDP range (see Table 5-1):

VDDP = VCC range required during programming

VDDMIN = minimum operating VDD spec for the part

VDDMAX = maximum operating VDD spec for the part

Programmers must verify the PIC16F8X devices attheir specified VDDMAX and VDDMIN levels. SinceMicrochip may introduce future versions of thePIC16F8X devices with a broader VDD range, it is bestthat these levels are user selectable (defaults areacceptable).

Note: If the device is code protected(PIC16F84A), the BULK ERASE com-mand will not work.

Note: All BULK ERASE operations must takeplace at 4.5 to 5.5 VDD range.

Note: Any programmer not meeting theserequirements may only be classified as“prototype” or “development” programmer,but not a “production” quality programmer.

DS30262E-page 8 2002 Microchip Technology Inc.

PIC16F8X

3.0 CONFIGURATION WORD

Most of the PIC16F8X devices have five configurationbits. These bits can be set (reads ‘0’), or left unchanged(reads ‘1’) to select various device configurations. Theirusage in the Device Configuration Word is shown inRegister 3-1.

3.1 Device ID Word

The device ID word for the PIC16F84A device islocated at 2006h. Older devices do not have device ID.

REGISTER 3-1: CONFIGURATION WORD: PIC16F83/84/84A, PIC16CR83/84

TABLE 3-1: DEVICE ID WORD

DeviceDevice ID Value

Dev Rev

PIC16F84A 00 0101 011 X XXXX

For PIC16F83/84/84A:

CP CP CP CP CP CP CP CP CP CP PWTREN WDTEN FOSC1 FOSC0

FOR PIC16CR83/84:

CP CP CP CP CP CP DP CP CP CP PWTREN WDTEN FOSC1 FOSC0

bit13 bit0

bit 13-8,bit 6-4

CP: Code Protection bits(1)

1 = Code protection off0 = Code protection on

bit 7 For PIC16F83/84/84A:CP: Code Protection bits(1)

1 = Code protection off0 = Code protection onFor PIC16CR83/84:DP: Data Memory Code Protection bit1 = Code protection off0 = Data memory is code protected

bit 3 PWTREN: Power-up Timer Enable bit1 = PWRT disabled0 = PWRT enabled

bit 2 WDTEN: Watchdog Timer Enable bit1 = WDT enabled0 = WDT disabled

bit 1-0 FOSC1:FOSC0: Oscillator Selection bits11 = RC oscillator10 = HS oscillator01 = XT oscillator00 = LP oscillator

Note 1: All of the CP bits have to be given the same value to enable the code protection scheme listed.

2002 Microchip Technology Inc. DS30262E-page 9

PIC16F8X

4.0 CODE PROTECTION

For PIC16F8X devices, once code protection isenabled, all program data memory locations read all‘0’s. The ID locations and the configuration word readout in an unscrambled fashion. Further programming isdisabled for the entire program memory as well as datamemory. It is possible to program the ID locations andthe configuration word.

For PIC16CR8X devices, once code protection isenabled, all program memory locations read all ‘0’s;data memory locations read all ‘1’s.

A description of the code protection schemes for thevarious PIC16F8X devices is provided on page 11. Foreach device, the bit configuration for the device config-uration word to enable code protection is provided. Thisis followed with a comparison of read and write opera-tions for selected memory spaces in both protected andunprotected modes.

4.1 Disabling Code Protection

It is recommended that the following procedure be per-formed before any other programming is attempted. Itis also possible to turn code protection off (code protectbit = ‘1’) using this procedure; however, all data withinthe program memory and the data memory will beerased when this procedure is executed, and thus,the security of the data or code is not compro-mised.

Procedure to disable code protect:

1. Execute load configuration (with a ‘1’ in bits 4-13, code protect)

2. Increment to configuration word location(2007h)

3. Execute command (000001)4. Execute command (000111)5. Execute ‘Begin Programming’ (001000)

6. Wait 10 ms7. Execute command (000001)8. Execute command (000111)

4.2 Embedding Configuration Word and ID Information in the HEX File

Note: To allow portability of code, the program-mer is required to read the configurationword and ID locations from the HEX filewhen loading the HEX file. If configurationword information was not present in theHEX file, then a simple warning messagemay be issued. Similarly, while saving aHEX file, configuration word and ID infor-mation must be included. An option to notinclude this information may be provided.Specifically for the PIC16F8X, theEEPROM data memory should also beembedded in the HEX file (see Section 5.1). Microchip Technology Inc. feels stronglythat this feature is important for the benefitof the end customer.

DS30262E-page 10 2002 Microchip Technology Inc.

PIC16F8X

Device: PIC16F83

To code protect: 0000000000XXXX

Device: PIC16CR83

To code protect: 0000000000XXXX

Device: PIC16CR84

To code protect: 0000000000XXXX

Device: PIC16F84

To code protect: 0000000000XXXX

Device: PIC16F84A

To code protect: 0000000000XXXX

Legend: X = Don’t care

Program Memory Segment R/W in Protected Mode R/W in Unprotected Mode

Configuration Word (2007h) Read Unscrambled, Write Enabled Read Unscrambled, Write Enabled

All memory Read All ’0’s, Write Disabled Read Unscrambled, Write Enabled

ID Locations [2000h : 2003h] Read Unscrambled, Write Enabled Read Unscrambled, Write Enabled

Program Memory Segment R/W in Protected Mode R/W in Unprotected Mode

Configuration Word (2007h) Read Unscrambled Read Unscrambled

All memory Read All ’0’s for Program Memory,Read All ’1’s for Data Memory -Write Disabled

Read Unscrambled, Data Memory - Write Enabled

ID Locations [2000h : 2003h] Read Unscrambled Read Unscrambled

Program Memory Segment R/W in Protected Mode R/W in Unprotected Mode

Configuration Word (2007h) Read Unscrambled Read UnscrambledAll memory Read All ’0’s for Program Memory,

Read All ’1’s for Data Memory -Write Disabled

Read Unscrambled, Data Memory - Write Enabled

ID Locations [2000h : 2003h] Read Unscrambled Read Unscrambled

Program Memory Segment R/W in Protected Mode R/W in Unprotected Mode

Configuration Word (2007h) Read Unscrambled, Write Enabled Read Unscrambled, Write EnabledAll memory Read All ’0’s, Write Disabled Read Unscrambled, Write EnabledID Locations [2000h : 2003h] Read Unscrambled, Write Enabled Read Unscrambled, Write Enabled

Program Memory Segment R/W in Protected Mode R/W in Unprotected Mode

Configuration Word (2007h) Read Unscrambled, Write Enabled Read Unscrambled, Write EnabledAll memory Read All ’0’s, Write Disabled Read Unscrambled, Write Enabled

ID Locations [2000h : 2003h] Read Unscrambled, Write Enabled Read Unscrambled, Write Enabled

2002 Microchip Technology Inc. DS30262E-page 11

PIC16F8X

4.3 Checksum Computation

4.3.1 CHECKSUM

Checksum is calculated by reading the contents of thePIC16F8X memory locations and adding up theopcodes, up to the maximum user addressable loca-tion, e.g., 1FFh for the PIC16F83. Any carry bitsexceeding 16-bits are neglected. Finally, the configura-tion word (appropriately masked) is added to thechecksum. Checksum computation for each member ofthe PIC16F8X devices is shown in Table 4-1.

The checksum is calculated by summing the following:

• The contents of all program memory locations• The configuration word, appropriately masked

• Masked ID locations (when applicable)

The Least Significant 16 bits of this sum are the check-sum.

The following table describes how to calculate thechecksum for each device. Note that the checksum cal-culation differs depending on the code protect setting.Since the program memory locations read out differ-ently depending on the code protect setting, the tabledescribes how to manipulate the actual program mem-ory values to simulate the values that would be readfrom a protected device. When calculating a checksumby reading a device, the entire program memory cansimply be read and summed. The configuration wordand ID locations can always be read.

Note that some older devices have an additional valueadded in the checksum. This is to maintain compatibil-ity with older device programmer checksums.

TABLE 4-1: CHECKSUM COMPUTATION

DeviceCode

ProtectChecksum*

BlankValue

25E6h at 0and MaxAddress

PIC16F83 OFFON

SUM[000h:1FFh] + CFGW & 3FFFhCFGW & 3FFFh + SUM_ID

3DFFh3E0Eh

09CDh09DCh

PIC16CR83 OFFON

SUM[000h:1FFh] + CFGW & 3FFFhCFGW & 3FFFh + SUM_ID

3DFFh3E0Eh

09CDh09DCh

PIC16F84 OFFON

SUM[000h:3FFh] + CFGW & 3FFFhCFGW & 3FFFh + SUM_ID

3BFFh3C0Eh

07CDh07DCh

PIC16CR84 OFFON

SUM[000h:3FFh] + CFGW & 3FFFhCFGW & 3FFFh + SUM_ID

3BFFh3C0Eh

07CDh07DCh

PIC16F84A OFFON

SUM[000h:3FFh] + CFGW & 3FFFhCFGW & 3FFFh + SUM_ID

3BFFh3C0Eh

07CDh07DCh

Legend: CFGW = Configuration WordSUM[a:b] = [Sum of locations a to b inclusive]SUM_ID = ID locations masked by 0xF then made into a 16-bit value with ID0 as the most significant nibble.

For example, ID0 =01h, ID1 = 02h, ID3 = 03h, ID4 = 04h, then SUM_ID = 1234h.*Checksum = [Sum of all the individual expressions] MODULO [FFFFh]+ = Addition& = Bitwise AND

DS30262E-page 12 2002 Microchip Technology Inc.

PIC16F8X

5.0 PROGRAM/VERIFY MODE ELECTRICAL CHARACTERISTICS

5.1 Embedding Data EEPROM Contents in HEX File

The programmer should be able to read data EEPROMinformation from a HEX file and conversely (as anoption), write data EEPROM contents to a HEX file,along with program memory information and fuseinformation.

The 64 data memory locations are logically mapped,starting at address 2100h. The format for data memorystorage is one data byte per address location, LSBaligned.

TABLE 5-1: AC/DC CHARACTERISTICSTIMING REQUIREMENTS FOR PROGRAM/VERIFY TEST MODE

Standard Operating ConditionsOperating Temperature: +10°C ≤ TA ≤ +40°C, unless otherwise stated, (25°C is recommended)Operating Voltage: 4.5V ≤ VDD ≤ 5.5V, unless otherwise stated

ParameterNo.

Sym. Characteristic Min. Typ. Max. UnitsConditions/Comme

nts

VDDP Supply voltage during programming 4.5 5.0 5.5 V

VDDV Supply voltage during verify VDDMIN VDDMAX V (Note 1)

VIHH High voltage on MCLR for Test mode entry

12 14.0 V (Note 2)

IDDP Supply current (from VDD) during program/verify

50 mA

IHH Supply current from VIHH (on MCLR) 200 µA

VIH1 (RB6, RB7) input high level 0.8 VDD V Schmitt Trigger input

VIL1 (RB6, RB7) input low level MCLR (Test mode selection)

0.2 VDD V Schmitt Trigger input

P1 TvHHR MCLR rise time (VIL to VIHH) for Test mode entry

8.0 µs

P2 Tset0 RB6, RB7 setup time (before pattern setup time)

100 ns

P3 Tset1 Data in setup time before clock ↓ 100 ns

P4 Thld1 Data in hold time after clock ↓ 100 ns

P5 Tdly1 Data input not driven to next clock input (delay required between com-mand/data or command/command)

1.0 µs

P6 Tdly2 Delay between clock ↓ to clock ↑ of next command or data

1.0 µs

P7 Tdly3 Clock to data out valid (during read data)

80 ns

P8 Thld0 RB<7:6> hold time after MCLR ↑ 100 ns

— — Erase cycle time — — 4 ms PIC16F84A only

— — Program cycle time — — 4 ms PIC16F84A only

— — Erase and program time ——

——

820

msms

PIC16F84A onlyAll other devices

Note 1: Program must be verified at the minimum and maximum VDD limits for the part.2: VIHH must be greater than VDD + 4.5V to stay in Programming/Verify mode.

2002 Microchip Technology Inc. DS30262E-page 13

PIC16F8X

FIGURE 5-1: LOAD DATA COMMAND (PROGRAM/VERIFY)

FIGURE 5-2: READ DATA COMMAND (PROGRAM/VERIFY)

FIGURE 5-3: INCREMENT ADDRESS COMMAND (PROGRAM/VERIFY)

}}}}

100 nsmin.

P4P3

000

1 µs min.

P5

1 µs min.

P6

0

155432165

Program/Verify Test Mode

0

43

0100 ns

P4

1

100 nsmin.

P3

RESET

21

100 ns

P8

VIHH

RB6(CLOCK)

RB7(DATA) 0

MCLRP2

P1

}

00

1 µs

P5

1 µs min.

P6155432165

Program/Verify Test Mode

0

43

0

100

P4

1

100 nsmin.

P3

RESET

21100 ns

P8

VIHH

RB6(CLOCK)

RB7(DATA) 0

MCLR

RB7 = OutputRB7Input

P7

}

P2

ns

min.

} }

000 0 0 01 1

1 2 3 4 5 6 1 2

100 nsmin

P3 P4

P6

1 µs min.Next Command

P5

1 µs min.

VIHH

MCLR

RB6(CLOCK)

(DATA)RB7

RESETProgram/Verify Test Mode

DS30262E-page 14 2002 Microchip Technology Inc.

Note the following details of the code protection feature on PICmicro® MCUs.

• The PICmicro family meets the specifications contained in the Microchip Data Sheet.• Microchip believes that its family of PICmicro microcontrollers is one of the most secure products of its kind on the market today,

when used in the intended manner and under normal conditions.• There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our knowl-

edge, require using the PICmicro microcontroller in a manner outside the operating specifications contained in the data sheet. The person doing so may be engaged in theft of intellectual property.

• Microchip is willing to work with the customer who is concerned about the integrity of their code.• Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not

mean that we are guaranteeing the product as “unbreakable”.• Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of

our product.

If you have any further questions about this matter, please contact the local sales office nearest to you.

Information contained in this publication regarding deviceapplications and the like is intended through suggestion onlyand may be superseded by updates. It is your responsibility toensure that your application meets with your specifications.No representation or warranty is given and no liability isassumed by Microchip Technology Incorporated with respectto the accuracy or use of such information, or infringement ofpatents or other intellectual property rights arising from suchuse or otherwise. Use of Microchip’s products as critical com-ponents in life support systems is not authorized except withexpress written approval by Microchip. No licenses are con-veyed, implicitly or otherwise, under any intellectual propertyrights.

2002 Microchip Technology Inc.

Trademarks

The Microchip name and logo, the Microchip logo, FilterLab,KEELOQ, MPLAB, PIC, PICmicro, PICMASTER, PICSTART,PRO MATE, SEEVAL and The Embedded Control SolutionsCompany are registered trademarks of Microchip TechnologyIncorporated in the U.S.A. and other countries.

dsPIC, ECONOMONITOR, FanSense, FlexROM, fuzzyLAB,In-Circuit Serial Programming, ICSP, ICEPIC, microID,microPort, Migratable Memory, MPASM, MPLIB, MPLINK,MPSIM, MXDEV, PICC, PICDEM, PICDEM.net, rfPIC, SelectMode and Total Endurance are trademarks of MicrochipTechnology Incorporated in the U.S.A.

Serialized Quick Term Programming (SQTP) is a service markof Microchip Technology Incorporated in the U.S.A.

All other trademarks mentioned herein are property of theirrespective companies.

© 2002, Microchip Technology Incorporated, Printed in theU.S.A., All Rights Reserved.

Printed on recycled paper.

DS30262E - page 15

Microchip received QS-9000 quality system certification for its worldwide headquarters, design and wafer fabrication facilities in Chandler and Tempe, Arizona in July 1999. The Company’s quality system processes and procedures are QS-9000 compliant for its PICmicro® 8-bit MCUs, KEELOQ® code hopping devices, Serial EEPROMs and microperipheral products. In addition, Microchip’s quality system for the design and manufacture of development systems is ISO 9001 certified.

DS30262E-page 16 2002 Microchip Technology Inc.

MAMERICASCorporate Office2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel: 480-792-7200 Fax: 480-792-7277Technical Support: 480-792-7627Web Address: http://www.microchip.comRocky Mountain2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel: 480-792-7966 Fax: 480-792-7456

Atlanta500 Sugar Mill Road, Suite 200BAtlanta, GA 30350Tel: 770-640-0034 Fax: 770-640-0307Boston2 Lan Drive, Suite 120Westford, MA 01886Tel: 978-692-3848 Fax: 978-692-3821Chicago333 Pierce Road, Suite 180Itasca, IL 60143Tel: 630-285-0071 Fax: 630-285-0075Dallas4570 Westgrove Drive, Suite 160Addison, TX 75001Tel: 972-818-7423 Fax: 972-818-2924DaytonTwo Prestige Place, Suite 130Miamisburg, OH 45342Tel: 937-291-1654 Fax: 937-291-9175DetroitTri-Atria Office Building 32255 Northwestern Highway, Suite 190Farmington Hills, MI 48334Tel: 248-538-2250 Fax: 248-538-2260Kokomo2767 S. Albright Road Kokomo, Indiana 46902Tel: 765-864-8360 Fax: 765-864-8387Los Angeles18201 Von Karman, Suite 1090Irvine, CA 92612Tel: 949-263-1888 Fax: 949-263-1338New York150 Motor Parkway, Suite 202Hauppauge, NY 11788Tel: 631-273-5305 Fax: 631-273-5335San JoseMicrochip Technology Inc.2107 North First Street, Suite 590San Jose, CA 95131Tel: 408-436-7950 Fax: 408-436-7955Toronto6285 Northam Drive, Suite 108Mississauga, Ontario L4V 1X5, CanadaTel: 905-673-0699 Fax: 905-673-6509

ASIA/PACIFICAustraliaMicrochip Technology Australia Pty LtdSuite 22, 41 Rawson StreetEpping 2121, NSWAustraliaTel: 61-2-9868-6733 Fax: 61-2-9868-6755China - BeijingMicrochip Technology Consulting (Shanghai)Co., Ltd., Beijing Liaison OfficeUnit 915Bei Hai Wan Tai Bldg.No. 6 Chaoyangmen Beidajie Beijing, 100027, No. ChinaTel: 86-10-85282100 Fax: 86-10-85282104China - ChengduMicrochip Technology Consulting (Shanghai)Co., Ltd., Chengdu Liaison OfficeRm. 2401, 24th Floor, Ming Xing Financial TowerNo. 88 TIDU StreetChengdu 610016, ChinaTel: 86-28-6766200 Fax: 86-28-6766599China - FuzhouMicrochip Technology Consulting (Shanghai)Co., Ltd., Fuzhou Liaison OfficeRm. 531, North BuildingFujian Foreign Trade Center Hotel73 Wusi RoadFuzhou 350001, ChinaTel: 86-591-7557563 Fax: 86-591-7557572China - ShanghaiMicrochip Technology Consulting (Shanghai)Co., Ltd.Room 701, Bldg. BFar East International PlazaNo. 317 Xian Xia RoadShanghai, 200051Tel: 86-21-6275-5700 Fax: 86-21-6275-5060China - ShenzhenMicrochip Technology Consulting (Shanghai)Co., Ltd., Shenzhen Liaison OfficeRm. 1315, 13/F, Shenzhen Kerry Centre,Renminnan LuShenzhen 518001, ChinaTel: 86-755-2350361 Fax: 86-755-2366086Hong KongMicrochip Technology Hongkong Ltd.Unit 901-6, Tower 2, Metroplaza223 Hing Fong RoadKwai Fong, N.T., Hong KongTel: 852-2401-1200 Fax: 852-2401-3431IndiaMicrochip Technology Inc.India Liaison OfficeDivyasree Chambers1 Floor, Wing A (A3/A4)No. 11, O’Shaugnessey RoadBangalore, 560 025, IndiaTel: 91-80-2290061 Fax: 91-80-2290062

JapanMicrochip Technology Japan K.K.Benex S-1 6F3-18-20, ShinyokohamaKohoku-Ku, Yokohama-shiKanagawa, 222-0033, JapanTel: 81-45-471- 6166 Fax: 81-45-471-6122KoreaMicrochip Technology Korea168-1, Youngbo Bldg. 3 FloorSamsung-Dong, Kangnam-KuSeoul, Korea 135-882Tel: 82-2-554-7200 Fax: 82-2-558-5934SingaporeMicrochip Technology Singapore Pte Ltd.200 Middle Road#07-02 Prime CentreSingapore, 188980Tel: 65-334-8870 Fax: 65-334-8850TaiwanMicrochip Technology Taiwan11F-3, No. 207Tung Hua North RoadTaipei, 105, TaiwanTel: 886-2-2717-7175 Fax: 886-2-2545-0139

EUROPEDenmarkMicrochip Technology Nordic ApSRegus Business CentreLautrup hoj 1-3Ballerup DK-2750 DenmarkTel: 45 4420 9895 Fax: 45 4420 9910FranceMicrochip Technology SARLParc d’Activite du Moulin de Massy43 Rue du Saule TrapuBatiment A - ler Etage91300 Massy, FranceTel: 33-1-69-53-63-20 Fax: 33-1-69-30-90-79GermanyMicrochip Technology GmbHGustav-Heinemann Ring 125D-81739 Munich, GermanyTel: 49-89-627-144 0 Fax: 49-89-627-144-44ItalyMicrochip Technology SRLCentro Direzionale Colleoni Palazzo Taurus 1 V. Le Colleoni 120041 Agrate BrianzaMilan, Italy Tel: 39-039-65791-1 Fax: 39-039-6899883United KingdomArizona Microchip Technology Ltd.505 Eskdale RoadWinnersh TriangleWokingham Berkshire, England RG41 5TUTel: 44 118 921 5869 Fax: 44-118 921-5820

10/01/01

WORLDWIDE SALES AND SERVICE