Está en la página 1de 12

CURSO DE MICROCONTROLADORES

PIC16F87X (...Y II)


NUESTROS CURSOS

44
RESISTOR

ORGANIZACIÓN dispositivos de PIC16F877/876 Funciones Especiales (FSR). Los


DE LA MEMORIA tienen 8K x 14 posiciones de bits RP1 (STATUS <6>) y RP0
memoria de programa tipo (STATUS <5> ) seleccionan cada
FLASH y el PIC 16F873/874 uno de estos Bancos, de acuerdo a
Esta familia de microcontrolado- tienen 4Kx 14. Acceder a una la Tabla1.
res, al igual que el PIC16F84, posición de memoria no
dispone den de tres bloques de implementada, provoca la lectura RP1 RP0 Banco
memoria. La Memoria de 0 0 Banco 0
o escritura de la posición de
Programa y la Memoria de Datos 0 1 Banco 1
RAM que tienen los buses sepa- memoria envolvente.
1 0 Banco 2
rados para poder permitir el El vector de Reset está en la 1 1 Banco 3
acceso simultáneo a estos dos posición de memoria 0000h y el
bloques y la Memoria de datos vector de Interrupción está en la Tabla 1.- Selección de los
EEPROM. posición de memoria 0004h. Bancos de memoria RAM con
RP0 y RP1
Organización de la Organización de la
Memoria de programa Memoria de datos En cada Banco hay 7Fh posi-
Los dispositivos de PIC 16F87X La memoria de los datos se divide ciones de memoria (128 bytes).
Las posiciones más bajas están,
tienen un contador de programa de en los cuatro Bancos que contiene
reservadas para los Registros de
13 bits capaz de direccionar 8Kxl4 los Registros de Propósito Funciones Especiales. Por enci-
posiciones de memoria. Los Generales y los Registros de la ma de los Registros de Funciones
Curso microcontroladoresPAGS 21/1/04 10:14 Página 56

CURSO DE
MICROCONTROLADORES
MICROCONTROLADORES
PIC16F87X (...y IV)
Fernando Remiro Domínguez
Profesor de Sistemas Electrónicos
IES. Juan de la Cierva
www.terra.es/personal/fremiro

LOS REGISTROS PCL correctamente los bits PCLATH La pila funciona como un buf-
y PCLATH <4:3> que seleccionan el Banco. fer circular. Esto significa que
El contador del programa Es labor del programador después de que se han guardado 8
(PC) está formado por 13 bit que modificar el valor de dichos bits valores en ella, el noveno borra el
sirven para direccionar la en las instrucciones CALL y valor que se guardó en primer
memoria de código, estos bits se GOTO. lugar, el décimo borra el que se
encuentran en dos registros La familia de los PIC 16F87X guardo en segundo lugar, etc.
específicos. El byte bajo viene del dispone de una pila de 8 niveles
registro de PCL que puede ser de profundidad para un tamaño Paginación de la Memoria
leído y escrito. Los bits superiores de PC de 13 bits. Esta pila es de Programa
56
RESISTOR
(PC<12:8>). Están alojados en el
registro PCH , sobre el que no se
puede leer ni escribir, pero se
transparente al programador, es
decir, funciona automáticamente
y no dispone de instrucciones
Los dispositivos de la familia
PIC 16F87X son capaces de
direccionar un bloque de hasta
puede acceder a él indirectamente para guardar o sacar de ella 8K de memoria continua. Las
a través del registro PCLATH. información. instrucciones CALL y GOTO
Las instrucciones de salto Con la Instrucción CALL y proporcionan solo 11 bits de la
CALL y GOTO sólo con las interrupciones el valor de dirección de memoria, lo que
proporcionan 11 bits de la PC se salva en el nivel superior. permite un salto de bifurcación
dirección a saltar. Esto limita el Con las instrucciones RETURN, dentro de una página de 2K de la
salto dentro de cada Banco de 2K. RETLW y RETFIE el valor con- memoria de programa.
Cuando se desea salir del Banco tenido en el valor superior de la Al hacer un CALL o una ins-
actual hay que programar pila se carga en el PC. trucción GOTO, dos 2 bit supe-
riores de la dirección son pro-
PCH PCL porcionados por el PCLATH
<4:3>. Al hacer un CALL o un
12 8 7 0 GOTO, el usuario debe asegu-
Instrucciones con rarse de que la página se han
PC destino en el PCL seleccionados con los bit corres-
pondientes a la página que se
desea llamar. Hay que tener pre-
caución en los retornos de subru-
5 PCLATH<4:0> tinas y retornos de ininterrup-
ción para no salirse con el valor
8 almacenado en la PILA.
ALU
Por consiguiente, manipula-
ción del PCLATH <4:3> no se
requieren los bits para las ins-
trucciones del retorno. Este es el
caso del ejemplo Inter.asm, en el
PCLATH que el programa principal, que
consiste en encender y apagar un
Figura 1.- Estructura del Contador de Programa LED, conectado a través de una
Las Figuras 1 y 2 muestran el mapa de memoria y Stack de los PIC16F876/7 y PIC16F873/4

