Uso Del Pic 16f87x Con Ejemplos

download Uso Del Pic 16f87x Con Ejemplos

of 85

Transcript of Uso Del Pic 16f87x Con Ejemplos

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    1/85

    PIC

    16F87X

    TRABAJO

    EXPLICACIN

    Sebastin Martn Garca

    2 DPE

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    2/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 2

    INDICE

    DIFERENCIAS ENTREPIC16F84 Y 16F87X____________________________________ 4

    PIC 16F87X_________________________________________________________________ 5

    DIFERENCIAS ENTRE 16F84 Y 16F87X __________________________________________ 5

    SENSORES ANALOGICOSMAS UTILIZADOS__________________________________6

    SENSOR DE LUMINOSIDAD LDR _______________________________________________ 7

    SENSOR DE TEMPERATURA LM35 _____________________________________________ 7

    ORGANIZACIN DE LA MEMORIA__________________________________________ 8

    MEMORIA DE PROGRAMA____________________________________________________ 9MEMORIA DE DATOS RAM ___________________________________________________ 9

    INSTRUCCIONES _________________________________________________________ 10

    REGISTROS ESPECFICOS_________________________________________________ 12

    REGISTRODEESTADO(STATUS) _________________________________________ 13REGISTRODEOPCIONES(OPTION)_______________________________________ 14REGISTROPARACONTROLARLASINTERRUPCIONES ____________________15

    REGISTRODECONTROLDEINTERRUPCIONES(INTCON) __________________ 16REGISTRODEPERMISODEINTERRUPCIONES1(PIE1) _____________________ 17REGISTRODEPERMISODEINTERRUPCIONES2(PIE2) _____________________ 18

    REGISTRODELOSSEALIZADORESDEINTERRUPCION1Y2(PIR1PIR2) __ 19

    LECTURA Y ESCRITURA EEPROM Y FLASH ________________________________ 21

    LECTURAYESCRITURADELASMEMORIASEEPROMYFLASH____________ 22

    PUERTAS E/S _____________________________________________________________23

    PUERTAS DE E/S ____________________________________________________________ 24PUERTAA _______________________________________________________________ 24PUERTAB _______________________________________________________________ 25PUERTAC _______________________________________________________________ 26PUERTAD _______________________________________________________________ 26

    PUERTAE _______________________________________________________________ 26

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    3/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 3

    RECURSOS ESPECIALES __________________________________________________ 27

    PALABRADECONFIGURACIN __________________________________________ 28PALABRADEIDENTIFICACIN __________________________________________ 29REINICIALIZACINORESET ____________________________________________ 29

    PERROGUARDIAN(WDT:WATCHDOGTIMER) ___________________________ 30MODODEREPOSOOBAJOCONSUMO ____________________________________ 30PROGRAMACINDELOSPIC16F87X _____________________________________ 31

    TEMPORIZADORES _______________________________________________________ 32

    TIPOSYCARACTERSTICASGENERALES_________________________________ 33ESTRUCTURAINTERNAYFUNCIONAMIENTODELTMR1__________________ 34REGISTRODECONTROLDELTMR1(T1CON)______________________________ 35FUNCIONAMIENTOYPROGRAMACIONDELTMR2________________________36

    CAPTURA, COMPARACIN Y MODULACIN DE ANCHURA DE PULSOS______ 37

    INTRODUCCINALOSMDULOSCCP ___________________________________ 38MODOCAPTURA ________________________________________________________39MODOCOMPARACIN __________________________________________________ 40MODODEMODULACINDEANCHURADEPULSOS(PWM)_________________ 41

    EL CONVERSOR A/D ______________________________________________________ 42

    PRESENTACINDELCONVERSORANALGICO/DIGITAL ________________ 43

    REGISTROSDETRABAJO ________________________________________________ 43ESTRUCTURAINTERNAYCONFIGURACINDELCA/D____________________ 45PASOS A SEGUIR PARA REALIZAR UNA CONVERSIN CON EL MDULO CA/D__________ 46

    MDULO DE COMUNICACIONES SERIE SNCRONA MSSP___________________47

    INTRODUCCIN _________________________________________________________48MODOSPI _______________________________________________________________49MODOI2C _______________________________________________________________ 50

    CONCEPTO DEL BUSI2C___________________________________________________ 50DIRECCIONAMIENTO DEL BUSI2C___________________________________________ 51

    BITS DECONTROL DEL BUSI2

    C_____________________________________________ 51

    USART (SCI) ______________________________________________________________54

    COMUNICACINSERIEASNCRONA _____________________________________ 55MODOS DE TRABAJO DEL USART ___________________________________________ 55

    PROGRAMAS (ASM) _______________________________________________________ 56

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    4/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 4

    DIFERENCIAS ENTREPIC16F84 Y 16F87X

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    5/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 5

    PIC 16F87X

    Diferencias entre 16F84 y 16F87X

    El PIC 16F84 ha sido precedido por el 16C84, prcticamente igual, conexcepcin de la memoria de programa que era de tipo EEPROM en lugar de FLASH. ElFLASH soporta 1.000 operaciones de Escritura/Borrado y el EEPROM 100.000.

    El PIC 16F84 tiene una memoria FLASH de 1K palabras, solo un Timer y 13lneas de E/S digitales y el modelo normal soporta una frecuencia de 10 MHz. Aunqueel A, llega a 20 MHz. Es un microcontrolador categorizado como gama baja por su

    bajo coste y sencillez, pero que ha dado mucho que hablar.

    La memoria RAM de datos de los PIC 16F87X posee una capacidad de 192

    bytes en dos de los modelos y de 368 bytes en los otros dos. Aunque superanampliamente los 68 bytes del 16F84 mantienen la misma estructura bsica de 4 bancosde 128 bytes cada uno, seleccionables por los bits RP0 y RP1 del registro de estado(STATUS bits 5 y 6 respectivamente).

    La memoria de datos no voltil de 64 bytes tipo EEPROM que tena el 16F84,en los nuevos 16F87X de 28 patas sube a 128 bytes, y en los de 40 patas hasta 256

    bytes.

    Los 16F87X manejan hasta 14 posibles fuentes de interrupcin y 3 Timer, frentea las 4 fuentes y 1 Timer del 16F84. El numero de puertas tambin se ha aumentado

    considerablemente, con 3 puertas los de 28 patas y hasta 5 puertas los de 40.

    Adems lo nuevos PICs, incorporan los siguientes mdulos, inexistentes en elantiguo 16F84:

    - Dos mdulos CCP:Capaces de comparar y capturar impulsos. La captura se efecta con

    una precisin de 12,5 ns y una resolucin de 16 bits, mientras que lacomparacin con igual resolucin alcanza una precisin de 200 ns.Adems, la seccin PWM vara la anchura de los impulsos, tcnica muyempleada en los motores.

    - Comunicacin Serie:La tpica USART, orientada a la comunicacin entre subsistemas o

    mquinas (RS-232) y la MSSP destinada a la comunicacin entrediversos circuitos integrados y que admite el protocolo I2C y SPI.

    - Comunicacin en Paralelo:Los PIC 16F874/7 de 40 patas est disponible el protocolo PSP, ms

    rpido que la comunicacin serie pero hipoteca muchas minas de E/S, 8 de lapuerta D y 3 de control de la Puerta E.

    - Conversor A/D:En todos los PIC 16F87X existe un conversor A/D de 10 bits, con 5

    canales de entrada en los de 28 patas y 8 en los de 40.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    6/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 6

    SENSORES ANALOGICOSMAS UTILIZADOS

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    7/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 7

    Sensores Analgicos ms utilizados

    Aunque el PIC 16F84 sirve para un sinfn de aplicaciones, hay varias para lasque este microcontrolador no sirve. Un de ellas es la que vamos a tratar en esteapartado, se trata de aplicaciones en las que sea necesario un conversor A/D para su

    tratamiento. Vamos a tratar un par de sensores analgicos, una LDR y un sensor detemperatura NTC.

    Sensor de Luminosidad LDRUn sensor de luminosidad LDR es un elemento cuya resistencia entre bornes

    vara en funcin de luz que incide sobre su superficie. Cuando no hay luz tieneuna resistencia infinita y segn va aumentando la luz, va disminuyendo hasta 0.

    Es un elemento sin polaridad y se puede encontrar con diferentes dimetrossegn el rango de valores de luminosidad que sea capaz de diferenciar.

    Sensor de Temperatura LM35Otro sensor analgico ampliamente utilizado es el de temperatura. Existen

    muchos modelos de sensores de temperatura y su eleccin depende de variosparmetros, rango de temperaturas, precisin, el coste, resistencia, etc.,...

    Uno de los sensores ms utilizados es el LM35 tambin llamado estndar.Sus caractersticas son:

    1. Su tensin de salida Vout es proporcional a la temperatura en unaproporcin de 10mV/C

    2. Su rango de funcionamiento esta comprendido entre 0 y 100 C.3. Su tensin de funcionamiento Vs est entre +4 VDC y +30 VDC.4. Su precisin es de 0.9 C.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    8/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 8

    ORGANIZACIN DELA MEMORIA

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    9/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 9

    Organizacin de la Memoria

    Memoria de ProgramaLa memoria FLASH en la que se graba el programa de aplicacin en los

    PIC 16F87X, puede tener una capacidad de 4K u 8K palabras de 14 bits

    cada una. Dicha memoria est dividida en pginas de 2K palabras y estdireccionada con el PC, que tiene un tamao de 13 bits. La pila que tiene 8niveles de profundidad, es transparente para el usuario, es decir, funcionaautomticamente y no dispone de instrucciones para guardar o sacar deella informacin. Con la instruccin CALL y con las interrupciones, elvalor se salva en el nivel superior. Con las instrucciones RETURN,RETFIE Y RETLW, en valor contenido en el nivel superior de la pila, secarga en el PC. Al poseer la pila solo 8 niveles, le corresponde al

    programador preocuparse por los anidamientos en las subrutinas parasobrepasar dicho valor. El vector de reset ocupa la direccin 0000h y elvector de interrupcin la 0004h, igual que el PIC 16F84.

    Memoria de Datos RAMLa memoria de datos tiene posiciones implementadas en RAM y otra en

    EEPROM. En la seccin RAM, se alojan los registros operativosfundamentales, en el funcionamiento del procesador y en el manejo de sus

    perifricos, adems de registros que el programador puede usar parainformacin de trabajo propia de la aplicacin. La memoria EEPROM es

    para guardar datos de forma no voltil y se considera un dispositivoespecial.

    La RAM esttica consta de 4 bancos con 128 bytes cada uno. En las posiciones iniciales de banco se ubican los registros especficos quegobiernan el procesador y sus recursos. Dos modelos de 16F87X tienen 192

    bytes de RAM y otros dos de 368 bytes.Para seleccionar el banco al que se desea acceder en la RAM se emplean

    los bits 6 y 5 del Registro de Estado (STATUS) RP1 y RP0respectivamente, segn el cdigo siguiente:

    BANCO RP1 RP0

    0 0 01 0 12 1 03 1 1

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    10/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 10

    INSTRUCCIONES

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    11/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 11

    Instrucciones

    Los mismos formatos, iguales modos de direccionamiento y las mismas 35instrucciones que tena el PIC 16F84 sirven para todos los modelos PIC 16F87X. Noobstante, en los nuevos PIC, al contener ms recursos, existen nuevos registros

    especficos de control cuyos bits se debern escribir o leer para su gobierno.

    INSTRUCCIONES QUE MANEJAN REGISTROS

    ADDWF Suma W y F

    ANDWF AND W con F

    CLRF Borra F

    CLRW Borra W

    COMF Complementa F

    DECF Decrementa FDECFSZ Decrementa F, si es 0 salta

    INCF Incrementa F

    INCFSZ Incrementa F, si es 0 salta

    IORWF OR entre W y f

    MOVF Mueve f

    MOVWF Mueve W a f

    NOP No opera

    RLF Rota f a la izquierda, a travs del acarreo

    RRF Rota f a la derecha, a travs del acarreo

    SUBWF Resta a f el registro W

    SWAPF Intercambia fXORWF XOR de W con f

    INSTRUCCIONES QUE MANIPULAN BITS

    BCF Borra bit de f

    BSF Pone a 1 el bit de f

    BTFSC Testea un bit de f y salta si vale 0

    BTFSS Testea un bit de f y salta si vale 1

    INSTRUCCIONES DE CONTROL Y DE OPERANDOS INMEDIATOS

    ADDLW Suma inmediata a W

    ANDLW AND inmediato con W

    CALL Llamada a subrutina

    CLRWDT Borra el Perro guardin

    GOTO Salto incondicional

    IORLW OR inmediato con W

    MOVLW Mueve a W un valor inmediato

    RETFIE Retorno desde interrupcin

    RETLW Retorno y carga de W

    RETURN Retorno de subrutina

    SLEEP Pasa a estado de reposo

    SUBLW Resta W de un inmediatoXORLW OR Exclusiva a W

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    12/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 12

    REGISTROSESPECFICOS

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    13/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 13

    Registros

    REGISTRO DE ESTADO (STATUS)

    Este es el registro ms usado de todos pues sus bits estn destinado a

    controlar las funciones vitales del procesador. Por ese motivo estduplicado en las cuartas posiciones de cada banco (03h, 83h, 103h, 183h)

    IRP RP1 RP0 TO# PD# Z DC C

    Los tres bits de menos peso son los sealizadores de ciertas condicionesen las operaciones lgico-aritmticas:

    - Z: Sealizador de cero. Se pone 1 cuando el resultado es 0.- C: Acarreo-llevada del 8 bit. Se pone a uno automticamente

    cuando existe acarreo en el bit de ms peso en lasinstrucciones de suma. Tambin acta como sealizador dellevada en las instrucciones de resta, pero en este caso lacorrespondencia es inversa, si vale 0 es llevada.

    - DC: Acarreo-llevada en el cuarto bit. Funciona igual que elsealizador C, pero para el 4 bit. Es muy til para lasoperaciones en BCD.

    Los sealizadores PD# y TO#, son activos por nivel bajo (#) y sirvenpara indicar la causa que ha provocado la reinicializacin del procesador.

    - PD#: Se activa a 0 al ejecutarse la instruccin SLEEP. Sepone a uno automticamente tras la conexin de alimentacin

    o bien al ejecutarse la instruccin CLRWDT- TO#: Se activa a nivel bajo al desbordarse el perro guardin.Toma el valor 1 tras la conexin de alimentacin o alejecutarse las instrucciones CLRWDT o SLEEP.

    Los PIC se resetean al conectar la alimentacin (POR Power on Reset).Tambin se resetean cuando la tensin de alimentacin baja de 4V (BOR

    Brown on Reset), aunque esta funcin es factible desactivarla poniendoa 0 el bit BODEM, presente en la palabra de configuracin, tanto en elReset POR como en el BOR los bits PD# y TO# toman el valor 1,mientras que en los dems casos dependen de la causa que ha provocado

    el Reset.Finalmente los tres bits de ms peso del registro de estado se empleanpara seleccionar el banco de la RAM al que se desea acceder

    RP1 RP0 BANCO SELECCIONADO0 0 Banco 0 (00h 7Fh)0 1 Banco 1 (80h FFh)1 0 Banco 2 (100h 17Fh)1 1 Banco 3 (180h 1FFh)

    El bit IRP se usa conectado con el bit de ms peso del registro FSR paraelegir el banco de RAM en el direccionamiento indirecto.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    14/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 14

    REGISTRO DE OPCIONES (OPTION)

    Tiene las mismas funciones que tena en el PIC 16F84:1: Asigna el divisor de frecuencias al TIMER0 o al perro

    guardin.

    2: Elige el rango en el que trabaja el divisor de frecuencia.3: Selecciona el tipo de reloj del TIMER0, que puede ser internoo externo a travs de la pastilla TOCKI. Tambin selecciona elflanco activo.4: Selecciona el flanco activo para la interrupcin externa porRB0/INT5: Activa o desactiva las resistencias de pull-up de la Puerta B

    El registro OPTION toma el valor b11111111 (FF) en cualquiertipo de reinicializacin que se produzca.

    RBPU# INTEDG TOCS TOSE PSA PS2 PS1 PS0

    PS2 PS1 PS0 Divisin del TMR0 Divisin del WDT0 0 0 1:2 1:10 0 1 1:4 1:20 1 0 1:8 1:40 1 1 1:16 1:81 0 0 1:32 1:16

    1 0 1 1:64 1:321 1 0 1:128 1:641 1 1 1:256 1:128

    PSA: Asignacin de divisor de frecuencias.1 = El divisor de frecuencias se le asigna al WDT.0 = El divisor de frecuencias se le asigna al TIMER0.

    TOSE: Tipo de flanco en TOCKI.1 = Incremento del TIMER0 cada flanco descendente.

    0 = Incremento del TIMER0 cada flanco ascendente.

    TOCS: Tipo de reloj para el TIMER01 = Pulsos introducidos a travs del TOCKI (contador)0 = Pulsos de reloj internos FOSC/4 (Temporizador)

    INTEDG: Flanco activo de la interrupcin externa.1 = Flanco ascendente0 = Flanco descendente

    RBPU#: Resistencias de pull-up de la Puerta B

    1 = Desactivadas0 = Activadas

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    15/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 15

    REGISTRO PARA CONTROLAR LAS INTERRUPCIONES

    Los PIC 16F87X tienen muchas causas que pueden originar unainterrupcin, 13 posibles causas los de 28 patas y 14 los de 40. Alaceptarse una interrupcin se salva el valor del PC en la Pila y se carga

    aquel con el valor 0004h, que es el vector de interrupciones.El PIC 16F84 tena 4 causas que generaban interrupcin: desbordamientodel TMR0, activacin de la pata de interrupcin RB0/INT, cambio deestado de una de las cuatro patas de ms peso de la Puerta B yfinalizacin de la escritura de un byte en la EEPROM. Los nuevos PIC,adems de las causas que producen interrupcin en el 16F84, tienen lassiguientes:

    1 Desbordamiento del Timer 12 Desbordamiento del Timer 23 Captura o comparacin del mdulo CCP1.4 Captura o comparacin del mdulo CCP2.

    5 Transferencia en la Puerta serie sncrona.6 Colisin de bus en la Puerta serie sncrona.7 Fin de transmisin en el USART.8 Fin de recepcin en el USART.9 Fin de la conversin en el conversor A/D10 Transferencia en la puerta paralela esclava (solo en los de 40

    patas)

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    16/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 16

    1. REGISTRO DE CONTROL DE INTERRUPCIONES (INTCON)Se trata de un registro leble y escribible, para facilitar su accesose ha duplicado en los cuatro bancos. Tiene la misin de controlarlas interrupciones provocadas por TMR0, cambio de estado en lascuatro lneas de ms peso de la Puerta B y activacin en la patilla

    RB0/INT. Es muy parecido al registro que con el mismo nombreexist en el 16F84, solo cambia el bit 6 en los nuevos PIC que esel PIE (permiso de interrupcin de lo perifricos) en lugar delEEIE que tena de 16F84 para permitir la interrupcin cuandofinalice la escritura de un byte en la EEPROM. El bit PEIE actacomo una segunda llave parcial de permiso o prohibicin de lascausas de interrupcin que no est complementadas en INTCONy que las provocan los restantes perifricos del microcontrolador.GIE es el bit de permiso global de todas las interrupciones.

    GIE PEIE TOIE INT RBIE TOIF INTF RBIF

    GIE: Bit de permiso global de interrupciones.1 = Permitido0 = Prohibido

    PEIE: Bit de permiso de los perifricos que no secontrolan con INTCON

    TOIE: Bit de permiso de interrupcin del TMR0.

    INTE: Bit de permiso de la interrupcin externa porRB0/INT

    RBIE: Bit de permiso de la interrupcin por cambio enRB4-RB7

    TOIFF: Sealizador de desbordamiento en TMR0.

    INTF: Sealizador de activacin de la patilla RB0/INT

    RBIF: Sealizador de cambio en RB4-RB7

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    17/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 17

    2. REGISTRO DE PERMISO DE INTERRUPCIONES 1 (PIE1)

    Contiene los bits que permiten o prohiben las interrupciones provocadas por los perifricos internos del microcontrolador yque no estaban contempladas en INTCON.

    Ocupa la direccin 8Ch y para que cumplan su funcin, los bits dePIE1, es necesario que el PIE sea igual a 1 en INTCON, 6. El bitPSPIE solo es vlido solo es vlido en los modelos de 40 patas,mantenindose a 0 en los de 28 patas.

    PSPIE ADIE RCIE TXIE SPIE CCP1IE TMR2IE TMR1IE

    PSPIE: Permiso de interrupcin para la puerta paralela esclava alrealizar una operacin de lectura/escritura. En modelos de 40 patas.

    ADIE: Permiso de interrupcin para el conversor A/D al finalizarla conversin.

    RCIE: Permiso de la interrupcin para el receptor de USARTcuando el buffer se llena.

    TXIE: Permiso de la interrupcin para el transmisor de USARTcuando el buffer se vaca.

    SSPIE: Permiso de interrupcin para la puerta serie sncrona.

    CCP1IE: Permiso de interrupcin para el mdulo CCP1 cuando seproduce una captura o comparacin.

    TMR2IE: Permiso de interrupcin para el TMR2 con sudesbordamiento.

    TMR1IE: permiso de interrupcin para el TMR1 con sudesbordamiento.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    18/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 18

    3. REGISTRO DE PERMISO DE INTERRUPCIONES 2 (PIE2)

    Contiene los bits de permiso de interrupcin de las tres causas queno figuraban en el PIE1. La de fin de escritura de la EEPROM,colisin de bus en el modo de SSP y produccin de una captura o

    comparacin en el mdulo CCP2. El bit 6 es un bit reservado y suvalor es siempre 0. Cuando se leen los bit que no tienen asignadafuncin, se obtiene 0.

    - 0 - EEIE BCLIE - - CCP2IE

    EEIE: Permiso de interrupcin por fin de escritura en laEEPROM de datos.

    BCLIE: Permiso de interrupcin por colisin de bus en el SSPcuando dos o ms maestros tratan de transferir al mismotiempo.

    CCP2IE: Permiso de interrupcin el mdulo CCP2.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    19/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 19

    REGISTRO DE LOS SEALIZADORES DE INTERRUPCION 1 Y 2(PIR1 y PIR2)

    En correspondencia con los bits de permiso/prohibicin de las causas deinterrupcin recogidas en el registro PIE1 y PIE2, existen otros dos registros,

    el PIR1 y PIR2, cuyos bits actan de sealizadores del momento en el que seorigina la causa que provoca la interrupcin, independientemente de si estpermitida o prohibida. Ocupan las direcciones 0Ch y 0Dh.

    REGISTRO PIR1

    PSPIF ADIF RCIF TXIF SSPIF CCPIF TMR2IF TMR1IF

    REGISTRO PIR2

    - 0 - EEIF BCLIF - - CCP2IF

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    20/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 20

    DISTRIBUCION MEMORIA RAM

    INDF 00h INDF 80h INDF 100h INDF 180hTMR0 01h OPTION_REG 81h TMR0 101h OPTION_ REG 181h

    PCL 02h PCL 82h PCL 102h PCL 182hSTATUS 03h STATUS 83h STATUS 103h STATUS 183h

    FSR 04h FSR 84h FSR 104h FSR 184h

    PORTA 05h TRISA 85h 105h 185h

    PORTB 06h TRISB 86h PORTB 106h TRISB 186h

    PORTC 07h TRISC 87h 107h 187h

    PORTD 08h TRISD 88h 108h 188h

    PORTE 09h TRISE 89h 109h 189h

    PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah

    INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh

    PIR1 0Ch PIE1 8Ch EEDATA 10Ch EECON1 18Ch

    PIR2 0Dh PIE2 8Dh EEADR 10Dh EECON2 18Dh

    TMR1L 0Eh PCON 8Eh EEDATH 10Eh Reservado 18EhTMR1H 0Fh 8Fh EEADRH 10Fh Reservado 18Fh

    T1CON 10h 90h 110h 190h

    TMR2 11h SSPCON2 91h 111h 191h

    T2CON 12h PR2 92h 112h 192h

    SSPBUF 13h SSPADD 93h 113h 193h

    SSPCON 14h SSPSTAT 94h 114h 194h

    CCPR1L 15h 95h 115h 195h

    CCPR1H 16h 96h 116h 196h

    CCP1CON 17h 97h Propsito 117h Propsito 197h

    RCSTA 18h TXSTA 98h General 118h General 198h

    TXREG 19h SPBRG 99h 16 Bytes 119h 16 Bytes 199h

    RCREG 1Ah 9Ah 11Ah 19AhCCPR2L 1Bh 9Bh 11Bh 19Bh

    CCPR2H 1Ch 9Ch 11Ch 19Ch

    CCP2CON 1Dh 9Dh 11Dh 19DhADRESH 1Eh ADRESL 9Eh 11Eh 19Eh

    ADCON0 1Fh ADCON1 9Fh 11Fh 19Fh

    20h A0h 120h 1A0h

    Registros Registros Registros RegistrosPropsito Propsito Propsito PropsitoGeneral General General General

    96 Bytes 80 BytesEFh

    80 Bytes16Fh

    80 Bytes 1EFh

    accessesF0h

    accesses170h

    accesses1F0h

    70h-7Fh 70h-7Fh 70h - 7Fh7Fh FFh 17Fh 1FFh

    Banco 0 Banco 1 Banco 2 Banco 3

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    21/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 21

    LECTURA Y ESCRITURAEEPROM Y FLASH

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    22/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 22

    LECTURA Y ESCRITURA DE LAS MEMORIAS EEPROM Y FLASH

    En el PIC 16F84 se poda leer y escribir la memoria de datosEEPROM. En los PIC 16F87X tambin se puede leer y escribir la memoria decdigo FLASH. Esto significa que un programa dinmicamente puede generar

    informacin que se puede grabar en la FLASH directamente sin necesidad degrabador externo.Para manejar la memoria EEPROM de 64 bytes del PIC 16F84,

    bastaban 2 registros, para proporcionar la direccin de la memoria a consultar ypara grabar el dato de 8 bits, sin embargo, en los PIC 16F87X, no basta con unsolo registro para proporcionar la direccin de memoria, ya que esta alcanza los13 bits, y lo mismo sucede con el dato, que a su vez alcanza los 14bits. Paracubrir esta necesidad el registro EEADR se concatena con el EEADRH, quecontiene los 5 bits de ms peso de la direccin. Por otra parte, el registroEEDATAH se concatena con EEDATA y tiene los 6 bits de ms peso de la

    palabra leda o a escribir en la FLASH.

    Para controlar la operacin lectura/escritura de las memoriasEEPROM y FLASH hay dos registros denominados EECON1 Y EECON2. ElEECON2, no esta implementado fsicamente y slo se utiliza en la delicadaoperacin de escritura, que tiene la elevada duracin de 2 milisegundos. Antesde iniciar la escritura de una palabra se escribe en EECON2 primero el dato 55hy luego el Aah.

    Para evitar escrituras indeseadas en la EEPROM, se controla el bitWREN, prohibiendo cualquier operacin de escritura mientras duran los 72milisegundos que temporiza el Timer de Power-Up. Para realizar la misma

    proteccin en la memoria FLASH, se debe poner a 0 el bit WRT de la Palabra deConfiguracin, que solo puede escribirse desde un grabador externo.

    Dependiendo del valor y los bits de proteccin de cdigo CP1 y CP0,ubicados en la palabra de configuracin, se consiguen varias alternativas de

    proteccin contra lectura y escritura de la FLASH. A continuacin:

    CONFIGURACION DEBIT

    CP1 CP2 WRT

    POSICIONES DEFLASH

    LECTURAINTERNA

    ESCRIT.INTERNA

    LECTURAICSP

    ESCRIT.ICSP

    0 0 X Memoria de prog. S No No No0 1 0 reas no protegidas S No S No0 1 0 reas protegidas S No No No0 1 1 reas no protegidas S S S No0 1 1 reas protegidas S No No No1 0 0 reas no protegidas S No S No1 0 0 reas protegidas S No No No1 0 1 reas no protegidas S S S No1 0 1 reas protegidas S No No No1 1 0 Memoria de prog. S No S S1 1 1 Memoria de prog. S S S S

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    23/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 23

    PUERTAS E/S

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    24/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 24

    Puertas de E/SLos microcontroladores PIC 16F87X encapsulados con 28 patas, disponen de 3

    puertas de E/S (A,B,C) mientras que los de 40 patas, alcanzan 5 (A,B,C,D,E).

    1. PUERTA ASolo dispone de 6 lneas (RA0-RA5), son bidireccionales y se configuran

    a travs del registro TRISA, situado en el Banco 1. En cada bit del registroTRISA de la Puerta se configura la correspondiente lnea. Si el bit es 0, lalnea est configura como salida, a su vez, si se pone a 1, la lnea seconfigura como entrada.

    El registro PORTA, es el de la Puerta A, que recoge el estado de cadalnea de la Puerta, independientemente de cmo estn configuradas.

    Las lneas R0/AN0, R1/AN1 y R2/AN2, adems de lneas de E/S

    digitales, tambin pueden actuar como los canales 0, 1 y 2 por los que se puede aplicar una seal analgica al conversor A/D. La pataRA3/AN3/Vref+, tambin puede actuar como entrada de Tensin deReferencia para los perifricos que la precisan. La pata RA4/TOCKI actaadems de E/S digital, como entrada de seal de reloj para el Timer 0. La

    pata RA5/AN5/SS# tiene multiplexadas tres funciones: E/S digital, canal 4para el conversor A/D y seleccin del modo esclavo cuando se trabaja conla comunicacin serie sncrona.

    Para seleccionar si las lneas de la Puerta A van a trabajar como E/Sdigitales o como canales de entrada para el conversor A/D, hay queescribir el valor adecuado sobre el registro ADCON1. Si se carga en dichoregistro el valor 011x en sus 4 bits de menos peso, todas las lneas de

    puertas funcionan como E/S digitales.

    DIREC-CION

    NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0VALOR

    EN PORBOR

    VALOR ENEL RESTO

    DE RESETS05h PORTA - - RA5 RA4 RA3 RA2 RA1 RA0 -0x 000 -0u 000

    85h TRISA - - Registro de configuracin de la Puerta A -11 1111 -11 11119Fh ADCON1 ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0 -0- 0000 -0- 0000

    x significa desconocidou significa que no cambia- significa que no est implementado y se lee como 0

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    25/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 25

    2. PUERTA BDispone de 8 lneas bidireccionales cuya funcin se elige mediante la

    programacin del TRISB. Todas las patas de la puerta B disponen de unaresistencia interna de pull-up al positivo de la alimentacin. Esta va

    conectada cuando el bit RBPU# (es bit 7 del registro OPTION), tiene valor0. La resistencia de pull-up se conecta automticamente siempre que lalnea est configurada como salida. Cuando se produce un Reset porconexin de la alimentacin (POR) se desconectan todas las resistencias de

    pull-up.

    Las lneas RB pueden programarse para generar una interrupcincuando una de ellas cambia de estado. Se deben configurar como entradasy el valor que se introduce por ellas se compara con el anterior para si nocoinciden generar una interrupcin, siempre que lo autorice el bit de

    permiso situado en el INTCON.

    La pata RB0/INT tambin puede programarse como peticin deinterrupcin externa, el bit de permiso tambin est ubicado en elINTCON.

    DIREC-CION

    NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0VALOR

    EN PORBOR

    VALOR ENEL RESTO

    DE RESETS06h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu86h TRISB Registro de configuracin de la Puerta B 1111 1111 1111 111181h OPTION RBPU# INTEDG TOCS TOSE PSA PS2 PS1 PS0 1111 1111 1111 1111

    x significa desconocidou significa que no cambia

    - significa que no est implementado y se lee como 0

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    26/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 26

    3. PUERTA CConsta de 8 lneas bidireccionales cuyo sentido se configura mediante el

    registro TRISC. Todas las patas de esta puerta tienen multiplexadasdiferentes funciones:

    - RC0/T1OSO/T1CKI: Esta lnea puede actuar como E/S digital,como salida del Timer 1 o como entrada de impulsos para elTimer 1.

    - RC1/T1OSI/CCP2: E/S digital, entrada al oscilador del Timer 1,entrada del modulo de Captura 2, Salida del comparador 2,salida del PWM2.

    - RC2/CCP1: E/S digital, entrada Captura 1, Salida de comparadoruno, salida del PWM1.

    - RC3/SCK/SCL: E/S digital, Seal de reloj modo SPI, Seal dereloj modo I2C.

    - RC4/SDI/SDA: E/S digital, Seal de datos modo SPI, Seal dedatos modo I2C.

    - RC5/SDO: E/S digital, Salida de datos en modo SPI.- RC6/TX/CK: E/S digital, Lnea de transmisin en USART, Seal

    de reloj sncrona en transmisin serie.- RC7/RX/DT: E/S digital, Lnea de recepcin USART, Lnea de

    datos en transmisin serie sncrona.

    4. PUERTA DConsta de 8 lneas bidireccionales. Solo la tienen los PIC encapsulados

    con 40 patas (16F877). Se configura mediante el registro TRISD. Todaslas patas disponen en su entrada de un Trigger Schmitt.

    Adems de usarse como lneas de E/S digitales normales, implementanuna puerta paralela esclava de 8 lneas (PSP), que sirve para permitir lacomunicacin en paralelo con otros elementos del sistema.

    Las patas se denominan RD0/PSP0-RD7/PSP7, y para que funcionencomo puerto de comunicacin esclava en paralelo, es preciso poner el bitPSP MODE=1.

    5. PUERTA ESolo la tienen los PIC de 40 patas. Dispone de tres patas multifuncin,que se configuran como entrada o salida, segn el valor de los tres bits demenos peso del registro TRISE

    - RE0/RD#/AN5: E/S digital, Seal de lectura en modo puertaparalela esclava, Canal 5 de conversor A/D.

    - RE1/WR#/AN6: E/S digital, Seal de escritura en modo PSP,Canal 6 de conversor A/D.

    - RE2/CS#/AN7: E/S digital, Seleccin de chip en modo PSP,Canal 7 de conversor A/D.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    27/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 27

    RECURSOSESPECIALES

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    28/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 28

    Recursos especiales

    PALABRA DE CONFIGURACINEs una posicin reservada de la memoria de programa FLASH que ocupa la

    direccin 2007h y que solo es accesible durante la programacin del PIC

    CP1 CP0 DEBUG - WRT CPD LVP BODEN CP1 CP0 PWRTE# WDTE FOSC1 FOSC0

    CP1:CP0 Cdigo de proteccin de la memoria del programa. Estn repetidos en los bits 13:12 y5:4. Si los bits de cdigo de proteccin no se programan, las protecciones de la memoriade cdigo pueden ser ledas para verificacin

    CP1 CP0 Proteccin desde... ...hasta Modelo PIC0 0 0000h 0FFFh 16F873/40 0 0000h 1FFFh 16F876/70 1 0800h 0FFFh 16F873/4

    0 1 1000h 1FFFh 16F876/71 0 0F00h 0FFFh 16F873/41 0 1F00h 1FFFh 16F876/71 1 No hay cdigo protegido en la memoria FLASH

    DEBUG Modo Depurador en Circuito1 = Desactivado. RB7:RB6 actan como lneas de E/S.0 = Activado. RB7:RB6 actan en modo depurado. La depuracin se puede hacer desdeel MPLAB.

    WRT Permiso de escritura en la memoria FLASH1 = Se puede escribir en la parte no protegida de la FLASH0 = Prohibicin de escritura

    CPD Cdigo de Proteccin de la Memoria EEPROM de Datos1 = No hay proteccin en la EEPROM0 = Proteccin del cdigo en la EEPROM

    LVP Bit de Permiso para Programacin de Bajo Voltaje1 = RB3/PGM tiene permitida la grabacin en bajo voltaje0 = RB3/PGM funciona como E/S digital. La programacin se realiza en alto voltaje.

    BODEN Bit de Permiso para el Reset por Cada de Tensin1 = BOR activada0 = BOR desactivada

    PWRTE# Bit de permiso para el Timer de Conexin de Alimentacin1 = PWRT desactivado0 = PWRT activado

    WDTE Bit de Permiso del Timer de perro guardin1 = WDT activado0 = WDT desactivado

    FOSC1:0 Tipo de oscilador

    FOSC1 FOSC0 Tipo0 0 LP (Baja Potencia. De 35 a 200 kHz)0 1 XT (Estndar. De 100 kHz a 4 MHz)

    1 0 HS (Alta velocidad. Ms de 4 MHz)1 1 RC (Resistencia-Condensador)

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    29/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 29

    PALABRA DE IDENTIFICACIN

    Se trata de cuatro palabras de la memoria de programa que se hallancomprendidas entre la direccin 2000h y la 2003h y estn reservadas para queel usuario las pueda emplear en funciones de comprobaciones o checksums,

    cdigos de identificacin, nmeros de serie, fecha, modelo, lote, nmerossecuenciales o aleatorios, etc. Estas cuatro posiciones solo son accesibles en lalectura y escritura durante la operacin de programacin/ verificacin. Solo sedeben emplear los cuatro bits de menos peso de las palabras de identificacin.

    REINICIALIZACIN O RESET

    Los PIC 16F87X disponen de diversa maneras de reinicializarse.

    1 Reset por conexin de alimentacin. (POR: Power on Reset) El valor detensin de alimentacin Vdd sube entre 1,2 a 1,7 V.

    2 Activacin de la pata MCLR#. (nivel bajo en dicha pata durante unaoperacin normal)

    3 Activacin de la pata MCLR# estando el PIC en reposo (SLEEP)

    4 Reset provocado por desbordamiento del Perro Guardin en unaoperacin normal.

    5 Reset provocado por el desbordamiento del Perro Guardia durante elestado de reposo (SLEEP)

    6 Reset provocado por una cada de voltaje (BOR: Brown out Reset) Vdd

    baja entre 3,8 y 4,2 V.

    Los bits TO# y PD# del registro de Estado toman un valor determinado encada tipo de reset. Tambin los bits 0 y 1 del registro PCON, llamados BOR#y POR# respectivamente, sirven para especificar las causas de un reset.

    POR# BOR# TO# PD# TIPO DE RESET0 x 1 1 Conexin de alimentacin POR0 x 0 x Ilegal0 x x 0 Ilegal1 0 1 1 Por cada de tensin BOR1 1 0 1 Por WDT (operacin normal)1 1 0 0 Por WDT (modo SLEEP)1 1 u u Activacin normal MCLR#1 1 1 0 MCLR# en SLEEP o interrupcin para despertar de SLEEP

    Tras un Reset, el contador de programa queda cargado con el valor 000h entodos los casos, menos cuando se produce el desbordamiento del WDT ocuando se despierta del modo SLEEP por una interrupcin, en cuyos casos,PC se carga con el valor PC+1.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    30/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 30

    PERRO GUARDIAN (WDT: WATCHDOG TIMER)

    El WDT de los PIC16F87X es similar al del 16F84. Se trata de uncontador que funciona con los impulsos de su propio oscilador y que

    provoca un Reset cuando se desborda en funcionamiento normal. Si el

    desbordamiento se produce cuando el microcontrolador se halla en estadode Reposo, se despierta y sigue su comportamiento normal.

    Las instrucciones CLRWDT y SLEEP borran o ponen a cero el valor delWDT y el del Postdivisor. Si se ejecuta la instruccin CLRWDT y elPredivisor de Frecuencia est asignado al perro guardin, se borra, pero nocambia su configuracin.

    MODO DE REPOSO O BAJO CONSUMO

    Este funcionamiento se ejecuta con la instruccin SLEEP, igual que conel 16F84. Esta manera de trabajo se caracteriza por su bajo consumo, laslneas de E/S que se utilizaban mantienen su estado, las que no seempleaban reducen al mnimo su consumo, se detienen los temporizadores ytampoco opera el conversor A/D.

    Al entrar en modo de reposo, si estaba funcionando, el WDT se borra,pero sigue trabajando. Existen varias formas de despertar del modo SLEEP,y seguir ejecutando la instruccin PC+1:

    1- Activacin externa de la pata MCLR#.

    2- Desbordamiento del WDT, que sigue trabajando en reposo.

    3- Generacin de interrupcin por activacin de la pata RB0/INT, o porcambio de estado en las cuatro patas de menos peso de la Puerta B.

    4- Interrupcin originada por alguno de los nuevos perifricos de losPIC 16F87X tales como:

    a) Lectura o escritura en la puerta paralela PSP.b) Interrupcin del Timer 1.c) Interrupcin del mdulo CCP en modo captura.d) Disparo especial de Timer 1 funcionando en modo asncrono

    con reloj externo.e) Interrupcin en el mdulo de comunicacin SSP (Start/Stop).f) Transmisin o recepcin del MSSP modo esclavo (SPI/I2C).g) Transmisin o recepcin del USART.h) Fin de la conversin en el conversor A/D.i) Fin de operacin.

    j) Fin de escritura sobre EEPROM.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    31/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 31

    PROGRAMACIN DE LOS PIC 16F87X

    La posibilidad de programar a esta subfamilia de PIC en serie, permitegrabar en la memoria de cdigo el programa de trabajo, estando colocado elPic sobre el circuito o producto de aplicacin final. Esta caracterstica

    permite a los fabricantes construir y montar completamente la tarjeta decircuito impreso y dejar pendiente la grabacin del programa.

    La programacin en serie tpica, que se realiza con un Voltaje Alto de 12a 14 V aplicado por la pata MCLR#/Vpp requiere el uso de 5 patas del PIC:

    a) VDD = 5Vb) GND o Tierrac) Vpp = 12 a 14 V que se introducen por la pata MCLR#/Vppd) RB6 : Recibe los impulsos de reloj.e) RB7 : Lnea de datos con los bits en serie.Una gran aportacin esta gama de PIC es la programacin con Voltaje

    Bajo (LVP : Low Voltage Programming), que no requiere la tensin de 12 a14V. Para grabar en este modo hay que poner el bit LVP = 1, que reside enla Palabra de Configuracin y la pata RB3/PGM se debe conectar a nivelalto. Entonces por la pata MCLR#/Vpp se aplica la tensin VDD de 5Vmientras dura la operacin de grabado. Cuando no se opera en este modo de

    programacin se puede usar la pata RB3 como una lnea de E/S digital.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    32/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 32

    TEMPORIZADORES

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    33/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 33

    TIPOS Y CARACTERSTICAS GENERALES

    En la familia de los PIC 16F87X, disponen de tres temporizadores. ElTMR0, el TMR1 y el TMR2.

    En TMR0 es idntico al del 16F84, sus funciones ms representativas son:

    1 TMR0 es un Contador/Temporizador de 8 bits.

    2 Leble y escribible.3 Reloj interno o externo.

    4 Seleccin de flanco en el reloj externo.5 Predivisor de la frecuencia del reloj programable.

    6 Generacin de interrupcin opcional en el desbordamiento.

    El TMR1 se caracteriza por:

    1 TMR1 es un Contador/Temporizador de 16 bits.2 Leble y escribible.

    3 Seleccin de reloj interno o externo.4 Interrupcin opcional por desbordamiento de FFFFh a 0000h.

    5 Posible reinicializacin desde los mdulos CCP.

    El TMR2 tiene las siguientes caractersticas fundamentales:

    1 TMR2 es un Temporizador de 8 bits.2 Dispone de un Registro de Perodo de 8 bits (PR2)

    3 Leble y escribible.4 Predivisor de Frecuencia programable.

    5 Postdivisor de frecuencia programable.

    6 Interrupcin opcional al coincidir TMR2 y PR2.7 Posibilidad de generar impulsos al modo SSP.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    34/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 34

    ESTRUCTURA INTERNA Y FUNCIONAMIENTO DEL TMR1

    El TMR1 es el nico Temporizador/Contador ascendente con un tamao de16bits, lo que requiere el uso de 2 registros concatenados de 8 bits: TMR1h :

    TMR1L, que son los encargados de guardar el valor del montaje en cadamomento, cuando el valor llega hasta FFFFh se activa el sealizador TMR1IF y seregresa al valor inicial 0000h. Tambin si se desea se puede provocar una peticinde interrupcin.

    El valor contenido en TMR1H: TMR1L puede ser ledo o escrito y los impulsosque originan el contaje pueden provenir del exterior o de la frecuencia defuncionamiento del microcontrolador:

    El TMR1 es capaz de funcionar de 3 formas:

    1 Como temporizador

    2 Como contador sncrono

    3 Como contador asncrono

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    35/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 35

    REGISTRO DE CONTROL DEL TMR1 (T1CON)

    - - T1CKPS1 T1CKPS0 T1OSCEN T1SYNC# TMR1CS TMR1ON

    El funcionamiento del TMR1 esta gobernado por el valor con el que seprograman los bits del registro T1CON que ocupa la direccin 10h de la memoriaRAM.

    El bit TMR1ON gobierna el permiso o la prohibicin de funcionamiento delTMR1. Este bit es activo a nivel alto.

    El bit TMR1C selecciona la fuente de los impulsos de contage. Si vale 0 elige el relojinterno y si vale 1 elige el reloj externo que se aplica por las patas RC0 y RC1.

    Cuando los impulsos dependen de un reloj externo es preciso que el bit T1OSCENtenga el valor 1, en cuyo caso las patas RC0 y RC1 actan como entradas delOscilador externo. Si T1OSCEN vale = 0 los impulsos vendrn a travs de RC0.Enambos casos, el TIMER1 funciona como contados de elementos externos.

    El predivisor de frecuencia (preescaler) es un simple divisor de la frecuencia de losimpulsos que se aplican al TMR1 por 1, 2, 4 u 8. El rango de divisin lo eligen los

    bits T1CKPS1 y T1CKS0:

    T2CKPS1 T2CKPS0 RANGO DEL PREDIVISOR0 0 1:10 1 1:21 0 1:41 1 1:8

    El bit T1SYNC# determina la posible sincronizacin o no de los impulsos delreloj externo con los del reloj interno, segn valga 0 o 1 respectivamente.

    El TMR1 Puede generar una peticin de interrupcin cuando se produce elsobrepasamiento del contaje. En esta situacin se pone automticamente a 1 el flagTMR1F, que es el bit 0 del registro especifico PIR1. El permiso de la prohibicin deinterrupcin del TMR1 est controlada por el bit TMR1IE del PIE1.

    Cuando el modulo de CCP est configurado como comparador para generar undisparo especial, dicha seal resetea el TMR1. Para aprovechar esta caracterstica elTMR1 debe estar configurado en modo temporizador o contador sncrono. En otro casono se produce el Reset.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    36/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 36

    FUNCIONAMIENTO Y PROGRAMACION DEL TMR2

    Se trata de un temporizador ascendente de 8 bits, que leer y escribir, y quetambin puede realizar funciones especiales para la puerta serie sncrona(SPP) y para los mdulos de captura y comparacin (CCP)

    La seal de TMR2 es interna con valor de Fosc/4, y antes de ser aplicadapasa por un predivisor de frecuencia con rangos de 1:1, 1:4, 1:16. La salida pasa por unpostdivisor con rangos de 1:1 a 1:16.

    Al entrar el microcontrolador en SLEEP, el TMR2 deja de funcionar porque noexiste Fosc al pararse el oscilador.

    Para controlar el funcionamiento de TMR2 se utiliza el registro T2CON.

    - TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2SCKPSI T2SCKPSO

    Los bits 1 y 0 del T2CON sirven para seleccionar el rango de divisin del predivisor deimpulsos de la siguiente forma:

    T2CKPS1 T2CKPS0 RANGO DEL PREDIVISOR0 0 1:10 1 1:41 x 1:16

    El bit TMR2CON sirve para permitir o prohibir el funcionamiento del TMR2. Elbit de ms peso no es significativo y los cuatro bits restantes determinan el rango por elque divide la frecuencia el postdivisor:

    TOUTPS3-TOUTPS0 RANGO DEL POSTDIVISOR0000 1:10001 1:20010 1:3.... ....

    1111 1:16

    El sealizador de desbordamiento del TMR2 es el bit 1 del registro PIR1. El predivisor y el postdivisor se ponen a 0 al escribir el T2CON o con un Reset. Sinembargo, al escribir en T2CON no se borra el TMR2, pasa a valer 0 al hacer un Reset.El TMR2 tiene asociado un registro de periodo PR2. Cuando el valor del contaje delTMR2 coincide con el valor cargado en PR2 se genera un impulso en la salida EQ y seresetea el TMR2.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    37/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 37

    CAPTURA, COMPARACINY MODULACIN DE

    ANCHURA DE PULSOS

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    38/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 38

    INTRODUCCIN A LOS MDULOS CCP

    Los microcontroladores PIC 16F87X disponen de dos mdulos CCP,llamados CCP1 y CCP2, que solo se diferencian en el Disparo Especial.

    Realizan tres funciones especiales:

    1 Modo captura: una pareja de registros de un mdulo CCPx captura el

    valor que tiene el TMR1 cuando ocurre un evento especial en la pataRC2/CCP1 o en la RC1/T1OSCI/CCP2.

    2 Modo comparacin: se compara el valor de 16 bits del TMR1 con otrovalor cargado en una pareja de registros de un mdulo CCPx y cuando

    coinciden se produce un evento en la pata RC2/CCP1 o en la

    RC1/T1OSCI/CCP2.3 Modo modulacin de anchura de pulsos (PWM): dentro del intervalo

    del periodo de un impulso controla la seal en que la salida vale nivelalto.

    El mdulo CCP1 utiliza un registro de trabajo de 16 bits, que estformado con la concatenacin de los registros CCPR1H, CCPR1L. El registro decontrol del mdulo CCP1 es el CCP1CON. El modulo CCP2 tiene como registros detrabajo a CCPR2H-CCPR2L y como registro de control a CCP2CON. Las parejas deregistros son las encargadas de capturar el valor del TMR1, de comparar el valor quetiene con el TMR1 o, en el PWM, de modular la anchura del impulso.

    REGISTRO CCPxCON (x puede ser 1 0 2)

    - - CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    39/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 39

    MODO CAPTURA

    La pareja CCPxH-L del mdulo CCPx captura el valor de 16 bits que contiene elTimer1 cuando sucede un evento en la pata RC/CCPx de la Puerta C, que previamenteha sido configurada como entrada poniendo a 1 el bit del registro TRISC.

    Los eventos que pueden ocurrir sobre la pata RCy/CCPx para producir la capturadel valor del TMR1 sobre la pareja de registros CCPxH-L son:

    1 Un flanco ascendente2 Un flanco descendente3 Cada 4 flancos ascendentes4 Cada 16 flancos ascendentes

    Los 4 bits CCP1M3-0 del registro CCP1CON seleccionan el evento adecuado enel mdulo CCP1 y o a su vez en el CCP2.

    Al efectuar la captura se activa el sealizador CCP1IF en el registro PIR1.Adems, si se pone a 1 el permiso de interrupcin PIE1 , se genera una

    peticin de interrupcin cuando se carga CCPR1H-L el valor del Timer1.

    Cuando se emplea el mdulo CCP1 en modo Captura, el Timer1 debe estarconfigurado para trabajar como temporizador o como contador sncrono. Nunca enmodo asncrono.

    Si se fueran a cambiar las configuraciones del modulo de captura, convendradetener o desactiva este antes para as evitar que se produzcan falsas interrupcionesdurante la operacin.

    Cuando se desactiva el mdulo CCP o deja de funcionar en modo captura seborra la codificacin del predivisor de frecuencia que determinan los bits CCP1M3-0.

    Una aplicacin muy interesante del modo captura puede ser la medicin de los

    intervalos de tiempo que existen entre los impulsos que llegan a la pata RC2/CCP1, quese halla configurada como entrada. El TMR1 debe trabajar como entrada de relojexterno sincronizada.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    40/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 40

    MODO COMPARACIN

    En esta forma de trabajo, la pareja de registros CCPR1H-L compara sucontenido de forma continua, con el valor del TMR1. Cuando coinciden ambos valores,

    la Pata Rc2/CCP1, que se halla configurada como salida, le acontece uno de lossiguientes eventos de acuerdo con la programacin del los bits CCP1M3-0:

    1 Pasa a nivel alto2 Pasa a nivel bajo3 No cambia su estado pero se produce una interrupcin.

    Al coincidir los valores TMR1 con la pareja de registros CCPR1H-L se pone a 1el sealizador CCP1IF.

    El TMR1 debe trabajar en modo temporizador o contador sncrono, nunca enmodo asncrono.

    Si el bit de permiso de interrupcin est a 1, cuando coinciden los valoresmencionados, se origina una peticin de interrupcin.

    Si con los bits CCP1M3-0 se selecciona el modo de trabajado de Disparoespecial, el mdulo CCP1 pone a 0 el TMR1 y el CCPR1 funciona como un registro de

    periodo capaz de provocar peridicamente interrupciones. En ese modo de disparoespecial, el CCP2 se pone a 0 y el TMR1 y, adems, inicia una conversin en elconversor A/D, con lo que tambin y con carcter peridico, pueden realizarseconversiones A/D sin el control del programa de instrucciones.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    41/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 41

    MODO DE MODULACIN DE ANCHURA DE PULSOS (PWM)

    Con este modo de trabajo, se consiguen impulsos lgicos cuya anchura del nivelalto es de duracin variable, que son de enorme aplicacin en el control de dispositivostan populares como los motores y los triacs.

    La pata RC2/CCP1 est configurada como salida y bascula entre los niveles lgicos 0 y1 a intervalos variables de tiempo. Lo que se intenta es obtener un pulso cuyo nivel altotenga una anchura variable dentro del intervalo del periodo de trabajo.

    Cuando se trabaja con una precisin de 10 bits, los 2 bits CCP1CON seconcatenan con los 8 de CCPR1L y, de la misma forma, los 8 bits de ms peso delTMR2 se concatenan con los 2 bits de menos peso del reloj interno.

    El tiempo que dura el perodo de la onda depende del valor cargado en PR2,segn la frmula siguiente:

    Perodo = [(PR2) + 1] 4 Tos Valor Predivisor TMR2

    Cuando el valor del TMR2 coincide con el del PR2 suceden 3 acontecimientos:

    1 Se borra el TMR22 La pata RC2/CCP1, se pone a 1.3 El valor de CCPR1L, se carga en CCPR1H

    El tiempo que la pata de salida est a nivel alto, que es la anchura del impuso,depende del contenido cargado en CCP1R y de los 2 bits del CCP1CON , cuandose trabaja con una precisin de 10 bits.

    Anchura de impulsos = (CCPR1L:CCP1CON) Tosc Valor Predivisor TMR2

    El valor CCPR1:CCP1CON puede cargarse en cualquier momento, puestoque el mismo no se traspasa a CCPR1H y se compara hasta que coinciden PR2 conTMR2. En el modo PWM el registro CCPR1L solo puede ser ledo.

    Los pasos a seguir para realizar la configuracin del modo PWM son lossiguientes:

    1 Asignar el periodo cargando el oportuno valor en PR2.2 Asignar la anchura del pulso cargando el registro CCP1R y CCP1CON3 Configurar la lnea RC2/CCP1 como salida.

    4 Asignar el valor del predivisor y activar el TMR2 escribiendo el T2CON.5 Configurar el Mdulo CCP1 en modo PWM

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    42/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 42

    EL CONVERSORA/D

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    43/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 43

    PRESENTACIN DEL CONVERSOR ANALGICO / DIGITAL

    Los microcontroladores PIC 16F87x poseen un conversor A/D de 10 bitsde resolucin y 5 canales de entrada en los modelos con 28 patas y 8 canales

    para los de 40 patas.

    La resolucin que tiene cada bit procedente de la conversin tiene unvalor que es funcin de la tensin de referencia de acuerdo con la siguientefrmula:

    Resolucin = (Vref+ - Vref-) / 1.024 = Vref / 1.024

    Por ejemplo, si Vref+ es 5V y Vref- es 0V, la resolucin ser de 4,8 mVpor bit. La tensin de referencia determina los lmites mximo y mnimo de la

    tensin analgica que se puede convertir. El voltaje diferencial mnimo es de 2V

    A travs del canal de entrada seleccionado, se aplica la seal analgica aun condensador de captura y mantenimiento y luego se introduce al conversor, elcual proporciona un resultado digital de 10 bits de longitud usando la tcnica deaproximaciones sucesivas.

    El conversor A/D es el nico dispositivo que puede funcionar en reposo,para ello el reloj del conversor deber conectarse al oscilador RC interno.

    REGISTROS DE TRABAJO

    El funcionamiento del conversor A/D requiere la manipulacin de 4registros:

    1 ADRESH: Parte alta del resultado de la conversin.2 ADRESL: Parte baja del resultado de la conversin.3 ADCON0: Registro de control 0.4 ADCON1: Registro de control 1.

    En la pareja ADRESH:ADRESL, se deposita el resultado de laconversin, que al estar compuesta por 10 bits, solo son significativos 10 de los

    bits de dicha pareja.

    El registro ADCON0 controla la operacin del C A/D, mientras elADCON1 sirve para configurar las patas de la Puerta como entradas analgica oE/S digitales.

    REGISTRO ADCON0

    ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE# - ADON

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    44/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 44

    REGISTRO ADCON1

    ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0

    Los bits ACON sirven para seleccionar la frecuencia reloj que seemplea en la conversin, con la siguiente asignacin:

    ADCS1:0 FRECUENCIA00 Fosc/201 Fosc/810 Fosc/3211 FRC (Procede del oscilador RC interno)

    Se designa como TAD el tiempo que dura la conversin de cada bit en elcaso de trabajar con valores digitales de 10 bits. Se requiere un tiempo mnimo

    de 12TAD. El valor de TAD se selecciona por software mediante los bitsADCS1:ADCS0 y en los PIC 16F87x nunca debe ser menor de 1,6microsegundos.

    ADCS1:0 TAD00 2 Tosc01 8 Tosc10 32 Tosc11 Oscilador RC interno en el C A/D

    Los bits CHS2-0 seleccionan el canal por el que se introduce la seal aconvertir, de acuerdo con el siguiente cdigo:

    CHS2-0 CANAL000 Canal 0 (RA0/AN0)001 Canal 1 (RA1/AN1)010 Canal 2 (RA2/AN2)011 Canal 3 (RA3/AN3)100 Canal 4 (RA5/AN4)101 Canal 5 (RE0/AN5). Los PIC de 28 patas no la tienen110 Canal 6 (RE1/AN6). Los PIC de 28 patas no la tienen

    111 Canal 7 (RE2/AN7). Los PIC de 28 patas no la tienen

    El bit GO/DONE# es el bit de estado de la conversin. Ponindolo a 1se inicia la conversin y mientras est a 1 est realizndose la conversin.Cuando GO/DONE# pasa a 0 confirma el final de la conversin y la puesta delresultado en la pareja de registros ADRESH:L.

    El bit ADON sirve para activar el C A/D ponindolo a 1 y paradesactivar su funcionamiento, ponindolo a 0.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    45/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 45

    ESTRUCTURA INTERNA Y CONFIGURACIN DEL C A/D

    El bit de menos peso (ADFM) del registro ADCON1 selecciona elformato del resultado de la conversin. Si vale 1, el resultado est justificado enel registro ADRESH, que tiene sus 6 bits de ms peso a 0; mientras que si vale 0

    la justificacin se hace sobre el registro ADRESL, que tiene sus 6 bits de menospeso a 0. Esto significa que los 16 bits que forman la unin de los dos registros,unas veces tienen a 0 los 6 bits de ms peso y otras los 6 bits de menos peso.

    ADFM=1 ADMF=0

    7 1 0 7 0 7 0 7 6 0

    ADRESH ADRESL ADRESH ADRESL

    Los restantes 4 bits (PCFG3-0) de ADCON1 se usan para configurar las patitas de los canales de entrada al conversor como analgicas o como E/Sdigitales, de acuerdo con la siguiente tabla:

    PCFG3-0AN7/RE2

    AN6/RE1

    AN5/RE0

    AN4/RA5

    AN3/RA3

    AN2/RA2

    AN1/RA1

    AN0/RA0

    VREF+ VREF-CHAN/REFS

    0000 A A A A A A A A VDD VSS 8/00001 A A A A VREF+ A A A RA3 VSS 7/10010 D D D A A A A A VDD VSS 5/00011 D D D A VREF+ A A A RA3 VSS 4/10100 D D D D A D A A VDD VSS 3/00101 D D D D VREF+ D A A RA3 VSS 2/1011x D D D D D D D D VDD VSS 0/01000 A A A A VREF+ VREF- A A RA3 RA2 6/21001 D D A A A A A A VDD VSS 6/01010 D D A A VREF+ A A A RA3 VSS 5/11011 D D A A VREF+ VREF- A A RA3 RA2 4/21100 D D D A VREF+ VREF- A A RA3 RA2 3/21101 D D D D VREF+ VREF- A A RA3 RA2 2/2

    1110 D D D D D D D A VDD VSS 1/01111 D D D D VREF+ VREF- D A RA3 RA2 1/2

    RESULTADO DE 10 BITS

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    46/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 46

    Pasos a seguir para realizar una conversin con el mdulo C A/D:

    1. Configurar el mdulo C A/D

    Configurar las patas que actuarn como entradas analgicas, las quetrabajan como E/S digitales y las usadas para la tensin de referencia(ADCON1).

    Seleccionar el reloj de la conversin (ADCON0) Seleccionar el canal de entrada A/D (ADCON0) Activar el mdulo A/D (ADCON0)

    2. Activar, si desea, la interrupcin escribiendo sobre PIE1 y PIR1

    Borrar el sealizador ADIF. Poner a 1 el bit ADIE Poner a 1 los bits habilitadores GIE y PIE

    3. Tiempo de espera para que transcurra el tiempo de adquisicin

    4. Inicio de la conversin

    Poner a 1 el bit GO/DONE# (ADCON0)

    5. Tiempo de espera para completar la conversin A/D que puede detectarse

    Por la exploracin del bit GO/DONE#, que al completarse la conversinpasa a valer 0.

    Esperando a que se produzca la interrupcin si se ha programado, alfinalizar la conversin.

    Aunque no se permita interrupcin, el sealizador ADIF se pondr a 1 alfinalizar la conversin.

    6. Leer el resultado de los 10 bits vlidos de ADRSH:L y borrar el flag ADIF

    7. Para una nueva conversin regresar al paso 1 o al 2. El tiempo de

    conversin por bit est definido por TAD. Se exige esperar un mnimo de 2TADpara reiniciar una nueva conversin

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    47/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 47

    MDULO DE COMUNICACIONESSERIE SNCRONA MSSP

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    48/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 48

    INTRODUCCIN

    La comunicacin serie es una forma muy apreciada de transferir datosdigitales entre sistemas y circuitos integrados, dada la reducida cantidad delneas que precisa.

    En los PIC16F87X se ha implantado el mdulo MSSP (MasterSynchronous Serial Port), que proporciona una excelente interfaz decomunicacin de los microcontroladores con otros microcontroladores ydiversos perifricos, entre los que destacan la memoria EEPROM serie, losconversores A/D, los controladores de displays, etc.

    Adems el mdulo MSSP admite dos de las alternativas ms usadas en lacomunicacin serie sncrona:

    1 SPI (Serial Peripheral Interface).2 I2C (Inter Integrated Circuit).

    La comunicacin serie en modo SPI la utilizan principalmente lasmemorias (RAM y EEPROM) y utiliza tres lneas para llevarla a cabo. En elmodo I2C slo se emplean dos lneas y, recientemente, ha conseguido unaimportante implantacin en la comunicacin de circuitos integrados, existiendoen el mercado todo tipo de perifricos capaces de trabajar con este protocolo.

    El mdulo MSSP consta bsicamente de dos registros: el SSPSR, que es un

    registro de desplazamiento que transforma la informacin serie en paralelo

    y viceversa, y el registro SSPBUF, que acta como buffer de la informacinque se recibe o transmite.

    El funcionamiento del mdulo MSSP es muy sencillo. En transmisin, elbyte que se quiere transmitir se carga en el registro SSPBUF a travs del bus dedatos interno y automticamente se pasa al registro SSPSR, que va desplazando

    bit a bit el dato, sacndolo ordenadamente al exterior al ritmo de los impulsos

    del reloj. En recepcin, los bits van entrando al ritmo del reloj por una pata y sevan desplazando en el SSPSR hasta que lo llenan, en cuyo momento lainformacin se traspasa al SSPBUF, donde queda lista para su lectura. Estedoble almacenamiento de datos recibidos, permite iniciar la recepcin de unnuevo dato antes de que se haya ledo el ltimo.

    Cuando se han recibido 8 bits durante la recepcin en SSPSR, se traspasadicha informacin a SSPBUF y entonces el bit sealizador BF (Buffer-Full) se

    pone a 1, al igual que el flag de interrupcin SSPIF. Cualquier escritura en elSSPBUF se ignora durante la transferencia de informacin y se sealiza

    poniendo a 1 el bit WCOL. Recae la responsabilidad del programador pasar el

    bit WCOL a 0 una vez completada la escritura en SSPBUF.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    49/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 49

    MODO SPI

    Permite la transferencia de datos de 8 bits en serie, que pueden sertransmitidos y recibidos de forma sncrona y simultnea. Para el establecimientode la comunicacin se utilizan tres lneas:

    1 SDO (Serial Data Out): Salida de datos en serie.2 SDI (Serial Data In): Entrada de datos en serie.3 SCK (Serial Clock): Reloj de sincronizacin.

    Puede ser necesario utilizar una cuarta lnea de control ms cuando elPIC que se utiliza trabaja en modo esclavo. En este caso, la pata SS# (seleccinde esclavo) se debe activar a tierra. Las 4 lneas que utilizan se corresponden con

    las patas multifuncin RC3/SDO, RC4/SDI, RC5/SDK y RA5/SS#.

    La conexin habitual de PIC maestro se suele realizar con circuitos dememoria con el objeto de ampliar su capacidad. La lnea SDO del maestro secorresponde con las SDI de los esclavos y la lnea SCK por la que circulan losimpulsos de reloj, siempre parten del maestro, que es el encargado de generar ycontrolar la sincronizacin.

    Si, por ejemplo, actuase como esclavo un chip de memoria RAM de256x8 de tamao, la comunicacin SPI la iniciara el maestro enviando por lalnea SDO un byte con la direccin de la memoria a acceder, seguido de otro

    byte que especificara la operacin lectura/escritura y un tercero que contendrael dato a escribir en caso de que se tratase de una operacin de escritura. En casode que se tratase de una de lectura, despus de enviar los dos bytes iniciales,quedara a la espera del byte que sacara el esclavo por su lnea SDO y que seintroducira al maestro por su lnea SDI. Si fuese una memoria con ms

    posiciones, la direccin se tendra que especificar en ms de un byte.

    Cuando el PIC trabaja como maestro hay que programar la lneaRC3/SDO como salida, la lnea RC4/SDI como entrada y la lnea RC5/SCKtambin como salida. Si actuase como esclavo, la lnea RC5/SCK debera

    configurarse como entrada y la RA5/SS# debera conectarse a tierra.SS SS

    PIC MAESTRO

    SDO

    SDI

    SCK

    PIC 16F87x

    RC3/SDO

    RC4/SDI

    RC5/SCK

    RA5/SS#PIC esclavo 1

    SDI SDO CLK

    RA5/SS#PIC esclavo 1

    SDI SDO CLK

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    50/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 50

    MODO I2C

    El protocolo I2C fue desarrollado porPhilips para cubrir sus propiasnecesidades en la implementacin de diversos productos electrnicos querequeran una elevada interconexin de circuitos integrados. El protocolo I2C

    (Inter-Integrated Circuits) utiliza nicamente dos lneas para la transferencia deinformacin entre los elementos que se acoplan al bus. Una de dichas lneas sededica a soportar los datos, es bidireccional y se llama SDA; la otra lleva losimpulsos de reloj para la sincronizacin, es unidireccional y recibe el nombre deSCL. Los impulsos de reloj siempre los genera el maestro y tienen la funcin desincronizar las transferencias con todos los esclavos colgados a las dos lneas.

    SS SSPIC MAESTRO

    SDA

    SCL

    Concepto del bus I2C

    Dos lneas, SDA (datos) y SCL (reloj), transportan la informacin entrelos diferentes dispositivos conectados al bus. Cada dispositivo se identifica poruna nica direccin y puede transmitir o recibir dependiendo de la funcin quese vaya a realizar. Un controlador de LCD, por ejemplo, slo recibe mientrasque una memoria de tipo RAM puede transmitir o recibir datos en funcin deque se vaya a leer o a escribir.

    Los dispositivos pueden clasificarse en Maestro (master o principal) oEsclavo (slave o secundario). El maestro es el que inicia la transferencia dedatos y genera la seal de reloj. Cualquiera de los dispositivos direccionados porun maestro se considera esclavo.

    El I2C es un bus multi-maestro; puede haber ms de un maestroconectado y controlando el bus. Normalmente se trata de microcontroladores omicrocomputadores.

    PIC 16F87x

    RC4/SDA

    RC3/SCL

    PIC esclavo 1SDA SCL

    PIC esclavo 1SDA SCL

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    51/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 51

    Direccionamiento del bus I2C

    - El primer byte que enva el maestro tras la condicin de inicio, esel cdigo que determina el esclavo (7 bit de mas peso)

    - Cdigo 0000 0000 de llamada general

    - Bit de menos peso (R/W#), determina si se realiza una operacinde lectura o escritura

    Para activar el bus I2C, poner el bit SSPEN = 1, que es el bit 5 delregistro SSPCON

    Previamente, configurar RC3/SCL y RC4/SDA como entradas

    Bits de Control del bus I2C

    1. SSPCON Registro de control

    2. SSPCON2 Registro de control 2

    3. SSPSTAT Registro de estado

    4. SSPBUF Buffer para los datos

    5. SSPSR Registro de desplazamiento (no accesible)

    6. SSPADD Registro de direccin

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    52/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 52

    SSPCON

    WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0

    WCOL se pone a 1 si se intenta escribir en SSPBUF encondiciones no vlidas.

    SSPOV se pone a 1 si hay desbordamiento en SSPBUF

    SSPEN configuracin de la patas RC3/SCL y RC4/SDA1 = la puerta serie queda configurada con SCL y SDA0 = RC3 y RC4 como entradas y salidas digitales

    CKP para activar el reloj en modo esclavo

    SSPM3-0 seleccin de la frecuencia del reloj

    SSPM3-0 FRECUENCIA DEL RELOJ0000 Reloj = FOSC/40001 Reloj = FOSC/160010 Reloj = FOSC/610011 Reloj = salida del TMR2/21000 Reloj = (SSPADD + 1) FOSC

    SSPCON2

    GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN

    GCEN solo se usa en modo esclavo

    ACKSTAT si se pone a 1 indica que se ha recibido el bit ACK

    ACKDT bit de reconocimiento de recepcin en modo maestro1 = el maestro NO ha trasmitido el dato

    0 = el maestro SI ha trasmitido el dato

    ACKEN si vale 1 se inicia la secuencia de generacin de lacondicin de reconocimiento

    RCEN si vale 1 se habilita el modo de recepcin del maestro

    PEN si vale 1 se genera la condicin de parada de SCL y SDA

    RSEN si vale 1 se inicia la repeticin de la condicin de inicio

    SEN si vale 1 se inicia la condicin de inicio

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    53/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 53

    SSPSTAT

    SMP CKE D/A# P S R/W# UA BF

    SMP bit de muestreo1 = los bits de datos se muestran alfinaldel periodo0 = los bits de datos se muestran a mitaddel periodo

    CKE nivel de SCL y SDA en modo multimaestro1 = a nivel alto SCL y SDA en modo maestro y esclavo0 = se configuran segn especificaciones del I2C

    D/A# indica si el dato recibido es de informacin o direccin1 = de informacin0 = de direccin

    P se pone a 1 cuando detecta la llegada del bit STOP

    S se pone a 1 cuando detecta la llegada del bit START

    R/W# bit de seleccin de lectura o escritura1 = lectura (READ)0 = escritura (WRITE)

    UA tipo de direccionamiento1 = direccin de 10 bits

    0 = direccin de 7 bits BF sealizador del buffer de datos

    1 = tiene un dato y la transmisin est en proceso0 = no tiene ningn dato

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    54/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 54

    USART (SCI)

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    55/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 55

    COMUNICACIN SERIE ASNCRONA

    Los PIC 16F87x contienen un mdulo MSSP con dos puertas paracomunicacin serie sncrona, o sea, con seal de reloj. Tambin disponen deun mdulo USART, capaz de soportar la comunicacin serie sncrona y

    asncrona.

    El USART, llamado SCI (Serial Comunication Interface), puedefuncionar como un sistema de comunicacin full-duplex o bidireccionalasncrono, adaptndose a multitud de perifricos y dispositivos que transfiereninformacin de esta forma, tales como el monitor CRT o el ordenador PC.Tambin puede trabajar en modo sncrono unidireccional o half-duplex parasoportar perifricos como memorias, conversores, etc.

    Modos de trabajo del USART:

    1. ASNCRONA (Full duplex, bidireccional).2. SNCRONA-MAESTRO (Half duplex, unidireccional).3. SNCRONA-ESCLAVO (Half duplex, unidireccional).

    En el modo asncrono las transferencias de informacin se realizan sobredos lneas TX (transmisin) y RX (recepcin), saliendo y entrando los bits pordichas lneas al ritmo de una frecuencia controlada internamente por el USART.En el modo sncrono, la comunicacin se realiza sobre dos lneas, la DT quetraslada en los dos sentidos los bits a la frecuencia de los impulsos de reloj quesalen por la lnea CK desde el maestro. En ambos modos, las lneas decomunicacin son las dos de ms peso de la Puerta C: RC6/TX/CK yRC7/RX/DT.

    En esta forma de comunicacin serie, se usa la norma RS-232-C, dondecada palabra de informacin o datos se enva independientemente de los dems.Suele constar de 8 o 9 bits y van precedidos por un bit de START (inicio) ydetrs de ellos se coloca un bit de STOP (parada), de acuerdo con las normas delformato estndar NRZ (NonReturn-to-Zero). Los bits se transfieren a unafrecuencia fija y normalizada.

    Los cuatro bloques que configuran la arquitectura de USART en modoasncrono son:

    1 Circuito de muestreo.2 Generador de baudios.3 Transmisor asncrono.4 Receptor asncrono.

    El circuito de muestreo acta sobre la pata RC7/RX/DT, que es pordonde se recibe el bit de informacin o control y se encarga de muestrear tresveces su valor, para decidir este por mayora.

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    56/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 56

    PROGRAMAS (ASM)

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    57/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 57

    PROGRAMA 1

    Lee el estado de los 6 interruptores del entrenador (RA5-RA0) y reflejar el nivellgico de los mismos sobre los leds RB5-RB0 conectados a la puerta B

    List p=16F876include "P16F876.INC"

    org 0x05

    Inicio clrf PORTB ;Borra el Puerto B bsf STATUS,RP0 ;Selecciona banco 1clrf TRISB ;Puerta B se configura como salidamovlw 0x06movwf ADCON1 ;Puerta A configurada como digitalmovlw b'00111111'movwf TRISA ;Puerta A se configura como entrada

    bcf STATUS,RP0 ;Selecciona banco 0Aqui movf PORTA,W ;Leer las entradas RA0-RA5

    movwf PORTB ;Reflejar en las salidasgoto Aqui ;Bucle de lectura

    end

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    58/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 58

    PROGRAMA 2

    Control de los leds RB0 y RB1 desde el interruptor RA0. RB0 refleja el estado de RA0,RB1 el complemento de RA0

    List p=16F876include "P16F876.INC"

    org 0x05

    Inicio clrf PORTB ;Borra el Puerto B bsf STATUS,RP0 ;Selecciona banco 1clrf TRISB ;Puerta B se configura como salidamovlw 0x06movwf ADCON1 ;Puerta A como entrada digitalmovlw b'00011111'

    movwf TRISA ;Puerta A se configura como entrada bcf STATUS,RP0 ;Selecciona banco 0

    Aqui btfsc PORTA,0 ;RA0 = 1 ??goto RA0_es_1 ;Si bcf PORTB,0 ;No, desconecta RB0 bsf PORTB,1 ;Conecta RB1goto Aqui ;Buble

    RA0_es_1 bsf PORTB,0 ;Activa RB0 bcf PORTB,1 ;Activa RB1goto Aqui ;Bucle

    end

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    59/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 59

    PROGRAMA 3

    Se trata de realizar una rotacin secuencial en el encendido de cada led conectados a lapuerta B del entrenador. Si RA0 = 0, la rotacin ser de derecha a izquierda y viceversa.Cada led permanece encendido 0.25 segundos (250 mS)

    List p=16F876 ;Tipo de procesadorinclude "P16F876.INC" ;Definiciones de registros internos

    Contador equ 0x20 ;Variable para la temporizacin

    org 0x05goto Inicio

    ;--------------------------------------------------------------------------------------------------------------------;Delay es una rutina que realiza una temporizacin de 250 mS que es el tiempo en que han;de permanecer encendido cada uno de los leds. Se basa en repetir 25 veces la temporizacin;de 10mS que se emple en el ejercicio anterior.

    Delay movlw b10movwf Contador ;Carga el contador con 10

    Delay_0 bcf INTCON,T0IF ;Desconecta el flag del TMR0

    movlw b195movwf TMR0 ;carga el TMR0 con 195

    Delay_1 btfss INTCON,T0IF ;Rebosamiento del TMR0 ??goto Delay_1 ;No. Todava no han pasado los 1* mSdecfsz Contador,F ;Decrementa contador.

    goto Delay_0 ;Todava no, temporiza otros 10 msreturn ;Ahora si

    ;--------------------------------------------------------------------------------------------------------------------Inicio clrf PORTB ;Borra el Puerto B

    bsf STATUS,RP0 ;Selecciona banco 1clrf TRISB ;Puerta B se configura como salidamovlw 0x06movwf ADCON1 ;Puerta A digitalmovlw b'00011111'movwf TRISA ;Puerta A se configura como entradamovlw b'00000111'movwf OPTION_REG ;Preescaler de 256 para el TMR0 bcf STATUS,RP0 ;Selecciona banco 0

    bsf STATUS,C ;Activa el carryLoop call Delay ;Temporiza 250mS btfsc PORTA,0 ;Est a 0 RA0 ??goto A_Dcha ;No, rotacin a derecha

    A_Izda rlf PORTB,F ;Si, rotacin a izquierdagoto Loop

    A_Dcha rrf PORTB,F ;Rotacin a derechagoto Loop

    end

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    60/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 60

    PROGRAMA 4

    La interrupcin del TMR0.

    Se trata de comprobar la interrupcin provocada por el TMR0. El programa lee el

    estado de los interruptores conectados a RA0 y RA4 para reflejarlo en los leds conectados a RB0y RB4 respectivamente. Al mismo tiempo el TMR0 genera una interrupcin cada 0.05 seg. (10mS) que se repetir 50 veces con objeto de hacer intermitencia de 500 mS sobre el led conectadoa RB7.

    List p=16F876 ;Tipo de procesadorinclude "P16F876.INC" ;Definiciones de registros internos

    Contador equ 0x020 ;Variable para la temporizacin

    org 0x04 ;Vector de interrupcingoto Inter

    org 0x05goto Inicio

    Inter bcf INTCON,T0IF ;Repone flag del TMR0decfsz Contador,F ;Decrementa el contador. Ha habido 50

    interrupciones ??goto Seguir ;No, no han pasado los 500 mS

    Con_si_0 movlw b50movwf Contador ;Repone el contador nuevamente para

    ;contar 50 interrupcionesmovlw b'10000000'xorwf PORTB,F ;RB0 cambia de estado

    Seguir movlw b195movwf TMR0 ;Repone el TMR0 con 195retfie ;Retorno de interrupcin

    Inicio clrf PORTB ;Borra el Puerto B bsf STATUS,RP0 ;Selecciona banco 1clrf TRISB ;Puerta B se configura como salidamovlw 0x06movwf ADCON1 ;Puerta A digitalmovlw b'00111111'movwf TRISA ;Puerta A se configura como entradamovlw b'00000111'movwf OPTION_REG ;Preescaler de 256 para el TMR0

    bcf STATUS,RP0 ;Selecciona banco 0

    ;El TMR0 se carga con 195. Con un preescaler de 256 y a una frecuencia de 20MHz se obtiene;una interrupcin cada 10mS. Se habilita la interrupcin del TMR0.

    movlw b195movwf TMR0 ;Carga el TMR0 con 195movlw b50movwf Contador ;N de veces a repetir la interrupcinmovlw b'10100000'movwf INTCON ;Activa la interrupcin del TMR0

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    61/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 61

    ;Este es el cuerpo principal del programa. Consiste en leer constantemente el estado de RA0 y;RA1 para visualiza sobre RB0 y RB1.

    Loop btfsc PORTA,0 ;Testea el estado de RA0goto RA0_ES_1 bcf PORTB,0 ;Desactiva RB0

    goto TEST_RB1RA0_ES_1 bsf PORTB,0 ;Activa RB0TEST_RB1 btfsc PORTA,1 ;Testea el estado de RA1

    goto RA1_ES_1 bcf PORTB,1 ;Desactiva RB1goto Loop

    RA1_ES_1 bsf PORTB,1 ;Activa RB1goto Loop

    end

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    62/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 62

    PROGRAMA 5

    La interrupcin externa RBO/INT.

    Se trata de comprobar la interrupcin externa que se aplica a travs del pin RBO/INT.

    El programa principal est en un ciclo cerrado en modo SLEEP (standby de bajo consumo).Cada vez que se detecta un flanco descendente en RB0 se provoca una interrupcin cuyotratamiento hace iluminar las salidas RB7-RB1 durante 1 seg.

    List p=16F876 ;Tipo de procesadorinclude "P16F876.INC" ;Definiciones de registros internos

    Contador equ 0x20 ;Variable para la temporizacin

    org 0x04 ;Vector de interrupcingoto Inter

    org 0x05goto Inicio

    Inter bcf INTCON,INTF ;Repone flag de la interrupcin exetrnamovlw b'11111110'movwf PORTB ;Activa las salidasmovlw b100movwf Contador ;Inicia contador de temporizaciones de 10

    ;ms con 100 (1")Seguir bcf INTCON,T0IF ;Reponer flag del TMR0

    movlw b195movwf TMR0 ;Repone el TMR0 con 195

    Delay_10ms btfss INTCON,T0IF ;Han transcurrido 10 mS ??

    goto Delay_10ms ;No, esperardecfsz Contador,F ;Decrementa el contador.goto Seguir ;Noclrf PORTB ;Si, han pasado 1", se desconecta la salidaretfie ;Retorno de interrupcin

    Inicio clrf PORTB ;Borra el Puerto B bsf STATUS,RP0 ;Selecciona banco 1movlw b'00000001'movwf TRISB ;RB7-RB1 salidas, RB0/INT entradamovlw b'00000111'movwf OPTION_REG ;Preescaler de 256 para el TMR0 bcf STATUS,RP0 ;Selecciona banco 0

    movlw b'10010000'movwf INTCON ;Activa la interrupcin externa RB0/INT

    ;Este es el cuerpo del programa principal. Se mantiene en estado SLEEP hasta que se produce;interrupcin

    Loop sleepnopgoto Loop

    end

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    63/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 63

    PROGRAMA 6

    El Display de 7 segmentos del entrenador. Decodificador hex. BCD a 7 segmentos.

    Mediante los cuatro interruptores RA0-RA3 se introduce un valor hexadecimal de 4 bits que

    debe visualizarse sobre el display.List p=16F876 ;Tipo de procesadorinclude "P16F876.INC" ;Definiciones de registros internos

    org 0x05goto Inicio

    ;--------------------------------------------------------------------------------------------------------------------;Tabla: Esta rutina convierte el cdigo binario presente en los 4 bits de menos peso del reg. W en;su equivalente a 7 segmentos. Para ello el valor de W se suma al valor actual del PC. Se obtiene;un desplazamiento que apunta al elemento deseado de la tabla.El cdigo 7 segmentos retorna;tambin en el reg. W.

    Tabla: addwf PCL,F ;Desplazamiento sobre la tablaretlw b'00111111' ;Dgito 0retlw b'00000110' ;Dgito 1retlw b'01011011' ;Dgito 2retlw b'01001111' ;Dgito 3retlw b'01100110' ;Dgito 4retlw b'01101101' ;Dgito 5retlw b'01111101' ;Dgito 6retlw b'00000111' ;Dgito 7retlw b'01111111' ;Dgito 8retlw b'01100111' ;Dgito 9retlw b'01110111' ;Dgito A

    retlw b'01111100' ;Dgito Bretlw b'00111001' ;Dgito Cretlw b'01011110' ;Dgito Dretlw b'01111001' ;Dgito Eretlw b'01110001' ;Dgito F

    Inicio clrf PORTB ;Borra el Puerto B bsf STATUS,RP0 ;Selecciona banco 1clrf TRISB ;Puerta B se configura como salidamovlw 0x06movwf ADCON1 ;Puerta A digitalmovlw b'00111111'movwf TRISA ;Puerta A se configura como entrada

    bcf STATUS,RP0 ;Selecciona banco 0

    Loop movf PORTA,Wandlw b'00001111' ;Lee el cdigo de RA0-RA3call Tabla ;Convierte a 7 segmentosmovwf PORTB ;Visualiza sobre el displaygoto Loop

    end

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    64/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 64

    PROGRAMA 7

    La memoria EEPROM de datos

    Se trata de imitar el funcionamiento de las mquinas tipo "SU TURNO" habituales en mltiples

    comercios. Sobre el display se visualizar el nmero del turno actual. Este se incrementa a cada pulsoaplicado por RA0. En la memoria EEPROM del PIC16F876 se almacena el ltimo nmero visualizado,de forma que, en caso de haber un fallo de alimentacin, se reanude la cuenta en el ltimo nmero.

    Si se parte de que el sistema se emplea por vez primera , se visualiza el 0

    List p=16F876 ;Tipo de procesadorinclude "P16F876.INC" ;Definiciones de registros internos

    Contador equ 0x20 ;Variable para el contador

    org 0x05

    goto Inicio

    ;------------------------------------------------------------------------------------------------------------------------------;EE_Write: Graba un byte en la EEPROM de datos. La direccin ser la contenida en EEADR y el dato;se le supone previamente metido en EEDATA

    EE_Write bsf STATUS,RP0 bsf STATUS,RP1 ;Selecciona banco 3 bcf EECON1,EEPGD ;Acceso a EEPROM de datos bsf EECON1,WREN ;Permiso de escrituramovlw b'01010101'movwf EECON2movlw b'10101010'

    movwf EECON2 ;Secuencia establecida por Microchip bsf EECON1,WR ;Orden de escrituraWait btfsc EECON1,WR ;Testear flag de fin de escritura

    goto Wait bcf EECON1,WREN ;Desconecta permiso de escritura bcf EECON1,EEIF ;Reponer flag de fin de escritura bcf STATUS,RP0 bcf STATUS,RP1 ;Selecciona banco 0return

    ;------------------------------------------------------------------------------------------------------------------------------;EE_Read: Leer un byte de la EEPROM. Se supone al registro EEADR cargado con la direccin a leer.;En EEDATA aparecer el dato ledo.

    EE_Read bsf STATUS,RP0 bsf STATUS,RP1 ;Seleccin de banco 3 bcf EECON1,EEPGD ;Selecciona EEPROM de datos bsf EECON1,RD ;Orden de lectura bcf STATUS,RP0 bcf STATUS,RP0 ;Seleccin de banco 0return

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    65/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 65

    ;------------------------------------------------------------------------------------------------------------------------------;Tabla: Esta rutina convierte el cdigo BCD presente en los 4 bits de menos peso del reg. W en su;equivalente a 7 segmentos. El cdigo 7 segmentos retorna tambin en el reg. W

    Tabla: addwf PCL,F ;Desplazamiento sobre la tablaretlw b'00111111' ;Dgito 0

    retlw b'00000110' ;Dgito 1retlw b'01011011' ;Dgito 2retlw b'01001111' ;Dgito 3retlw b'01100110' ;Dgito 4retlw b'01101101' ;Dgito 5retlw b'01111101' ;Dgito 6retlw b'00000111' ;Dgito 7retlw b'01111111' ;Dgito 8retlw b'01100111' ;Dgito 9

    ;------------------------------------------------------------------------------------------------------------------------------;Delay_10_ms: Esta rutina de temporizacin tiene por objeto eliminar rebote.

    Delay_10_ms: bcf INTCON,T0IF ;Desconecta el flag de rebosamientomovlw b195movwf TMR0 ;carga el TMR0 con 195

    Delay_10_ms_1 btfss INTCON,T0IF ;Rebasamiento del TMR0 ??goto Delay_10_ms_1 ;Todava no bcf INTCON,T0IF ;Ahora si, reponer el flagreturn

    ;------------------------------------------------------------------------------------------------------------------------------

    Inicio clrf PORTB ;Borra el Puerto B bsf STATUS,RP0 ;Selecciona banco 1clrf TRISB ;Puerta B se configura como salidamovlw 0x06

    movwf ADCON1 ;Puerta A digitalmovlw b'00111111'movwf TRISA ;Puerta A se configura como entradamovlw b'00000111'movwf OPTION_REG ;Preescaler de 256 para el TMR0 bcf STATUS,RP0 ;Selecciona banco 0

    bsf STATUS,RP1 ;Selecciona banco 2clrf EEADR ;Selecciona direccin 00 de EEPROM

    call EE_Read ;Lee byte de la EEPROM bsf STATUS,RP1 ;Selecciona banco 2

    movlw 0x09subwf EEDATA,W btfsc STATUS,C ;Mayor de 9 ??goto Ini_0 ;Si, poner a 0 el contadorgoto Ini_1 ;No

    Ini_0 bcf STATUS,RP1 ;Banco 0clrf Contador ;Poner a 0 el contadorgoto Loop

    Ini_1 movf EEDATA,W bcf STATUS,RP1 ;Banco 0movwf Contador ;Iniciar contador

  • 8/6/2019 Uso Del Pic 16f87x Con Ejemplos

    66/85

    TRABAJO Y EXPLICACIN PIC16F87X 2DPE

    DESARROLLO PROYECTOS Y PROTOTIPOS ELECTRNICOS 66

    Loop movf Contador,Wcall Tabla ;Convierte contador a 7 segmentosmovwf PORTB ;Visualiza sobre el display

    Wait_0 btfss PORTA,0 ;RA0 est a "1" ??goto Wait_0 ;No, esperar

    call Delay_10_ms ;Eliminar rebotes

    Wait_1 btfsc PORTA,0 ;RA0 est a "0"