Você está na página 1de 73

DEPARTAMENTO DE INGENIERA ELCTRICA Y ELECTRNICA

INGENIERA EN MECATRNICA

MICROCOTROLADORES

UNIDAD 2: ARQUITECTURA INTERNA DE UN MICROCOTROLADOR.


ING. LUIS ALBERTO CASTAEDA MONTAO.

CPU RISC de Alta Performance:


Solo 35 instrucciones que aprender. Velocidad de operacin de hasta 20 MHz (modelo PIC16F84A-20). 1024 palabras de memoria de programa (FLASH). 68 bytes de RAM de Datos esttica. 64 bytes de EEPROM de Datos. Pila hardware de 8 niveles. Cuatro fuentes de interrupcin.

13 pines de E/S con control de direccin individual. Suministro de hasta 25 mA de corriente por pin en los puertos. TMR0: temporizador/contador de 8-bits con prescaler programable.

Memoria de programa FLASH para 10 000 ciclos de borrado/escritura tpicamente. Memoria EEPROM para 10 000 000 de ciclos de borrado/escritura tpicamente. Programacin Serial en el Circuito, ICSP. Watchdog Timer con su propio oscilador RC. Capacidad de proteccin de cdigo. Modo SLEEP para ahorrar energa. Opciones para seleccionar el oscilador.

Amplio rango de voltaje de operacin: 2.0 V a 5.5 V Mxima disipacin de potencia: 800 mW

CPU RISC de Alta Performance:

Solo 35 instrucciones que aprender. Velocidad de operacin de hasta 20 MHz (200 ns por instruccin bsica). Hasta 8 K de palabras de 14 bits de memoria de programa (FLASH). Hasta 368 bytes de RAM de Datos esttica. Hasta 256 bytes de EEPROM de Datos. Pila hardware de 8 niveles. Hasta 15 fuentes de interrupcin.

Hasta 33 pines de E/S con control de direccin individual. Suministro de hasta 25 mA de corriente por pin en los puertos. Timer0: temporizador/contador de 8-bits con prescaler programable. Timer1: temporizador/contador de 16-bits con prescaler programable. Timer2: temporizador de 8-bits con prescaler y postcaler programables. Dos mdulos CCP, Capture, Compare, PWM. El PWM es de 10 bits MSSP: Puerto Serie Sncrono Maestro con operaciones en modos I2C y SPI. USART: Puerto serie Transmisor Receptor Sncrono Asncrono Universal. PSP: Puerto Paralelo Esclavo de 8 bits y con controles RD, WR y CS. BOR: Circuito de Deteccin de Bajo Voltaje.

Memoria de programa FLASH para 100 000 ciclos de borrado/escritura tpicamente. Memoria EEPROM para 1 000 000 de ciclos de borrado/escritura tpicamente. Watchdog Timer. Capacidad de proteccin de cdigo. Modo SLEEP para ahorrar energa. Opciones para seleccionar el oscilador. Programacin Serial en el Circuito, ICSP. Autoprogramacin por control software. Programacin en bajo voltaje (5V). Soporte ICD va dos pines.

Conversor ADC de 10 bits de hasta 8 canales. Mdulo Comparador

En los PIC16Fxxx es de tipo flash, por eso la F. Aqu es donde se aloja el programa que el CPU ejecutar. En los PIC16 la memoria de programa se cuantifica en palabras, de 14 bits cada una. Son de 14 bits porque cada instruccin es de 14 bits. Esto suele impresionar un poco al novel, quien est habituado a medir la capacidad de las memorias en bytes (8 bits).

El PIC16F84A tiene 1 k (1024) palabras de memoria. En tiempo de ejecucin son de solo lectura. Con 1 k puede almacenar hasta 1024 instrucciones de cdigo ensamblador. Los PIC16F877A/876A tienen 8 k (8192) palabras de memoria de programa mientras que losPIC16F874A/873A tienen 4 k (4192). Los cuatro PICmicros ofrecen la posibilidad de escribir en su memoria de programa incluso en tiempo de ejecucin. Esta funcin puede ser aprovechada para almacenar datos procesados por el usuario o para permitir la autoprogramacin del PIC.

En las siguientes figuras las memorias de programa del PIC estn acompaadas por el PC (Program Counter) y la Pila (Stack). Es as porque hay una extrecha relacin en su trabajo

Contador de Programa, Pila y Memoria de programa del PIC16F84A y PIC16F87xA

