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"
Top Related