NUESTROS CURSOS
45
RESISTOR

Figura 1.- Mapa de Memoria y Figura 2.- Mapa de Memoria y


STACK del PIC16F876/877 SACK del PIC16F873/874

Especiales se encuentran los tienen disponibles 80 bytes de en la Figura 4 en la que se presenta


Registros de Propósito General, memoria para datos (Registros la definición de los Bancos, tienen
que se utilizan como posiciones de Propósito General) que son disponibles 96 bytes en el Banco 0,
de memoria RAM estática. independientes los unos de los que son conjuntamente accedidos a
Todos están estructurados en otros. Los Bancos 2 y 3 tienen 16 través del Banco 2. El Banco 1
Bancos. Algunos Registros de bytes adicionales, que son tam- tiene igualmente 96 bytes, que tam-
Funciones Especiales están refle- bién independientes. Sin embar- bién son accesibles desde a través
jados en varios Bancos para go, los 16 bytes superiores de del Banco 3, lo que hace un total
reducir el código y tener un acce- memoria en cada Banco tienen de 96+96= 192 bytes.
so más rápido. Se puede ver el una “raiz” común. Accediendo a (Nota.- La memoria EEPROM
mapa de la memoria de datos y cualquiera de los 16 bytes en de Datos se describe en el aparta-
los registros especiales en las cualquier Banco, automática- do 3 de estos apuntes sobre las
Figuras 3 y 4. Si analizamos mente nos da acceso a los mis- hojas de características.)
estas figuras podemos ver como mos en el Banco 0 (70h a 7Fh).
efectivamente después de cada Esta forma de acceder puede ser REGISTROS DE
grupo de registros especiales de muy ventajosa en algunos casos. PROPÓSITO GENERAL
cada Banco están las posiciones Para los PIC16F876/7, la memo-
de memoria que pueden ser usa- ria disponible para datos en total Se puede acceder a cualquier
das para el almacenamiento de es de 96+80+16+80+16+80 = registro utilizando el direcciona-
datos. 368 bytes. miento directo o indirecto, en
En el caso de los Para el caso de los este último caso a través del
PIC16F876/7, los Bancos 0 a 3 PIC16F873/4, como puede verse registro FSR.
46
RESISTOR
REGISTRO OPTION u OPTION_REG (Dirección 81h,181h)

El Registro de OPTION_REG es un registro que puede ser leído o escrito y que contiene varios bits de
control para configurar la asignación del preescaler al TMR0 o al WDT, la interrupción externa, el TMR0 y
las resistencias de pull-up del PORTB.

Nota.- Asignar el preescaler como 1: 1 al registro TMR0, asigna el preescaler al Watchdog.

NUESTROS CURSOS
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
RBPU INTED T0CS T0SE PSA PS2 PS1 PS0
Bit 7 Bit 0

bit 7:#RBPU: Resistencia de Pull-up en, el PORTB 1 = El preescaler se le asigna al WDT


1=Resistencia de Pull-up desactivada 0 = El preescaler se le asigna al TMR0
0= Resistencia de Pull-up activada bit 2-0:PS2:PS0: Rango de actuación del preescaler
bit6 1:INTEDG:, Flanco, de control de interrupciones
1:Interrupción por flanco ascendente en el pin RB0/INT,
0:Interrupción por flanco: descendente en el pin RB0/INT PS2 PS1 PS0 Divisor de TMR0 Divisor de WDT
bit 5:T0SC. Selección del tipo de Reloj para TMRO 0 0 0 1:2 1:1
1 = Los pulsos se introducen a través del, pin RA4/TOCK1 0 0 1 1:4 1:2
0 = Los Pulsos de reloj internos- Fosc/4 0 1 0 1:8 1:4
bit 4:T0SE: Tipo de flanco para TMR0 0 1 1 1:16 1:8
1 = Incremento de TMR0 en cada flanco, descendente por 1 0 0 1:32 1:16
el pin RA4/TOCKI 1 0 1 1:64 1:32
0 = Incremento de TMR0 en cada flanco ascendente por el 1 1 0 1:128 1:64
pin RA4/TOCKI 1 1 1 1:256 1:128
bit 3:PSA: Asignación del Preescaler
51
RESISTOR
REGISTRO INTCON (Dirección 0Bh, 8Bh, l0Bh, 18Bh)