El PC es un registro que indica la siguiente instruccin que debe ejecutar el CPU. Al arrancar microcontrolador, el PC vale 0x0000 y se va incrementando automticamente, con lo que el PIC debera ejecutar una a una todas las instrucciones del programa.

En los PICs de la familia Mid-Range el PC es de 13 bits, pudiendo direccionar un mximo de 8 k palabras de memoria de programa.

Es una memoria que almacena temporalmente el valor del PC (Program Counter) cuando el programa llama a una subrutina o cuando salta al Vector de Interrupcin, en una interrupcin. En los PICs de la familia Mid-Range la Pila tiene nicamente 8 niveles y se administra a nivel hardware, esto es, no hay instrucciones para acceder a ella directamente. Su operacin es enteramente en background. Solo debemos cuidar de que no se llegue a desbordar.

A diferencia de las RAMs de los microcontroladores convencionales, que tienen mapa de memoria plano, la RAM de los PICs de familia Mid-range est dividida en sectores denominados bancos. Cada byte de la RAM se conoce como registro.

Hay dos tipos de registros de RAM: los registros de funcin especial SFR y los registros de propsito general GPR.

No todos los registros estn implementados fsicamente. La escritura en dichas locaciones no significa nada y siempre se leen como 0.
El PIC16F84A es de los muy pocos que tienen 2 bancos de RAM; el resto de los PIC16F, que son la gran mayora, tienen 4 bancos. La existencia de los bancos solo es de consideracin (y un dolor de cabeza) cuando se programa en lenguaje ensamblador.

Los registros SFR (Special Function Register) estn ubicados en las primeras posiciones de cada banco de RAM, los que en la figura anterior aparecen con nombre propio, como TMR0, PORTA, etc. Su principal funcin es controlar las operaciones del microprocesador y de los mdulos perifricos. Como se ve, algunos de esos registros aparecen duplicados en los bancos; eso es para facilitarnos su acceso porque son de uso muy frecuente o porque son un poquito ms especiales, como STATUS,INTCON o PCL.

Tambin son registros de 1 byte cada uno. Los registros GPR (General Purpose Register) sirven para almacenar los datos o variables que se procesan en el programa.

El PIC16F84A tiene 68 registros GPR, todos ubicados en el banco 0, entre las direcciones 0x0C y 0x4F. En el banco 1 no hay registros GPR, solo hay accesos a los registros del banco 0. Dicho en otras palabras, los registros GPR del banco 1 son un reflejo de los GPR del banco 0.

Los PIC16F877A/876A tienen 368 registros GPR. Los ltimos 16 registros de los bancos 1, 2 y 3 son los mismos que del banco 0. Los PIC16F874A/873A tienen 192 registros GPR. Su mapa de RAM es un poco diferente debido principalmente a los accesos repetidos. Todas estas diferencias sern de preocupacin solo cuando se programe en ensamblador.

Los registros GPR no tienen nombres propios, pero los compiladores de alto nivel saben cmo administrarlos para almacenar las variables del programa. Por otro lado, si se programa en ensamblador, se les debe acceder mediante sus direcciones, ya sea directamente usando nmeros, o asignndoles nombres a las direcciones con algunas directivas, como equ o cblock.

Por ejemplo, en el siguiente cdigo se designan los nombres var1 y var2 a los registros de direcciones 0x25 y 0x30, respectivamente.

Luego se podrn usar esos nombres para acceder a los registros designados. Por ejemplo, el siguiente cdigo copia el contenido del primer registro al segundo.

El diseador puede elegir cualesquiera registros GPR como sus variables de programa. Para ello debe recordar siempre dnde se localizan. Segn las figuras de arriba, en el PIC16F84A estn mapeados a partir de la direccin 0x0C. En los PIC16F87xA empiezan en la direccin 0x20 en el banco 0; los otros bancos se usan raramente en ensamblador.

El PIC16F876A se diferencia del PIC16F877A porque viene en empaque PDIP de 28 pines, lo que le descuenta los puertos D (de 8 pines) y E (de 3 pines). La funcin excluyente de estos puertos es la interface del PSP (Parallel Slave Port), del que muy pocos se acuerdan. El puerto E tambin provee tres canales adicionales para el conversor ADC. En consecuencia, si no vamos a utilizar estas funciones, no se presentarn problemas de compatibilidad y los programas pueden ser usados para el PIC16F877A o el PIC16F876A indistintamente, tanto en cdigo fuente como en cdigo ejecutable *.hex.

