Sie sind auf Seite 1von 15

Gua del pic 16f84

El pic que se va a utilizar para las prcticas realizadas va ha ser el 16f84. Este pic es
similar al 16c84, por tanto (aunque a veces se hable de ste nos referimos al 16f84 a lo lar!o de
toda la !u"a.
1. Encapsulado:
El 16f84 pertenece a la familia de la !ama media # dentro de ella es de los ms peque$os%
tan solo tiene 18 patillas. &iene una capacidad de memoria de pro!rama de 1' (palabras de 14 bits
cada una tipo ()*+, # 64 b#tes de EE-./0 como memoria au1iliar. Estas memorias son
elctricamente borrables, lo que permite !rabar # borrar el pro!rama para realizar todas las
pruebas pertinentes (soporta unos 1222 ciclos de escritura3borrado. Este pic est fabricado con
tecnolo!"a 40/+ # el encapsulado (de 18 patillas es el representado en la fi!ura 1.1.
Figura 1.1. -atilla5e del pic 16f84
* continuaci6n se va a comentar brevemente la misi6n de cada patilla%
- Vdd% -atilla por la que se va a aplicar la tensi6n positiva de alimentaci6n (47 8 67 94.
- Vss: 4onectada a tierra o ne!ativo de la alimentaci6n.
- MCLR: Esta patilla va a ser activada a nivel ba5o para resetear el pic. &ambin se va a
utilizar durante la !rabaci6n de la memoria de pro!rama para introducir por ella la tensi6n 7pp (1:7
8 147 94. El micropic trainer tiene un bot6n de reset conectado al pic como se ve en la fi!ura 1.:
(.1 ; 122 # . ; 4'<.
Figura 1.2. 4ircuito que permite producir un
reset al presionar un pulsador
- OSC1CL!"#: -or ella se va a introducir la entrada del circuito oscilador e1terno que va
a proporcional la frecuencia de traba5o.
- OSC2CL!O$%: -atilla au1iliar del circuito oscilador. +e!=n la frecuencia de traba5o del
oscilador, se va a tener una u otra velocidad en la e5ecuci6n de cada instrucci6n. En las prcticas
realizadas, la frecuencia de traba5o es de 4 0,z, por tanto el ciclo de instrucci6n va a ser de 1s!
(4 periodos de relo5 1 2,:>s! ; 1s!. &odas las instrucciones se van a e5ecutar en 1s! salvo las
de salto que van ha tardar :s!.
)os pic admiten cuatro tipos de circuito oscilador (.4, ,+, ?& # )-. En las prcticas
realizadas se a utilizado el ?& ((i!ura 1.@.
Figura 1.&. Esquema del oscilador tipo ?&
Este circuito utiliza un cristal de cuarzo que act=a como un oscilador que proporciona la
frecuencia de 40,z antes citada. )os condensadores 41 # 4: estn comprendidos entre 1> 8 @@
p(. El microApic trainer los utiliza de :< p(.
- R'( ) R'4: +on las > l"neas de E3+ di!itales correspondientes a la puerta *. )a l"nea
.*4 multiple1a el %OC!". En este caso sirve para recibir una frecuencia e1terna que alimente el
temporizador interno &0.2.
- R*( ) R*+: 4orresponden a las 8 l"neas de E3+ di!itales de la puerta B. )a .B2
multiple1a el "#%, que servir de entrada a una petici6n e1terna de interrupci6n.
El consumo t"pico del pic es de :m* apro1imadamente funcionando en modo normal.
4uando entramos en el modo llamado CreposoD, mediante la instrucci6n +)EE- (ver apartado >,
pasa a consumir menos de 12 *.
2. Arquitectura interna:
)a arquitectura del procesador si!ue el modelo ,arvard. En este, la 4-E se conecta de
forma independiente # con buses distintos con la memoria de instrucciones # con la de datos,
permitiendo a esta acceder simultneamente a las dos memorias. +e aplica la tcnica de
se!mentaci6n en la e5ecuci6n de las instrucciones. Esta se!mentaci6n permite al procesador
realizar al mismo tiempo la e5ecuci6n de una instrucci6n # la b=squeda del c6di!o de la si!uiente.
9e esta forma se puede e5ecutar cada instrucci6n en un ciclo (un ciclo de instrucci6n equivale a
cuatro ciclos de relo5. )as instrucciones de salto ocupan dos ciclos al no conocer la direcci6n de la
si!uiente instrucci6n hasta que no se ha#a completado la de bifurcaci6n.
El formato de todas las instrucciones es de la misma lon!itud (14 bits en los de !ama
media. -rocesador .F+4 (4omputador de Gue!o de Fnstrucciones .educido. )os modelos de la
!ama media disponen de un repertorio de @> instrucciones. 4ualquier instrucci6n puede mane5ar
cualquier elemento de la arquitectura como fuente o como destino,es decir, todos los ob5etos del
sistema (puertas de E3+, posiciones de memoria, etc. estn implementados como re!istros.
En la fi!ura :.1 aparece el dia!rama de bloques del pic 16f84. -ara analizar un poco el
funcionamiento del procesador, nos vamos a centrar en la e5ecuci6n de una instrucci6n.
Figura 2.1. *rquitectura interna del -F416(84
El contador de pro!rama comienza la fase de b=squeda facilitando la direcci6n de la
memoria de instrucciones donde se ubica la instrucci6n. +u c6di!o binario de 14 bits se lee # se
car!a en el .e!istro de instrucciones (1, desde donde se transfiere al decodificador # a la unidad
de control (:. )a *)E (@ es la encar!ada de realizar la operaci6n aritmticoHl6!ica que implica la
instrucci6n decodificada. Eno de los operandos lo recibe del re!istro I (4 # el otro de un re!istro o
de la propia instrucci6n.
En cuanto a la memoria de pro!rama, el pic es capaz de contener 8.1J: instrucciones de
14 bits cada una. Este mapa se divide en p!inas de :.248 posiciones. -ara direccionar 8'
posiciones se necesitan 1@ bits (lon!itud del contador de pro!rama. +in embar!o el pic solo tiene
implementadas 1' posiciones, por lo que i!nora los @ bits de ms peso del -4 (contador
pro!rama. )a or!anizaci6n de la memoria de pro!rama es como indica la fi!ura :.:.
El vector de reset se almacena en la direcci6n 2222, mientras que el vector de interrupci6n
est en la 2224. )a memoria de pro!rama de usuario comienza en la direcci6n 222> # se e1tiende
hasta la 2@((.
)a pila es una zona aislada de las memorias de instrucciones # datos (7er fi!. :.@. &iene
una estructura )F(/ ()ast Fn (irst /ut en la que el =ltimo valor !uardado es el primero que sale.
&iene ocho niveles de profundidad cada uno con 1@ bits. )a instrucci6n 4*)) (7er apartado > # las
interrupciones ori!inan la car!a del contenido del -4 en el nivel superior de la pila. El contenido del
nivel superior se saca de la pila al e5ecutar las instrucciones .E&E.K, .E&)I # .E&(FE.
Figura 2.&. /r!anizaci6n de la memoria de pro!rama
3. Registros internos:
)a memoria de datos del 16(84 dispone de dos zonas diferentes%
- ,rea --.ROM: de 64 b#tes. En ella se pueden almacenar datos que no se pierden al
desconectar la alimentaci6n.
- ,rea R'M es/0/ica 1 SR'M: en ella reside el banco de re!istros
espec"ficos (+(. # el banco de re!istros de prop6sito !eneral (L-.. El primero tiene :4
posiciones de tama$o b#te # el se!undo 68.
)a memoria .*0 se halla dividida en dos bancos (banco 2 # banco 1 de 1:8 b#tes cada
uno. )as 1: primeras posiciones estn reservadas al +(., son los re!istros encar!ados del control
del procesador # sus recursos. )as direcciones comprendidas entre <, 8 8<, no son operativas.
)os 68 re!istros del L-. se destinan a prop6sito !eneral # en realidad solo son operativos los 68
del banco 2 porque los del banco 1 se mapean sobre el banco 2, es decir, cuando se apunta a uno
del banco 1 se accede al mismo pero en el banco 2.
* continuaci6n, se describen los diferentes re!istros que se representan en la fi!ura @.1.
Figura &.1. /r!anizaci6n de los re!istros internos
- Regis/r1 de i2direcci32 4((5: Este re!istro no tiene e1istencia f"sica, por tanto no se
podr leer. +i se intenta acceder a l, siempre se encontrar 22, # si se intenta escribir se producir
un K/-, es decir, una instrucci6n que no hace nada. Este re!istro se utiliza =nicamente para
realizar un direccionamiento indirectoM cuando se le hace referencia se accede a la direcci6n de un
banco especificada con los < bits de menos peso del re!istro (+.. El bit de ms peso del (+.
5unto con el F.- del re!istro E+&*9/ se encar!a de seleccionar el banco a acceder.
- Regis/r1 .CL 4(25: +on los 8 bits de menos peso del contador del pro!rama o -4.
4omo el -4 debe tiene un tama$o de 1@ bits, sus bits de ma#or peso se llevan al re!istro -4)*&,
(posiciones 2*H8*. 4omo muestra la fi!ura @.:, si el -4 es destino de una instrucci6n, el
contenido de -4)*&, se tiene en cuenta automticamenteM para las instrucciones 4*)) # L/&/
tiene lu!ar la misma operaci6n (teniendo en cuenta que el -4 est ahora codificado con 11 bits en
la propia instrucci6n.
Figura &.2. 9eterminaci6n de los bits de ma#or peso del -4 a travs del
-4)*&,. * la derecha, para instrucciones 4*)) # L/&/.
- Regis/r1 S%'%$S 4(&5: contiene un cierto n=mero de bits de estado de la unidad
central. +e puede leer # escribir como cualquier otro re!istro. En la fi!ura @.@ se puede ver la
estructura de este re!istroM ha# bits que no se pueden varia al indicar stados del procesador, as" al
e5ecutar la instrucci6n de borrar el re!istro, este se car!a con el valor 222uu1uu (u ; se queda
como estaba.
Figura &.&. Estructura interna del re!istro estado
El 6i/ ( 1 C (4arr# es el bit de acarreo para las operaciones de suma # sustracci6n. +e
pone a 1 si se produce acarreo en el bit de ma#or peso. &ambin lo utilizan las instrucciones de
rotaci6n.
El 6i/ 1 1 7C (9i!it 4arr# es el bit de acarreo de d"!ito. (unciona i!ual que el anterior,
pero haciendo referencia al 4N bit.
El 6i/ 2 1 8 (Oero se pone a 1 si el resultado de una operaci6n aritmtica o l6!ica es nulo.
El 6i/ & 1 .7 (-oPer doPn se pone a 1 durante la cone1i6n a la alimentaci6n del circuito o
durante la e5ecuci6n de la instrucci6n 4).I9&. +e pone a 2 al e5ecutar +)EE-. Es de solo lectura.
El 6i/ 4 1 %O (&ime out se pone a 1 durante la cone1i6n a alimentaci6n o durante la
e5ecuci6n de una instrucci6n 4).I9& o +)EE-. +e pone a 2 cuando el temporizador Patchdo! se
desborda. &ambin es de solo lectura.
)os 6i/ 9 : 6 1 R.( : R.1 sirven para seleccionar las p!inas de memoria de pro!rama. El
16(84 solo utiliza el .-2 al tener tan solo dos p!inasM si .-2 ; 1 selecciona pa!ina 1, si .-2 ; 2
selecciona la pa!ina 2.
El 6i/ + 1 "R. no se utiliza en nuestro caso, debe pro!ramarse como 2.
)os bits &2 # -9 tambin nos sirven para determinar la causa de la producci6n de un reset
(ver tabla @.1.
%O .7 C12dici32 de rese/
1 1 .eset por alimentaci6n
2 1 9esbordamiento del I9& en funcionamiento normal
2 2 9esbordamiento del I9& en estado de reposo
1 1 *ctivaci6n del 04). en funcionamiento normal
1 2 *ctivaci6n 04). en reposo
%a6la &.1. 9eterminaci6n del ori!en de un reset
- Regis/r1 "#%CO# 4(*-8*5: sirve para el control !lobal de las interrupciones # para
indicar la procedencia de al!una de ellas. )as cuatro fuentes de interrupci6n posibles en el 16(84
son% activaci6n de la patilla .B23FK&, desbordamiento del temporizador &0.2, cambio de estado
en los pines .B4 a .B< # el fin de una escritura en la EE-./0 de datos.
Figura &.4. .e!istro FK&4/K
4ada bit del re!istro FK&4/K ((i!ura @.4 tiene un si!nificado concreto que es el que
si!ue%
El 6i/ ( 1 R*"F (.B Fnterrupt (la! se pone a 1 si ha# un cambio de estado en una de las
l"neas de .B4 a .B< del puerto B.
El 6i/ 1 1 "#%F (Fnterrupt (la! se pone a 1 si ha# una interrupci6n provocada por la l"nea
.B;3FK& del puerto B.
El 6i/ 2 1 %("F (&imer 2 Fnterrupt (la! se pone a 1 si ha# desbordamiento del &imer 2.
El 6i/ & 1 R*"- (.B Fnterrupt Enable se pone a 1 para autorizar las interrupciones
provocadas por un cambio de estado en las l"neas .B4 a .B< del puerto B.
El 6i/ 4 1 "#%- (Fnterrupt Enable se pone a 1 para autorizar las interrupciones provocadas
por la l"nea .B23FK& del puerto B.
)os 6i/ 9 1 6i/ %("- (&imer 2 Fnterrupt Enable se pone a 1 para autorizar las interrupciones
debidas al desbordamiento del temporizador 2.
El 6i/ 6 1 --"- (EE-./0 Fnterrupt Enable se pone a 1 para autorizar las interrupciones
que proceden de la memoria EE-./0 de datos.
El 6i/ + 1 G"- (Llobal Fnterrupt Enable se pone a 1 para autorizar todas las interrupciones
que no ten!an sus bits a 2. +i este bit es 2, todas las interrupciones estn desactivadas aunque
sus bits particulares sean 1 (7er fi!ura @.>.
Figura &.9. )6!ica de control para interrupciones
- .uer/as de -S: el 16(84 solo dispone de dos puertas de entrada3salida. )a
puerta * posee > l"neas, .*2H.*4, # una de ellas soporta dos funciones multiple1adas. +e trata de
la .*43&24'F, que puede actuar como l"nea de E3+ o como patilla de entrada para los impulsos
con que debe contar &0.2. )a puerta B tiene 8 l"neas, .B2H.B<, # tambin tiene una con
funciones multiple1adas, la .B23FK&, que sirve como E3+ # como patilla por la que se reciben los
impulsos e1ternos que provocan una interrupci6n. 4ada l"nea de E3+ puede confi!urarse
independientemente como entrada o salida, se!=n se pon!a a 1 o 2, respectivamente, el bit
asociado del re!istro de &.F+* o &.F+B (direcciones > # 6 del banco 1 de la memoria de datos.
)os re!istros -EE.&** # -EE.&*B !uardan la informaci6n que entra o sale por la puerta
(direcciones > # 6 del banco 2. *l reinicializarse el pic todos los bits de los re!istros &.F+ quedan a
1, con lo que las l"neas de las puertas quedan confi!uradas como entradasM las resistencias pullHup
que veremos ms adelante, se desconectan al resetear. 4ada l"nea de salida puede suministrar
una corriente m1ima de :2 m* # si es entrada puede absorber hasta :> m*.
En la fi!ura @.6 se muestra la adaptaci6n de las patillas .*4H.*2 a las se$ales
internas del procesador. -or e5emplo, cuando se saca un nivel l6!ico por una puerta *, primero se
deposita en la l"nea correspondiente del bus de datos # se activa la se$al I.F&E, lo que ori!ina el
almacenamiento del nivel en la bscula de datosM para que act=e como salida, la bscula de
confi!uraci6n deber"a contener un 2, por lo que la puerta /. tendr"a un 2 en su salida # la *K9
tambinM estos valores producen la conducci6n del -0/+ superior # el bloqueo del K0/+M as", la
patilla queda conectada a 7dd # tiene nivel alto. 4omo la l"nea de salida est lacheada conserva su
valor hasta que no se reescriba en la bscula 9.
Figura &.6. 4one1i6n electr6nica de las patillas .*QH.*2.
* la derecha la patilla .*4
En la fi!ura @.< se ve el esquema electr6nico de cone1ionado para las patillas
.B<H.B2. * todas las l"neas de esta puerta se le permite conectar una resistencia pullHup de
elevado valor con el positivo de la alimentaci6n (se pro!rama en el re!istro /-&F/K. )as l"neas
.B<H.B4 pueden pro!ramarse para que !eneren una interrupci6n si al!una de ellas cambia de
valor (en ese caso se indicar"a en el .BF(. )as l"neas .B< # .B6 tambin se utilizan para la
!rabaci6n en serie de la memoria de pro!rama (7er apartado 4.
Figura &.+. * la izquierda el cone1ionado de las puertas .B<H.B4.
* la derecha para las puertas .B@H.B2.
- %e;p1ri<ad1res: el &0.2 es un temporizador3contador de 8 bits. -uede utilizarse
como contador, representado por los impulsos que se aplican a la patilla .*43&24'F (de (( pasa a
22, activndose un se$alizador o una interrupci6n, # como temporizador, car!ando un re!istro con
un valor inicial (al desbordarse har lo mismo que el anterior. -ara pro!ramarlo de una u otra
forma se usa el re!istro /-&F/K que veremos ms adelante. El &0.2 puede ser le"do # escrito
(direcci6n 1, banco 2 en cualquier momento al estar conectado al bus de datos. 4uando act=a
como temporizador se car!a con el valor de los impulsos que se quiere temporizar, pero
e1presados en complemento a :M as", al lle!ar al n=mero de impulsos deseado se desborda #
activa el se$alizador &/F( #3o se produce la interrupci6n.
/tro temporizador importante es el perr1 guardi02 (I9&. +e trata de un contador interno
de 8 bits que ori!ina un reset cuando se desborda. +u control de tiempos es independiente del
&0.2 # est basado en una red .H4 interna, por lo que no necesita nin!=n componente e1terno #
contin=a funcionando incluso cuando el relo5 del pic se para durante, por e5emplo, una instrucci6n
+)EE-. +e pro!rama desde el re!istro /-&F/K. +e puede desactivar en la palabra de
confi!uraci6n (ms adelante.
)a temporizaci6n nominal del I9& es de 18 ms!, pero puede lle!ar a :,@ se!undos
utilizando el llamado divisor de frecuencia. Este divisor puede utilizarse con el I9& o con el &0.2.
4on el &0.2 act=a como -reHdivisor, es decir, los impulsos pasan primero por el divisor # lue!o se
aplican al &0.2. 4on el I9& act=a como -ostHdivisor.
Ena f6rmula prctica para calcular los tiempos a controlar con el &0.2 puede ser esta%
7alor a car!ar en &0.2 ; &emporizaci6n 3 4 R &oscilaci6n R .an!o del divisor
- Regis/r1 O.%"O# 4direcci32 815: la misi6n principal de este re!istro es controlar el
&0.2 # el divisor de frecuencia. /cupa la direcci6n 81, de la memoria de datos (equivale a la
direcci6n 1 del banco 1. En la fi!ura @.8 se puede ver la estructura de este re!istro.
Figura &.8. 9istribuci6n de los bits del re!istro /-&F/K
)os 6i/s (= 1 : 2 1 .S(= .S1 : .S2 son los encar!ados de definir el valor con el que act=a
el divisor de frecuencia. En la tabla @.: se pueden ver los distintos valores que puede tomar el
divisor.
.S2 .S1 .S( 7i>isi32 del %MR( 7i>isi32 del ?7%
2 2 2 1%: 1%1
2 2 1 1%4 1%:
2 1 2 1%8 1%4
2 1 1 1%16 1%8
1 2 2 1%@: 1%16
1 2 1 1%64 1%@:
1 1 2 1%1:8 1%64
1 1 1 1%:>6 1%1:8
%a6la &.2. -ro!ramaci6n de los bits -+:, -+1 # -+2
El 6i/ & 1 .S' (-rescaler assi!nment asi!na el divisor de frecuencia al I9& (1 o al
&0.2 (2.
El 6i/ 4 1 R%- (&imer 2 si!nal ed!e hace que el &0.2 se incremente cada flanco
ascendente (2 o descendente (1.
El 6i/ 9 1 R%S (&imer 2 si!nal source a 2 indica que el temporizador utilizar el relo5
interno. +i est a 1 utilizar la se$al aplicada en la patilla .*23&24'F.
El 6i/ 6 1 "#%-7G (Fnterrupt ed!e define el sentido del flanco que provocar una
interrupci6n a travs de la patilla .B23FK&. En 1 activa un flanco de subida # un 2 de ba5ada.
El 6i/ + 1 R*.$ (.B pull up enable activa las resistencias pullHup (2 o las desactiva (1.
- La pala6ra de c12figuraci32: se trata de una posici6n reservada de la memoria de
pro!rama (:22<, # accesible =nicamente durante la !rabaci6n del pic.
Figura &.@. 9istribuci6n de los bits de la palabra de confi!uraci6n
)os 6i/s C. son bits de protecci6n de la memoria de c6di!o. * 1 indican que no est
prote!ida, a 2 el pro!rama no se puede leer ni sobreescribir. * 2 tambin evita que pueda
accederse a la EE-./0 de datos, borrndose esta si el bit es modificado (si pasa de 2 a 1.
El 6i/ .?R%- activa (con un 2 el temporizador llamado CpoPerHupD, que retrasa en <: ms!
la puesta en marcha al conectar la alimentaci6n, !arantizndose as" la estabilidad de la tensi6n
aplicada.
El 6i/ ?7%- activa (1 o desactiva (2 el perro !uardin.
)os 6i/s FOSC1-FOSC( seleccionan el oscilador utilizado% .4 (11, ,+ (12, ?& (21 # )-
(22.
)as posiciones de memoria :222,H:22@, tambin estn reservadas para las llamadas
palabras de confi!uraci6n (F9. En estas solo se usan los 4 bits de menos peso para !rabar
n=meros de serie, c6di!os de identificaci6n, numeraciones secuenciales, etc.
H Me;1ria --.ROM de da/1s: el pic tiene 64 b#tes de memoria donde se pueden
almacenar datos # variables que interesa que no se pierdan cuando se desconecta la alimentaci6n
al sistema. En el re!istro EE*9. (direcci6n J del banco 2 se car!a la direcci6n a acceder de la
EE-./0 de datos. En el re!istro EE9*&* (direcci6n 8 del banco 2 se depositan los datos que se
leen o se escriben. El EE4/K1 (direcci6n 8 del banco 1 tiene la misi6n de controlar las
operaciones en la EE-./0 ((i!ura @.12.
Figura &.1(. 9istribuci6n de los bits del re!istro EE4/K1
El 6i/ R7 se pone a 1 cuando se va a realizar un ciclo de lectura de la EE-./0. )ue!o
pasa a cero automticamente.
El 6i/ ?R se pone a 1 cuando se va a realizar un ciclo de escritura de la EE-./0. )ue!o
pasa a cero automticamente.
El 6i/ ?R-# da permiso para escribir cuando est a 1 # prohibe la escritura a 2.
El 6i/ ?R-RR se pone a 1 cuando una operaci6n de escritura ha terminado
prematuramente # a 2 cuando ha finalizado correctamente.
El 6i/ --"F se pone a 1 si la operaci6n de escritura se completa con 1ito # a 2 si no se ha
completado.
En ciclo de escritura tiene una duraci6n de 12 ms!. El re!istro EE4/K: no est
implementado f"sicamente # se usa =nicamente como dispositivo de se!uridad durante la escritura
en la EE-./0.
-ara leer la EE-./0 basta con colocar la direcci6n a leer en EE*9. # poner a 1 el bit
.9. El dato le"do estar disponible en el re!istro EE9*&*.
-ara escribir en la EE-./K se si!ue una secuencia de instrucciones en las que interviene
el EE4/K:. Este re!istro solo asume funciones de se!uridad, car!ndose con dos valores
concretos% >>, # **,. El ciclo de escritura comienza car!ando en EE*9. la direcci6n de la
posici6n a escribir, en el re!istro EE9*&* el valor a !rabar # activado el bit I.. *l acabar la
escritura, el bit I. se pone a 2 automticamente # el se$alizador EEF( a 1 (habr que ponerlo a 2
para volver a escribir. -ara verificar la correcta escritura, se resta el valor contenido en EE9*&*
con el dato escrito # se comprueba que el bit O pase a valer 1.
4. Programacin:
)a pro!ramaci6n en serie del pic requiere > l"neas, dos de las cuales se
destinan a soportar el relo5 de la transmisi6n (.B6 # los bits de datos serie (.B<, mientras que las
otras tres soportan 7dd, tierra # la tensi6n de pro!ramaci6n.
El pic pasa al modo de pro!ramaci6n3verificaci6n poniendo a nivel ba5o las l"neas .B6 #
.B< # aplicando la tensi6n de pro!ramaci6n 7pp (1:7 8 147. * partir de ese momento por .B6 se
transmiten los impulsos de relo5 # por .B< los bits de datos.
Figura 4.1. Esquema de cone1ionado de un 16(84 para
su !rabaci6n del pro!rama en serie
5. Instrucciones del pic:
4omo #a se ha visto, los pic responden a la arquitectura .F+4. Esta arquitectura
contiene pocas instrucciones (@> en nuestro caso simples # rpidas (la ma#or"a se e5ecutan en un
ciclo de instrucci6nM las instrucciones son orto!onales (las instrucciones pueden usar cualquier
operando # tienen una lon!itud constante (14 bits.
En la tabla >.1, podemos ver las @> instrucciones diferentes que se pueden usar en la
pro!ramaci6n del pic 16(84. En la columna de sinta1is aparecen las si!uientes letras%
- f: es el re!istro de la direcci6n (< bits.
- d: si vale 1, el resultado de la instrucci6n se almacena en f. +i vale 2, va al acumulador
(I.
- 6: indica el numero de un bit dentro de un re!istro.
- A: es un valor inmediato (8 bits.
- B: indica que es un valor indeterminado.
En las =ltimas dos columnas, se indica el formato de la instrucci6n (14 bits #
los se$alizadores que activa esta (Bits. -ara localizar me5or las instrucciones, se ha separado la
tabla para distribuir las instrucciones se!=n su funci6n (si mane5an bits, re!istros, etc. )a columna
4 indican la duraci6n en ciclos de instrucci6n (en nuestro caso un ciclo dura 1 microse!undo que
tarda en e5ecutarse una instrucci6n.
"#S%R$CC"O#-S C$- M'#-D'# R-G"S%ROS
SI!A"IS #PERA$I% $ &#R'A!# (14 )its* +its
'77?F f= d I S f 1 22 2111 dfff ffff 4,94,O
'#7?F f= d I *K9 f 1 22 2121 dfff ffff O
CLRF f Borra f 1 22 2221 1fff ffff O
CLR? Borra I 1 22 2221 2111 1111 O
COMF f= d Fnvierte f 1 22 1221 dfff ffff O
7-CF f= d 9ecrementa f 1 22 2211 dfff ffff O
"#CF f= d Fncrementa f 1 22 1212 dfff ffff O
"OR?F f= d I /. f 1 22 2122 dfff ffff O
MOVF f= d 0ueve f 1 22 1222 dfff ffff O
MOV?F f 0ueve I # f 1 22 2222 1fff ffff
#O. Ko operaci6n 1 22 2222 2112 2222
RLF f= d .ota f a la izquierda 1 22 1121 dfff ffff 4
RRF f= d .ota f a la derecha 1 22 1122 dfff ffff 4
S$*?F f= d ( 8 I 1 22 2212 dfff ffff 4,94,O
S?'.F f= d Fntercambia bits 1 22 1112 dfff ffff
EOR?F f= d I ?/. f 1 22 2112 dfff ffff O
"#S%R$CC"O#-S C$- M'#-D'# *"%S
SI!A"IS #PERA$I% $ &#R'A!# (14 )its* +its
*CF f= 6 Borra bit b de f 1 21 22bb bfff ffff
*SF f= 6 -one a 1 bit b de f 1 21 21bb bfff ffff
"#S%R$CC"O#-S 7- *R"#CO
SI!A"IS #PERA$I% $ &#R'A!# (14 )its* +its
*%FSC f= d E1plora bit d de f # salta si es 2 1,: 21 12bb bfff ffff
*%FSS f= d E1plora bit d de f # salta si es 1 1,: 21 11bb bfff ffff
7-CFS8 f= d 9ecrementa f # si es 2 salta 1,: 22 1211 dfff ffff
"#CFS8 f= d Fncrementa f # si es 1 salta 1,: 22 1111 dfff ffff
"#S%R$CC"O#-S C$- M'#-D'# O.-R'#7OS "#M-7"'%OS
SI!A"IS #PERA$I% $ &#R'A!# (14 )its* +its
'77L? A I S T 1 11 1111 TTTT TTTT 4,94,O
'#7L? A I *K9 T 1 11 1221 TTTT TTTT O
"ORL? A I /. T 1 11 1222 TTTT TTTT O
MOVL? A 0ueve a I el valor T 1 11 2211 TTTT TTTT
S$*L? A T 8 I 1 11 1121 TTTT TTTT 4,94,O
EORL? A I ?/. T 1 11 1212 TTTT TTTT
"#S%R$CC"O#-S 7- CO#%ROL F -S.-C"'L-S
SI!A"IS #PERA$I% $ &#R'A!# (14 )its* +its
C'LL A )lamada a subrutina : 12 2TTT TTTT TTTT &/,-9
CLR?7% Borra o refresca el perro !uardin 1 22 2222 2112 2122
GO%O A +alto incondicional a T : 12 1TTT TTTT TTTT
R-%F"- .etorno de interrupci6n : 22 2222 2222 1221
R-%L? A .etorno de subrutina # I;T : 11 2111 TTTT TTTT
R-%$R# .etorno de subrutina : 22 2222 2222 1222
SL--. -asa al modo de reposo 1 22 2222 2112 2211 &/,-9
%a6la 9.1. Gue!o de instrucciones del -F416(84
-or =ltimo vamos ha ver ms detenidamente el funcionamiento de las instrucciones
representadas en la tabla anterior.
- '77L? A: a$ade el contenido de I al literal T # almacena el resultado en I. Esta
instrucci6n activa los bits 4, 94 # O del re!istro de estado. +e e5ecuta en un ciclo de instrucci6n
(todas se e5ecutan en el mismo tiempo a menos que se especifique otro valor.
- '77?F f= d: a$ade el contenido de I al de f, # almacena el resultado en I si d;2, # en
f si d;1. *ctiva los mismos se$alizadores que la anterior.
- '#7L? A: efect=a un *K9 l6!ico entre el contenido de I # el literal
T, # almacena el resultado en I. +i el resultado es nulo, activa el bit O.
- '#7?F f= d: efect=a un *K9 l6!ico entre el contenido de I # el de f #
coloca el resultado en I (d;2 o en f (d;1.
- *CF f=6: pone a cero el bit n=mero b de f.
- *SF f=6: pone a uno el bit n=mero b de f.
- *%FSC f= d: si el bit n=mero b de f es nulo, la instrucci6n que si!ue a sta se i!nora # se
trata como un nop. En este caso (solo en este caso, la instrucci6n precisa de dos ciclos para
e5ecutarse.
- *%FSC f= d: si el bit n=mero b de f es 1, la instrucci6n que si!ue a sta se i!nora # se
trata como un nop. En este caso (solo en este caso, la instrucci6n precisa de dos ciclos para
e5ecutarse.
- C'LL A: salva!uarda la direcci6n de vuelta en la pila # despus llama a la subrutina
situada en la direcci6n car!ada en el -4. )os pasos que si!ue para su e5ecuci6n son% -4 S 1
pila, T -4 (2 8 12, -4)*&, (@,4 -4 (11,1:
- CLRF f: pone el contenido de f a cero # activa el bit O.
- CLR?: pone el re!istro I a cero # activa el bit O.
H CLR?7%: pone a cero el re!istro contador del temporizador Patchdo! (I9&, as" como
el predivisor. -one a 1 los bits &/ # -9.
- COMF f= d: hace el complementario de f bit a bit. El resultado se almacena de nuevo en
f si d;1 # en I si d;2 (en este caso, f no var"a. +i el resultado es nulo, activa O.
- 7-CF f= d: decrementa el contenido de f en una unidad. El resultado lo almacena de
nuevo en f (d;1 o en I (d;2, no variando f en este =ltimo caso. &ambin activa O si el resultado
es nulo.
- 7-CFS8 f= d: decrementa el contenido de f en una unidad. El resultado se almacena
se!=n el valor de d. +i el resultado es nulo, se i!nora la si!uiente instrucci6n #, en ese caso, esta
instrucci6n dura dos ciclos.
- GO%O A: llama a la subrutina situada en la direcci6n car!ada en el -4. )a e5ecuci6n de
la instrucci6n ser"a% T -4 (2H12, -4)*&, (@,4 -4 (11,1:
- "#CF f= d: incrementa el contenido de f en una unidad. El resultado se almacena de
nuevo en f o I (en este caso f no var"a. *ctiva O si el resultado es nulo.
- "#CFS8 f= d: incrementa el contenido de f en una unidad. El resultado se almacena en f
(d;1 o I (d;2 # f no var"a. +i el resultado es nulo, se i!nora la si!uiente instrucci6n #, en este
caso, esta instrucci6n dura dos ciclos.
- "ORL? A: efect=a un /. l6!ico inclusivo entre el contenido de I # el literal T, #
almacena el resultado en I. +i la operaci6n da cero, se activa el bit O.
- "OR?F f= d: efect=a un /. l6!ico inclusivo entre el contenido de I # el contenido de f, #
almacena el resultado en I (d;2 o en f. +i la operaci6n da cero, se activa el bit O.
- MOVF f= d: desplaza el contenido de f a f si d;1 6 a I si d;2. El desplazamiento de f a f
permite comprobar el contenido de f con respecto a cero, #a que esta instrucci6n act=a sobre el bit
O.
- MOVL? A: car!a I con el literal T.
- MOV?F f: car!a f con el contenido de I.
- #O.: s6lo consume tiempo de mquina, un ciclo en este caso.
- R-%F"-: car!a el -4 con el valor que se encuentra en la parte superior de la pila,
ase!urando as" la vuelta de la interrupci6n. -one a 1 el bit LFE con el fin de autorizar de nuevo que
se ten!an en cuenta las interrupciones.
- R-%L? A: car!a I con el literal T, # despus car!a el -4 con el valor que se encuentra
en la parte superior de la pila, efectuando as" un retorno de subrutina.
- R-%$R#: car!a el -4 con el valor que se encuentra en la parte superior de la pila,
efectuando as" una vuelta de subrutina. Es como la anterior pero simplificada.
- RLF f= d: rotaci6n de un bit a la izquierda del contenido de f, pasando por el bit de
acarreo 4 (ver fi!ura >.1. +i d;1 el resultado se almacena en f, si es 2 se almacena en I.
Figura 9.1. 9esplazamiento a la izquierda
H RRF f= d: rotaci6n de un bit a la derecha del contenido de f, pasando por el bit de
acarreo 4 (es como en la fi!ura >.1 pero con las flechas hacia la derecha. +i d;1 el resultado se
almacena en f, si es 2 se almacena en I.
- S$*L? A: sustrae el contenido de I del literal T (T 8 I # almacena el resultado en I.
)a sustracci6n se realiza en complemento a dos.
- S$*?F f= d: sustrae el contenido de I del contenido de f (f 8 I # almacena el
resultado en I o f (se!=n valor de d. )a sustracci6n se realiza en complemento a :. &anto esta
como la anterior activan los bits 4, 94, # O se!=n el caso.
- S?'.F f= d: intercambia los cuatro bits de ma#or peso con los cuatro de menor peso de
f # almacena el resultado en f o I (se!=n d.
- EORL? A: efect=a un /. l6!ico e1clusivo entre el contenido de I # el literal T, #
almacena el resultado en I.
- EORL? f= d: efect=a un /. l6!ico e1clusivo entre el contenido de I # el contenido de f,
# almacena el resultado en f o I (se!=n d. &anto esta como la anterior activa el bit O si se da el
caso.
- SL--.: pone el circuito en modo +)EE- # para el oscilador. El procesador queda
con!elado, no e5ecutando instrucciones # manteniendo el mismo valor en la puertas de E3+. -one a
cero el I9& (aunque si!ue funcionando, el predivisor # -9M tambin pone a 1 el bit &/. -ara que
el micro sal!a del modo +)EE-, se tiene que dar una de estas situaciones% que la patilla 04). se
active e1ternamente (reset, que se desborde el I9&(en caso de que estuviera activado al entrar
en el modo reposo # que se de una interrupci6n (como &0.2 est desactivado, solo podr
producirse una de los otros tipos.