1.1 UNA ARQUITECTURA MODERNA Y REVOLUCIONARIA. Para lograr una compactacin en el cdigo ptima y una velocidad superior a la de sus competidores los microcontroladores PIC incorporan en un procesador tres de las caractersticas ms avanzadas en los grandes computadores: Procesador tipo RISC, sea que dispone de un juego de instrucciones reducido, simple y pequeo, lo cual se consigue que la mayora de las instrucciones se ejecuten en un ciclo de instruccin! Procesador segmentado, que aumenta el rendimiento del computador de"ido al #omento del paralelismo implcito, descomponi$ndolo en etapas para poder procesar una instruccin di#erente en cada una de ellas y tra"ajar con varias a la vez! %rquitectura &arvard, donde son independiente la memoria de instrucciones y la memoria de datos y cada una dispone de su propio sistema de "uses para el acceso! 'sta dualidad, adems de propiciar el paralelismo, permite la adecuacin del tamao de las pala"ras y los "uses de los requerimientos espec#icos de las instrucciones y de los datos! (am"i$n la capacidad de memoria es di#erente! 1.2 MEMORIA DE PROGRAMA. )a arquitectura de los PIC de la gama media admite un mapa de memoria de programa capaz de contener *!+,- instrucciones de +. "its cada una! 'ste mapa se divide en pginas de -!/.* posiciones! Para direccionar *0 posiciones se necesitan +1 "its, que es la longitud que tiene el contador del programa, sin em"argo, en el PIC +23*. solo tiene implementadas +0 posiciones, por lo que se ignoran los 1 "its de mas peso del PC! +!-!+ 'l Contador de Programa y la Pila! 'l rango de direcciones, del PIC +23*., en su memoria de programa llega desde la //// & a la /133 &, o sea, un total de +!/-. posiciones de +. "its de tamao! 'n el PC se ignoran los 1 "its de mayor peso, de #orma que puntuar a la direccin 11 & es lo mismo que 4acerlo a las .11 &, *11 &, C11 &, +/11 &, +.11 & o a la +C11 &! %l igual que todos los registros espec#icos que controlan la actividad del procesador, el contador de programa est implementado so"re un par de posiciones de la memoria R%5! Cuando se escri"e el contador de programa como resultado de una operacin de la %)6, los * "its de menos peso del PC residen en el registro PC), que ocupa, repetido, la posicin - de los dos "ancos de la memoria de datos! )os "its de ms peso, PC 7+-:*8, residen en los 9 "its de menos peso del registro PC)%(&, que ocupa la posicin /% & de los dos "ancos de la memoria R%5! 'n la instrucciones goto y call de la gama media los ++ "its de menos peso del PC provienen del cdigo de la instruccin y los otros dos de los "its PC)%(& 7. : 18! Con los ++ "its que cargan en el PC desde el cdigo de las instrucciones goto y call, se puede direccionar una pgina de -0 de la memoria! )os "its restantes PC7+-:++8 tienen la misin de apuntar una de las cuatros pginas del mapa de memoria y , en los modelos del PIC que alcanzan este tamao, dic4os "its proceden de PC)%(& 7.:18! )a pila es una zona aislada de la memoria de instruccin y datos! (iene una estructura )I3:, en la que el ;ltimo valor guardado es el primero que sale! (iene * niveles de pro#undidad, cada uno con +1 "its! 3unciona como un buffer circular, de manera que el valor que se o"tiene al realizar el noveno desempilado 7pop8 es igual al que se o"tuvo en el primero! )a instruccin call y las interrupciones que originan la carga del contenido del PC en el nivel superior o cima de la pila! 'l contenido del nivel superior se saca de la pila al ejecutar las instrucciones return, retlw, retfie! 'l contenido del registro PC)%(& no es a#ectado por la entrada o salida de in#ormacin de la pila! 1.3 MEMORIA DE DATOS: )a memoria de datos del pic +23*. dispone de dos zonas di#erentes: +!< rea de RAM estt!"a # SRAM$ donde reside el "anco de registros especi#ico 7S3R8 y el "anco de registro de propsito general! 'l primer tiene -. posiciones de tamao "yte, aunque dos de ellas no son operativa, y el segundo 2*! -!< rea EEPROM de 2. "ytes, donde opcionalmente se pueden almacenar datos que no se pierden al desconectar la alimentacin! )a zona de memoria R%5 se 4alla dividida en dos "ancos 7"anco / y "anco +8 de +-* "ytes cada uno! 'n el pic +23*. slo se 4allan implementadas #sicamente de las */ primeras posiciones de cada "anco, de las cuales +- primeras estn reservadas a los registros de propsito general 7S3R8, que son los encargados de procesador y sus recursos! %lgunos de dic4os registros se 4allan repetidos en la misma direccin de los dos "ancos, para simpli#icar su acceso 7I=>3, 'S(%>:, 3SR, PC)%(& e I=(C:=8! )a posicin apuntada por la direccin ? & y la apuntada por la *? & no son operativas! )os 2* registros restantes de cada "anco se destinan al registro de propsito general y, en realidad, slo son operativos los 2* del "anco / porque los del "anco + se mapean so"re el "anco /, es decir, cuando se apunta a un registro general del "anco +, se accede al mismo de "anco /! Para seleccionar el "anco a acceder 4ay que manipular el "it 97RP08 del registro ESTADO! Si RP0! se accede al "anco + y si RP00 se accede al "anco /! (ras un reset se accede automticamente al "anco /! Para seleccionar el registro de propsito general no 4ay que tener en cuenta el estado del "it RP0, porque al estar mapeado el "anco + so"re el "anco /, cualquier direccionamiento de un registro del "anco + corresponde al 4omlogo del "anco /! 'n el direccionamiento directo a los registros @PR se ignora el "it de ms peso, que identi#ica el "anco, y sus direcciones estn comprendidos entre el valor 0"0c y 0"#f en 4eAadecimal! )os registros S3R se clasi#ican en - grupos! 'n unos se incluyen aquellos que controlan el n;cleo del microcontrolador 7'S(%>:, :P(I:=, I=(C:=, etc8 y en el otro los que determinan la operatividad de los recursos auAiliares y peri#$ricos! 'n la #igura de la pagina siguiente se ve la estructura de la memora R%5 del +23*.: 5'5:RI% >' >%(:S // I=>3 I=>3 */ /+ (5R/ :P(I:= *+ /- PC) PC) *- /1 'S(%>: 'S(%>: *1 /. 3SR 3SR *. /9 P6'R(% % (RIS % *9 /2 P6'R(% B (RIS B *2 /? *? /* ''>%(% ''C:=+ ** /, ''%>R ''C:=- *, /% PC)%(& PC)%(& *% /B I=(C:= I=(C:= *B /C 2* R'@IS(R:S >' PR:PCSI(: @'='R%) 5%P'%>:S '= ') B%=C: / *C .3 C3 >ireccin no implementada #sicamente! (oma el valor de /! +!1!+>escripcin >el Registros >e Propsito 'speci#ico: >ir =om"re Bit ? Bit 2 Bit 9 Bit . Bit 1 Bit - Bit + Bit / Banco / // 4 I=>3 6sa el contenido de 3SR para direccionar la memoria /+ 4 (5R/ RelojD Contador en tiempo real de * "its /- 4 PC) Bits de menos peso de PC /1 4 'S(%>: IRP RP+ RP/ (:E P>E F >C C /. 4 3SR >ireccionamiento indirecto con I=>3 /9 4 Puerta % GGG GGG GGG R%.D(/C0+ R%1 R%- R%+ R%/ /2 4 Puerta B RB? RB2 RB9 RB. RB1 R%- R%+ R%/ /? 4 =o implementado, se lee como /! /* 4 ''>%(% Registro de datos de la ''PR:5 /, 4 ''%>R Registro de datos /% 4 PC)%(& GGG GGG GGG Se escri"e los 9 "its de PC& /* 4 I=(C:= @I' ''I' (:I' I=(' RBI' (:I3 I=(3 RBI3 Banco + */ 4 I=>3 6sa el contenido de 3SR para direccionar memoria *+ 4 :P(I:= RBP6E I=(>'@ (:CS (:S' PS% PS- PS+ PS/ *- 4 PC) Byte de menos peso del PC *1 4 'S(%>: IRP RP+ RP/ (:E P>E F >C C *. 4 3SR >ireccionamiento indirecto con I=>3 *9 4 (RIS % GGG GGG GGG Con#iguracin puerta % *2 4 (RIS B Con#iguracin puerta B *? 4 =o implementado, se lee como /! ** 4 ''C:=+ GGG GGG GGG ''I3 HR'RR HR'= HR R> *, 4 ''C:=- Registro de control ''PR:5 7no es un registro #sico8 *% 4 PC)%(& GGG GGG GGG Bits de mayor peso de PC *B 4 I=(CI=(C:= @I' ''I' (:I' I=(' RBI' (:I3 I=(3 RBI3 +!1!->ireccionamiento >e )a 5emoria >e >atos: 'n los PIC de la gama media la memoria de datos est organizada para alojar un mAimo de . "ancos de +-* "ytes cada uno! 'l PIC +23*. slo tiene implementados los */ primeros registros! 'n este microcontrolador solo se usan - de los . "ancos por lo que solo se destina un "its del registro de ESTADO 7RP0$ para seleccionar el "anco + o el "anco cero, y otros ? "its para elegir una de las */ posiciones de "anco seleccionado7en realidad son +-* posiciones pero solo son ;tiles las */ primeras8! +!1!-!+ >ireccionamiento >irecto 'l operando que utiliza la instruccin en curso se re#erencia mediante su direccin, que viene incluida en el cdigo :P de la misma, concretamente en los ? "its de menos peso! 'l "anco a acceder lo determinan el "it RP0 del registro ESTADO! +!1!-!- >ireccionamiento Indirecto 'ste modo de direccionado se usa cuando en una instruccin se utiliza como operando el registro %&D', que ocupa la direccin / de am"os "ancos! 'n realidad el registro %&D' no est implementado #sicamente y cuando se le 4ace re#erencia, se accede a la direccin de un "anco especi#icado con los ? "its de menos peso del registro 'SR(!'l "it de ms peso de 'SR junto con el "it %RP del registro de ESTADO se encargan de seleccionar el "anco a acceder, mientras que los ? "its de menos peso del 'SR apuntan a la posicin! Como solo 4ay dos "ancos en nuestro pic en este modo de direccionamiento, el "it %RP0 siempre! E)emplo* 6sando el modo de direccionamiento indirecto poner a / las posiciones de la memoria de datos comprendidas entre la direccin 0"0c y 0"#+ del "anco / en un pic +23*.! Soluci,n* 'n el modo de direccionado indirecto act;a como puntero el contenido del registro 3SR, que en este ejercicio se ir incrementando desde 0"0c 4asta el valor 0"#-, en el que su "it 1 pasa a valer +! mo.lw 0"0c /0 toma el .alor inicial del puntero mo.wf 'SR /'SR se carga con el .alor de 0 bucle incf 'SR /Se incrementa 'SR en una unidad btfss 'SR,1 /Si el bit 1 de 'SR .ale ! se brinca /la siguiente instrucci,n 2s3ip$ goto bucle /Se salta a bucle por4ue .ale 0 /el bit 1 de 'SR 1.% EL REGISTRO DE ESTADO &asta a4ora el 'S(%>: es el registro ms usado y es el momento de descri"irle en su totalidad! :cupa la direccin 1 tanto del "anco / como del "anco + de la memoria de datos R%5! Sus "its tienen tres misiones distintas! +!< Se encargan de avisar las incidencias del resultado de la %)6 7C, >C, y F8! -!< Indican el estado de reset 7(:E y P>E8! 1!< Selecciona el "anco a acceder en la memoria de datos 7IRP, IRP/,IRP+8! )os "its de (:E y P>E indican el estado del procesador en algunas condiciones y no se pueden escri"ir! Por este motivo la instruccin clrf 'S(%>: deja el contenido de dic4o registro con el valor ///u u!uu, siendo u el sm"olo de Ino cam"iaJ! Slo se pone a / los tres "its de ms peso, el "it F7cero8 se pone a + y los restantes no alteran su valor! 'n la pagina siguiente se descri"e la misin de los "its del registro 'S(%>:! IRP RP+ RP/ (:E P>E F >C C C: a"arre# &''e(ada e) e' *!t de +as ,es# +: Cuando este "it vale + indica que se 4a producido acarreo en el "it de mas peso del resultado al ejecutar las instrucciones addwf y addlw( /: =o se 4a producido acarreo! DC: a"arre# &''e(ada e) e' %*!t de. 'l mismo signi#icado que el "it C pero re#iri$ndose al . "it! >e inter$s cuando se tra"aja como BC>! -: Cer# +: 'l resultado de una operacin lgicoGaritm$tica 4a sido /! /: 'l resultado de una operacin lgicoGaritm$tica no 4a sido /! PD.: /P#0er D#0)1 +: Se pone automticamente a + despu$s de la alimentacin de la coneAin del microcontrolador o al ejecutar la instruccin clrwdt( /: Se pone automticamente a / mediante la ejecucin de la instruccin sleep! TO.: /T!+e #2t1 +: Se pone a + despu$s de la coneAin de la alimentacin o al ejecutarse la instrucciones clrwdt y sleep! /: Se pone a / cuando se produce el des"ordamiento del perro guardin RP13RP4: Se'e""!5) de *a)"# e) d!re""!#)a+!e)t# d!re"t#. Como el PIC +2A*. slo tiene - "ancos, ;nicamente emplea el "it RP/, de #orma de que cuando vale + se accede al "anco + y cuando vale / se accede al "anco /! >espu$s de un Reset RP/K/! IRP: Se'e""!5) de' *a)"# e) d!re""!#)a+!e)t# !)d!re"t#. 'ste "it junto con el de mas peso del registro 3SR sirven para determinar el "anco de la memoria de datos seleccionado en el modo direccionamiento indirecto! 'l PIC +2A*. al tener solo - "ancos no se usa este "anco por lo cual de"e programar como /! 2.LOS RECURSOS 6UNDAMENTALES: TEMPORI-ADORES$ PUERTAS E&S Y EEPROM DE DATOS. 2.1 EL PAPEL DE LOS TEMPORI-ARODES )os PIC disponen de un procesador rpido y potente! 'n $l se incluye la memoria de programa, la de datos, la %)6, la unidad central de control y algunos registros especiaG les! Si dentro de un microcontrolador ;nicamente eAistiese el procesador, slo se poG dran ejecutar instrucciones lgicoGaritm$ticas y de trans#erencia! Pero un microconG trolador es muc4o ms que un procesador, 4ay puertas 'DS para conectarse 4a periG #$ricos, canales de comunicacin, temporizadores para controlar tiempos, sistemas de interrupciones capaz de detectar anomalas o sucesos especiales, sistemas de seguridad, modo de #uncionamientos con "ajo consumo y un largo etc$tera de recurso que con#iguG ran la potencial integral de un computador! 'l pic +23*. contiene poco recursos! Pero posee los su#icientes como para resolver gran parte de las aplicaciones tpicas de los microcontroladores! 'n este captulo se descri"en los siguientes recursos del +23*., que son: (emporizadorD Contador (5R/! Perro guardin 7ILatc4dogJ8! Puerta de 'DS! 5emoria ''PR:5 de datos! 2.2 TEMPORI-ADOR& CONTADOR TMR4 6na de las la"ores ms 4a"ituales en los programas de control de dispositivos suele ser determinar intervalos concretos de tiempo, y reci"e el nom"re de temporizador 7timer8 el elemento encargado de realizar esta #uncin! (am"i$n suele ser #recuente contar los impulsos que se producen en el eAterior del sistema, y el elemento destinado a este #in se denomina contador! Si las la"ores del temporizador o contador las asignamos al programa principal ro"aran muc4o tiempo al procesador en detrimento de actividades ms importantes! Por este motivo se disean recursos orientados espec#icamente a estas misiones! 'l pic +23*. poseen un temporizadorD contador de * "its, llamado (5R/, que act;an de manera di#erentes: +! Como el contador de sucesos, que esta representado por los impulsos que se aplican a la patita R%.D (/C0I! %l llegar al valor 33 & se des"orda el conG tador y, con el siguiente impulso, pasa a // &, advirtiendo de esta circunstancia activando un "it I"anderaJ yDo provocando una interrupcin! -! Como temporizador, cuando se carga en el registro que implementa al reG curso un valor inicial se incrementa con cada ciclo de instruccin 73oscD.8 4asta que se des"orda, o sea, pasa de 33 a // &, y avisa poniendo a + un "it I"anderaJ yDo provoca una interrupcin! Para poner el (5R/ como contador de eventos en la patita (/C0I 4ay que poner a + el "it (/CS, que es el que ocupa la posicin 9 del registro :P(I:=! 'n esta situacin, el registro (5R/, que es el u"icado en la direccin + del "anco / de la memoria de datos, se incrementa con cada #lanco activo aplicado a la patita (/C0I! 'l tipo de #lanco activo se elige programando el "it (/S', que es el que ocupa la posicin . del registro :P(I:=! Si (/S'K+, el #lanco activo es descendente, y si (/S'K/, es el ascendente! Cuando se desea que el (5R/ #uncione como temporizador el "it (/CSK/! 'n realidad el +23*. dispone de dos temporizadores, el (5R/ y el perro guardin! 'l primero act;a como principal y so"re el recaen el control de tiempo y la cuenta de impulsos que entra por la patita (/C0I! 'l otro vigila que el programa no se IcuelgueJ, y para ello cada cierto tiempo comprue"a que el programa se esta ejecutando normalG mente! 'n caso contrario si, si el control est detenido en un "ucle in#inito a la espera de alg;n acontecimiento que no se produce el perro guardin IladraJ, lo que se traduce en un Reset que reinicia el sistema! % menudo el (5R/ y el perro guardin precisan controlar largos intervalos de tiempo y necesitan aumentar la duracin de los impulsos de reloj que les incrementa! Para cu"rir este requisito se dispone de un circuito programa"le denominado divisor de #recuencia, que divide la #recuencia utilizada por diversos rangos! Para programar el comportamiento del (5R/, el perro guardin 7H>(8 y el divisor de #recuencia se utilizan algunos "its del registro :P(I:= y de la pala"ra de con#iguracin, que se eAplicara ms adelante! 'l divisor de #recuencia puede usarse con el (5R/ o con el H>(! Con el (5R/ act;a como predi.isor, es decir, los impulsos pasan primero por el divisor y luego se aplican al (5R/, una vez aumentada duracin! Con el perro guardin act;a despu$s, realizando la #uncin de post5di.isor! )os impulsos, que divide por un rango el divisor de #recuencia, puede provenir de una seal de reloj interna 73oscD.8 o de lo que se aplica (/C0I! 'l (5R/ se comporta como un registro de propsito especial 7S3R8 u"icado en la direccin + del "anco / de la memoria de datos! 'n igual direccin, pero en el "anco +, se 4alla el registro :P(I:=! (5R/ puede ser ledo y escrito en cualquier momento al estar conectada el "us de dato! 3unciona como contador ascendente de * "its! Cuando #unciona como temporizador conviene cargarle con el valor de los impulsos que quiere temporizar, pero eApresados en complementos a -! >e esta manera, al llegar el n;mero de impulsos deseado se des"orda y al pasar por // & se activa el "it (:I3 yD o se produce una interrupcin! Para calcular los tiempos a controlar con el (5R/ se utilizan la siguiente #ormula: 8 7 8 / arg -92 7 . di.isor del Rango T6R en ado c 7alor T i,n Tempori8ac osc = 'n cualquier momento se puede leer el valor que contiene el (5R/, sin detener su cuenta! )a instruccin adecuada al caso es mo.f tmr0,w( -!-!+ 'l Registro :P(I:= )a misin principal de este registro es go"ernar el (5R/ y el divisor de #recuencia! :cupa la posicin *+ & de la memoria de datos, que equivale a la direccin + del "anco +! 'l "it (/CS 7timer 0 cloc3 edge select$ selecciona en el multipleAor 5PM+ la procedencia de los impulsos de reloj, que puede se los del oscilador como interno 73:SCD.8 o los que se aplican desde el eAterior por la patita (/C0I! 'l "it (/S'K+, el #lanco activo es el descendente y si es / ser el #lanco ascendente! 'l "it PS% del registro :P(I:= asigna el divisor de #recuencia (5R/ 7PS%K/8 o al H>( 7PS%K+8! )os 1 "its de menos peso de :P(I:= seleccionan el rango por el que se divide el divisor de impulsos que se le aplican en su entrada! 'l "it 2 I=('>@ 7%nterrupt Edge$ sirve para determinar el #lanco activo que provocar una interrupcin eAterna al aplicarse a la patita RB/DI=(! 6n + es ascendente y un / es descendente! 'l "it ? RBP6E7R9 Pull5:p$ activa, si vale /, o desactiva, si vale +, las resistencias PullG6p que pueden conectarse opcionalmente en las lneas de la puerta B! ? / RBP6E I=('>@ (:CS (:S' PS% PS- PS+ PS/ C#+*!)a"!5) de '#s *!ts PS2$ PS1$ PS4 PS- PS+ PS/ >ivisor de (5R/ >ivisor del H>( / / / +:- +:+ / / + +:. +:- / + / +:* +:. / + + +:+2 +:* + / / +:1- +:+2 + / + +:2. +:1- + + / +:+-* +:2. + + + +:-92 +:+-* PSA +: 'l divisor de #recuencia es asignado al H>( 7perro guardin8! /: 'l divisor de #recuencia es asignado al (5R/ ! TOSE +: Incremento de (5R/ cada #lanco descendente! /: Incremento de (5R/ cada #lanco ascendente! TOCS +: Pulsos introducidos a trav$s de tocN+ 7contador8! /: Pulsos introducidos a trav$s de 3oscD. 7temporizador8! INTEDG 78'a)"# a"t!(# de !)terr2,"!5) e9ter)a: +: 3lanco ascendente! /: 3lanco descendente! R;PU. 7res!ste)"!as ,2''32, ,2erta *: +: >esactivadas! /: %ctivadas! 2.3 EL PERRO GUARDIN 7<DT:. Se trata de un contador interno de * "its que origina un Reset cuando se des"orda! Su control de tiempos es independiente de (5R/ y est "asado en una simple red RGC! Su actuacin es opcional y puede "loquearse para que no #uncione programando el "it H>(' de la pala"ra con#iguracin! 'l tiempo nominal con la que se 4alla programado el perro guardin es de +* ms! Pero usando el divisor de #recuencia puede aumentarse 4asta alcanzar los -!1 segundos! Para evitar que se des"orde el perro guardin 4ay que re#rescarle previamente! 'n realidad este re#resco consiste en ponerle a cero mediante las instrucciones clrwdt y sleep! 'l programador de"e analizar las instrucciones de la tarea y situar alguna de esas dos en sitios estrat$gicos por los que pase el #lujo de control antes de que transcurra el tiempo asignado al H>(! >e esta manera, si el programa se IcuelgaJ no se re#resca el perro guardin y se produce el reincio del sistema! )a instruccin clrwdt "orra el H>( y reinicia su cuenta! Sin em"argo, la instruG ccin sleep, adems de "orrar el H>(, detiene el sistema y lo mete en estado de IreposoJ o de I"ajo consumoJ! Si no se desactivara el perro guardin al entrar en el modo de reposo, al completar su cuenta provocar un Reset y sacar al microcontrolador del modo de "ajo consumo! Para desactivar al perro guardin 4ay que escri"ir un / en el "it - 7H>('8 de la pala"ra de con#iguracin! 'n el registro 'S(%>: un "it denominado (:E que pasa a valer cero despu$s del des"ordamiento de H>(! 2.% LAS PUERTAS E&S. )os PICS +23*. solo disponen de dos puertas de 'DS! )a puerta % posee 9 lneas, R%/G R%., y una de ellas soporta - #unciones multipleAadas! Se trata de la R%.D(/C0+, que puede actuar como lnea de 'DS o como patita que reci"en los impulsos que de"e contar (5R/! )a puerta B tiene * lneas, RB/GRB?, y tam"i$n tiene una con #unciones multipleAadas, la RB/DI=(, que, adems la lnea tpica de 'DS, tam"i$n sirve como patita por la que se reci"en los impulsos eAternos que provocan una interrupcin! Cada lnea 'DS puede con#igurarse independientemente como entrada o como salida, seg;n se ponga a + o a /, respectivamente, el "it asociado del registro de con#iguracin de cada puerta 7(RIS% y (RISB8! Se llama P6'R(%% y P6'R(%B los registros que guardan la in#ormacin que entra o sale por la puerta que ocupan las direcciones 9 y 2 del "anco / de la memoria de datos! )os registros de con#iguracin (RIS% y (RISB ocupan las mismas direcciones pero en el "anco +! -!.!+)a Puerta % )as lneas R%1GR%/ admiten niveles (() y de salida C5:S! )a lnea R%.D(/C0+ dispone de un circuito Sc4mitt (rigger que proporciona una "uena inmunidad al ruido y la salida la tiene drenador a"ierto! R%. multipleAa su #uncin de 'DS con la entrada de impulsos eAternos para el (5R/! Cuando se lee una lnea de la puerta % 7instruccin mo.fw puertaa8 se recoge el nivel lgico que tiene en ese momento! )as lneas cuando act;an como salidas estn Ilac4eadasJ, lo que signi#ica que sus patitas sacan un nivel lgico que se 4aya cargado por ;ltima vez en el registro de P6'R(%%! )a escritura de una puerta implica la operacin IlecturaD modi#icacinD escrituraJ! Primero se lee la puerta, luego se modi#ica el valor y #inalmente se escri"e en el Ilatc4J su salida! %l reiniciarse el PIC todos los "its de los registros (RIS quedan a +, con los que las lneas de las puertas quedan con#iguradas como entradas! Cada lnea de salida puede suministrar una corriente mAima de -/ m% y si es entrada puede a"sor"er 4asta -9 m%! %l eAistir una limitacin en la disipacin mAima de la potencia del c4ip, se restringe la corriente mAima de a"sorcin de la puerta % a */ m% y la de suministro a 9/ m%! )a puerta B puede a"sor"er un mAimo de +9/ m% y suministrar una total de +// m%! Con mo.f puerta;,w se lee una puerta y con la instruccin mo.wf puertaa se escri"e en la puerta! -!.!- )a Puerta B! Consta de * lneas "idireccionales de 'DS, RB?GRB/, cuya in#ormacin se guardan en el registro P6'R(%B, que ocupa la direccin 2 del "anco /! 'l registro de con#iguraG cin (RISB ocupa la misma direccin en el "anco +! )a lnea RB/DI=( tiene dos #unciones multipleAadas! %dems de patita 'DS, acG t;a como patita para la peticin de una interrupcin eAterna, cuando se autoriza esta #uncin mediante la adecuada programacin del registro I=(C:=, del que 4a"lar ms adelante! % todas las lneas de esta puerta se las permite conectar una resistencia pullGup, de elevado valor, con el positivo de l alimentacin! Para este #in 4ay que programar en el registro :P(I:= el "it RBP6E K/, lo que provoca la coneAin de una resistencia a todas las lneas! Con el Reset todas las lneas con#iguradas como entradas y se desactiG van las resistencias pullGup! )as . lneas de ms peso, RB?GRB., pueden programarse para soportar una misin especial! Cuando las . lneas act;an como entradas se las puede programar para generar una interrupcin si alguna de ellas cam"ian su estado lgico! 'sta posi"ilidad es muy prctica en el control de teclados! 'l estado de las patitas RB?GRB. en modo entrada se compara con el valor antG guo que tenan y que se 4a"a lac4eado durante la ;ltima lectura de la puerta B! 'l camG "io de estado de algunas de estas lneas origina una interrupcin y la activacin del sealizador RBI3! )a lnea RB2 tam"i$n se utiliza para la gra"acin serie de la memoria de prograG ma y sirve para soportar la seal de reloj! )a lnea RB? constituye la entrada de los daG tos en serie, cuando se gra"a un programa en la memoria de cdigo! 2.= LA PALA;RA DE CON6IGURACI>N 's una posicin reservada de la memoria del programa situada en la direccin -//? & y accesi"le ;nicamente durante el proceso de gra"acin! %l escri"irse el programa de la aplicacin es necesario gra"ar el contenido de esta posicin de acuerdo con la caracteG rsticas del sistema! 'n las siguiente ta"la se muestra la distri"ucin y asignacin de los +. "its de la pala"ra de con#iguracin del PIC +23*. y a continuacin las siguientes #unciones: CP CP CP CP CP CP CP CP CP CP PHR('E H>(' 3:SC+ 3:SC/ CP: ;!ts de ,r#te""!5) de "5d!?#. +: =o protegido! /: Protegido! 'l programa no se puede leer, evitando copias, tampoco se puede so"rescri"ir! %dems evita que pueda ser accedida la ''PR:5 de datos y, #inalmente, si se modi#ica el "it CP de / a +, se "orra completamente la ''PR:! P<RTE.: A"t!(a"!5) de' te+,#r!@ad#r /,#0er 2,1. 'l temporizador IpoLer upJ retrasa ?-ms la puesta en marc4a o reset que se produce al conectar la alimentacin al PIC, para garantizar la esta"ilidad de la tensin aplicada! +: desactivado! -: activado! <DTE: A"t!(a"!5) de' ,err# ?2ard!). + : %ctivacin del perro guardin! / : >esactivacin! 6OSC136OSC4: Se'e""!5) de' #s"!'ad#r 2t!'!@ad#. 3:SC+ 3:SC/ :scilador + + RC + / &S / + M( / / )P -!9!+ Pala"ra de Identi#icacin 7I>8! Son . posiciones reservadas de la memoria de programa u"icadas en las direcciones -//// &G -//1 &, que no son accesi"les en el #uncionamiento normal del microcontroG lador y slo pueden ser ledas y escritas durante el proceso de gra"acin! Slo se utilizan los . "its de menos peso de cada pala"ra de identi#icacin 7I>8, en donde se almacena un valor que puede consistir en un n;mero de serie, cdigos de identi#icacin, numeraciones secuenciales o aleatorias, etc! 2.A MEMORIA EEPROM DE DATOS: 'l PIC +2A*. tiene 2. "ytes de memoria ''PR:5 de datos donde se puede almacenar datos y varia"les que interesa que no se pierden cuando se desconecta la alimentacin al sistema! )a memoria ''PR:5 de datos no est mapeada en la zona de memoria de datos donde se u"ican S3R y @PR! Para poder leerla y escri"irla durante el #uncionamiento normal del microcontrolador 4ay que manejar . registros del "anco S3R: G''>%(% G''%>R G''C:=+ G''C:=- 'n el registro ''>%R, u"icado en la direccin , del "anco /, se carga la direccin a acceder de la ''PR:5 de datos! )as 2. posiciones de un "yte ocupan las direcciones de un mapa que comienza en // 4 y termina con 13 4, por eso los - "its de ms peso del registro ''%>R siempre valen /! 'n el registro ''>%(%, u"icado en la direccin * del "anco /, se depositan los datos que se leen o se escri"en! 'l registro ''C:=+, que ocupa la direccin ** 4 de la memoria de datos, o la direccin * 4 de "anco +, tiene misiones de control en las operaciones de la ''PR:5, y la distri"ucin de sus "its se representan en la siguiente ta"la: GGG GGG GGG ''I3 HR'RR HR'= HR R> RD: Le"t2ra Se pone a + cuando se va realizar un ciclo de lectura en la ''PR:5! )uego pasa / automticamente! <R: Es"r!t2ra Se pone a + cuando se va realizar un ciclo de escritura en la ''PR:5! )uego pasa / automticamente! <REN: Per+!s# de es"r!t2ra +: Permite la escritura en la ''PR:5! /: Pro4"e la escritura! <RERR: ;a)dera de err#r de es"r!t2ra. +: Se pone a + cuando una operacin de escritura 4a terminado prematuramente! /: )a operacin de escritura se 4a completado correctamente! EEI6: ;a)dera de 8!)a' de #,era"!5) de es"r!t2ra. +: Cuando este "it se pone a + indica que la operacin de escritura se 4a completado con $Aito! Se pone a / por programa! /: )a operacin de escritura se 4a completado! 'l registro ''C:=- en realidad no esta implementado #sicamente! %l leerlo todos sus "its son /! Slo se emplea como dispositivo de seguridad durante el proceso de escritura de la ''PR:5, para evitar inter#erencia en lo largo del intervalo de tiempo que precisa su desarrollo! -proceso de lectura* Se inicia un ciclo de lectura colocando la direccin a acceder en el registro ''%>R y poniendo el "it R>K+ en el registro ''C:=+! 'l dato ledo estar disponi"le en el registro ''>%(% en el siguiente ciclo y permanecer en el 4asta que se realice una nueva lectura o escritura en la ''PR:5! E)emplo* Con#eccionar un programa para realizar la lectura de una posicin, IlectJ, de la ''PR:5! Solucin: "c# estado, rp/ OBanco /! movlL lect Odireccin a leer! movL# eeadr O "s# estado, rp/ OBanco +! "s# eecon+, rd O )ectura "c# estado,rp/ O"anco / mov# eedata,L OH se carga con el valor leido en la direccin IlectJ de la O''PR:5 -proceso de escritura: Para escri"ir en la ''PR:5 de datos el usuario de"e seguir una determinada secuencia de instrucciones en las que participa el registro ''C:=-! 'ste registro, que en realidad no esta implementado #sicamente, slo asume #unciones de seguridad en el proceso, cargndose en $l dos valores concretos: 99 4 y %% 4! )a duracin tpica de un ciclo de escritura es de +/ ms, que es nota"lemente larga en comparacin con la velocidad del PIC! 'l ciclo de escritura comienza cargando en el registro ''%>R la direccin de la posicin a escri"ir y en el registro ''%>%(% el valor a gra"ar! 'n la pagina siguiente se ve un ejemplo de proceso de escritura! E)emplo* 'scri"ir en la direccin IescrJ de la ''PR:5 el valor del dato! Solucin: "c# estado, rp/ OBanco / movlL escr movL# eeadr OSe escri"e en el registro eeadr la direccin movlL dato movL# eedata OSe escri"e el dato en eedata "s# estado,rp/ OBanco + "s# eecon+,Lren Opermiso de escritura Oinicio de secuencia de escritura movlL /A99 4 movL# eecon- Ose escri"e 99 4 en eecon- movlL /Aaa 4 movL# eecon- Ose escri"e aa 4 en eecon- "s# eecon+,Lr Ocomienza la escritura %l aca"ar el proceso de escritura el "it HR pasa a valer / automticamente, mientras que el "it ''I3 se pone a +! 'ste ;ltimo "it 4ay que ponerlo a / posteriormente mediante so#tLare! 6na "uena precaucin es veri#icar si la escritura de la ''PR:5 4a sido correcta, para lo cual se suele restar el dato escrito con el registro ''>%(%! Si no se 4a producido error, el "it F pasa a valer +! >ada la importancia de conocer el #in de la escritura de una posicin de la ''PR:5, no slo se in#orma activando el "it ''I3, sino que adems, si se desea, se puede provocar una interrupcin! 3.INTERRUPCIONES$ RESET Y OTROS RECURSOS AUBILIARES. 3. 1 IMPORTANCIA DE LAS INTERRUPCIONES: )as llamadas a su"rutinas mediante la instruccin call son desviaciones del #lujo de control del programa originadas por instrucciones, por lo que se consideran sncronas, se producen cada vez que se ejecutan dic4a instruccin! )as interrupciones son desviaciones de #lujos de control del programa originadas asncronamente por diversos sucesos que no se 4allan "ajo la supervisin de las instruG cciones! >ic4os sucesos pueden ser eAternos al sistema, como la generacin de un #lanco o nivel activo en una patita del microcontrolador, o "ien internos, como el des"ordamiento de un contador! 'l comportamiento de microcontrolador ante la interrupcin es similar a de la instruccin call de llamada a su"rutina! 'n am"os casos se detiene la ejecucin del programa en curso, se salva la direccin actual de PC en la pila y carga el PC con una direccin reservada de la memoria de cdigo llamado vector de interrupcin! 'n los PIC +2M*M el vector de interrupcin se 4alla situado en la direccin ///. 4, en donde comienza la Rutina de servicio a la interrupcin 7RSI8! 'n general, en dic4o vector se suele colocar una instruccin de salto incondicional I@:(:J, que traslada el #lujo de control a la zona de memoria de cdigo destinada a contener la rutina de atencin a la interrupcin! 3.2 CAUSAS DE LA INTERRUPCI>N ! +P %ctivacin de la patita RB/DI=(! -P >es"ordamiento del temporizador (5R/! 1P Cam"io de una de las patitas de mas peso del la puerta " 7RB?:RB.8! .P 3inalizacin de la escritura de la ''PR:5! Cuando ocurre cualquiera de los . sucesos se origina una peticin de interrupcin, que si se acepta y se atiende comienza depositando el valor del PC actual en la Pila, poniendo el "it @I'K/ y cargando el PC con el valor ///. 4, que es el vector de interrupcin donde se desva el #lujo! Cada #uente de interrupcin dispone de un "it I"anderaJ o I#lagJ, que se pone automticamente a + cuando esta produce! %dems, cada #uente de interrupcin tiene otro "it de permiso, que seg;n su valor permite o pro4"e la realizacin de la interrupcin! 1!-!+Registro >e Control >e Interrupciones I=(C:=! )a mayor parte de las "anderas y "its de permiso de las #uentes de interrupcin estn implementada en el registro I=(C:=! ? / @I' ''I' (/I' I=(' RBI' (/I3 I=(3 RBI3 )a descripcin de cada uno de los "its de este registro se ven en la pagina siguiente! GIE : Per+!s# ?'#*a' de !)terr2,"!#)es! +: Permite la ejecucin de todas las interrupciones, cuyos "its de permiso individuales tam"i$n las permitan! /: Pro4"e todas las interrupciones! EEIE : Per+!s# de !)terr2,"!5) ,#r 8!) de 'a es"r!t2ra e) 'a EEPROM. +: Permite se origine una interrupcin cuando termina la escritura de la ''PR:5 de datos! /: Pro4"e que se produzca esta interrupcin! T4IE: Per+!s# de !)terr2,"!5) ,#r des*#rda+!e)t# de' TMR4 +: Permite una interrupcin al des"ordarse el (5R/! /: Pro4"e esta interrupcin! INTE: Per+!s# de I)terr2,"!5) de 'a ,at!ta R;4&INT +: Permite la interrupcin al activarse RB/DI=(! /: Pro4"e esta interrupcin! R;IE: Per+!s# de 'a I)terr2,"!5) ,#r "a+*!# de estad# de R;C:R;% +: Permite esta interrupcin! /: Pro4"e esta interrupcin! T4I6: ;a)dera ,#r des*#rda+!e)t# de' TMR4. +: Se pone a + cuando 4a ocurrido el des"ordamiento! /: Indica que el (5R/ no se 4a des"ordado!
INT6: ;a)dera de a"t!(a"!5) de 'a ,at!ta R;4&INT. +: Se pone a + al activarse RB/DI=(, al reci"ir un #lanco activo desde el eAterior! /: Indica que RB/DI=( no 4a reci"ido #lanco activo! R;I6: ;a)dera de "a+*!# de estad# e) 'as ,at!tas R;C:R;%. +: Pasa a + cuando cam"ia el estado de alguna de estas . lneas! /: =o 4a cam"iado el estado de RB?:RB.! Cuando @I' K/ no se acepta ninguna de las interrupciones! Si @I' K+ slo se aceptan aquellas #uentes de interrupcin! Siempre que se produzca una interrupcin por cualquier causa, @I'K+ y el PC se carga el valor ///.&, que es el vector de interrupcin! Para conocer qu$ causa 4an provocado la interrupcin se eAploran las "anderas, 1 de los cuales se u"ican en el registro I=(C:= y el , ''I3, que se pone a + cuando #inaliza la escritura de la ''PR:5 se 4alla en el "it . del registro ''C:=+! )as "anderas de"en ponerse a / por programa antes del retorno de la interrupcin y son operativos aunque la interrupcin est$ pro4i"ida por su "it de permiso correspondiente! E)emplo de e"ploraci,n de tipo de interrupci,n* Con#eccionar un programa que eAplore de #orma continua las . #uentes de interrupcin para averiguar cual se 4a activado: GSoluci,n Se usa la instruccin btfss registro, n, que eAplora el "it InJ de IregistroJ y si vale + se salta una instruccin, o sea, el PC se incrementa en - unidades! % esta operacin se la denomina "rinco! ;inicio del ser.icio de interrupci,n por acti.aci,n de R90<%&T int btfss intcon,intf /E"plora el bit intf de /intcon = si .ale ! >a= brinco goto puertab /salta puertab ;inicio del ser.icio de interrupci,n por cambio en R9+ * R9? puertab btfss intcon,rbif /e"plora el bit rbif de /intcon = .ale ! se produce brinco ;inicio del ser.icio de interrupci,n por desbordamiento del T6R0 tmr0 btfss intcon,t0if / e"plora el bit t0if = si /.ale ! brinca goto eeprom ;inicio del ser.icio de interrupci,n por fin de la escritura en la EEPRO6 eeprom btfss eecon!,eeif / e"plora el bit eeif del /registro eecon! = si /.ale ! >a= brinco = / = se salta el goto( goto int 1!-!+ Interrupcin eAterna I=(: 'sta #uente de interrupcin es sumamente importante para atender acontecimientos eAternos en tiempo real! Cuando ocurre alguno de ellos, se activa la patita RB/DI=( y se 4ace una peticin de interrupcin! 'ntonces, de #orma automtica, el "it I=(3 K + y, si el "it de permiso I=(' K + se autoriza el desarrollo de la interrupcin! 5ediante el "it 2, llamado I=(>'@, del registro :P(I:= se puede seleccionar cul ser el #lanco activo en RB/DI=(! Si desea que sea ascendente se escri"e un + en dic4o "it, y si se desea que sea descendente se escri"e un /! 'l procesador eAplora el "it I=(3 al #inal del primer ciclo de reloj de cada ciclo de instruccin! Recu$rdese que cada ciclo de instruccin consta"a de . ciclos de reloj 7Q+, Q-, Q1, Q.8! %l terminar Q+ se eAploran los "its "anderas, produci$ndose un periodo de latencia de 1 o . ciclos de instruccin desde el momento que 4ay un "it "andera activado 4asta que se inicializa la interrupcin! Si I=('K+ y se aplica un #lanco RB/DI=(, el "it I=(3 se pone a + automticamente y se solicita una interrupcin , que es aceptada cuando @I' K +! %ntes de regresar al programa principal 4ay que "orrar I=(3, puesto que en caso contrario ejecutar la interrupcin de retorno retfie se volvera a desarrollar el mismo proceso de interrupcin! 1!-!1 Interrupcin por des"ordamiento del tmr/: Cuando el (5R/ se des"orda y pasa del valor 33 & al //&, el "it (/I3 se pone automticamente a +! Si adems, el "it de permiso de la interrupcin del (5R/, (/I'K+ y el "it de permiso glo"al de interrupciones @I'K+, se produce una interrupcin! Si no se recarga el (5R/ cuando se des"orda, sigue contando desde //& a 33&! 'n cualquier momento se puede leer y escri"ir este registro, pero cada vez que se escri"e se pierde - ciclos de reloj para la sincronizacin ! Cuando se carga inicialmente (5R/ con el valor = +/ , cuenta -92G= impulsos, siendo el tiempo que tarda eApresado en la siguiente #ormula Tempori8aci,n ?;Tosc2#@A5& !0 $;Rango del di.isor de frecuencia( 1!-!. Interrupcin Por Cam"io >e 'stado 'n )as )neas R"?:R. >e )a Puerta B: 'sta interrupcin est diseada espec#icamente para detectar la pulsacin de una correspondiente a un teclado matricial , que se eAplora con . lneas de estrada y salida! Para esta #uncin se destinan las lneas RB?:RB. de la puerta B, que cada vez que cam"ia el estado lgico de una de ellas se #uerza al "it RBI3 a ponerse a +, y si los "its de permiso RBI'K@I'K+ se autoriza la interrupcin! 1!-!9 Interrupcin Por 3inalizacin >e )a 'scritura 'n )a ''PR:5 >e >atos: 'l tiempo tpico que tarda en desarrollarse una operacin de escritura en la ''PR:5 de datos de los PIC+2M*M es de +/ ms, que es considera"le comparado con la velocidad a la que el procesador ejecuta sus instrucciones! Para asegurarse que se 4a completado la escritura y puede continuar el #lujo de control del programa es aconseja"le manejar la interrupcin que se origina al #inalizar la escritura, que pone automticamente el "it I"anderaJ ''I3 a +! y se autoriza siempre que ''I'K@I'K+! Cuando se descri"i el proceso de escritura de la ''PR:5 de datos se indic que se usa"a un registro no real para asegurar la misma! Se trata"a del ''C:=-, en el que se gra"a"an dos valores, el 99& y el %%&! >urante la escritura de este registro de"e pro4i"irse la aceptacin de interrupciones para salvaguardar la operacin de escritura, por eso ese mdulo se pone @I'K/, tal como se indica en el siguiente trozo de programa orientado a escri"ir la memoria ''PR:5! Se supone que la direccin a acceder ya se 4a cargado en el registro ''%>R y el dato a escri"ir en ''>%(%! 9sf estado,rp0 /Selecciona el banco ! 9cf intcon,gie /B%E 0( Pro>Cbe interrupciones 9sf intcon,eeie /Permite la interrupci,n de la EEPRO6 9sf econ!,wren /Permiso de escritura de la EEPRO6 6o.lw 0"@@ 6o.wf eecon# /Se escribe en eecon# el dato @@D( 6o.lw 0"aa 6o.w eecon# /se escribe aaD en eecon# 9sf eecon(,wr /comien8a el proceso de escritura 9sf intcon,gie /permiso de interrupciones( B%E! 'n los PIC+2C*. y el PIC+23*M se puede leer y escri"ir en la ''PR:5 de datos se 4aya protegido el cdigo! 'n los PIC+2CR*A, que disponen de memoria R:5 para el cdigo, eAisten dos "its para el cdigo de proteccin :uno dedicado a la R:5 de cdigo y el otro a la ''PR:5 de datos! 3.3 REINI-ALI-ACI>N O RESET. )os PIC+2M*M tienen cinco causas que provocan el reinicio del sistema, consistente en cargar el PIC con el valor /// & 7vector de reset8 y poner el estado de los "its de los registros espec#icos con un valor conocido! +!< ConeAin de la alimentacin, P:R 7IPoLer on ResetJ8! -!< %ctivacin de la patilla 5C)RE 7I5aster clear ResetJ8 en #uncionamiento normal! 1!< %ctivacin de la patita 5C)RE en estado de reposo! .!< >es"ordamiento del perro guardin en estado normal! 9!< >es"ordamiento del perro guardin en estado de reposo! 'n la ta"la se ve los estados que toman los "its de los registros de propsito de la memoria de datos cuando se provoca un reset por cada una de las 9 #ormas posi"les: R'@IS(R: >IR'CCIC= C:='MIC= >' )% %)I5'=(%CIC= >'SB:R>%5I'=(: >') P'RR: @6%R>IR= '= 5:>: =:R5%) >'SB:R>%5I'=(: >') P'RR: @6%R>IR= 5:>: R'P:S: 5C)RE 5:>: =:R5%) 5C)RE 5:>: R'P:S: H GGGGG AAAA AAAA uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu I=>IR // 4 GGGG GGGG GGGG GGGG GGGG R(RC /+ 4 AAAA AAAA uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu PC /- 4 //// 4 //// 4 pcS+ //// 4 //// 4 S(%(6S /1 4 ///+ +AAA //// +uuu uuu/ uuuu ///u uuuu ///+ /uuu 3SR /. 4 AAAA AAAA uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu P:R( % /9 4 AAAA AAAA uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu P:R( B /2 4 AAAA AAAA uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu (RIS % *9 4 GGG+ ++++ GGG+ ++++ GGGu uuuu GGG+ ++++ GGG+ ++++ (RIS B *2 4 ++++ ++++ ++++ ++++ uuuu uuuu ++++ ++++ ++++ ++++ :P(I:= *+ 4 ++++ ++++ ++++ ++++ uuuu uuuu ++++ ++++ ++++ ++++ ''>%(% /* 4 AAAA AAAA uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu ''%>R /, 4 AAAA AAAA uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu ''C:=+ ** 4 GGG/ T/// GGG/ //// GGGu uuuu GGG/ T/// GGG/ T/// ''C:=- *, 4 GGGG GGGG GGGG GGGG GGGG PC)%(& /a 4 GGG/ //// GGG/ //// GGGu uuuu GGG/ //// GGG/ //// I=(C:= /" 4 //// ///A //// ///u uuuu uuuu //// ///u //// //// 6K=o cam"ia AKIndeterminado GGGGK=o implementado TK>epende de otras condiciones 1!1!+ Reset por #allo en la alimentacin 7IBroLn :utJ8 Se produce un #allo por alimentacin cuando el voltaje de alimentacin U >> desciende por de"ajo del valor mnimo, sin llegar a cero, y luego se recupera! 'n esta situacin es preciso provocar un Reset! 3.% EL MODO DE REPOSO O DE ;ADO CONSUMO. 'ste modo de #uncionamiento de los PIC est caracterizado por el reducido consumo de energa que requiere y est muy recomendado en aquellas aplicaciones en las que 4ay largos periodos de espera 4asta que se produzca alg;n suceso asncrono, como la pulsaG cin de una tecla! 'n dic4os periodos el procesador est inactivo! 'n este modo el consumo del PIC, que generalmente es de -m%, se reduce a +/ V%, lo que permite alimentarle con una pequea pila durante casi - aos! Para entrar en el modo de reposo 4ay que ejecutar la instruccin sleep y produce una situacin muy especial de #uncionamiento que parece que el sistema se 4a WcongelaG doW, requiriendo el mnimo suministro de energa para mantener el estado del procesaG dor sin ninguna actividad! 'n reposo la patita (/C0+ se conecta a U >> o a tierra para eliminar la entrada de impulsos eAternos al (5R/! Por otra parte, como se detiene el oscilador principal que genera los impulsos ( osc , tam"i$n se para (5R/! )as patitas de 'DS mantienen el estado anterior al modo de reposo y las que no se 4allan conectadas a peri#$ricos y act;an como entradas de alta impendancias se recomienda conectarlas a U >> o a tierras para evitar posi"les #ugas de corriente! )a patita 5C)RE de"e conectarse a nivel alto! Sin impulsos de reloj el procesador se congela y deja de ejecutar instrucciones 4asta que IdespierteJ y salga del estado! Para salir del estado de reposo7despertar8 eAisten 1 alternativas: +! < %ctivacin eAterna de 5C)RE para provocar un reset! -! < >es"ordamiento de perro guardin si quedo operativo en modo de reposo! 1! < @eneracin de una interrupcin! 'n este caso, como (5R/ est parado slo pueden producirse los otros tres tipos de interrupcin! Cuando se despierta el PIC se desarrolla la secuencia del :S(, que retarda +!/-. ( osc para esta"ilizar la #recuencia de tra"ajo, y luego se pasa a ejecutar la siguiente instruccin a sleep 7PCS+8!
%.REPERTORIO DE INSTRUCCIONS: )as instrucciones que usa el PIC +23*. se clasi#ican en cinco grandes grupos, que son los siguientes: %.1INSTRUCCIONES QUE MANEDAN ;ITS: Slo 4ay dos instrucciones en este grupo, pero son muy #leAi"les! 6na de ellas pone a + 7bsf8 cualquier "it de un registro, mientras que la otra lo pone a / 7bcf8! I=S(R6CCI:='S Q6' 5%='X%= BI(S SI=(%MIS :P'%CIC= CIC):S 3:R5%(: +. BI(S S'Y%)IF%>:R'S BC3 #," Borra "it " de # + // //"" "### #### GGG BS3 #," Pone al + el "it " de # + /+ /+"" "### #### GGG %.2INSTRUCCIONES DE CONTROL Y ESPECIALES: 'n este grupo se incluyen instrucciones que rompen la secuencia normal del programa porque alteran el contenido de PC y tam"i$n las instrucciones especiales! )a instruccin de salto incondicional goto carga en el PC la direccin de la nueva instruccin! )a instruccin call de llamada a su"rutina, antes de cargar el PC con la direccin de la instruccin a saltar, salva la direccin de partida guardando en la cima de la pila el valor actual del PC! >e esta manera, al retornar de la su"rutina se saca de la pila la direccin a la que regresar en el programa principal! Para realizar un retorno de la su"rutina se pueden emplear - instrucciones! )a ms 4a"itual es return, que se limita a eAtraer de la cima de la pila el valor que carga en el PC! :tra ms compleja es retlw 3, que, adems de 4acer lo mismo que return, carga en H el valor inmediato de 3! 's decir devuelve un parmetro desde la su"rutina! Para el #inal de las interrupciones 4ay otra instruccin cuyo nemnico es retfie! )a operacin de esta instruccin consiste en cargar en el PC el contenido de la cima de la pila y poner el "it @I'K+, pues al comenzar la interrupcin este "it se pone automticamente a / para evitar que cuando se atiende una interrupcin se produzca otra! @I' es el "it de permiso glo"al de interrupciones! 'n cuanto a las instrucciones especiales, se 4an incluido dos en este grupo: clrwdt y sleep( )a primera pone a / el contenido del perro guardin, es decir, lo re#resca o reinicializa! 'l perro guardin si se des"orda 7pasa de /A## a /A//8 provoca un reset! )a instruccin clrdwt 4ay que colocarla estrat$gicamente en ciertos puntos del programa para evitar la reinicializacin! )a instruccin sleep introduce al procesador en un modo de #uncionamiento que se llama de Reposo o de Bajo Consumo! >etiene el oscilador y el procesador queda congelado, no ejecutando instrucciones y manteniendo el mismo valor en las puertas de 'DS! (am"i$n pone los "its P>EK/ y (:EK+ y "orra el perro guardin y el divisor de #recuencia! I=S(R6CCI:='S >' C:=(R:) 'SP'CI%)'S SI=(%MIS :P'R%CIC= CIC):S 3:R5%(: >' . BI(S S'Y%)IF%>:R'S C%)) N )lamada a su"rutina - +/ /NNN NNNN NNNN (:E,P>E C)RH>( Borra el perro guardin + // //// /++/ /+// GGG @:(: N Salto incondicional - +/ +NNN NNNN NNNN GGG R'(3I' Retorno de interrupcin 7@I'K+8 - // //// //// //// GGG R'()H N Retorno su"rutina y carga LKN - ++ /+AA NNNN NNNN GGG R'(6R= Retorno de su"rutina - // //// //// //// GGG S)''P Pasa al modo de reposo + // //// /++/ //++ (:PE, P>E %.3INSTRUCCIONES DE ;RINCO: Slo 4ay cuatros instrucciones de salto condicional en los PIC de gama media! >os de ellas testean un "it de un registro y seg;n valga + o /, "rinca o no! Recu$rdese que un "rinco es un IsaltitoJ pequeo, slo se salta la instruccin siguiente a la condicional! )as otras dos instrucciones se incrementa o decrementan un registro y la posi"ilidad de "rinco se e#ect;a si con esa operacin el valor del registro 4a llegado a cero! Cuando estas - instrucciones no "rincan porque no se cumple la condicin, tardan + ciclo de instruccin en ejecutarse! 'n caso de que "rinquen tardan el do"le! I=S(R6CCI:='S >' BRI=C: SI=(%MIS :P'R%CIC= CIC):S 3:R5%(: >' +. BI(S S'Y%)IF%>:R'S B(3SC #, d 'Aplora un "it de # y "rinca si vale / +7-8 /+ +/"" "### #### GGG B(3SS #,d 'Aplora un "it # y "rinca si vale + +7-8 /+ ++"" "### #### GGG >'C3SF #, d >ecrementa # y si es /, "rinca +7-8 // +/++ "### #### GGG I=C3SF >ecrementa # y si es +, "rinca +7-8 // ++++ "### #### GGG SI dK/ el resultado se guarda en el acumulador y si dK+ se guardara en el registro #uente! %.% INSTRUCCIONES QUE MANEDAN REGISTRO: Responde a la sintaAis nem,nico f,d siendo # y d los dos operando #uente y destino que se 4allan implementados por registro de * "its de la memoria de datos! 'l registro # viene re#erenciado por la direccin de ? "its que ocupa, mientras que el destino solo por uno, que si vale / se re#iere al acumulador y si vale + es el registro #uente! I=S(R6CCI:='S Q6' 5%='X%= R'@IS(R:S SI=(%MIS :P'R%CIC= CIC):S 3:R5%(: >' +. BI(S S'Y%)IF%>:R'S %>>H3 #, d Suma L y #! + // /+++ d### #### C,>C,F %=>H3 #,d %=> # con L! + // /+/+ d### #### F C)R3 # Pone a cero #! + // ///+ +### #### F C)RH GGG BoraA L! + // ///+ /AAA AAAA F C:53 #,d Complementa #! + // +//+ d### #### F >'C3 #, d >ecrementa #! + // //++ d### #### F I=C3 #,d Incrementa #! + // +/+/ d### #### F I:RH3 #,d :R 7L,#8! + // /+// d### #### F 5:U3 #,d 5ueve #! + // +/// d### #### F 5:UH3 # 5ueve L y #! + // //// +### #### GGG =:P GGG =o opera! + // //// /AA/ //// GGG R)3 #,d Rota # 4acia la izquierda a trav$s del acarreo! + // ++/+ d### #### C RR3 #,d Rota # 4acia la derec4a a trav$s del acarreo! + // ++// d### #### C S6BH3 #,d Resta # y L! + // //+/ d### #### C, >C, F SH%P' #,d Intercam"ia ni""les + // +++/ d### #### GGG M:RH3 #,d M:R de L con # + // /++/ d### #### F SI dK/ el resultado se guarda en el acumulador y si dK+ se guardara en el registro #uente! %.=INSTRUCCIONES QUE MANEDAN OPERANDO INMEDIATOS: Se trata de media docena de instrucciones que realizan una operacin con un valor inmediato de * "its que se proporciona dentro del #ormato de instruccin, el cual slo tiene 2 "its y varan los "its "anderas de la pala"ra de estado! 'l resultado es guardado en el acumulador! I=S(R6CCI:='S Q6' 5%='X%= :P'R%=>:S I=5'>I%(:S SI=(%MIS :P'R%CIC= CIC):S 3:R5%(: >' +. BI(S S'Y%)IF%>:R'S %>>)H N Suma inmediata con L + ++ +++A NNNN NNNN C, >C, F %=>)H N %=> inmediato con H + ++ +//+ NNNN NNNN F I:R)H N :R inmediato con H + ++ +/// NNNN NNNN F 5:U)H N 5ueve a L el valor de N + ++ //AA NNNN NNNN GGG S6B)H N Resta L de un inmediato + ++ ++/A NNNN NNNN C, >C, F M:R)H N :R eAclusiva con L! + // +/+/ NNNN NNNN F )os sealizadores son "its de la pala"ra de estado!