Las mismas diferencias descritas arriba tambin se presentan entre los PIC16F873A y PIC16F874A. Adicionalmente, estos PICmicros se diferencian de los dos anteriores por tener menos memoria de programa FLASH, de datos RAM y de EEPROM, y en la ligera variacin de disposicin de los registros GPR de la RAM. Esto ltimo puede dar origen a incompatibilidades hasta en los cdigos *.hex resultantes.

La siguiente tabla resume las diferencias ms evidentes entre los PICmicros citados:

De estos 4 PICs en este curso se utiliza el PIC16F876A, aunque los programas, que estn escritos en lenguaje C, sern totalmente compatibles con los otros 3. Para cambiar de PIC solo har falta establecerlo como PIC destino y recompilar el proyecto. El compilador se encargar de los detalles de bajo nivel.

Los fuses se programan mediante los llamados Bits de Configuracin, los cuales estn contenidos en un registro de EEPROM especial denominado Configuration Word. Este registro est situado en la direccin 0x2007, aunque tiene poco sentido saberlo porque es inaccesible desde el programa en tiempo de ejecucin.

El PIC16F84A tiene 4 fuses y los PIC16F87xA tienen 9. Por tanto habr diferencias en sus palabras de configuracin.

sta es la Palabra de Configuracin del PIC16F84A:

sta es la Palabra de Configuracin del PIC16F87xA:

La Palabra de Configuracin de los PIC16F87xA incluye todos los bits del PIC16F84A, aunque varen algunos nombres. De todos modos, esos nombres son raramente usados como tal. Los fuses se suelen programar usando mscaras que los representan. Por fortuna, las mscaras s son iguales. La Palabra de Configuracin se puede cambiar en el momento de quemar el PIC en el IDE del software de programacin, pero sera mejor que sus valores se cargaran desde el archivo *.hex junto con el cdigo ejecutable. En seguida se muestra un ejemplo de cmo establecer los fuses en el cdigo fuente del programa en lenguaje ensamblador, mediante la directiva __config:

Esta lnea pone tres mscaras (_XT_OSC, _WDT_OFF y _PWRTE_ON) enlazadas por el operador &. Cada mscara indica el estado de un fuse. En este caso se indica: adaptar el circuito interno de oscilador para un XTAL, inhabilitar el Watchdog y habilitar el Power-up Timer. El resto de los fuses (los no citados) tendrn sus valores por defecto. A continuacin se describen los 9 fuses de los PIC16F87xA. El PIC16F84A solo cuenta con los 4 primeros. Tambin se muestran las mscaras correspondientes utilizadas en ensamblador.

Sirve para adaptar el circuito interno del oscilador segn el componente externo que se usar como fuente del reloj del sistema.

_LP_OSC = Oscilador LP. Se usa cuando el PIC va a trabajar con un cristal de baja potencia. _XT_OSC = Oscilador XT. Se usa cuando el PIC trabajar con un cristal o resonador de frecuencias iguales o menores que 4 MHz. Es la opcin que usaremos a lo largo del curso. _HS_OSC = Oscilador HS. Se usa cuando el PIC operar con un cristal o resonador de alta frecuencia, iguales o mayores que 4 MHz. _RC_OSC = Oscilador RC. Se usa cuando el PIC va a operar con un circuito RC. Es til para sistemas de bajo costo aunque con frecuencias bajas y de menor nivel de estabilidad. Es la opcin por defecto.

Es un temporizador que una vez alcanzado su tiempo lmite puede provocar un reset en el pic. El watchdog es un simple contador, que se puede reiniciar para que no llegue a desbordarse de modo que no se produzca el reset. El watchdog est habitado por defecto y se debe reiniciar con la instruccin de ensamblador clrwdt. En el programa el watchdog se inhabilita poniendo la mscara _WDT_OFF.

_WDT_ON = WDT habilitado. Opcin por defecto. _WDT_OFF = WDT inhabilitado.

Cuando el circuito Power-up est habilitado temporizar cerca de 72 ms despus de conectada la alimentacin del PIC, mantenindolo en estado de reset. Luego de este tiempo el PIC empezar a ejecutar el programa. Es til para esperar a que la tensin de alimentacin se estabilice.

