tutorial pic16f877a(algunas mejoras)

Upload: rodrick77

Post on 30-May-2018

238 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    1/26

    Qu es un microcontrolador?

    Es un circuito integrado programable que acepta un listado de

    instrucciones y contiene todos los componentes de un computador. Seutilizan para realizar determinadas tareas o para gobernar dispositivos,debido a su reducido tamao, suele ir incorporado en el propio dispositivoque gobierna.

    El microcontrolador es un dispositivo dedicado. En su memoria solo resideun programa destinado a gobernar una aplicacin determinada, sus lneasde entradas y salidas (I/O) permiten la conexin de sensores, relay,motores, etc. Una vez programado y configurado el microcontroladorsolamente sirve para gobernar la tarea asignada.

    Un microcontrolador dispone normalmente de los siguientes componentes: Procesador o CPU (Unidad Central de Proceso). Memoria RAM para Contener los datos. Memoria para el programa tipo ROM/PROM/EPROM/EEPROM & FLASH.

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    2/26

    Lneas de (entrada / salida) para comunicarse con el exterior. Diversos mdulos para el control de perifricos (temporizadores,Puertos Serie y Paralelo, A/D y D/A, etc.). Generador de impulsos de reloj que sincronizan el funcionamiento detodo el sistema.

    *********************************************************El siguiente trabajo va dedicado a todos aquellos que se inician en elmundo de los microcontroladores as como aquellos que les gustara darun repaso a lo aprendido. La primera parte del tutorial notaran que tieneel enfoque hacia un PIC en especial, el 16F877, ya que es uno de los queesta en boga y adems esta tomando aceptacin entre las escuelas, ypienso que el 16F84 ya esta muy conocido pero no deja de ser poderoso,Pero recuerden las bases son las mismas.Espero les agrade y sea motivo de mejoras.Empezar por El diagrama de un sistema microcontrolado que sera algo

    as:

    Los dispositivos de entrada pueden ser un teclado, un interruptor, unsensor, etc. Los dispositivos de salida pueden ser LED's, pequeosparlantes, zumbadores, interruptores de potencia (tiristores,

    optoacopladores), u otros dispositivos como rels, luces, un secador depelo, en fin... lo que se desee. Aqu tienes una representacin en bloquesdel microcontrolador, se puede ver que lo adaptamos tal y cual es unordenador, con su fuente de alimentacin, un circuito de reloj y el chipMicrocontrolador, el cual dispone de su CPU, sus memorias, y porsupuesto, sus puertos de comunicacin listos para conectarse al mundoexterior

    Enseguida describir algunos aspectos bsicos que tienen que ver contodos lo microcontroladores PIC de Microchip para su utilizacin.

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    3/26

    En su interior posee un microprocesador, una memoria RAM (voltil)donde guardaremos las variables, una memoria EEPROM (no voltil)donde guardaremos nuestro Programa, un Timer o contador que nosfacilitar algunas tareas, y algunas otras cosas ms que irn variandodependiendo de que PIC utilicemos.

    Eso no es todo, algunos traen funciones especiales, ya hablaremos deellas.Microcontroladores PIC16CXX/FXX de Microchip Estos micros pertenecen ala gama media y disponen de un set de 35 instrucciones, por eso lo llamande tipo RISC (Reduced Instruction Set Computer) en espaol sera"Computador con Set de Instrucciones Reducido" pocas instrucciones peromuy poderosas, otras son de tipo CISC (Complex Instruction SetComputer - Computador con Set de Instrucciones Complejo), demasiadasinstrucciones, y lo peor, difciles de recordar.

    Esta familia de microcontroladores se divide en tres rangos segn lacapacidad de los microcontroladores. El ms bajo lo compone la familia16C5X. El rango medio lo componen las familias 16C6X/ 7X/ 8X, algunoscon conversores A/D, comparadores, interrupciones, etc. La familia derango superior lo componen los 17CXX.

    Estas son las funciones especiales de las cuales disponen algunosmicros...

    Conversores anlogo a digital (A/D) en caso de que se requiera

    medir seales analgicas, por ejemplo temperatura, voltaje,luminosidad, etc.

    Temporizadores programables (Timer's) Si se requiere medirperodos de tiempo entre eventos, generar temporizaciones osalidas con frecuencia especfica, etc.

    Interfaz serial RS-232. Cuando se necesita establecer comunicacincon otro microcontrolador o con un computador.

    Memoria EEPROM Para desarrollar una aplicacin donde los datos nose alteren a pesar de quitar la alimentacin, que es un tipo dememoria ROM que se puede programar o borrar elctricamente sin

    necesidad de circuitos especiales. salidas PWM (modulacin por ancho de pulso) Para quienes

    requieren el control de motores DC o cargas resistivas, existenmicrocontroladores que pueden ofrecer varias de ellas.

    Tcnica llamada de "Interrupciones", (sta me gust) Cuando unaseal externa activa una lnea de interrupcin, el microcontroladordeja de lado la tarea que est ejecutando, atiende dichainterrupcin, y luego contina con lo que estaba haciendo.

    Los microcontroladores se programan en Lenguaje ensamblador

    bsicamente, aunque tambin existen compiladores para hacerlo conotros lenguajes y cada microcontrolador vara su conjunto de

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    4/26

    instrucciones de acuerdo a su fabricante y modelo. De acuerdo al nmerode instrucciones que el microcontrolador maneja se le denomina dearquitectura RISC (reducido) o CISC (complejo).

    EL Pic16F877 pertenece a la gama media de Microcontroladores donde

    encontraremos modelos desde 18 hasta 68 Pines, su repertorio deinstrucciones es de 35, de 14 bits cada una (Todas las instrucciones sonde un solo ciclo con excepcin de las ramificaciones del programa que sonde dos ciclos). Disponen de interrupciones y una pila de 8 niveles quepermite el anidamiento de subrutinas. Se le puede encontrar en un tipo deencapsulado de 40 pines ( patas) PDIP el cual es el mas utilizado para suutilizacin didctica en proyectos escolares.Cuenta con una arquitectura Harvard en la que son independientes lamemoria de instrucciones y la memoria de datos y cada una dispone de supropio sistema de buses para el acceso.

    Posee Rango amplio de tensiones de funcionamiento:

    Comercial: 2.0 a 5.5 volts Industrial: 2.0 a 5.5 volts

    Consumo muy bajo:

    < 2 mA tpico a 5 volt, 4MHz. 15 A tpico a 2 volt, 32KHz.

    >0.5 A tpico de corriente en reposo a 2 volts.

    Caractersticas que lo hacen destacarse por su popularidad en elmundo de la electrnica:

    Soporta modo de comunicacin serial, posee dos pines para ello. Amplia memoria para datos y programa. Memoria reprogramable: La memoria en este PIC es la que se

    denomina FLASH de 8K; este tipo de memoria se puede borrar

    electrnicamente (esto corresponde a la F en el modelo). Set de instrucciones reducidas (tipo RISC), pero con las instrucciones

    necesarias para facilitar su manejo. En su arquitectura adems incorporan: 3 temporizadores 4 puertos I/O. Comunicacin serie y paralela: USART, PSP. Bus I2C Modulo Convertidor analgico a digital A/D. Modulo Comparador con un voltaje de referencia.

    Sus caractersticas ms importantes son:

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    5/26

    CARACTERSTICAS 16F877A

    Frecuencia mxima DX-20MHz

    Memoria de programa flash palabra de 14bits

    8KB

    Posiciones RAM de datos 368

    Posiciones EEPROM de datos 256

    Puertos E/S A,B,C,D,E

    Nmero de pines 40

    Interrupciones 15

    Timers 3

    Mdulos CCP 2

    Comunicaciones Serie MSSP, USART

    Comunicaciones paralelo PSP

    Modulo Analgico a Digital de 10 bit 8 canales deentrada

    Juego de instrucciones 35 Instrucciones

    Longitud de la instruccin 14 bits

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    6/26

    Arquitectura Harvard

    CPU Risc

    Mdulos Comparador/comparador/Pwm 2

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    7/26

    EL ENCAPSULADO.

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    8/26

    DIAGRAMA DE BLOQUES DE SU ARQUITECTURA INTERNA.

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    9/26

    Aqu muestro una tabla en la cual describo cada Pin o patilla del

    Microcontrolador.

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    10/26

    NOMBRE DELPIN

    PIN

    TIPOTIPODEBUFFER

    DESCRIPCIN

    OSC1/CLKIN 13 I ST/MOS Oscilador de cristal entrada /

    Entrada de seal de reloj externaOSC2/CLKOUT 14 O - Oscilador de cristal salida / Salidade seal de reloj externo.

    MCLR/Vpp. 1 I/P ST Master Clear (entrada) Voltajede programacin (salida).Master Clear (reset) entrada. Estepin activa el reset vuando esta enbajo (0v.)Entrada del voltaje deprogramacin.

    RA0/AN0RA0AN0

    RA1/AN1RA1AN1

    RA2/AN2/Vref-

    RA2AN2Vref-Cvref

    RA3/AN3/Vref+RA3AN3Vref+

    RA4/T0CKIRA4T0CKIC1OUT

    RA5//AN4/C2OUTRA5

    AN4C2OUT

    2

    3

    4

    5

    6

    7

    I/OI

    I/OI

    I/OIIO

    I/O

    I/OI0

    I/OII

    O

    TTL

    TTL

    TTL

    TTL

    ST

    TTL

    PORTA es un puerto I/Obidireccional

    RAO: Digital I/OEntrada Analgica 0

    RA1: Digital I/OEntrada Analgica 1

    RA2: Digital I/O

    Entrada Analgica 2A/D Entrada voltaje (bajo) dereferencia.

    Comparador VREF. Salida

    RA3: Digital I/OEntrada Analgica 3

    A/D Entrada de voltaje(alto) referencia.

    RA4: Digital I/OTimer0 entrada de relojexterno.Comparador1 salida

    RA5: Digital I/OSPI esclavo seleccin entradaEntrada Analgica 4Comparador2 salida

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    11/26

    RBO/INTRBOINT

    RB1RB2

    RB3/PGMRB3PGM

    RB4RB5

    RB6/PGCRB6PGC

    RB7/PGDRB7

    PGD

    33

    3435

    36

    3738

    39

    40

    I/OI

    I/OI/OI/O

    I/OI

    I/O

    I/OI

    I/O

    I/O

    TTL/ST

    TTLTTLTTL

    TTL

    TTLTTL

    TTL/ST

    PORTB es un puerto I/Obidireccional. Puede serprogramado en todas las entradascon pull up.

    RB0: Digital I/OInterrupcin externa.

    RB1: Digital I/ORB2: Digital I/O

    RB3: Digital I/OEntrada de programacin de bajo

    voltaje ICSPRB4: Digital I/ORB5: Digital I/O

    RB6: Digital I/OIn circuit debugger y Reloj deprogramacin serial ICSP

    RB7: Digital I/O

    In circuit debugger y Dato deprogramacin serial ICSP

    RCO/T1OSO/T1CKIRCOT1OSOT1CKI

    RC1/T1OS1/CCP2RC1T1OS1CCP2

    RC2/CCP1RC2CCP1

    15

    16

    17

    I/OOI

    I/OI

    I/O

    I/OI/O

    ST

    ST

    PORTC es un puerto I/Obidireccional

    RCO: Digital I/Osalida del oscilador timer1entrada de reloj del timer1

    RC1: Digital I/OEntrada del oscilador timer1Salida PWM 2, Captura2 entrada,Comparador2 salida

    RC2: Digital I/OCaptura1 entrada, Comparador1

    salida, PWM1 salida

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    12/26

    RC3/SCK/SCLRC3SCK

    SCL

    RC4/SD1/SDARC4SD1SDA

    RC5/SD0RC5SD0

    RC6/Tx/CKRC6TxCK

    RC7/RX/DTRC7RXDT

    18

    23

    24

    25

    26

    I/OI/O

    I/O

    I/OI

    I/O

    I/OO

    I/OOI/O

    I/OI

    I/O

    ST

    ST

    ST

    ST

    ST

    ST

    RC3: Digital I/OEntrada o salida serial de relojsncrono para modo SPI.Entrada o salida serial de relojsncrono para modo SPI e IC

    RC4: Digital I/Oentrada de datos SPIIC I/O datos

    RC5: Digital I/Osalida de datos SPI

    RC6: Digital I/OTransmisor asncrono USARTReloj sncrono USART1.

    RC7: Digital I/OReceptor asncrono USARTDatos USART sncronos

    RD0/PSP0RD0PSP0

    RD1/PSP1RD1PSP1

    RD2/PSP2RD2PSP2

    RD3/PSP3RD3PSP3

    RD4/PSP4RD4

    PSP4

    19

    20

    21

    22

    27

    I/OI/O

    I/OI/O

    I/OI/O

    I/O

    I/O

    ST/TTL

    ST/TTL

    ST/TTL

    ST/TTL

    ST/TTL

    PORTD es un puerto bidireccionalparalelo

    RD0: Digital I/ODato de Puerto paralelo esclavo

    RD1: Digital I/ODato de Puerto paralelo esclavo

    RD2: Digital I/ODato de Puerto paralelo esclavo

    RD3: Digital I/ODato de Puerto paralelo esclavo

    RD4: Digital I/O

    Dato de Puerto paralelo esclavo.

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    13/26

    RD5/PSP5RD5PSP5

    RD6/PSP6RD6PSP6

    RD7/PSP7RD7PSP7

    28

    29

    30

    I/OI/O

    I/OI/O

    I/OI/O

    ST/TTL

    ST/TTL

    ST/TTL

    RD5: Digital I/ODato de Puerto paralelo esclavo.

    RD6: Digital I/ODato de Puerto paralelo esclavo.

    RD7: Digital I/ODato de Puerto paralelo esclavo.

    REO/ /AN5REO

    AN5

    RE1/ /AN6RE1

    AN6

    RE2/ /AN7

    AN7

    8

    9

    10

    I/OIII

    I/OII

    I/OI

    I

    ST/TTL

    ST/TTL

    ST/TTL

    PORTE es un puerto I/O

    bidireccionalREO: Digital I/OControl de lectura para el puertoesclavo paralelo.Entrada analgica 5.

    RE1: Digital I/OEscritura de control para el puerto

    paralelo esclavo.Entrada analgica 6

    RE2:Digital I/OSelector de control para el puertoparalelo esclavo.Entrada analgica 7.

    Vss 1231

    P - Referencia de tierra para los pineslgicos y de I/O

    Vdd 1132

    P - Fuente positiva para los pines

    lgicos y de I/O

    Descripcin de los puertos:Puerto A: Puerto de e/s de 6 pines RA0 RA0 y AN0 RA1 RA1 y AN1 RA2 RA2, AN2 y Vref- RA3 RA3, AN3 y Vref+ RA4 RA4 (Salida en colector abierto) y T0CKI(Entrada de reloj del

    modulo Timer0) RA5 RA5, AN4 y SS (Seleccin esclavo para el puerto serie sncrono)

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    14/26

    Puerto B:

    Puerto e/s 8 pines Resistencias pull-up programables RB0 Interrupcin externa RB4-7 Interrupcin por cambio de flanco RB5-RB7 y RB3 programacin y debugger in circuitPuerto C: Puerto e/s de 8 pines RC0 RC0, T1OSO (Timer1 salida oscilador) y T1CKI (Entrada de reloj

    del modulo Timer1). RC1-RC2 PWM/COMP/CAPT RC1 T1OSI (entrada osc timer1) RC3-4 IIC RC3-5 SPI RC6-7 USARTPuerto D: Puerto e/s de 8 pines Bus de datos en PPS (Puerto paralelo esclavo) Puerto E: Puerto de e/s de 3 pines RE0 RE0 y AN5 y Read de PPS RE1 RE1 y AN6 y Write de PPS RE2 RE2 y AN7 y CS de PPS

    Dispositivos perifricos: Timer0: Temporizador-contador de 8 bits con preescaler de 8 bits Timer1: Temporizador-contador de 16 bits con preescaler que puede

    incrementarse en modo sleep de forma externa por un cristal/clock. Timer2: Temporizador-contador de 8 bits con preescaler y

    postescaler. Dos mdulos de Captura, Comparacin, PWM (Modulacin de

    Anchura de pulsos). Conversor A/D de 10 bits. Puerto Serie Sncrono Master (MSSP) con SPI e I2C (Master/Slave).

    USART/SCI (Universal Synchronous Asynchronous ReceiverTransmitter) con 9 bit.

    Puerta Paralela Esclava (PSP) solo en encapsulados con 40 pines.

    (MCLR / Vpp): Es una pata de mltiples aplicaciones, es la entrada deReset (master clear) si est a nivel bajo y tambin es la habilitacin de latensin de programacin cuando se est programando el dispositivo.Cuando su tensin es la de VDD el PIC funciona normalmente.

    EL RESET: EL PIC16F877 posee internamente un circuito temporizador

    conectado al pin de reset que funciona cuando se da alimentacin almicro, se puede entonces conectar el pin de MCLR a la fuente de

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    15/26

    alimentacin. Esto hace que al encender el sistema el microcontroladorquede en estado de reset por un tiempo mientras se estabilizan todas lasseales del circuito (lo cual es bastante bueno, por eso siempre lausaremos...), Adems de que nos puede servir por si el micro en algnmomento no nos responde nunca esta dems aqu muestro el

    conexionado del botn que har dicha funcin.

    (VSS y VDD): Son respectivamente las patas de masa y alimentacin. Latensin de alimentacin de un PIC est comprendida entre 2V y 6Vaunque se recomienda no sobrepasar los 5.5V

    (OSC1/CLKIN y OSC2/CLKOUT): Corresponden a los pines de laentrada externa de reloj y salida de oscilador a cristal respectivamente.

    El oscilador externo: Es un circuito externo que le indica al micro lavelocidad a la que debe trabajar. Este circuito, que se conoce comooscilador o reloj, es muy simple pero de vital importancia para el buenfuncionamiento del sistema. El P1C16F877 puede utilizar cuatro tipos dereloj diferentes. Estos tipos son:

    RC. Oscilador con resistencia y condensador.XT. Cristal.HS. Cristal de alta velocidad.LP. Cristal para baja frecuencia y bajo consumo de potencia.

    En el momento de programar o "quemar" el microcontrolador se debe

    Especificar que tipo de oscilador se usa. Esto se hace a travs de unosFusibles llamados "fusibles de configuracin" o fuses.

    En el PIC16F877 se puede admitir un oscilador de cristal desde 4 a 20MHz. Por el momento utilizamos uno de 4MHz, porque garantiza mayorprecisin y un buen arranque del microcontrolador. Internamente estafrecuencia es dividida por cuatro, lo que hace que la frecuencia efectiva detrabajo sea de 1 MHz, por lo que cada instruccin se ejecuta en unmicrosegundo. El cristal debe ir acompaado de dos condensadores y elmodo de conexin es el

    Siguiente:

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    16/26

    Si se requiere de mucha precisin en el oscilador, podemos utilizar unaResistencia y un condensador, como se muestra en la figura. Donde OSC2Queda libre entregando una seal cuya frecuencia es la del OSC/4.

    Segn las recomendaciones de Microchip (R) puede tomar valores entre5k y 100k, y C superior a 20pf.

    Organizacin de la memoria.

    En primer lugar tenemos que distinguir claramente entre tres tipos deMemoria:

    Una: la memoria EEPROM donde almacenaremos el programa que

    Haremos, esta memoria solo podr ser leda por el pic (el pic vaLeyendo las instrucciones del programa almacenado en esta memoriaY las va ejecutando). Al apagar el pic esta memoria no se borra.

    Dos: la memoria RAM en cuyos registros se irn almacenando losValores de las variables que nosotros queramos y cuando nosotrosQueramos (por programa), al apagar el pic esta memoria se borra.

    Tres: la memoria EEPROM para datos, es un espacio de memoriaEEPROM en la que se pueden guardar variables que queremos

    Conservar aunque se apague el pic. No se tratar aqu por ser unaMemoria ms difcil de emplear.

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    17/26

    La memoria EEPROM memoria de Programa.

    El espacio marcado como User memory Space es el espacio de memoriadonde ira nuestro programa, desde 0000h hasta la 1FFFh.

    "Reset Vector" es la primera direccin a la que se dirige el pic alencenderlo o alResetearlo.

    "PC" y los "Stack Level" son empleado por el pic y nosotros no tenemosacceso

    a ellos.

    LA MEMORIA RAM La memoria RAM no solo se usa para almacenarnuestras variables, tambin se almacenan una serie de registros queconfiguran y controlan el PIC. Podemos observar en la imagen que estamemoria esta dividida en 4 Bancos (banco 0,1, 2, 3). Antes de acceder aun registro de esta memoria tenemos que preguntarnos en que bancoestamos, generalmente se trabaja en el banco 0 cada banco contiene susregistros que sirven para la configuracin y control de la memoria RAM.Estos registros se usan para controlar los pines del PIC, consultar los

    resultados de las operaciones de la ALU (unidad aritmtica lgica),cambiar del banco de memoria entre otras cosas.

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    18/26

    La seleccin del banco de memoria se hace por medio de los bits RP1 yRP0 del registro STATUS (6,5).

    Tabla de seleccin de bancos.

    CONFIGURACIN DE LOS PUERTOS DEL PIC

    Lleg el momento de ver como configurar los puertos del PIC. Para poderHacerlo es necesario conocer la tabla de registros de la memoria de datos,la cual como dijimos, est dividida en el BANCO 0, BANCO 1, BANCO 2,BANCO 3.

    Los registros importantes en la configuracin de los puertos son:STATUS direccin 03hPORTA direccin 05hPORTB direccin 06hPORTC direccin 07hPORTD direccin 08hPORTE direccin 09hTRISA direccin 85hTRISB direccin 86hTRISC direccin 87hTRISD direccin 88hTRISE direccin 89hNOTA: solo incluyo los registros de los bancos 0 y 1 ya que para los dosrestantes es similar su configuracin. Por defecto el PIC tendr todos losI/O Port's (es decir los puertos RA, RB, RC, RD, RE), colocados comoentrada de datos, y si queremos cambiarlos habr que configurarlos.

    Al configurar los puertos se deber tener en cuenta que:Si asignas un CERO (0) a un pin, ste quedar como salida y...Si le asignas un UNO (1), quedar como entrada.

    Esta asignacin se hace en:TRISA para los pines del PUERTO A.TRISB para los pines del PUERTO B.TRISC para los pines del PUERTO C.TRISD para los pines del PUERTO D.

    TRISE para los pines del PUERTO E.

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    19/26

    Por ejemplo si TRISE es igual a 110 todos sus pines sern entradas salvoRE0 que esta como salida.

    SI TRISB es igual a 00000001 todos sus pines sern salidas salvo RB0que esta como entrada.

    Cuando el PIC arranca se encuentra en el BANCO 0, como TRISA y TRISBEstn en el BANCO 1 no queda de otra, deberemos cambiar de banco.Esto se logra a travs del Registro STATUS.STATUS es un Registro de 8 bits u 8 casillas, en el cual la N 5 (RP0) y laN 6 (RP1) definen la posicin del banco en donde nos encontramos.Como se muestra con la figura que se vio en la seccin de la LAMEMORIA RAM (Tabla de seleccin de bancos).

    DESCRIPCION DE ALGUNOS DE LOS REGISTROS INTERNOS DELBANCO 0.

    INDF (direccionamiento indirecto): Direccin 00h, sirve para ver eldato de la direccin a la que apunta el registro FSR (dir. 04h).

    TMR0 (Timer/contador): Direccin 01h, Aqu se puede ver el valor enTiempo real del Timer/contador. Tambin se puede introducir un valory alterar as el conteo. Este conteo puede ser interno (cuenta ciclos deReloj) o externo (cuenta impulsos introducidos por RA4).

    PCL (Parte baja del contador de programa): Direccin 02h,Modificando este registro se modifica el contador de programa, este

    contador de programa es el que seala al pic en que direccin (deEEPROM) tiene que leer la siguiente instruccin. Esto se utiliza muchopara consultar tablas.

    STATUS: Direccin 03h, este es uno de los registros mas importantes

    Y el que ms vas a utilizar. Hay que analizar el funcionamiento de

    Este registro bit a bit:

    CARRY, Direccin STATUS, 0 (bit 0): bit de desbordamiento. Este bit

    se pone a "1" cuando la operacin anterior ha rebasado la capacidad de un

    byte. Por ejemplo, si sumo dos nmeros y el resultado no cabe en 8 bit el

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    20/26

    CARRY se pone a "1", Pasa lo mismo cuando resto dos nmeros y el

    resultado es un nmero negativo. Se puede usar para saber si un nmero

    es mayor que otro (restndolos, si hay acarreo es que el segundo era

    mayor que el primero). Una vez que este bit se pone a "1" no se baja solo

    (a"0"), hay que hacerlo por programa si queremos volverlo a utilizar.

    DC (digit carry), Direccin STATUS, 1 (bit 1): lo mismo que el

    anterior pero esta vez nos avisa si el nmero no cabe en cuatro bits.

    Z (zero), Direccin STATUS, 2 (bit 2): Se pone a "1" si la operacin

    anterior ha sido cero. Y pasa a "0" si la operacin anterior no ha sido cero.

    Se usa para comprobar la igualdad entre dos nmeros (restndolos, si el

    resultado es cero ambos nmeros son iguales)

    PD (Power - Down bit), Direccin STATUS, 3 (bit3): se pone a "0"despus de ejecutar la instruccin SLEEP, se pone a "1" despus de

    ejecutar la instruccin CLRWDT o despus de un power-up.

    TO (Timer Up), Direccin STATUS, 4 (bit4): se pone a "0" cuando se

    acaba el tiempo del WATCHDOG, Se pone a "1" despus de ejecutar las

    instrucciones, CLRWDT o SLEEP o despus de un power-up.

    RP0 y RP1 (seleccin directa de banco), Direccin STATUS, 5 y

    STATUS, 6: 11 = Bank 3 (180h-1FFh)

    10 = Banco 2 (100h-17Fh)

    01 = Banco 1 (80h-FFh)

    00 = Banco 0 (00h-7Fh)

    Cada banco es de 128 bytes.

    IRP,(seleccin indirecta de banco) Direccin STATUS,7:

    1 = Banco 2, 3 (100h-1FFh)

    0 = Banco 0, 1 (00h-FFh)

    FSR (Puntero), Direccin 04h, se usa para direccionamiento indirecto encombinacin con el registro INDF (dir. 00h): se carga la direccin del registro

    que queremos leer indirectamente en FSR y se lee el contenido de dicho registro

    en INDF.

    PORTA (Puerto A), Direccin 05h: Con este registro se puede ver o modificar

    el estado de los pines del puerto A (RA0 RA7). Si un bit de este registro est a

    "1" tambin lo estar el pin correspondiente a ese bit. El que un pin est a "1"

    quiere decir que su tensin es de 5V, si est a "0" su tensin es 0V.

    As sucede tambin para PORTB, C, D y E.

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    21/26

    PCLATH, Direccin 0Ah: Modifica la parte alta del contador de programa

    (PC), el contador de programa se compone de 13 bits, los 8 bits de menor peso

    se pueden modificar con PCL (dir. 02h) y los 5 bits de mayor peso se puedenmodificar con PCLATH.

    INTCON (controla las interrupciones), Direccin 0Bh: Se estudia bit a

    bit:

    RBIF (Flag de interrupcin por cambio de PORTB) Direccin

    INTCON,0 (bit0): se pone a "1" cuando alguno de los pines RB4, RB5,

    RB6, o RB7 cambia su estado. Una vez que est a "1" no pasa a "0" por si

    mismo: hay que ponerlo a cero por programa.

    INTF (Flag de interrupcin de RB0) Direccin INTCON,1: Si est a

    "1" es que ha ocurrido una interrupcin por RB0, si est a "0" es que

    dicha interrupcin no ha ocurrido. Este bit es una copia de RB0.

    TMROIF (Flag de interrupcin por desbordamiento de TMR0)

    Direccin INTCON,2: Cuando TMR0 se desborda este Flag avisa

    poniendose a "1". Poner a "0" por programa.

    RBIE (Habilita la interrupcin por cambio de PORTB) DireccinINTCON,3: Si est a "1" las interrupciones por cambio de PORTB son

    posibles.

    INTE (Habilita la interrupcin por RB0) Direccin INTCON,4: Si lo

    ponemos a "1" la interrupcin por RB0 es posible.

    TMROIE (Habilita la interrupcin por desbordamiento de TMR0)

    Direccin INTCON,5: Si este bit esta a "1" la interrupcin por

    desbordamiento de TMR0 es posible.

    PEIE (Habilita la interrupcin de perifricos Direccin INTCON,6:

    Cuando este bit est a "1" habilita todas las interrupciones de perifrico

    enmascarables.

    GIE (Habilita las interrupciones globalmente) Direccin INTCON,7:

    Este bit permite que cualquier interrupcin de las anteriores sea posible.

    Para usar alguna de las interrupciones anteriores hay que habilitarlas

    globalmente e individualmente.

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    22/26

    MAPA DE MEMORIA RAM Y REGISTROS.

    SET DE INSTRUCCIONES PARA PIC16F87X:

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    23/26

    Para entender mejor cada instruccin se explica a continuacin el

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    24/26

    significado de algunos parmetros:

    f: Registro al que afecta la instruccin W: Acumulador (Working register) b: Nmero de bit (hay instrucciones que afectan a un solo bit) k: constante (un nmero) d: seleccin de destino del resultado de la instruccin, puede ser "0"

    o "1", si es "0" el resultado se guarda en el acumulador (W) y si es"1" se guarda en el registro f al que afecta la instruccin.

    Instrucciones orientadas a registros:

    ADDWF f,d Suma W y el registro f, el resultado lo guardasegn d (si d=0 se guarda en W y si d=1 se guarda en f).

    ANDWF f,d Realiza la operacin AND lgica entre W y f, elResultado lo guarda segn d.

    CLRF fBorra el registro f (pone todos sus bits a cero).

    CLRW - Borra el acumulador.

    COMF f,d Calcula el complementario del registro f (los bitsque estan a "0" los pone a "1" y viceversa. Resultado segn d.

    DECF f,d Decrementa f en uno (le resta uno). Resultadosegn d.

    DECFSZ f,d Decrementa f y se salta la siguiente instruccin siel resultado es cero. Resultado segn d.

    INCF f,d Incrementa f en uno (le suma uno). Resultado segnd.

    INCFSZ f,d Incrementa f y se salta la siguiente instruccin siel resultado es cero (cuando se desborda un registro vuelve alvalor 00h). Resultado segn d.

    IORWF f,d Realiza la operacin lgica OR entre W y f.Resultado segn d.

    MOVF f,d Mueve el contenido del registro f a W si d=0 (si d=1lo vuelve a poner en el mismo registro).

    MOVWF fmueve el valor de W a f. Por ejemplo, si queremos

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    25/26

    copiar el valor del registro "REG1" al registro "REG2" (ya veremos comoponerles nombres a los registros) escribiremos:

    MOVF REG1,0 ; mueve el valor de REG1 a W

    MOVWF REG2 ; mueve el valor de W a REG2

    Lo que va despus del; son comentarios

    NOP - No hace nada, solo pierde el tiempo durante un ciclo.

    RLF f,d Rota el registro f hacia la izquierda a travs del bit CARRY(todos los bits se mueven un lugar hacia la izquierda, el bit 7 de fpasa al CARRY y el bit CARRY pasa al bit 0 de f). Resultado segn d.

    RRF f,d Lo mismo que RLF pero hacia la derecha.

    SUBWF f,d Resta f y W (f - W). Resultado segn d.

    SWAPF f,d intercambia los 4 primeros bit de f por los otros cuatro.Resultado segn d.

    XORWF f,d Realiza la operacin lgica XOR (OR exclusiva) entre Wy f. Resultado segn d.

    Instrucciones orientadas a bits:

    BCF f,b Pone a "0" el bit b del registro f

    BSF f,b Pone a "1" el bit b del registro f

    BTFSC f,b Se salta la siguiente instruccin si el bit b del registro f es "0"

    BTFSS f,b Se salta la siguiente instruccin si el bit b del registro f es "1"

    Instrucciones orientadas a constantes y de control:

    ADDLW kLe suma el valor k al acumulador (W).

    ANDLW kOperacin lgica AND entre W y el valor k (resultado en W).

    CALL kLlamada a subrutina cuyo inicio esta en la direccin k

    CLRWDT - Borra el registro Watchdog

  • 8/9/2019 Tutorial PIC16F877A(Algunas Mejoras)

    26/26

    GOTO kSalta a la direccin k de programa.

    IORLW kOperacin lgica OR entre W y el valor k (resultado en W)

    MOVLW kcarga el acumulador con el valor k. Por ejemplo, si queremoscargar el valor 2Ah en el registro "REG1" escribiremos:

    MOVLW 2AH; carga el acumulador con el valor 2Ah

    MOVWF REG1; mueve el valor de W a "REG1"

    RETFIE - Instruccin para volver de la interrupcin

    RETLW kcarga el valor k en W y vuelve de la interrupcin

    RETURN - vuelve de una subrutina.

    SLEEP - El pic pasa a modo de Standby.

    BIBLIOGRAFIA:

    1. Hoja de datos del PIC16F87xA de Microchip.

    2. Programacin del PIC16F84. por Carlos Daz www.electron.es.vg

    3. Club Saber electrnica curso de pics para estudiantes y aficionados N0 20.4. Ed Quark Ing. Horacio D. Vallejo

    5. Club Saber electrnica microcontroladores PIC Programacin y desarrollo

    N0 24. Ed Quark Ing. Horacio D. Vallejo

    6. EL PIC16F877 por Marco Antonio Mrquez Surez

    http://www.electron.es.vg/http://www.electron.es.vg/