El registro INTCON es un registro de lectura y escritura que contiene los bit de habilitación de interrupcio-
nes por desbordamiento de TMR0 por cambio de nivel en el PORTB e interrupciones externas por la línea
RBO/INT.

" " "


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
Bit 7 Bit 0

bit 7:GIE: bit de habilitación global de Interrupciones de nivel en el PORTB


1= Habilita el permiso de interrupciones 1= Habilita la interrupción
0= Inhabilita todas las interrupciones 0= Inhabilita la interrupción
bit 6:PEIE: bit de habilitación de interrupciones de los bit 2:T0IF: flag de indicación de desbordamiento de
periféricos que no se controla con el registro INTCON TMR0
1= Habilita el permiso de interrupciones de los periféri- 1= El TMR0 se ha desbordado. Se borra por software
cos 0= El TMR0 no se ha desbordado
0= Inhabilita las interrupciones de los periféricos bit 1:INTF: flag de estado de la interrupción externa INT
bit 5:T0IE: bit de habilitación de la interrupción por des- 1= La interrupción externa se ha producido. Se borra
bordamiento del TMR0 por software
1= Habilita la interrupción 0= La interrupción externa no se ha producido
0= Inhabilita la interrupción bit 0:RBIF: flag de indicación de interrupción por cambio
bit 4:INTE: bit de habilitación de la interrupción externa de nivel en PORTB
por el pin RB0/INT 1= Se ha producido un cambio de nivel en los pines
1= Habilita la interrupción RB7:RB4. Se borra por software.
0= Inhabilita la interrupción 0= No se ha producido un cambio de nivel en los pines
bit 3:RBIE: bit de habilitación de interrupción por cambio RB7:RB4
REGISTRO PIE1 (Dirección 8Ch)

Este registro contiene los bits individuales de habilitación de interrupciones de los periféricos.

Nota.—El bit PEIE (INTCON <6>) debe esta a uno para habilitar las interrupciones de
cualquiera de los periféricos.

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0


NUESTROS CURSOS
PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
Bit 7 Bit 0

bit 7:PSPIE: bit de habilitación de inte- 1 = Habilita interrupción por recepción produce una captura o una comparación.
rrupción por lectura / escritura en el en el USAR 1= Habilita la interrupción del CCPI
Puerto Paralelo Esclavo. Para los 0 = Inhabilita interrupción por recep- 0=. Inhabilita la interrupción del CCPI
modelos de 40 pines. ción en el USAR bit 1:TMR2IE: bit de habilitación de inte-
1 = Habilita la interrupción por bit 4:TXIE: bit de interrupción al trans- rrupción por desbordamiento de TMR2
lectura/escritura en el PSP mitir por el USAR, cuando se vacía el que
0= inhabilita la interrupción por lectu- buffer. está emparejado con el registro PR2
ra/escritura en el PSP 1 = Habilita la interrupción de transmi- (92h)
bit 6:ADIE: bit de habilitación de inte- sión por el USAR 1= Habilita la interrupción por desborda-
rrupción por finalización de la conver- 0 = Inhabilita la interrupción de trans- miento de TMR2 emparejado a PR2
sión A/D misión por el USAR 0= Inhabilita la interrupción de TMR2
l = Habilita la interrupción del converti- bit 3:SSPIE: bit de habilitación de inte- emparejado a PR2
dor A/D rrupción por el Puerto Serie Síncrono bit 0:TMR1IE: bit de habilitación de inte-
0 = Inhabilita la interrupción del con- (SSP) rrupción por desbordamiento del TMRI
vertidor A/D 1= Habilita la interrupción del SSP 1= Habilita la interrupción por desborda-

52
RESISTOR
bit 5:RCIE: bit de habilitación de inte-
rrupción en recepción por el USAR,
cuando se llena el buffer,
0= Inhabilita la interrupción del SSP
bit 2:CCP1IE: bit de habilitación de inte-
rrupción del módulo CCPI cuando se
miento de TMR1
0= Inhabilita la interrupción por desbor-
damiento de TMR1

Nota 1.- PSPIE para los dispositivos de 28 pines, siempre mantiene este bit a cero

REGISTRO PIE2 (Dirección 8Dh)

El registro de PIE2 contiene los bit individuales que habilita las interrupciones del periférico CCP2,. la inte-
rrupción por colisión del SSP y la ininterrupción de escritura en la EEPROM.

U-0 R/W-0 U-0 R/W-0 R/W-0 U-0 U-0 R/W-0


--- 0 --- EEIE BCLIE -- -- CCP2IE
Bit 7 Bit 0