_PWRTE_ON = El temporizador Power-up est habilitado. _PWRTE_OFF = El temporizador Power-up est inhabilitado. Opcin por defecto.

Se representa por el bit CP. Este fuse pone proteccin a la memoria de programa. Como sabemos, es posible leer el programa contenido en el PICmicro mediante el dispositivo programador (JDM por ejemplo). Si activamos este fuse, dicha lectura ser impedida. Tambin implica renunciar a la caracterstica de verificacin del programa; as que si lo vas a activar, no olvides reconfigurar el software de programacin. _CP_OFF = Proteccin de cdigo inhabilitada. Es la opcin por defecto. _CP_ON = Proteccin de cdigo habilitada (PIC16F84A). _CP_ALL = Proteccin de cdigo habilitada (PIC16F87xA).

Se representa con los bits WRT1 y WRT0. Los PIC16F87xA ofrecen la posibilidad de escribir en su memoria de programa Flash en tiempo de ejecucin. Sin embargo, esto algunas veces puede resultar riesgoso. As que para dotarle se seguridad adicional al programa este fuse permite configurar qu rea de memoria quedar protegida y qu rea no. El efecto no es siempre el mismo en los PIC16F877A/876A que en los PIC16F874A/F873A: no es lo mismo la mitad de la memoria del PIC16F876A que la mitad de memoria del PIC16F873A.

_WRT_OFF = No hay proteccin de la memoria de programa. Opcin por defecto.


_WRT_256 = Se protegen las primeras 256 palabras de la memoria de programa.

_WRT_1FOURTH = Se protege el primer cuarto de la memoria de programa.

_WRT_HALF = Se protege la primera mitad de la memoria de programa.

Se representa con el bit DEBUG. Con el mdulo ICD (In Circuit Debugger) habilitado, los PIC16F87xAmonitorizan el estado de todos sus elementos hardware internos. Los resultados sern almacenados en un rea reservada de la memoria RAM y luego enviados a una computadora a travs de los pines RB6 y RB7. La computadora recibir los datos mediante algn programa que soporte el modo ICD Al habilitar el modo ICD se debe renunciar a los pines RB6 y RB7 como puertos de E/S convencionales, a un nivel de pila y a algo de memoria RAM.

_DEBUG_OFF = ICD inhabilitado. Opcin por defecto. _DEBUG_ON = ICD habilitado, RB6 y RB7 se destinan al debugger.

Se representa con el bit CPD. Sirve para proteger la memoria EEPROM interna de los PIC16F87xAcontra accesos mediante un dispositivo externo. Funciona similar a la proteccin de la memoria de programa, esto es, podr ser accedida normalmente por el CPU en tiempo de ejecucin, mas no, por ejemplo, por un programador de PICs.

_CPD_OFF = EEPROM interna desprotegida. Opcin por defecto. _CPD_ON = EEPROM interna protegida.

Se representa con el bit LVP. Los PIC16F87xA tambin ofrecen la posibilidad de ser programados con una tensin igual a Vdd en el pin MCLR, en vez de los 12 V acostumbrados. ste es el modo de programacin ICSP (In Circuit Serial Programming) de bajo voltaje. Los pines RB6 y RB7 tambin deben ser sacrificados para uso exclusivo del programador y adems se les suma la presencia del pin RB3 como seal del modo de programacin. Dada esta interface, no debe sorprender que esta caracterstica puede ir muy de la mano con el depurador ICD. Sin embargo, para la programacin en bajo voltaje no se requiere de herramientas especializadas.

Habilitado este fuse, los pines RB7, RB6 y RB3 no respondern como puertos de E/S tpicos.

_LVP_ON = Programacin en bajo voltaje habilitado. Opcin por defecto. _LVP_OFF = Programacin en bajo voltaje inhabilitado.

El circuito Brown out del PIC detecta las cadas en la tensin de alimenacin y puede generar un reset ante tal evento para evitar que el PIC siga trabajando con alimentacin insuficiente. En los PIC16F el valor umbral tpico del circuito Brown out es de 4V. De hecho, a tensiones aceptablemente por debajo de este nivel de tensin el PIC todava puede tener una operacin correcta pero no garantizada.

Si no se quiere correr el riesgo y se prefiere optar por que el PIC reinicie todo, se puede activar este fuse mediante su bit de configuracin BOREN o mediante su mscara respectiva.

_BODEN_ON = Brown out reset habilitado. Opcin por defecto. _BODEN_OFF = Brown out reset inhabilitado.

Dadas las limitaciones del ALU del PIC, los bits restantes de STATUS han sido rellenados con bits que tienen funciones completamente dismiles.

Descripcin de los Puertos Todos los pines de los puertos son bidireccionales configurables por software. Cuando actan como salidas, los pines pueden entregar tensiones de hasta Vdd. Cuando actan como entradas pueden manejar niveles de hasta 0.3V por encima de Vdd. Cada pin de puerto puede soportar hasta 25 mA de corriente.

DIAGRAMAS DE PINES DE LOS PIC16F84A y PIC16F87xA

Es el ms fcil. Los nombres sencillos de sus pines revelan que no tienen muchas funciones. Los 8 pines RB0...RB7 trabajan como E/S digitales bidireccionales por igual. Es adecuado para interfaces ordinarias como el manejo de LEDs, control de LCDs, teclados, lectura de switches, pulsadores, etc.

La etiqueta INT en el pin RB0/INT significa que adems se puede configurar para recibir interrupciones externas. Solo en ese estado se comporta como entrada Schmitt Trigger. De hecho, los pines RB4, RB5, RB6 y RB7 tambin pueden responder a interrupciones. Estas interrupciones le permiten al microcontrolador atender inmediatamente a los eventos de cambios de nivel lgico en los puertos sin necesidad de estar monitorizndolos constantemente. Las interrupciones se estudian con profundidad mucho ms adelante.

El puerto B es el nico entre los PIC16F que incluye resistencias de pull up internas. Eso nos ahorrar el tener que ponerlas externamente cuando sean requeridas, aunque lo ideal sera que hubiera pullups en todos los puertos, as como que todos los pines fueran Schmitt Trigger. Los pines RB6 y RB7 tambin sirven de interface para la programacin del PICmicro. Solo en ese modo estos pines actan como Schimitt Trigger, aunque tenga poca relevancia para nuestros propsitos. Los PIC16F87xA soportan la programacin en bajo voltaje. En ese modo su pin RB3 tiene una funcin muy crucial. Eso explica la inscripcin adicional PGM (Modo Programacin). La programacin en bajo voltaje se habilita/inhabilita va los Bits de Configuracin.

El PIC16F84A tiene un puerto A de 5 pines, desde RA0 hasta RA4. Los cuatro primeros funcionan normalmente como pines de E/S bidireccionales y tambin soportan niveles TTL. El pin RA4, no obstante, es un tanto especial. Como salida es de drenador abierto y requerir de una resistencia de pull externa si se usa como tal. Es el nico pin que en todo momento tiene buffer Schmitt Trigger, lo que como entrada le da una mejor performance, y el nico pin que puede recibir voltajes hasta de 8.5 V.

RA4 puede funcionar adicionalmente como entrada del Timer0 cuando opera en modo Contador. Por eso su etiqueta adicional T0CKI (Timer0 Clock Input).

En los PIC16F87xA el puerto A tiene 6 pines. Los cinco primeros son compatibles con los del PIC16F84A. El pin RA5 tambin es E/S, TTL y bidireccional. Ahora, la gran diferencia en el puerto A de los PIC16F87xA es que est multiplexado para recibir 5 de los 8 canales posibles del conversor ADC (analgico-digital) de estos PICs. Eso es lo que indican las etiquetas ANx que poseen algunos pines. Adems, para confusin de los que migran a los PIC16F87xA el puerto A inicia con una configuracin analgica. Si se quiere usarlo para interface digital ser necesario reconfigurarlo en el registro ADCON1.

Muchos (casi todos) los mdulos o perifricos nuevos de los PIC16F87xA tienen salida al exterior mediante los pines de este puerto. Aqu estn los pines de recepcin RX y transmisin TX del puerto serie del USART; aqu estn los pines de datos SDA y reloj SCL del mdulo MSSP cuando funciona en modo I2C; aqu estn las salidas de los dos canales de PWM CCP1 y CCP2 de los mdulos del mismo nombre cuando generan ondas PWM; aqu estn las entradas del Timer1 T1OSO/T1CKI y T1OSI cuando opera en modo Contador.

Los pines del puerto C no necesitan de configuracin previa alguna para trabajar como E/S bidireccionales, compatibles con TTL.