bit 7:No implementado: se lee como “0’ bit 3:BCLIE: Habilita la interrupción por colisión en el bus
bit 6: Reservado, Mantiene este bits a cero SSP cuando dos o más maestros tratan de transferir al
bit 5:No implementado: se lee como “0” mismo tiempo.
bit 4:EEIE: Habilita la interrupción por escritura en la 1 = Habilita la interrupción por colisión de bus SSP
EEPROM de datos 0 = Deshabilita la interrupción por colisión en el bus SSP.
1= Habilita la interrupción por escritura de la EEPROM de bit 2-1No implementados, se leen como “0”
datos bit 0:CCP2IE: Habilita la interrupción del modulo CCP2
0 =Deshabilita la interrupción por escritura en la EEPROM 1 = habilita la interrupción de CCP2
de datos 0 = inhabilita la interrupción de CCP2
REGISTRO PIR1 (Dirección 0Ch)
El registro de PIRI contiene los flags individuales que indican las interrupciones provocadas por los periféricos.

" " " " " " " "


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x
PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR21F TMR1IF
Bit 7 Bit 0
bit 7:PSPIF: Flag de Lectura/Escritura por 1= La condición del SSP ha ocurrido, bit 2:CCP1IF: Flag de interrupción de
el Puerto Paralelo esclavo debe ponerse a cero por software antes CCPI
1= Concedido el permiso de interrupción de volver del programa de atención a la
para la puerta paralela esclava al realizar interrupción. Las condiciones que sopor- Modo Captura
una operación de Lectrura/Escritura. En ta este bit son 1= Ocurrió una captura de TMR1 (debe
los modelos de 40 pines. SPI ponerse a cero por software)
0= No está permitida la interrupción Ha tenido lugar una Transmisión / 0= No ocurrió ninguna captura de TMR1

NUESTROS CURSOS
bit 6:ADIF: Flag de final de conversión del Recepción Modo Comparación
convertidor A/D I2C Slave 1= Se ha realizado una comparación de
1= El convertidor A/D ha finalizado la Ha tenido lugar una Transmisión / TMR1 Con el registro emparejado /debe
conversión Recepción ponerse a cero por Software)
0= El convertidor A/D no ha finalizado la I2C Master 0= No se ha realizado comparación
conversión Ha tenido lugar una Transmisión / Modo PWM
bit 5:RCIF: Flag de recepción por el USAR Recepción Este modo no se utiliza
1= El buffer de datos recibidos por el La condición de salida iniciada se com- bit 1:TMR2IF: Flag de interrupción de
USAR está lleno pletó por el módulo de SSP. TMR2 emparejado con PR2
0= El buffer de datos recibidos por el La condición de parada inicio se comple- 1= TMR2 emparejado con PR2 ocurrió
USAR no está lleno tó por el módulo de SSP. (debe ponerse a cero por software)
bit 4:TXIF: Flag de transmisión el USAR La condición de reinicialización se com- 0= No ha ocurrido el emparejamiento de
1= El buffer de datos a transmitir no está pleto por el módulo SSP TMR2 con PR2
lleno Una condición de la salida se ha realizado bit 0: TMR1IF: Flag de desbordamiento
0= El buffer de daos a transmitir está mientras el módulo de SSP estaba en de TMRI
lleno estado de espera (sistema de Multimaster). 1 =el registro se desbordo (debe ponerse
bit 3: SSPIF: Flag de interrupción del 0 = no ha ocurrido ninguna condición de a cero por software)
Puerto Serie Síncrono (SSP) interrupción del módulo SSP 0 = el registre¡ de TMRI no se desbordo

Nota 1.- PSPIF está reservado para los dispositivos de 28 pines; se mantiene siempre a cero.

REGISTRO PIR2 (Dirección 0Dh)


El registro de PIR2 contiene los flags que indican la interrupción del CCP2, de la colisión del bus SSP y la inte-
53
RESISTOR
rrupción de la escritura en la EEPROM

" " " " " " " "


U-0 R/W-0 U-0 R/W-0 R/W-0 U-0 U-0 R/W-x
---(1) --- EEIF BCLIF --- --- CCP2IF
Bit 7 Bit 0
bit 7:No implementado: se lee como “0” bit 2-1:No implementados: se leen como “0”
bit 6:Reservado: Mantiene este bit siempre a cero bit 0: CCP21F: Flag de ininterrupción de CCP2
bit 5:No implementado: se lee como “0” Modo Captura
bit 4:EEIF: Flag que indica si se ha producido escritura en al 1 = Ha ocurrido una captura del registro TMR1 (debe ponerse a
EEPROM cero por software)
1 = Se ha completado la escritura en la EEPROM (Se pone a cero 0= No se ha producido captura
por software) Modo Comparación
0 = No se ha finalizado la escritura o no se ha comenzado 1 = Se ha producido una comparación de TMR1 con su pareja
bit 3:BCLIF: Flag que indica la colisión en el bus (debe ponerse a cero por software).
1 = Se ha producido una colisión en el bus SSP, cuando se confi- 0 = No se ha producido comparación
gura en el modo I2C Master. Modo PWM
0 = No se ha producido colisión en el bus No se utiliza

REGISTRO PCON (Dirección 8Eh)


El registro PCON (Power Control) Control de Alimentación, contiene los flags que permiten diferenciar entre un
Power-on Reset (POP), un Brown-out Reset (BOR), un Reset por Watchdog (WDT) y un Reset externo por MCLR.

U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0


--- 0 --- --- --- --- #POR #BOR
Bit 7 Bit 0
bit 7-2:No implementado: se lee como “0” bit 0:#BOR: bit de estado de Borwn-out Reset
bit 1:#POR: bit de estado Power-on Reset 1 = No se ha producido ningún Brown-out Reset
1 = No se ha producido un Power-on Reset 0= Se ha producido un Brown-out Reset (debe reestablecerse
0= Se ha producido un Power-on Reset (debe reestablecerse por software)
por software)
Curso microcontroladoresPAGS 29/4/03 10:38 Página 56

REGISTRO T1CON: Registro de control del TIMER1 (dirección 10h)


U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
--- --- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
Bit 7 Bit 0

bit 7-6: No implementados: Se lee como "0"


bit 5-4: TlCKPS1:T1CKPS0: bit de selección del preescaler de la señal de reloj del TIMER1
MICROCONTROLADORES
11 = valor del preescaler 1:8
10 = valor del preescaler 1:4
01 = valor del preescaler 1:2
00 = valor del preescaler 1: 1
bit 3 : T1OSCEN: bit de habilitación del oscilador del TIMER1. Cuando se emplea un oscilador
externo, hay que poner este bit a 1. El TMR1 puede trabajar a una frecuencia totalmente independiente
de la del sistema.
1 = Habilita el oscilador
0 = Deshabilita el oscilador
Nota.- El oscilador y la resistencia de desconectan para reducir el consumo

bit 2: #TlSYNC: bit de control de sincronización de la señal de entrada.


Con TMR1CS = 1
1= No sincroniza la entrada de reloj externa
0 = Sincroniza la entrada de reloj externa
Con TMR1CS = 0
En esta condición se ignora. El TIMER1 utiliza el reloj interno cuando TMRICS=0
bit 1 TMR1CS: bit de selección de la fuente de reloj del TIMER1
1 = Reloj externo por el pin RC0/T1OSO/T1CK1 (flanco ascendente)
0 = Reloj interno (FOSC/4)
bit 0: TMR1ON: TIMER1. activo. Hace entrar o no en funcionamiento el TIMER1.
1 = Habilita el TIMER1

56
RESISTOR
0 = Deshabilita el TIMER1

El modo de trabajo viene efecto ya que el reloj interno está T1OSCEN está a uno, y por el pin
determinado por la fuente de los siempre sincronizado. RC1/TlOSI/CCP2, cuando el bit
impulsos de reloj, es decir, la señal T1OSCEN está a cero.
de reloj puede ser externa o interna, MODO DE Si T1SYNC se pone a cero,
se selecciona con el bit TMR1CS FUNCIONAMIENTO DEL entonces la entrada de reloj externa
del registro T1CON<l>, cuando TIME1 COMO CONTADOR se sincroniza con los relojes de fase
este bit está a nivel bajo En este modo puede trabajar interiores. La sincronización se hace
se selecciona el reloj el interno del como contador síncrono o después de la fase del preescaler. En
micro-controlador (Fosc/4) y asíncrono . Cuando el TIMER1 se el preescaler la fase de la señal de
cuando está a uno se selecciona el está incrementando según le llegan reloj es por lo tanto asíncrona.
modo contador y cuenta los los impulsos externos, los En este modo de trabajo,
impulsos que le llegan a través del incrementos ocurren en los flancos durante el modo SLEEP el
pin RC0/TlCKl. Además como se de subida. Después de que el TIMER1 no se incrementa aún
verá mas adelante el TIMER1 TIMER1 se ha configurado como cuando la señal de reloj
tiene la posibilidad de contador, debe producirse un flanco externa esté presente. El
reinicializarse, a partir del módulo de bajada antes de empezar a preescaler sin embargo continua
CCP. contar. incrementándose.

MODO DE MODO DE MODO DE