Est conformado por los 8 pines RD0...RD7. Junto con el puerto E solo estn presentes en los PIC16F de 40 pines y tienen la caracterstica destacable (y quiz superflua) de ser la interface del mdulo PSP o Puerto paralelo esclavo. Pero como ese mdulo casi ni se usa, el puerto D podra tranquilamente reemplazar o ayudar al puerto B en las interfaces con los dispositivos fotoelectrnicos, electromecnicos, etc., dado que es tambin es bidireccional, configurable pin por pin y maneja seales TTL.

Solo tiene 3 pines RE0...RE2, que se pueden usar como analgicos o digitales. Como pines digitales son bidireccionales y tambin pueden funcionar como seales de control RD, WR y CS del mdulo PSP.

Como pines analgicos, dan ingreso a 3 de los 8 canales posibles del conversor ADC. Al igual que el puerto A, el puerto E tambin inicia con sus pines como entradas analgicas y habr que configurarlos del mismo modo para que trabajen como pines de E/S digital, si as se desea.

Despus de un reset todos los puertos inician con sus pines configurados como entradas, pero se pueden reconfigurar en cualquier punto del programa mediante los registros TRISx. Cada puerto tiene su correspondiente registro TRIS, as por ejemplo, TRISA para PORTA, TRISB para PORTB,... y TRISE para PORTE.

Si se escribe un 1 en un bit de TRISx, entonces el pin correspondiente en el puerto x ser de entrada y si se le escribe un 0, el pin ser de salida. Para recordar este concepto suele ser til notar la semejanza del 0 con la o (de output) y del 1 con la i (de input).

0 Output = salida 1 Input = entrada

Por ejemplo, si escribimos el valor 00001111 en TRISB, entonces los cuatro pines de menor peso del puerto B sern entradas digitales y los cuatro pines superiores sern salidas. Si escribimos 00000001 en TRISA, nicamente el pin RA0 ser entrada y los dems sern salidas. Como el puerto A no tiene los 8 pines completos, los bits de mayor peso de PORTA y TRISA no tienen significado. La codificacin de lo expuesto sera as:

Otra forma de configurar los puertos es pin por pin, utilizando las instrucciones bsf (bit set file = setear bit en registro) y bcf (bit clear file = limpiar bit en registro). Por ejemplo:

As hemos configurado los pines RB2 para entrada y el pin RA5 para salida. El resto de los bits de los registros TRISA y TRISB conservarn sus valores anteriores. Finalmente, el siguiente fragmento configura los puertos del PIC empleando una forma de codificacin alternativa y a veces ms ventajosa.

La pregunta es: acaso los puertos no se configuraban en los registros TRISx? Bueno, sucede que los siete primeros bits de los registros PORTx y TRISx son iguales, de modo que una vez cambiado de banco se pueden llamar por igual. Esto es extensible a todos los registros de la RAM, aunque solo resulta prctico al trabajar con los puertos. Los puertos A y E. Estos puertos adems de entradas inician configurados como pines analgicos (entradas del ADC). El cdigo del programa parece tan lgico pero el PIC no funcionaba bien porque el puerto A no era digital.

Es posible establecer varias combinaciones seleccionando los pines que sern digitales y los que sern analgicos. Por ejemplo, si se quiere que todos los pines sean digitales, hay que escribir el siguiente cdigo en ensamblador.

O en lenguaje C:

Los cdigos mostrados cargan el registro ADCON1 con el valor 0x06. ADCON1 es uno de los registros que controlan el conversor ADC. Este mdulo lo estudiaremos tendidamente en su momento. Por ahora nos bastar con saber que si escribimos 6 7 en l, todos los pines de los puertos A y E tendrn comportamiento digital de E/S.

Las pull-ups solo estn disponibles en los pines del puerto B. Las pull-ups se podran equiparar con resistencias de 20 K, a calcular por la corriente que dejan fluir.

Las 8 pull ups se pueden habilitar al mismo tiempo limpiando el bit NOT_RBPU, del registro OPTION_REG. Las pull ups solo sern efectivas en los pines que actan como entradas; en los pines RBx configurados como salidas las pull ups quedan automticamente inhabilitadas.

La siguiente figura muestra la conexin de un pulsador al PIC aprovechando la pull-up del pin RB7. Fjate en que las pull-ups no se pueden usar como resistencias para excitar dispositivos como LEDs, rels, etc.

Los siguientes cdigos habilitan todas las pull-ups del puerto B, aunque solo se activarn en los pines configurados como entradas.

O en lenguaje C:

Você também pode gostar