FUNCIONAMIENTO DEL FUNCIONAMIENTO DEL FUNCIONAMIENTO DEL
TIMER1 COMO TIMER1 COMO CONTADOR TIMER1 COMO CONTADOR
TEMPORIZADOR SÍNCRONO ASÍNCRONO
Este modo se selecciona Para seleccionar este modo se Cuando el bit de control
poniendo a cero el bit TMR1CS pone a uno el bit TMR1CS T1SYNC (T1CON <2>) se poner a
(T1CON <1>. En este modo la (T1CON <1>). En este modo el uno, la señal de reloj externa no se
señal de reloj es el reloj interno del contador se incrementa en cada sincroniza. El contador sigue
microcontrolador FOSC/4. En este flanco ascendente de la señal de realizando la cuenta de forma
modo de trabajo el bit T1SYNC reloj que se introduce por el pin asíncrona respecto a la fase de la
(T1CON <2>) no tiene ningún RC0/T1OSO/TICK1 cuando el bit señal de reloj interna. El contador
Curso (60-64) 3/7/03 09:47 Página 61

zan los bit TOUTPS3:TOUTPS0 REGISTRO T2CON: REGISTRO DE CONTROL DEL TIMER2
(T2CON <6:3>). (DIRECCIÓN 12H)
El Preescaler y el Postescaler se
ponen a cero cuando:
● Se escribe sobre el registro TMR2 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
● Se escribe sobre el registro
T2CON --- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
● Se produce un reset (POR, MCLR
restablecido, WDT reestablecido o Bit 7 Bit 0
BOR)
TMR2 no se pone a cero cuando
se escribe en T2CON. bit 7: No implementado: Se lee como 0
Para reducir el consumo total del
microcontrolador se puede "apagar" bit 6-3: TOUTPS3:TOUTPS0: bit de selección del rango del divisor del
el temporizador poniendo a cero el
bit TMR2ON (T2CON<2>). Postescaler para el TIMER2

INTERRUPCIONES DEL 0000 = Divisor del postescaler 1:1


TIMER2
0001 = Divisor del postescaler 1:2
El temporizador TMR2 tiene un
flag de desbordamiento el TMR2IF 0010 = Divisor del postescaler 1:3
(<1>PIR1).
El TMR2 tiene asociado un 0011 = Divisor del postescaler 1:4
Registro de Periodo PR2, que ocupa
la posición 92h. Cuando el valor de 0100 = Divisor del postescaler 1:5
cuenta de TMR2 coincide con el
valor cargado en PR2 se genera un 0101 = Divisor del postescaler 1:6
impulso en la salida EQ (ver la Figu-
ra 1) y se pone a cero el TMR2. Estos 0110 = Divisor del postescaler 1:7
impulsos pueden ser divididos por el 0111 = Divisor del postescaler 1:8
postdivisor antes de activar el flag
TMR21F(<1> PIR1). 1000 = Divisor del postescaler 1:9
El temporizador puede producir
una interrupción si se pone a 1 el bit 1001 = Divisor del postescaler 1:10
TMR2IE (<1> PIE1)
1010 = Divisor del postescaler 1:11
SALIDA DEL TMR2
La salida de TMR2 (antes del 1011 = Divisor del postescaler 1:12
postscaler) alimenta al Módulo de
1100 = Divisor del postescaler 1:13
SSP que opcionalmente puede usar-
se para generar la señal de reloj de 1101 = Divisor del postescaler 1:14
desplazamiento.
1110 = Divisor del postescaler 1:15
PROGRAMA EJEMPLO
DE FUNCIONAMIENTO 1111 = Divisor del postescaler 1:16
DEL TIMR2 CON
INTERRUPCIONES. bit 2: TMR2ON: bit de activación del TIMER2
Para comprobar el funcionamien-
to de este programa, utilizaremos el 1:= habilita el funcionamiento del TIMER2
mismo montaje que hemos utilizado 0 = Inhibe el funcionamiento del TIMER2
para comprobar el funcionamiento
del Timer0 y del Timer1, que es el bit 1-2: T2CKPS1:T2CKPS0 Selección del rango de divisor del Preescaler
que se representa en la Figura 2.
La estrategia para conseguir del TIMER2
la temporización de aproximada-
mente un segundo es la que se refle- 00 = Divisor del Preescaler 1:1
ja en el diagrama de flujos de la
Figura 3, y consiste en lo siguiente. 01 = Divisor del Preescaler 1:4
Partiendo de la base de que nuestro
Ix = Divisor del Preescaler 1:16
microcontrolador tiene un cristal de
56-83 MICROCONTROLADORES 14/8/03 13:26 Página 57

Tabla 3.- Registros de configuración CCP1CON/CCP2CON

Un evento se selecciona por biar las condiciones de funciona- cambiar las condiciones de funciona-
medio de los bit de control miento en el modo de captura para miento en el modo captura para evi-
CCP1M3:CCP1M0 del registro evitar que se produzcan falsas inte- tar que se produzcan falsas interrup-
CCP1CON. Cuando se produce una rrupciones durante la operación. ciones durante la operación.
captura, se pone a " 1 " el flag Se debe poner a cero el flag
CCP1IF del registro PIRI <2>, ade- Configuración del pin CCP CCP1IF por software.
más si está a " 1 " el bit PIE de En el modo captura, el pin
CCP1IE<2>, se genera una petición RC2/CCP1 debe configurarse como CCP Preescaler
de interrupción. El flag CCP1IF entrada, poniendo un "1" en Hay cuatro modos de preescaler,
debe ponerse a cero por software. Si TRISC<2>. que vienen seleccionados por los bits
se produce otra captura antes de lee Nota.- Si el pin RC2/CCP1 se CCPxM3:CCPxM0. Siempre que el
el registro CCPR1, el valor captura- configura con resistencia de pull- módulo CCP esté desactivado o no
do se perderá. up, una escritura en el puerto, esté en modo de captura, el contador
Cuando se trabaja en el modo puede causar una condición de del preescaler se pone a cero. Cual-
captura con el CCP1, el TMR1 debe captura. quier reset también pone a cero el
estar configurado para trabajar como preescaler.
temporizador o como contador sín- Software de Interrupción Cuando se cambia el preescaler
crono. Nunca en modo asíncrono. Es recomendable desactivar el durante una captura, se puede gene-
Es recomendable desactivar el módulo CCP poniendo a cero rar una interrupción. Puede ocurrir
módulo CCP cuando se van a cam- CCP1IE (PIE1 <2>) cuando se van a también que el contador de preesca-
56-63 MICROCONTROLADORES 28/10/04 14:20 Página 56

CURSO DE
MICROCONTROLADORES
PIC16F87X (...y VIII)
MICROCONTROLADORES
Fernando Remiro Domínguez
Profesor de Sistemas Electrónicos
IES. Juan de la Cierva
www.terra.es/personal/fremiro

MODULO CONVERTIDOR A través de la entrada analógica El módulo del convertidor A/D


ANALÓGICO/DIGITAL (A/D) se aplica la señal analógica a un con- puede seleccionar como tensión de
La familia de microcontroladores densador de captura y retención referencia la interna, es decir entre
PIC16F87X, disponen de un módu- (sample and hold) que después se VDD y masa o bien una externa que
lo de conversión Analógico/Digital introduce en el convertidor. El con- se introduzca entre RA3/AN3/
que tiene de cinco entradas para los vertidor A/D que es de aproximacio- VREF+ y RA2/AN2/VREF-. Cuan-
dispositivos de 28 pines y ocho para nes sucesiva da como resultado una do se selecciona la tensión de refe-
los otros dispositivos de la familia. palabra de 10 bits. rencia externa, hay que tener en

Registro ADCON0 (dirección 1Fh)


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0
ADCS1 ADCS0 CHS2 CHS1 CHS0 G0/#DONE --- ADON

56
RESISTOR
Bit 7

bit 7-6: ADCS1:ADCS0: bit de selección de reloj para el Convertidor A/D


Bit 0

00 Fosc/2
01 Fosc /8
10 Fosc/32
11 FRC (Procede del
oscilador RC interno)

bit 5-3: CH2:CH0: bit de


selección del canal
analógico
000 = Canal 0, (RA0/AN0)
001 = Canal 1, (RA1/AN1)
010 = Canal 2, (RA2/AN2)
011 = Canal 3, (RA3/AN3)
100 = Canal 4, (RA4/AN4)
101 = Canal 5, (RA5/AN5); los PIC16F87X de 28 pines no tienen este canal
110 = Canal 6, (RA6/AN6); los PIC16F87X de 28 pines no tienen este canal
111 = Canal 7, (RA7/AN7),, los PIC 1 6F87X de 28 pines no tienen este canal

bit 2: GO/#DONE. bit de estado de la conversión A/D


Si ADON=1
1= La conversión A/D está en marcha (mientras está a 1 se está realizando la conversión)
0 = La conversión ha finalizado. (el bit se pone a cero automáticamente por hardware cuando la conversión A/D
finaliza) el resultado de la conversión aparece en ADRESH: ADRESL

bit 1: No implementado: Se lee como "0"

bit 0: ADON: bit de puesta en marcha


1 = El convertidor A/D está operativo
0 = El convertidor A/D está apagado y no consume corriente.
56-63 MICROCONTROLADORES 28/10/04 14:20 Página 57

Registro ADCON1 (dirección 9Fh)


U-0 U-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0
ADFM --- --- --- PCFG3 PCFG2 PCFG1 PCFG0
Bit 7 Bit 0

bit 7: ADFM: Selecciona el formato del resultado de la conversión A/D (ver figura 5)
1 = Pone en el registro ARDESH los seis bit de mayor peso a "0" (alineación a la derecha).

MICROCONTROLADORES
0 = pone los 6 bit de menor peso del registro ADRESL a "0" (alineación a la izquierda).
Por lo tanto los 16 bits que forman el registro ARDESH-ARDESL con ADFM=1 tiene los 6 bit de mayor
peso a cero y con ADFM=0 los 6 bit de menor peso están a cero

bit 6-4: No implementados: Se leen como cero

bit 3-0: PCFG3:PCFG0: bits de configuración de los canales de entrada del convertidor A/D. Se utilizan para
configurar las patillas como E/S digital o como entrada analógica de acuerdo con la siguiente tabla:

PCFG3: AN7(1) AN6(1) AN5(1) AN4 AN3 AN2 AN1 AN0 VREF+ VREF- CHAN/
PCFG0 RA5 RA3 RA2 RA1 RA0V REFS
RE2 RE1 RE0
0000 A A A A A A A A VDD VSS 8/0
0001 A A A A VREF+ A A A RA3 VSS 7/1
0010 D D D A A A A A VDD VSS 5/0
0011 D D D A VREF+ A A A RA3 VSS 4/1
0100 D D D D A D A A VDD VSS 3/0
0101 D D D D VREF+ D A A RA3 VSS 2/1
011X D D D D D D D D VDD VSS 0/0
1000 A A A A VREF+ VREF- A A RA3 RA2 6/2
1001
1010
1011
D
D
D
D
D
D
A
A
A
A
A
A
A
VREF+ A
A

VREF+ VREF- A
A
A
A
A
A
RA3
RA3
RA3
VSS
VSS
RA2
6/0
5/1
4/2
57
RESISTOR
1100 D D D A VREF+ VREF- A A RA3 RA2 3/2
1101 D D D D VREF+ VREF- A A RA3 RA2 2/2
1110 D D D D D D D A VDD VSS 1/0
Tabla 1

1111 D D D D VREF+ VREF- D A RA3 RA2 _


A= Entrada Analógica; D = E/S Digital; (1) Estos canales no están disponibles para los dispositivos de

cuenta que existen algunas limitacio- ● ADRESH : Parte alta del resultado ADRESH:ADRESL y se pone a cero
nes; la máxima tensión aplicada a la de la conversión el bit GO/DONE y el flag de fin de
patilla VREF+ (RA3/AN3) podrá ser ● ADRESL : Parte baja del resultado conversión ADIF (PIR1<6>) se pone a
de VDD+0,3V y la mínima de VDD- de la conversión 1. El diagrama de bloques del módulo
2,5V. En cuanto a la tensión VREF- ● ADCON0: Registro de Control 0 conversar A/D es el de la Figura 1.
(RA2/AN2) la mínima tensión será ● ADCON1, Registro de Control 1 Después de que el conversor A/D
VSS-0,3V y la máxima VREF+ - 2V, En esta página se muestra el se ha configurado como se desea uti-
así por ejemplo, si la tensión de ali- registro ADCON0 de configuración lizar, la selección del canal debe rea-
mentación es de 5V, la tensión en del funcionamiento del convertidor lizarse antes de hacer la adquisición.
RA3/AN3 no podrá exceder de 5V. y en la página anterior el ADCON1 Los canales de entrada analógica
Por lo que la máxima tensión en la que es el registro de configuración deben tener los correspondientes bits
VREF- será de 3V. Siempre se ha de de los pines del puerto. Los pines del del registro TRIS seleccionados
cumplir que VREF+ - VREF - ≤2V. PORTA pueden configurarse como como entradas.
El convertidor A/D tiene como entradas analógicas (RA, también Para realizar una conversión A/D
característica especial el ser capaz de puede ser entrada de tensión de refe- deben seguirse los siguientes pasos:
seguir trabajando mientras el dispo- rencia) o como E/S digital. 1. Configurar el módulo conversor A/D
sitivo esté en el modo SEEP. Para Los registros ADRESH: ADRESL ● Configurar los pines que actúan
ello el oscilador interno RC debe contienen los 10 bits resultado de como entradas analógicas, las
conectarse al conversor A/D. la conversión A/D. Cuando se señales que harán de tensión de
El módulo conversor A/D tiene completa la conversión A/D, el resul- referencia la que trabajarán como
asociados cuatro registros: tado se guarda en los registros E/S digitales (ADDCON1).

También podría gustarte