Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Procesador de arquitectura
RISC avanzada
Juego de solo 35 instruccio-
nes de 14 bits de longitud.
Todas ellas se ejecutan en
un ciclo de instruccin,
menos las de salto que tar-
dan dos.
NOVEDADES
publicado con anterioridad el res, es valido cualquiera de los Hasta 14 fuentes de interrup-
Curso de aplicaciones con publicados en esta Revista, cin internas y externas.
microcontroladores PIC basa- pero como ya hemos dicho a lo Pila de 8 niveles.
do en el microcontrolador PIC largo del curso plantearemos Modos de direccionamiento
16F84, escrito por el Dr. Euge- alguno de bajo costo. Espera- directo e indirecto.
nio Martn Cuenca, (revistas n mos que os guste el curso y lo Power-on Reset (POP).
161 a 171), y el Curso de pro- disfrutis. Temporizador Power-on
gramacin de Microcontrola- (POP) y Oscilador Tempori-
dores PIC: El MPLAB, escri- El corazn de los zador Start-Up (OST).
to por el profesor Fernando Microcontroladores Perro Guardin (WDT).
Remiro Domnguez (revistas n PIC16F87X Cdigo de proteccin pro-
179-187). En el nmero 189 gramable.
hemos publicado un Mdulo La mejor forma de comen- Debugger In-Circuit
de aprendizaje sobre microcon- zar a estudiar un microcontrola- Modo SLEEP de bajo con-
troladores PIC diseado por el dor, en este caso una familia de sumo.
profesor Juan de Dios Calle, microcontroladores es la de ver Programacin serie en cir-
sobre el que se podrn realizar sus caractersticas ms relevan- cuito con dos pines.
las prcticas que se diseare- tes, y es justamente lo que Solo necesita 5V para pro-
mos para este curso. No obs- vamos a hacer en las siguientes gramarlo en este modo.
tante, iremos planteando a lo lneas: Voltaje de alimentacin com-
largo de este curso, la realiza- prendido entre 2 y 5,5 V.
cin practica de herramientas Principales Caractersticas Bajo consumo:
de fcil desarrollo y bajo coste, Enumeramos las prestaciones y < 2 mA valor para 5 V y 4 Mhz
para hacer verdaderamente dispositivos especiales que 20 A para 3V y 32 Mhz
prctico este curso. De todas rodean a los PIC16F87X.. <1 A en standby
Dispositivos Perifricos
Tirner0: Temporizador-con-
tador de 8 bits con preesca-
ler de 8 bits
Timerl: Temporizador-conta-
dor de 16 bits con preesca-
ler que puede incrementarse
en modo sleep de forma
externa por un cristal/clock.
Timer2: Temporizador-con-
NOVEDADES
tador de 8 bits con preesca-
ler y postescaler.
Dos mdulos de Captura,
Comparacin, PWM
(Modulacin de Anchura de
Impulsos).
Conversor A/D de 10 bits.
Puerto Serie Sncrono Mas-
ter (MSSP) con SPI e I2C
(Master/Slave). Encapsulado DIP,SOIC de 28 pines.
USART/SCI (Universal
Syncheronus Asynchronous
Receiver Transmitter) con 9
bit.
73
RESISTOR
Puerta Paralela Esclava
(PSP) solo en encapsulados
con 40 pines
Diferencias entre los
modelos de 28 y los
de 40 patitas
Mdulos CCP 2 2 2 2
Comunicaciones Serie MSSP, USART MSSP,USART MSSP,USART MSSP, USART
Comunicacin Paralelo - PSP - PSP
Lneas de entrada en 5 8 5 8
Convertidor A/D de 10 bits
Juego de Instrucciones 35 instrucciones 35 instrucciones 35 instrucciones 35 instrucciones
Longitud de la instruccin 14 bits 14 bits 14 bits 14 bits
74
RESISTOR
Los PIC 16F87X
Bajo el nombre de esta sub-
En la Tabla 1 se muestran las
caractersticas comparativas
Ejercicio Prctico
Para todos aquellos que ya
familia de microcontroladores, ms relevantes de esta familia habis trabajado con algn
actualmente encontramos cua- de microcontroladores : microcontrolador de Micro-
tro modelos: EL PIC chip, como por ejemplo el
16F873/4/6 y 7. Estos micro- Descripcin global PIC16F84 o ya disponis de
controladores disponen de una del dispositivo un programador para este
memoria de programa FLASH La familia consta de cuatro tipo de microcontroladores,
de 4 a 8 KBytes de 14 bits, con- dispositivos (PIC16F873, os proponemos un primer
siderablemente superior frente PIC16F874, PIC16F876 y programa que ser muy fcil
al PIC 16F84 en el que solo dis- PIC16F877). Los PIC de seguir, ya que el juego de
ponamos de l Kbyte de 14 bits. 16F876/873 entran en el blo- instrucciones es exactamente
Esta caracterstica, junto con la que de dispositivos encapsula- el mismo que para el
posibilidad de realizar, con las dos en 28 pines y los PIC PIC16F84. Se trata de leer el
herramientas adecuadas, un 16F877/874 entran en el blo- valor de las lneas del POR-
debugger en circuito, nos han que de dispositivos encapsula- TA, que conectaremos a unos
parecido de lo ms interesante dos en 40 pines. Los dispositi- interruptores que nos den un
para el aprendizaje de esta fami- vos de 28 pines no tienen 0 o un 1, y mostrar dicho
lia de microcontroladores y pos- implementado el puerto para- valor sobre unos diodos
terior desarrollo de proyectos. lelo esclavo. LEDs conectados al PORTB.
De los microcontroladores Las siguientes figuras Hay que tener en cuenta
indicados, el 16F873 y el corresponden a los diagramas que las entradas del PORTA
16FS76 son de 28 pines, mien- de bloque de los dispositivos. se configuran como entradas
tras que 16F874 y el 16F877 Los de 28 pines en la Figura 3 analgicas, al hacer un reset,
tienen 40 patillas, lo que les y los de 40 pines en la Figura por lo tanto, lo primero que
permite disponer de hasta 33 4, y en la Tabla 2 se muestra tendremos que hacer, es con-
lneas de E/S. En su arquitectu- un listado de cada uno de los figurar estas entradas en el
ra adems incorporan: pines corresponden a los dis- registro ADCON1 como
Varios Timer positivos de 40 que tienen su entradas. Esto lo veremos en
USART correspondiente ptilla en los su momento cuando estudie-
Bus 12C dispositivos de 28 pines. mos los registros de configu-
INFORMTICA
75
RESISTOR
76
RESISTOR
RB6/PGC 39 43 16 I/O TTL/ST(2) Interrupciones por cambio de estado en la patilla
o patilla In-Circuit Debugger o reloj serie para
programacin.
RB7/PGD 40 44 17 I/O TTL/ST(2) Interrupciones por cambio de estado en la patilla
o patilla In-Circuit Debugger o datos serie
para programacin.
PORTC es bidireccional de Entrada/Salida
RC0/T1OSO/T1CKI 15 16 32 I/O ST RC0 puede ser salida oscilador Timer1
o entrada de reloj para Timer1
RC1/T1OSI/CCP2 16 18 35 I/O ST RC0 puede ser entrada oscilador Timer1
o Captu2/COMP2 Salida/PWM2.
RC2/CCP1 17 19 36 I/O ST RC2 Puede ser Captu1 Entrada/Comp1
salida/PWM1.
RC3/SCK/SCL 18 20 37 I/O S/T RC3 puede ser entrada/salida del reloj sncrono
para los modos SPI e I2C.
RC4/SDI/SDA 23 25 42 I/O ST RC4 puede ser datos de entrada SPI (modo SPI)
o datos I/O (modo I2C).
RC5/SDO 24 26 43 I/O ST RC5 puede ser datos de salida SPI (modo SPI).
RC6/TX/CK 25 27 44 I/O ST RC6 Puede ser transmisin asncrona USART
o reloj Sncrono.
RC7/RX/DT 26 29 1 I/O ST RC7 puede ser recepcin Asncrona USART
o datos Sncronos.
PORTD es bidireccional de Entrada/Salida
o puerto esclavo paralelo
RD0/PSP0 19 21 38 I/O ST/TTL(3)
RD1/PSP1 20 22 39 I/O ST/TTL(3)
RD2/PSP2 21 23 40 I/O ST/TTL(3)
RD3/PSP3 22 24 41 I/O ST/TTL(3)
RD4/PSP4 27 30 2 I/O ST/TTL(3)
RD5/PSP5 28 31 3 I/O ST/TTL(3)
RD6/PSP6 29 32 4 I/O ST/TTL(3)
RD7/PSP7 30 33 5 I/O ST/TTL(3)
Nombre Pin DIP PLCC QFP I/O/P Buffer Descripcin
Pin# Pin# Pin# Tipo Tipo
PORTE es bidireccional de Entrada/Salida
RE0/RD/AN5 8 9 25 I/O ST/TTL(3) RE0 puede ser control de lectura del puerto
paralelo, 0 entrana analgica 5
RE1/WR/AN6 9 10 26 I/O ST/TTL(3) RE1 puede ser control de escritura del
puerto paralelo o entrada analgica 6
RE2/CS/AN7 10 11 27 I/O ST/TTL(3) RE2 puede ser control de seleccin del
puerto paralelo, entrana analgica 7
VSS 12,31 13,34 6,29 P Masa lgica y patillas de Entrada/Salida
VDD 13,31 12,35 7,28 P Positivo para lgica y patillas
de Entrada/Salida
NC 1,17,28, 12,13, No tienen conexin interna.
40 33,34 Deben mantenerse sin conexin.
Leyenda: I = Entrada O = Salida I/O = Entrada/Salida P = Alimentacin
= No usada TTL = Entrada TTL ST = Entrada Trigger Schmitt
Notas.-
1: Este buffer es una entrada Trigger Schmitt cuando se configura como interrupcin externa
2: Este buffer es una entrada Trigger Schmitt en modo programacin
3: Este buffer es una entrada Trigger Schmitt cuando se configura como I/O y entrada TTL en modo puerto paralelo
INFORMTICA
4: Este buffer es una entrada Trigger Schmitt cuando se configura en modo oscilador RC y entrada CMOS en otros casos
Descripcin de los Pines del PIC 16F874 y PIC16F877.
77
RESISTOR
;***************************************************************************************************
; Programa ES1.ASM Fecha : 11- Febrero-2002
; Este programa configura las entradas del PORTA como entradas digitales y lee el
; contenido del PORTA y muestra su valor sobre los diodos LED conectados al PORTB
; Revisin : 0.0 Programa para PIC16F87X
; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS
; Perro Guardin: habilitado Tipo de Reloj : XT
78
RESISTOR
; Proteccin del cdigo: OFF
;****************************************************************************************************
List p=16F876 ;Tipo de procesador
include P16F876.INC ;Definiciones de registros internos
END
Programa ES1.asm.
CURSO DE MICROCONTROLADORES
PIC16F87X (...Y II)
NUESTROS CURSOS
44
RESISTOR
NUESTROS CURSOS
45
RESISTOR
50
RESISTOR
Seguidamente pasamos a describir cada uno de los bits de los Registros Especiales FSR.
bit 7: IRP: Seleccin de Bancos para el direccionamiento 1= Despus de conectar VDD o al ejecutar la instruccin CLRWDT
indirecto 0 = Al ejecutar la instruccin SLEEP
1 = Bancos 2 y 3 (1 00h- 1 FFh) bit 2: Z: Flag de Cero
0= Bancos 0 y 1 (00h-FFh) 1= El resultado de la ltima operacin aritmtica o lgica
bit 6-5: RP1:RP0: Seleccin del Banco para el direcciona- es Cero
miento directo 0= El resultado de la ltima operacin aritmtica o lgica
11 = Banco 3 (1 80h- 1 FFh) es distinto cero
10 =Banco 2(100h-17Fh) bit 1: DC: Flag de acarreo en el 4 bit de menos peso
01 =Banco 1 (80h-FFh) 1 = Acarreo en la suma
00 = Banco 0 (00h-7Fh) 0 = No acarreo en la suma
Cada Banco es de 128 bytes En la resta es al contrario
bit 4:#TO: Flag de Timer Out bit 0:C: Flag de acarreo en el octavo bit
1= Despus de conectar VDD o ejecutar CLRWDT o SLEEP 1 = Se ha producido un acarreo en la suma y no en la resta
0= Al desbordarse el temporizador de WDT 0= Se ha producido un acarreo en la resta y no en la suma
bit 3:#PD:Flag de Power Down Este bit tambin se utiliza en las instrucciones de rotacin
REGISTRO OPTION u OPTION_REG (Direccin 81h,181h)
El Registro de OPTION_REG es un registro que puede ser ledo o escrito y que contiene varios bits de
control para configurar la asignacin del preescaler al TMR0 o al WDT, la interrupcin externa, el TMR0 y
las resistencias de pull-up del PORTB.
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
El registro INTCON es un registro de lectura y escritura que contiene los bit de habilitacin de interrupcio-
nes por desbordamiento de TMR0 por cambio de nivel en el PORTB e interrupciones externas por la lnea
RBO/INT.
Este registro contiene los bits individuales de habilitacin de interrupciones de los perifricos.
Nota.El bit PEIE (INTCON <6>) debe esta a uno para habilitar las interrupciones de
cualquiera de los perifricos.
bit 7:PSPIE: bit de habilitacin de inte- 1 = Habilita interrupcin por recepcin produce una captura o una comparacin.
rrupcin por lectura / escritura en el en el USAR 1= Habilita la interrupcin del CCPI
Puerto Paralelo Esclavo. Para los 0 = Inhabilita interrupcin por recep- 0=. Inhabilita la interrupcin del CCPI
modelos de 40 pines. cin en el USAR bit 1:TMR2IE: bit de habilitacin de inte-
1 = Habilita la interrupcin por bit 4:TXIE: bit de interrupcin al trans- rrupcin por desbordamiento de TMR2
lectura/escritura en el PSP mitir por el USAR, cuando se vaca el que
0= inhabilita la interrupcin por lectu- buffer. est emparejado con el registro PR2
ra/escritura en el PSP 1 = Habilita la interrupcin de transmi- (92h)
bit 6:ADIF: bit de habilitacin de inte- sin por el USAR 1= Habilita la interrupcin por desborda-
rrupcin por finalizacin de la conver- 0 = Inhabilita la interrupcin de trans- miento de TMR2 emparejado a PR2
sin A/D misin por el USAR 0= Inhabilita la interrupcin de TMR2
l = Habilita la interrupcin del converti- bit 3:SSPIE: bit de habilitacin de inte- emparejado a PR2
dor A/D rrupcin por el Puerto Serie Sncrono bit 0:TMR1IE: bit de habilitacin de inte-
0 = Inhabilita la interrupcin del con- (SSP) rrupcin por desbordamiento del TMRI
vertidor A/D 1= Habilita la interrupcin del SSP 1= Habilita la interrupcin por desborda-
52
RESISTOR
bit 5:RCIE: bit de habilitacin de inte-
rrupcin en recepcin por el USAR,
cuando se llena el buffer,
0= Inhabilita la interrupcin del SSP
bit 2:CCP1IE: bit de habilitacin de inte-
rrupcin del mdulo CCPI cuando se
miento de TMR1
0= Inhabilita la interrupcin por desbor-
damiento de TMR1
Nota 1.- PSPIE para los dispositivos de 28 pines, siempre mantiene este bit a cero
El registro de PIE2 contiene los bit individuales que habilita las interrupciones del perifrico CCP2,. la inte-
rrupcin por colisin del SSP y la ininterrupcin de escritura en la EEPROM.
bit 7:No implementado: se lee como 0 bit 3:BCLIE: Habilita la interrupcin por colisin en el bus
bit 6: Reservado, Mantiene este bits a cero SSP cuando dos o ms maestros tratan de transferir al
bit 5:No implementado: se lee como 0 mismo tiempo.
bit 4:EEIE: Habilita la interrupcin por escritura en la 1 = Habilita la interrupcin por colisin de bus SSP
EEPROM de datos 0 = Deshabilita la interrupcin por colisin en el bus SSP.
1= Habilita la interrupcin por escritura de la EEPROM de bit 2-1No implementados, se leen como 0
datos bit 0:CCP2IE: Habilita la interrupcin del modulo CCP2
0 =Deshabilita la interrupcin por escritura en la EEPROM 1 = habilita la interrupcin de CCP2
de datos 0 = inhabilita la interrupcin de CCP2
REGISTRO PIR1 (Direccin 0Ch)
El registro de PIRI contiene los flags individuales que indican las interrupciones provocadas por los perifricos.
NUESTROS CURSOS
bit 6:ADIF: Flag de final de conversin del Recepcin Modo Comparacin
convertidor A/D I2C Slave 1= Se ha realizado una comparacin de
1= El convertidor A/D ha finalizado la Ha tenido lugar una Transmisin / TMR1 Con el registro emparejado /debe
conversin Recepcin ponerse a cero por Software)
0= El convertidor A/D no ha finalizado la I2C Master 0= No se ha realizado comparacin
conversin Ha tenido lugar una Transmisin / Modo PWM
bit 5:RCIF: Flag de recepcin por el USAR Recepcin Este modo no se utiliza
1= El buffer de datos recibidos por el La condicin de salida iniciada se com- bit 1:TMR2IF: Flag de interrupcin de
USAR est lleno plet por el mdulo de SSP. TMR2 emparejado con PR2
0= El buffer de datos recibidos por el La condicin de parada inicio se comple- 1= TMR2 emparejado con PR2 ocurri
USAR no est lleno t por el mdulo de SSP. (debe ponerse a cero por software)
bit 4:TXIF: Flag de transmisin el USAR La condicin de reinicializacin se com- 0= No ha ocurrido el emparejamiento de
1= El buffer de datos a transmitir no est pleto por el mdulo SSP TMR2 con PR2
lleno Una condicin de la salida se ha realizado bit 0: TMR1IF: Flag de desbordamiento
0= El buffer de daos a transmitir est mientras el mdulo 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 interrupcin del 0 = no ha ocurrido ninguna condicin de a cero por software)
Puerto Serie Sncrono (SSP) interrupcin del mdulo 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.
CURSO DE
MICROCONTROLADORES
MICROCONTROLADORES
PIC16F87X (...y III)
Fernando Remiro Domnguez
Profesor de Sistemas Electrnicos
IES. Juan de la Cierva
www.terra.es/personal/fremiro
54
RESISTOR
S
i habis utilizado un hexadecimal del programa que DESCRIPCIN DEL CIRCUITO
programador por el queremos que se ejecute. Esto El circuito consta de un
puerto serie del ordena- reduce considerablemente el microcontrolador PIC16F876 al
dor para programar los tiempo de programacin ya que que se le han conectado un cristal
PIC16F87X, utilizando solo carga los cdigos del pro- de cuarzo de 4MHz y los
el maravilloso software libre IC- grama que queremos cargar. condensadores de desacoplo de 27
Prog, habris comprobado que el La placa que hemos diseado pF y un pulsador que cuando se
tiempo de carga del PIC16F876, adems de utilizarla como pro- activa pone un nivel bajo en la
por ejemplo, que tiene 8K es de gramadora, se puede utilizar entrada MCLR para provocar un
varios minutos que se hacen como placa de desarrollo, ya que RESET del sistema. Adems para
interminables, sobretodo cuando se dispone de acceso a todos y poder conectar la USART del
estamos programando y depu- cada uno de los pines del micro- microcontrolador al ordenador, se
rando programas. controlador a travs de la tira de ha utilizado un circuito adaptador
Lo que presentamos en este postes para circuito impreso de niveles MAX232, tal y como
curso es un circuito que a travs macho acodados y dispone de un indica el fabricante en sus notas
de la USAR de los PIC 16F87X circuito oscilador a cristal en de aplicacin, y por ltimo se le
es capaz de ponerse en comuni- nuestro caso a 4 MHz, tal y como ha dotado de un conector
cacin con ellos y cargar en la se puede ver en el circuito de la acodado DB-9 macho para poder
memoria de programa el cdigo Figura 1. conectar el circuito al puerto serie
Curso microcontroladoresPAGS 27/12/02 10:01 Pgina 55
VCC
P1
DB9 C1 C2
1uF U1
1uF
1 9
C1+ 9
6
5
9
4
8
3
7
2
1
2 10
E1 V+ 10
3 11 RC6
C1- T1IN
RXPC 4 12 RC7
C2+ R10UT
ESP 5 13 RXPC
C2- R1IN
TXPC C3 6 14 TXPC
1uF V- T1OUT
7 15
7 GND
8 16
8 VCC
C4
VCC C5 MAX232
1uF
1uF
R1
SW1 10K
U2 VCC
R2
MCLR 1 28 RB7
MCLR/VPP RB7
RESET RA0 2 27 RB6
100 RA0/AN0 RB6
RA1 3 26 RB5
RA1/AN1 RB5
RA2 4 25 RB4 VSS VCC
RA2/AN2 RB4
RA3 5 24 RB3
RA3/AN3/VREF RB3
RA4 6 23 RB2
RA4/TOCKI RB2
C6 27pF RA5 7 22 RB1 VCC
RA5/SS/AN4 RB1
8 21 RB0
VSS VSS RB0/INT
9 20
X1 OSC1/CLKIN VDD
10 19
OSC2/CLKOUT VSS
4MHz 18 RC7
RC7/RX/DT
C7 27pF 17 RC6
RC6/TX/CK
RC0 11 VDD
RC0/T1OS0/T1CKI
RC1 12
RC1/T1OS1/CCP2
RC2 13 16 RC5 VCC
RC2/CCP1 RC5/SDO
RC3 14
RC3/SCK/SCL
15 RC4
RC4/SDI/SDA
J1
PIC16F873
MCLR
6
C8
5
4
RB7 0.1u
3
VCC RB6
2
RB3
1
CONECTOR RJ11
CON6 DEBUGE
MCLR
RA2
RA3
RA4
RA0
RA1
RA5
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
RC0
RC1
RC2
RC3
RC4
RC5
RC6
RC7
J2
1
2
3
4
5
6
7
8
9
12
13
14
15
16
17
18
19
20
21
22
23
24
25
10
11
CON25
#define FOSC D'4000000' ;<<< Poner la frecuencia del cuarzo (Hz), max. 20 MHz
#define BAUD D'9600' ;<<< poner la velocidad de transmisin (Bd)
#define BAUD_ERROR D'4' ;<<< Poner la tasa de error (%)
#define TIME ;<<< Poner el mtodo inicio del bootloader PIN/TIME/AUTO
Tabla 1.- Seccin del programa bootloader que debe fijar el usuario.
COMO UTILIZAR
aclaratorio es ver un ejemplo
56
RESISTOR
EL PROGRAMA
BOOTLOADER
1. En primer lugar debemos
3. Si se modifica alguno de los
parmetros anteriores, debe-
mos de volver a compilar el
con un programa que utiliza
este mtodo de carga del pro-
grama de usuario en el micro-
obtener el programa en la programa bootldr.asm. controlador.
siguiente web http://www.ehl.cz/ 4. Programar el microcontrola- El programa TMR0_1.asm es
pic/pic_e.htm , donde tambin se dor con el archivo bootldr.hex un programa ejemplo que uti-
puede obtener el PIC donwloa- utilizando cualquier progra- liza una temporizacin utili-
der V1.8. mador de los que ya se han zando TMR0 sin utilizar las
visto en esta Revista, por interrupciones. Realiza una
2. Abrir el proyecto bootldr.pjt ejemplo el que el que aparece temporizacin de 32,77 ms
utilizando el programa en el mdulo de aprendizaje que se emplea para hacer par-
Microchip MPLAB y cambiar de microcontroladores PIC padear los diodos LED pares
los parmetros de la seccin que apareci en el nmero o impares respectivamente
de usuario marcados dentro 189. Poniendo los bits de con- conectados al PORTB. En el
del ensamblador con las mar- figuracin para que el micro- cdigo de este programa con
cas <<<, tal y como se muestra controlador trabaje en la apli- separados por un ";" (es decir,
en la Tabla 1, en la que hemos cacin. como un comentario) se
fijado el microcontrolador 5. Recompilar el programa de la encuentran las instrucciones
PIC16F876, con un oscilador aplicacin para que no borre el de salto a INICIO que utiliza-
de 4MHz, una velocidad de bootloader. El bootloader usa ramos con un programador
transmisin de 9600 baudios y los 256 bytes de la parte alta de convencional. Y al final del
utiliza el pin 7 del PORTB memoria de programa programa, en la posicin
como seal de disparo para (0x1F04-0x1FFF). de memoria 0x1F00 hemos
ejecutar el bootloader cuando Llegado a este punto lo ms escrito:
est a nivel bajo y correr el
programa de usuario cuando
est a nivel alto. Por tiempo
entra en el programa de usua- ORG 0x1F00
rio despus de haber pasado bcf PCLATH,4 ;Selecciona el banco 0 de memoria
0,3 segundos sin recibir la bcf PCLATH,3
palabra de IDENTIFICA- goto INICIO
CIN.
Curso microcontroladoresPAGS 27/12/02 10:01 Pgina 57
;****************************************************************************
; Programa TMR0_1.ASM Fecha : 7- Mayo-2002
; Este programa utiliza una temporizacin utilizando TMR0 sin utilizar las interrupciones.
;Se realiza una temporizacin de 32,77 ms que se emplea para hacer parpadear los diodos LED
; pares o impares respectivamente conectados al PORTB
; Programa preparado para cargar con el PIC downlader
MICROCONTROLADORES
; Revisin : 0.1 Programa para PIC16F87X
; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS
; Perro Guardin: Deshabilitado Tipo de Reloj : XT
; Proteccin del cdigo: OFF
;*****************************************************************************
List p=16F876 ;Tipo de procesador
include "P16F876.INC" ;Definiciones de registros internos
BUCLE
movwf
call
movlw
PORTB
RETARDO
b'01010101'
; Enciende los LED impares del PORTB
; Llamada a subrutina de RETARDO
57
RESISTOR
movlw b'10101010'
movwf PORTB ; Enciende los LED pares del PORTB
call RETARDO
goto BUCLE
RETARDO
clrf TMR0 ; TMR0 = 0 y empieza su incremento
EXPLORA
btfss TMR0,7 ; Es el bit 7 de TMR0=1?
goto EXPLORA ; No ha llegado TMR0 a 128 Decial
return ; Ha llegado TMR0 al valor 128D y retorna
; al programa principal
ORG 0x1F00
bcf PCLATH,4 ;Selecciona el banco 0 de memoria
bcf PCLATH,3
goto INICIO ;Salta a INICIO
END
0x0000
El Bootloader utiliza las
Salto al Bootloader 4 primeras posiciones
0x0004 (0x0000-0x0003)
MICROCONTROLADORES
Espacio disponible
Espacio de memoria, para el programa
para cargar los del usuario
programas transmitidos (0x0004-0x1EFF)
seguido en la web
0x1F00
Salto al programa Primeras 4 posiciones http://www.microchipc.com/ .
de usuario para el usuario Una vez instalado, al ejecutar-
0x1F04 (0x1F00-0x1F03)
lo, aparece una pantalla
como la que se muestra en la
Cdigo del Bootloader Cdigo del programa
Figura 5.
58
RESISTOR 0x1FFF
Bootloader
(0x1F04-0x1FFF) 3. Seleccionamos la velocidad de
transmisin en baudios, en
nuestro caso 9600, el puerto
serie de comunicacin, en el
Figura 4.- Mapa de memoria del Bootloader para un microcontrola- ejemplo hemos seleccionado
dor de 8KBytes. el COM2 y buscamos el nom-
bre del programa en cdigo
Caractersticas del programa PIC dowloader 1.8 : hexadecimal que queremos
cargar en el microcontrolador,
Compatible con el bootloader de HI-TECH's o de Shane Tolmie TMR0-1.hex.
para los microcontroladores PIC16F87x Este programa tiene las
Funcionamientos bajo Windows 9x/ME/NT/2000 siguientes teclas de funcin
Seleccin de la velocidad a partir del 2400 a 56000 Bd
rpida:
F2 - Bsqueda
Seleccin del puerto serie entre el COM1-6
F4 - Escribir
Trabaja con datos de EEPROM en el archivo hexadecimal
ESC - Cancelacin
No enva la palabra de los configuracin a la posicin 0x2007 o F10 - Salida
palabra de la identificacin desde el bootloader 4. Seguidamente se pulsa el
Mantiene las ltimas configuraciones botn de RESET y el progra-
Se incluye el cdigo de fuente ma se carga en el microcon-
El downloader del PIC se controla al realizar una seal de dispa- trolador PIC. Segn se va rea-
lizando la carga, aparece un
ro del RESET en el microcontrolador
indicador de carga (lnea
Se trabaja en ensamblador para todos aquellos programadores
azul) y al finalizar la carga
que no utilizan el lenguaje C. El bootloader es muy fcil de recom- suena una seal acstica.
pilar para otros microcontroladores actualizando el pin/tieme y la 5. Si volvemos a actuar manual-
frecuencias del cristal de cuarzo. Solo se necesita el programa mente sobre el pulsador de
MPLAB de Microchip que tambin es gratuito. RESET, se ejecutar el pro-
Se puede obtener en las siguientes webs: (http://www.ehl.cz/pic/) grama de usuario.
(http://www.microchipc.com/)
Curso microcontroladoresPAGS 21/1/04 10:14 Pgina 56
CURSO DE
MICROCONTROLADORES
MICROCONTROLADORES
PIC16F87X (...y IV)
Fernando Remiro Domnguez
Profesor de Sistemas Electrnicos
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 despus 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 cdigo, estos bits se GOTO. lugar, el dcimo borra el que se
encuentran en dos registros La familia de los PIC 16F87X guardo en segundo lugar, etc.
especficos. El byte bajo viene del dispone de una pila de 8 niveles
registro de PCL que puede ser de profundidad para un tamao Paginacin de la Memoria
ledo y escrito. Los bits superiores de PC de 13 bits. Esta pila es de Programa
56
RESISTOR
(PC<12:8>). Estn alojados en el
registro PCH , sobre el que no se
puede leer ni escribir, pero se
transparente al programador, es
decir, funciona automticamente
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 travs del registro PCLATH. informacin. instrucciones CALL y GOTO
Las instrucciones de salto Con la Instruccin CALL y proporcionan solo 11 bits de la
CALL y GOTO slo con las interrupciones el valor de direccin de memoria, lo que
proporcionan 11 bits de la PC se salva en el nivel superior. permite un salto de bifurcacin
direccin a saltar. Esto limita el Con las instrucciones RETURN, dentro de una pgina 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. truccin GOTO, dos 2 bit supe-
riores de la direccin 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 pgina se han
PC destino en el PCL seleccionados con los bit corres-
pondientes a la pgina que se
desea llamar. Hay que tener pre-
caucin en los retornos de subru-
5 PCLATH<4:0> tinas y retornos de ininterrup-
cin para no salirse con el valor
8 almacenado en la PILA.
ALU
Por consiguiente, manipula-
cin 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 travs de una
Curso microcontroladoresPAGS 21/1/04 10:14 Pgina 57
;***********************************************************************************
; Programa INTER.asm Fecha : 24- Enero-2003
; Este programa genera una intermitencia en un lED conectado a la lnea RB0. El programa principal
; est en la pagina 0 de memoria de programa y la subrutina en la pgina 1 de programa
; Revisin 0.0 Programa para PIC16F87X
; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS
; Perro Guardin :deshabilitado Tipo de Reloj : XT
; Proteccin del cdigo : OFF
;**********************************************************************************
List p=16F876 ;Tipo de procesador
include "P16F876.INC" ;Definiciones de registros internos
;__config _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_OFF & _XT_OSC & _WDT_OFF
; org 0x00 ;Vector de Reset
; goto INICIO
CONTA1 EQU 0x20
CONTA2 EQU 0x21
PCLATH_TEMP EQU 0x22
ORG 0x1F00
bcf PCLATH,4
bcf PCLATH,3 ;Selecciona la pgina 0
goto INICIO
end ;Fin del programa fuente
Programa Inter1.asm
Curso microcontroladoresPAGS 21/1/04 10:14 Pgina 58
Seleccin de Banco Direccin dentro del Banco Seleccin de Banco Direccin dentro del Banco
00 01 10 11
00h 80h 100h 180h
Memoria
de datos
MICROCONTROLADORES
RECURSOS ESPECIALES DEL
PROCESADOR
Alguno de los pines de los
puertos de E/S estn multiplexa-
dos con una o unas funciones
alternativas para la utilizacin de
los perifricos internos. En gene-
ral, cuando un perifrico se habi-
lita el pin correspondiente no
puede utilizarse como pin de E/S.
Los microcontroladores
PIC16F87X que estn encapsula-
dos en 28 pines, disponen de tres
puertos (PORTA, B y C) mien-
tras que los microcontroladores
de 40 pines disponen de cinco
puertos (PORA, B, C, D y E).
como puede verse en la Figura 4, El PORTD y el registro TRISD Para que trabaje como puerto
que se conecta siempre que la Este puerto solo existe en los de comunicacin esclavo, hay
lnea est configurada como sali- microcontroladores de la familia que poner a 1 el bit PSPMODE,
da. Cuando se produce un Reset 16F87X de 40 pines. El PORTD que se encuentra en el registro
por conexin de alimentacin est formado por 8 lneas TRISE.
(POP) se desconectan todas las bidireccionales denominadas
resistencias de pull-up. RD0/PSP0-RD7/PSP7 controla- El PORTE y el registro TRISE
INFORMTICA
das por el registro de direcciona- Este puerto solo existe en los
EL PORTC y el Registro TRISC miento TRISD. Poniendo un 1 microcontroladores de la familia
El PORTC est formado por 8 en un bit del registro TRISD se 16F87X de 40 pines. Est forma-
lneas bidireccionales controladas direcciona le lnea correspon- do por 3 pines multifuncin
por el registro de direccionamien- diente como entrada. Mientras R E 0 / R D # / A N 5 ,
to TRISC, Poniendo un 1 en un que los bit que se ponen a 0 en el R E 1 / W R # / A N 6 , y
bit del registro TRISC se direc- registro de direccionamiento RE2/CS#/AN7, que se configu-
ciona la lnea correspondiente TRISD, se configuran como sali- ran individualmente como entra-
como entrada. Mientras que los da. En este puerto todas las da o salida a travs de los tres bit
bit que se ponen a 0 en el registro entradas disponen de un Trigger de menor peso del registro
de direccionamiento TRISC, se Schmitt. TRISE (TRISE <2:0>).
configuran como salida. Adems los pines de E/S digi- Las E/S del PORTE se con-
Las lneas del PORTC estn
multiplexadas con varias funcio-
nes de los perifricos. En la
tales de este puerto, pueden mul-
tiplexarse como una puerta para-
lela de 8 lneas (PSP), que sirve
vierten en entradas de control
(RD#, WR# y CS#)para el puerto
PSP cuando el bit PSPMODE que
61
RESISTOR
Tabla 1, se muestra los pines del para permitir la comunicacin en corresponde con el bit 4 del regis-
PORTC y las distintas funciones paralelo con otros elementos del tro TRISE. Los pines de E/S digi-
multiplexadas que tienen. sistema. tal del PORTD estn multiplexa-
das con las entradas digitales. Nota.- Despus de un Power- xadas de los bit del PORTD son
Cuando se seleccionan las entra- on-Reset, estos pines quedan las siguientes:
das analgicas los bit de control configurados como entradas ana- Para aclarar el concepto del
del TRISE deben ponerse a 0. lgicas. Las funciones multiple- manejo de los puertos vamos a
62
RESISTOR
Nombre
RE0/#RD/AN5
Bit
Bit 0
Funcin
E/S digital. Seal de lectura en el modo de puerta paralelo esclava. Canal 5 del
Conversor A/D
RE1/WR#/AN6 Bit 1 E/S digital. Seal de escritura PSP. Canal 6 del Conversor A/D
RE2/CS#/AN7 Bit 2 E/S digital. Seal de Chip Select en el modo PSP. Canal 7 del Conversor A/D
;**********************************************************************************
; Programa Display.asm Fecha : 27- Enero-2003
; Este programa lee el estado de cuatro interruptores conectados al PORTA <RA3:RA0>
; y representa sobre un display conectado al PORTB, el valor hexadecimal correspondiente
; Revisin 0.0 Programa para PIC16F87X
; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS
; Perro Guardin :deshabilitado Tipo de Reloj : XT
; Proteccin del cdigo : OFF
;**********************************************************************************
List p=16F876 ;Tipo de procesador
include "P16F876.INC" ;Definiciones de registros internos
;__config _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_OFF & _XT_OSC & _WDT_OFF
; org 0x00 ;Vector de Reset
; goto Inicio
org 0x05
INICIO clrf PORTB ;Borra los latch de salida
bsf STATUS,RP0 ;Selecciona banco 1
clrf TRISB ;Puerta B se configura como salida
movlw b'00000110' ;Configura PORTA como E/S Digitales
movwf ADCON1
movlw b'00001111' ;Configura RA3:RA0 como entradas
movwf TRISA
bcf STATUS,RP0 ;Selecciona banco 0
BUCLE movf PORTA,W
andlw b'00001111' ;Lee el cdigo de RA0-RA3
call Tabla ;Convierte a 7 segmentos
movwf PORTB ;Visualiza sobre el display
goto BUCLE
;**********************************************************************************
Tabla: addwf PCL,F ;Desplazamiento sobre la tabla
retlw b'00111111' ;Dgito 0
retlw b'00000110' ;Dgito 1
retlw b'01011011' ;Dgito 2
retlw b'01001111' ;Dgito 3
retlw b'01100110' ;Dgito 4
retlw b'01101101' ;Dgito 5
retlw b'01111101' ;Dgito 6
retlw b'00000111' ;Dgito 7
retlw b'01111111' ;Dgito 8
retlw b'01100111' ;Dgito 9
retlw b'01110111' ;Dgito A
retlw b'01111100' ;Dgito b
retlw b'00111001' ;Dgito C
retlw b'01011110' ;Dgito d
retlw b'01111001' ;Dgito E
retlw b'01110001' ;Dgito F
;**********************************************************************************
ORG 0x1F00
bcf PCLATH,4
bcf PCLATH,3 ;Selecciona la pgina 0
goto INICIO
end
realizar un sencillo ejercicio que El circuito de aplicacin es el tal y como est es valido para
consiste en la lectura de unos que se muestra en la Figura 5. El los primeros y si se quitan los ";",
interruptores conectados al programa est diseado para se puede cargarse directamente
PORTA y la representacin de aquellos que utilicen el bootloa- utilizando cualquiera de los
dicho valor binario en hexadeci- der con el circuito que presenta- dems programadores, estas
mal sobre un display de 7 seg- mos en el nmero anterior o un lneas las hemos marcado en
mentos conectado en el PORTB. programador con el IC-PROG, azul.
Vcc= 5V
Figura 5.- Circuito de aplicacin del programa
Display.asm utilizando el PIC 16F876.
R3 R4 R5 R6 R1
10K 10K 10K 10K 10K R7 300
g a
Reset R8 300
R2 100 f
MCLR RB7 R9 300 f b
e
RA0 RA0 R10 300 g
RA1 RB6 d
RA2 R11 300
RA1 RA3 c
RA4 RB5 R12 300 e c
b
RA2 RA5 RB4
Vss RB3 R13 300 d
RB2 a
C1 27 pF
RB1
RA3 RB0
OSC1
XT 4Mhz
OSC2/CKOUT Vcc=5V
VDD
VSS
C2 27 pF
RC0 RC7
RC1 RC6
RC2 RC5
RC3 RC4
Curso microcontroladoresPAGS 29/4/03 10:38 Pgina 52
CURSO DE
MICROCONTROLADORES
MICROCONTROLADORES
PIC16F87X (...y V)
Fernando Remiro Domnguez
Profesor de Sistemas Electrnicos
IES. Juan de la Cierva
www.terra.es/personal/fremiro
52
Puede trabajar con el reloj preescaler). Si el registro TMR0 se produce cuando el registro TMR0
interno o con una seal de reloj escribe, el incremento se inhibe se desborda al pasar de FFh a 00h.
externa durante los siguientes dos ciclos de Este desbordamiento pone a
RESISTOR Dispone de una interrupcin por instruccin. EL usuario puede uno el bit T0IF (INTCON<2>).
desbordamiento al pasar de FFh trabajar teniendo en cuenta esto y La ininterrupcin puede
a 00h ajustando el valor a cargar en el enmascararse poniendo a cero el
Seleccin de flanco ascendente o TMR0. bit T0IE (INTCON <5>). EL bit
descendente para el flaco del El modo contador se selecciona T0IF debe ponerse a cero por
reloj externo poniendo a uno el bit T0CS software al finalizar la rutina de
(registro OPTION_REG <5>). El atencin a la interrupcin del
En la Figura 1 se muestra un modo contador, Timer0 se desbordamiento de TMR0. La
diagrama de bloques del TIMER0 incremento en cada flaco de subida interrupcin de TMR0 no saca al
y el preescaler que comparte con el o de bajada de la seal que le llega microcontrolador del estado de
WDT. Puede encontrarse por RA4/TOCK1. El flanco de SLEEP, debido a que el
informacin adicional sobre incremento se determina por el bit temporizador est desactivado
el mdulo Timer0 en el manual T0SE (registro OPTION_REG durante el modo SLEEP
Bus de datos
Figura 1.- Diagrama de bloques del TIMER 0
8
Foosc/4 0
RA4/T0CKI Sincronizacin
1 PSout con el reloj
pin TMR0
1 interno
Preescaler 0 PSout
Programable (Retardo de 2 ciclos)
T0SE
El bit T0IF se
3 pone a 1 si hay
overflow
T0CS PS2,PS1,PS0 PSA
Notas:
1. El preescaler es compartido con el WDT (En la Figura 2 se puede ver un diagrama de bloques detallado
2. TOCS, TOSE, PSA, PS2:PS0 (OPTION_REG<5:0>)
Curso microcontroladoresPAGS 29/4/03 10:38 Pgina 53
Bus de datos
CLKOUT (=Foosc/4)
8
0 M 1 Retardo
RA4/T0CKI U M
MICROCONTROLADORES
U de 2 Registro TMRO
pin 1 X
0 X ciclos
T0SE
T0CS PSA
0
M Preescaler de 8 bits
Perro 1 U El bit T0IF se
Guardin X 8 pone a 1 si hay
overflow
3
Multiplexor 1-8 PS2:PS0
PSA
WDT bit de habilitacin
0 1
MUX PSA
Vcc= 5V
R1
10K R7 300
g a
Reset R8 300
R2 100 f
MICROCONTROLADORES
MCLR RB7 R9 300 f b
e
RA0 R10 300 g
RA1 RB6 d
RA2 R11 300
RA3 c
RA4 RB5 R12 300 e c
b
RA5 RB4
Vss RB3 R13 300 d
RB2 a
C1 27 pF
RB1
RB0
OSC1
XT 4Mhz
OSC2/CKOUT Vcc=5V
VDD
VSS
C2 27 pF
RC0 RC7
RC1 RC6
RC2 RC5
RC3 RC4
EL MDULO DE TIMER1
El mdulo de TIMER1 es un
0-->DIGITO CONTA=0? temporizador/contador de 16 bits,
formado por dos registros de 8 bits
SI SI cada uno TMR1H y TMR1L, que
son de lectura y escritura y que son
LEETABL DIGITO+1-->DIGITO los que guardan el valor de la
A cuenta en cada momento. El valor
NO
de los registros TMR1H y TMR1L
se incrementan desde 0000H hasta
NO
DIGITO=10?
16 -->CONTA FFFFH, en cuyo instante se vuelve
a poner a 0000h y se activa el
flag TMR1IF (PIR1<0>). La
REPONER W
ininterrupcin de TMR1 puede ser
Y habilitada/deshabilitada segn este
STATUS
a uno/cero el bit TMR1IE (PIE1
<0>).
EL TIMERl tiene los siguientes
1 -->TOIF modos de trabajo:
1. Como Temporizador
2. Como contador Sncrono
Figura 4.- Cronograma del programa 3. Como contador Asncrono
TMR0_2 RETFIE
Curso microcontroladoresPAGS 29/4/03 10:38 Pgina 55
;*************************************************************************************
; Programa TMR0_2.ASM Fecha : 15 - Abril - 2003
; Este programa presenta en el display de ctodo comn conectado en el PORTB
; los nmeros del 0 al 9, mostrando un dato por segundo (aproximadamente), la
; temporizacin la realiza utilizando la interrupcin por TMR0 y el registro auxiliar CONTA
; Revisin : 0.0 Programa para PIC16F87X
; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS
; Perro Guardin : deshabilitado Tipo de Reloj : XT
; Proteccin del cdigo : OFF
;********************************************************************************************
List p=16F876 ;Tipo de procesador
include "P16F876.INC" ;Definiciones de registros internos
;************************** DEFINICION DE VARIABLES ************************************
W_TEMPORALequ 0x20 ;Almacena W antes de atender la interrupcin
S_TEMPORAL equ 0X21 ;Almacena Status antes de atender la interrupcin
DIGITO equ 0x22 ;numero a representar en display
CONTA equ 0x23 ;Contador auxiliar para alargar el tiempo a 1 segundo
;entre cada cambio de digito, ya que los 256 (FF) del Timer,
;aunque se divida por 256, es 4x256x256=262,144 ms
;*******************************************************************************************
; ORG 0x00
; goto INICIO
ORG 0x04
;*************************** ATENCION A LA INTERRUPCION *******************************
INT_TMR0
movwf W_TEMPORAL ;Guarda el valor actual de W cuando se interrumpe
swapf STATUS,W ;Intercambia nibbles y guarda en W
movwf S_TEMPORAL ;Almacena Status pero cambiado el ..
;.. nibble alto por el bajo
clrf TMR0 ;Inicializa TMR0=00
decfsz CONTA,f ;Decrementa CONTA y si =0 incrementa DIGITO
goto FIN_INT ;Si cont_aux <> 0 finaliza interrupcin
incf DIGITO,F ;Incrementa el DIGITO
movlw D'16' ;Al cargar TMR0 con 0 hace 256 cuentas con un predivisor de 256
;(programado en OPTION_REG). Como queremos 1sg. ponemos 16 en CONTA
; as obtenemos 4*256*256*16 = 1,048576s
movwf CONTA ;inicializa de nuevo CONTA para un nuevo digito
FIN_INT
swapf S_TEMPORAL,W ;Deja Status como estaba antes y en W
movwf STATUS
swapf W_TEMPORAL,F ;Intercambia nibbles del W guardado
swapf W_TEMPORAL,W ;Vuelve a intercambiar pero ya en W
bcf INTCON,T0IF ;Borra el flag de la interrupcin
retfie ;Retorno de interrupcin
;********************* PROGRAMA PRINCIPAL *************************************
INICIO
bcf STATUS,RP0
bsf STATUS,RP0 ;Habilita Banco1 de registros
clrf TRISB ;direcciona PortB como salidas
movlw B'00000111' ;Reloj interno asignado aTMR0 con divisor por 256
movwf OPTION_REG
bsf INTCON,GIE ;habilitacin general de las interrupciones
bsf INTCON,T0IE ;habilitacin de la interrupcin por TMR0
bcf STATUS,RP0 ;RP0=0 habilita Banco0 de registros
clrf TMR0 ;Inicializa TMR0 a 0
movlw D'16' ;Carga CONTA con 16
movwf CONTA
PONER_0
clrf DIGITO ;Carga DIGITO a 0 para iniciar cuenta
LEETABLA
call TABLA
movwf PORTB ;Muestra digito en el display 7 segmentos (PortB)
movlw D'9' ;
subwf DIGITO,W ;Compara DIGITO con 9
btfss STATUS,Z ;
goto LEETABLA ;Si DIGITO NO = 9, incrementa DIGITO
goto PONER_0 ;Si DIGITO=9,lo pone a 0 de nuevo.
;********************* TABLA CON LOS VALORES DE LOS DIGITOS ******************
TABLA
movf DIGITO,W ;Guarda digito en acumulador
addwf PCL,F ;Suma al contador de programa el digito
DT 0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X67
;*******************************************************************************
ORG 0x1F00
bcf PCLATH,4
bcf PCLATH,3 ;Selecciona la pgina 0
goto INICIO ;Salto a la direccin de INICIO del programa
;*******************************************************************************
END
Curso microcontroladoresPAGS 29/4/03 10:38 Pgina 56
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 seal 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 sincronizacin se hace
se selecciona el reloj el interno del como contador sncrono o despus de la fase del preescaler. En
micro-controlador (Fosc/4) y asncrono . Cuando el TIMER1 se el preescaler la fase de la seal de
cuando est a uno se selecciona el est incrementando segn le llegan reloj es por lo tanto asncrona.
modo contador y cuenta los los impulsos externos, los En este modo de trabajo,
impulsos que le llegan a travs del incrementos ocurren en los flancos durante el modo SLEEP el
pin RC0/TlCKl. Adems como se de subida. Despus de que el TIMER1 no se incrementa an
ver mas adelante el TIMER1 TIMER1 se ha configurado como cuando la seal de reloj
tiene la posibilidad de contador, debe producirse un flanco externa est presente. El
reinicializarse, a partir del mdulo de bajada antes de empezar a preescaler sin embargo continua
CCP. contar. incrementndose.
T1CK1
(Por defecto a
nivel alto)
MICROCONTROLADORES
T1CKI
(Por defecto a
nivel bajo)
TMR1ON
on/off T1SYNC
1 Preescaler sincronizacin
RC0/T1OSO/T1CKI deteccin
1,2,4,8
FOSC/4 0
RC1/T1OSI/CCP2 Clok
T1OSCEN
Interno
TMR1CS
2
T1CKPS1:T1CKPS0 Entrada SLEEP 57
RESISTOR
Habilita
Oscilador
Figura 5.- Diagrama de bloques de TIMER1
Tipo de Oscilador Frecuencia C1 C2
LP 32 kHz 33pF 33pF
100kHz 15 pF 15 pF
200 15 pF 15 pF
Estos valores son para los siguientes cristales de referencia
32.768 EpsonC-001R21.768K-A 20 PPM
100 kHz Epson C-2 100.000 KC-p1 20 PPM
200 kHz STD XTL 200.000 kHz 20 PPM
Nota.-
1. Capacidades mayores aumentan la estabilidad del oscilador, pero tambin aumentan el start-up.
2. Cada cirstal/resonador tiene sus propias caractersticas, el usuario debe consultar los valores apropiados
de los componentes externos al cristal.
Tabla 1.- Seleccin de los condensadores para el oscilador del TIMER1
contina la cuenta incluso en el para el mdulo CCP (Captura y recibiendo (teniendo cuidado con el
modo SLEEP y puede generar una comparacin-PWM) hardware). Sin embargo, el usuario
interrupcin por desbordamiento debe tener en cuenta que el
que despierta al procesador. Hay LECTURA Y ESCRITURA EN EL contador es de 16 bits y se pueden
que tener especial cuidado con el TIMER1 CUANDO SE tener ciertos problemas al leer los
software al leer o escribir el TRABAJA EN EL MODO dos registros de ocho bits, ya que el
contador. CONTADOR ASNCRONO contador puede desbordarse entre
Cuando se trabaja en el modo Se pueden leer los contadores las lecturas.
contador asncrono, el TIMER1 no TMR1H y TMR1L mientras la Para escribir en l, se
puede usare como base de tiempos seal externa del contador se est recomienda que el usuario
Curso microcontroladoresPAGS 29/4/03 10:38 Pgina 58
Direccin Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en Valor en el
POR,BOR resto de Reset
0Bh,8Bh
10Bh,18Bh INTCON GIE PEIE T0IE INTE RBIE TOIF INTE RBIF 0000 000x 0000 000u
0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
0Bh PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
0Eh TMR1L Registro de carga del byte de menor peso del registro de 16 bits de TMR1 xxxx xxxx uuuu uuuu
0Fh TMR1H xxxx xxxx uuuu uuuu
10h T1CON --- --- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --xx xxxx --uu uuuu
Leyenda
x = desconocido, u = inalterado; - = no implementado se lee como 0. Las celdas sombreadas no son usa-
das por el TIMER1
Nota 1: Los bits PSPIE y PSPIF estn reservados para el PIC16F873/876, mantener estos bits a cero.
;*************************************************************************************
; Programa TMR1_0.ASM Fecha : 15 - Abril - 2003
; Este programa presenta en el display de ctodo comn conectado en el PORTB
; los nmeros del 0 al 9, mostrando un dato por segundo (aproximadamente), la
; temporizacin la realiza utilizando la interrupcin por TMR1 y el registro auxilar CONTA
; Revisin : 0.0 Programa para PIC16F87X
; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS
; Perro Guardin : deshabilitado Tipo de Reloj : XT
; Proteccin del cdigo : OFF
;********************************************************************************************
List p=16F876 ;Tipo de procesador
include "P16F876.INC" ;Definiciones de registros internos
;********************* DEFINICION DE VARIABLES *****************************
W_TEMPORALequ 0x20 ;Almacena W antes de atender la interrupcin
S_TEMPORAL equ 0X21 ;Almacena Status antes de atender la interrupcin
DIGITO equ 0x22 ;numero a representar en display
CONTA equ 0x23 ;Contador auxiliar para alargar el tiempo a 1 segundo
;entre cada cambio de digito, ya que los 256 (FF) del Timer,
;aunque se divida por 256, es 4x256x256=262,144 ms
;*******************************************************************************
; ORG 0x00
; goto INICIO
ORG 0x04
;******************* ATENCION A LA INTERRUPCION **************************
INT_TMR1
movwf W_TEMPORAL ;Guarda el valor actual de W cuando se interrumpe
swapf STATUS,W ;Intercambia nibbles y guarda en W
movwf S_TEMPORAL ;Almacena Status pero cambiado el ..
;.. nibble alto por el bajo
movlw low ~.62500 ;Carga parte baja del contador con el complemento
movwf TMR1L ; de 62500 en hex.
movlw high ~.62500 ;Carga parte baja del contador con el complemento
movwf TMR1H ;de 62500 en hex.
bcf PIR1,0 ;Desconecta el flag del TMR1
incf PORTB,F ;Incrementa el contador de la Puerta B
decfsz CONTA,f ;Decrementa CONTA y si =0 incrementa DIGITO
goto FIN_INT ;Si cont_aux <> 0 finaliza interrupcion
incf DIGITO,F ;Incrementa el DIGITO
movlw D'2'
movwf CONTA ;inicializa de nuevo cont_aux para un nuevo digito
FIN_INT
swapf S_TEMPORAL,W ;Deja Status como estaba antes y en W
movwf STATUS
swapf W_TEMPORAL,F ;Intercambia nibbles del W guardado
swapf W_TEMPORAL,W ;Vuelve a intercambiar pero ya en W
bcf INTCON,T0IF ;Borra el flag de la interrupcin
retfie
;********************* PROGRAMA PRINCIPAL *************************************
INICIO
bcf STATUS,RP0
bsf STATUS,RP0 ;Habilita Banco1 de registros
clrf TRISB ;direcciona PortB como salidas
movlw b'11111111'
movwf OPTION_REG ;Preescaler d 128 asociado al WDT
bsf PIE1,0 ;habilita interrupcin del TMR1
bcf STATUS,RP0 ;Selecciona banco 0
;El TMR1 trabaja con oscilador interno y un preescaler de 1:8. Si se trabaja a una frecuencia
;de 4 MHz, el TMR1 deber ser cargado con 62500 para que provoque interrupcin al de 0.5s b
movlw b'00110001'
movwf T1CON
movlw b'11000000'
movwf INTCON ;Habilitacin global de interrupciones
movlw D'2' ;Carga CONTA con 2
movwf CONTA
PONER_0
clrf DIGITO ;Carga DIGITO a 0 para iniciar cuenta
LEETABLA
call TABLA
movwf PORTB ;Muestra digito en el display 7 segmentos (PortB)
movlw D'9' ;
subwf DIGITO,W ;Compara DIGITO con 9
btfss STATUS,Z ;
goto LEETABLA ;Si DIGITO NO = 9, incrementa DIGITO
goto PONER_0 ;Si DIGITO=9, lo pone a 0 de nuevo.
;********************* TABLA CON LOS VALORES DE LOS DIGITOS ******************
TABLA
movf DIGITO,W ;Guarda digito en acumulador
addwf PCL,F ;Suma al contador de programa el digito
DT 0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X67
;*******************************************************************************
ORG 0x1F00
bcf PCLATH,4
bcf PCLATH,3 ;Selecciona la pgina 0
goto INICIO ;Salto a la direccin de INICIO del programa
;*******************************************************************************
END
Curso (60-64) 3/7/03 09:47 Pgina 60
CURSO DE
MICROCONTROLADORES
MICROCONTROLADORES
PIC16F87X (...y VI)
Fernando Remiro Domnguez
Profesor de Sistemas Electrnicos
IES. Juan de la Cierva
www.terra.es/personal/fremiro
EL MDULO TIMER2 selecciona a travs de los bits especiales, de manera, que al incre-
El TIMER2 es un temporizador- T2CKPS1:T2CKPS0 (T2CON mentarse TMR2 y coincidir con el
contador ascendente de 8 bits que <1:0>). El postsrscaler tiene como valor del registro PR2 se produce un
ocupa la posicin 11H del banco de misin poner a nivel alto el flag de impulso de salida por EQ, estos
registros especiales, con un preesca- interrupcin del TMR2 cuando se impulsos pueden ser divididos por
ler y un postscaler. Se puede usar haya producido la igualdad entre el un postescaler antes de activar el
como base de tiempo para el mdulo registro PR2 y el TMR2 un nmero flag TMR2IF (PIR1<1>). El registro
PWM, el mdulo CCP (Mdulo de de veces comprendido entre 1 y 16 y PR2 es un registro de 8 bits que pue-
Captura y Comparacin) y el Puerto que se indica con los bits de ser escrito y ledo. Este registro
60
Serie Sncrono (SSP). El registro T2OUTPS3:T2CKPS0 (T2CON toma el valor FF despus de un
TMR2 se puede leer y escribir y se <6:3>) Reset.
pone a cero despus de realizar un El postscaler permite dividir la
RESISTOR Reset. OPERACIONES CON EL seal que activa el flag
La seal de reloj interna TIMER2 de interrupciones por desbordamien-
(FOSC/4) antes de llegar al TMR2 El Titner2 tiene emparejado el to del TMR2 por cualquier valor
pasa por un preescaler (Predivisor) registro PR2 que ocupa la posicin comprendido entre 1:1 hasta 1:16,
con rangos de 1:1, 1:4, 1:16 que se de 92H del banco 1 de registros para controlar el postescaler se utili-
zan los bit TOUTPS3:TOUTPS0 REGISTRO T2CON: REGISTRO DE CONTROL DEL TIMER2
(T2CON <6:3>). (DIRECCIN 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 seleccin del rango del divisor del
el temporizador poniendo a cero el
bit TMR2ON (T2CON<2>). Postescaler para el TIMER2
Leyenda
x = desconocido, u = inalterado; - = no implementado se lee como 0. Las celdas sombreadas no son usadas
por el TIMER2
Nota 1: Los bits PSPIE y PSPIF estn reservados para el PIC16F873/876, mantener estos bits a cero.
62
RESISTOR
cuarzo de 4 Mhz, y de que un ciclo 195, con un preescaler de 1/16, se as de cdigo que hemos eliminado
mquina se ejecuta en un 1 s, la puede llegar a 3120 s y por ltimo para utilizar el programa bootloader
mxima cuenta del que podemos con un postescaler de 1/16 se obtiene para poder realizar la carga del mis-
hacer con el TIMER2 es de 256 s, una temporizacin de 49.920 s que mo y en color verde, las lneas que
si tenemos en cuenta la mxima divi- aproximadamente es de 50 ms. Pues hemos aadido, de tal manera que
sin del preescaler de 1/16 y del bien, si esta temporizacin se realiza eliminado las lneas de color verde y
postscaler 1/16 la mxima cuenta o 20 veces, ya tenemos prcticamente habilitando las que estn en azul el
temporizacin a la que se puede lle- 1 segundo. programa puede grabarse directa-
gar es a 256 x 16 x 16 = 65536 s. El programa es el siguiente, en el mente en un PIC16F876.
Por lo tanto, si se carga el registro de que como viene siendo habitual
periodos PR2 con el valor decimal estn marcado en color azul las lne-
Curso (60-64) 3/7/03 09:47 Pgina 63
MICROCONTROLADORES
63
RESISTOR
;**********************************************************************************
;TIMER2-1.asm
;El TMR2. Temporizacin hace que el display que est conectado al PORTB se incremente cada
; segundo. El TMR2 provoca una interrupcin cada 50 mS. Transcurridas 20 interrupciones, el tiempo
; total obtenido es de 1 segundo.
; Revisin : 0.0 Programa para PIC16F87X
MICROCONTROLADORES
; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS
; Perro Guardin : deshabilitado Tipo de Reloj : XT
; Proteccin del cdigo : OFF
;**********************************************************************************
List p=16F876 ;Tipo de procesador
include "P16F876.INC" ;Definiciones de registros internos
VECES equ 0x20 ;Variable de temporizacin
CONTADOR equ 0x21 ;Variable del contador
; org 0x00 ;Vector de Reset
; goto INICIO
org 0x04
goto INTERUPCION ;Vector de interrupcin
;********************* TABLA CON LOS VALORES DE LOS DIGITOS ******************
TABLA addwf PCL,F ;Suma al contador de programa el digito
DT 0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X67;
;*******************************************************************************
;PROGRAMA DE ATENCIN A LA INTERRUPCION. se ejecuta cada 50 ms, cuado se ejecuta
;20 veces, indica de que ha transcurrido 1 segundo
INTERUPCION decfsz VECES,F ;Ha pasado un segundo ??
goto No_es_1_seg ;No
incf CONTADOR,F ;Si, incrementa el contador
movlw .10
subwf CONTADOR,W
64
RESISTOR
btfsc
clrf
STATUS,Z
CONTADOR
movf CONTADOR,W
call TABLA
;Contador > 9 ??
;Si, ponerlo a 0
;Convierte a 7 segmentos
movwf PORTB ;presenta el dato en el display
movlw .20
movwf VECES ;Reinicia variable delay
No_es_1_seg bcf PIR1,TMR2IF ;Repone el flag del TMR2
clrf TMR2 ;Reinicia el TMR2
retfie
;*****************************************************************************
;PROGRAMA PRINCIPAL
;*****************************************************************************
INICIO clrf PORTB ;Desconecta salidas
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'00000110'
movwf ADCON1 ;Configura PORTA E/S digitales
clrf TRISB ;Configura PORTB como salida
bsf PIE1,TMR2IE ;Habilita interrupcin del TMR2
movlw .195
movwf PR2 ;Carga registro de periodos con 195
bcf STATUS,RP0 ;Selecciona banco 0
movlw b'01111111'
movwf T2CON ;TMR2 ON, preescaler 1/16 y postcaler 1/16
clrf TMR2 ;pone a cero TMR2
movlw .20
movwf VECES ;Inicia variable de VECES
movlw b'11000000'
movwf INTCON ;Habilita interrupciones
clrf CONTADOR ;Inicia el contador
goto $ ;Bucle infinito
;*****************************************************************************
ORG 0x1F00
bcf PCLATH,4
bcf PCLATH,3 ;Selecciona la pgina 0
goto INICIO ;Salto a la direccin de INICIO del programa
;*****************************************************************************
end
56-83 MICROCONTROLADORES 14/8/03 13:26 Pgina 56
CURSO DE
MICROCONTROLADORES
MICROCONTROLADORES
PIC16F87X (...y VII)
Fernando Remiro Domnguez
Profesor de Sistemas Electrnicos
IES. Juan de la Cierva
www.terra.es/personal/fremiro
56
Registro de captura de 16 bit alto) que ocupa la direccin 1Ch. El dica sin en control del programa de
Registro de comparacin de 16 registro de control del CCP2 es el instrucciones.
bits
RESISTOR Modulacin de anchura de pulsos
Modo CCP Recurso de Timer Mdulo de Captura
PWM Captura Timer1 En este modo se captura en
CCPRxH:CCPRxL el valor del
Comparacin Timer1
Los mdulos CCP1 y CCP2 son registro de 16 bits del TMR1 cuan-
idnticos en su modo de funciona- PWM Timer2 do se produce un evento por el pin,
miento, con la excepcin del modo Tabla 1.- Modo CCP Recurso de RCy/CCPx . Un evento puede ser:
de disparo especial. En las tablas 1 y TIMER. En los mdulos de captura
Cada flanco descendente
2 se muestran los recursos e interac- Cada flanco ascendente
y comparacin intervienen el
ciones de los mdulos. Seguida- Cada 4 flancos ascendentes
mente describiremos el funciona- TMR1, en PWM el TMR2. Cada 16 flancos ascendentes
miento del mdulo CCP1. El mdu-
lo CCP2 opera de igual modo salvo
en lo referente al modo de disparo
INTERACCIN DE LOS DOS MDULOS CCP
especial. Modo CCPx Modo CCPy Interaccin
Captura Captura La misma base de tiempos de TMR1
Mdulo CCP1: Captura Comparacin El comparador debe configurarse para el
El registro de Captura / Compa-
modo de disparo especial que pone a cero
racin / PWM (CCPR1) de 16 bits
esta formado por dos registros de 8 el TMR1
bits: CCPR1L (byte, bajo) que ocupa Comparacin Comparacin El comparador(es) debe configurarse para
la direccin 15h y el CCPR1H (byte el modo de disparo especial que pone a
alto) que ocupa la posicin 16h. El cero el TMR1
registro de control o configuracin PWM PWM El PWM tendr la misma frecuencia y
del CCP1 es el CCP1CON que ocu-
pa la direccin 17h. El modo de dis- proporcin de actuacin (interrupcin de
paro especial se genera por la igual- TMR2)
dad en la comparacin de CCPR1 PWM Captura Ninguna
con TMR1 y reestablecer el PWM Comparacin Ninguna
TIMER1 y el CCPR1, funciona
como un registro de perodo, capaz Tabla 2.- Interacin de los mdulos CCP
56-83 MICROCONTROLADORES 14/8/03 13:26 Pgina 57
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 operacin. ciones durante la operacin.
captura, se pone a " 1 " el flag Se debe poner a cero el flag
CCP1IF del registro PIRI <2>, ade- Configuracin del pin CCP CCP1IF por software.
ms si est a " 1 " el bit PIE de En el modo captura, el pin
CCP1IE<2>, se genera una peticin RC2/CCP1 debe configurarse como CCP Preescaler
de interrupcin. 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- mdulo 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 condicin de del preescaler se pone a cero. Cual-
captura con el CCP1, el TMR1 debe captura. quier reset tambin pone a cero el
estar configurado para trabajar como preescaler.
temporizador o como contador sn- Software de Interrupcin Cuando se cambia el preescaler
crono. Nunca en modo asncrono. Es recomendable desactivar el durante una captura, se puede gene-
Es recomendable desactivar el mdulo CCP poniendo a cero rar una interrupcin. Puede ocurrir
mdulo CCP cuando se van a cam- CCP1IE (PIE1 <2>) cuando se van a tambin que el contador de preesca-
56-83 MICROCONTROLADORES 14/8/03 13:26 Pgina 58
TMR1H TMR1L
Q's CCP1CON<3:0>
Disparo especial
Q S Salida
Comparador
Lgica
Pin RC2/CCP1 R Iguales
MICROCONTROLADORES
software
Cuando se elige el modo de tra-
bajo de Interrupcin por Software, el
pin CCP1 no es afectado. El flag
CCPIF se pone a "1" y se produce
una interrupcin de CCP (si se ha
habilitado).
;***********************************************************************************
**
; Programa COMPARA_1.ASM
; Este programa emplea el mdulo CCP1 para compara el contenido del
; los registros CCPR2H y CCPR2L con el TIMER1 y cuando coinciden se
; produce una interrupcin que hace cambiar de estado el contenido de la
;lnea RB0
; Revisin : 0.0 Programa para PIC16F87X
; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 S
MICROCONTROLADORES
; Perro Guardin :deshabilitado Tipo de Reloj : XT
; Proteccin del cdigo : OFF
;
List p=16F876 ;Tipo de procesador
include "P16F876.INC" ;Definiciones de registros internos
; org 0x00 ;Vector de Reset
; goto INICIO
org 0x04
;*********************************************************************************
;PROGRAMA DE ATENCIN A LA INTERRUPCIN
INTER bcf PIR1,CCP1IF ;Repone el flag del mdulo CCP1
bcf T1CON,TMR1ON ;TMR1 en Off
clrf TMR1L
clrf TMR1H ;Puesta a 0 del TMR1
movlw b'00000001'
xorwf PORTB,F ;RB0 cambia de estado
bsf T1CON,TMR1ON ;TMR1 en On
retfie
;***********************************************************************************
**
;PROGRAMA PRINCIPAL
INICIO clrf PORTB ;inicializa el PORB a cero
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'00000110'
60
RESISTOR
movwf ADCON1
clrf TRISB
movlw b'00111111'
movwf TRISA
;PORTA E/S digitales
;PORTB B se configura como salida
;PORTA A entradas
movlw b'00000001'
movwf TRISC ;RC0 entrada
bsf PIE1,CCP1IE ;Habilita interrupcin del mdulo CCP1
bcf STATUS,RP0 ;Selecciona banco 0
;Configuracin del TMR1 como contador de flancos de subida externos
movlw b'00000010'
movwf T1CON ;TMR1 en OFF
movlw b'11000000'
movwf INTCON ;Habilita interrupciones
;Configuracin del CCP1CON modo Comparacim
movlw b'00001010'
movwf CCP1CON ;Mdulo CCP en modo comparacin
clrf CCPR1H ;0--> CCPR1H
clrf TMR1L ;0--> TMR1L
clrf TMR1H ;0--> TMR1H
bsf T1CON,TMR1ON;TMR1 en ON
BUCLE movf PORTA,W
andlw b'00011111' ;Lee las entradas RA4-RA0
movwf CCPR1L ;Ajusta la parte baja del valor a comparar
goto BUCLE
;*****************************************************************************
ORG 0x1F00
bcf PCLATH,4
bcf PCLATH,3 ;Selecciona la pgina 0
goto INICIO ;Salto a la direccin de INICIO del programa
;*****************************************************************************
end
ocho bits de mayor peso de TMR2, de mayor peso CCPR1H y se Por lo tanto, el tiempo que la
el pin pasa a valer "1" y se borra el comienza de nuevo la comparacin seal PWM est a nivel alto viene
temporizador para iniciar de nuevo con TMR2, cuando ambos son igua- dada por el registro CCPR1H y el
la cuenta. El contenido de menor les el pin se pone a "0" para repetir periodo de la seal por el registro
peso del CCPR1L se pasa al registro la secuencia. PR2.
56-83 MICROCONTROLADORES 14/8/03 13:26 Pgina 61
Vcc= 5V
R5 10K
R4 10K
R6 10K
R7 10K
R8 10K
R9 10K
R1
10K
Reset PIC16F876
R2 100
MCLR
RB7
RA0 RB6
RA1 RB5
RA2 RB4
RA3 RB3 Diodo LED
RA4 RB2
RA5 RB1 R3 330
Vss RB0
C1 27 pF
RA0
RA1
RA2
RA3
RA4
RA5
OSC1
XT 4Mhz
OSC2/CKOUT Vcc=5V
VDD
VSS
C2 27 pF
RC0 RC7
RC1 RC6
RC2 RC5
RC3 RC4
Entrada de Impulsos
Figura 4.- Circuito para la comprobacin del programa Compara_1.asm Se borra el TMR2 ( se pone a
CCP1CON<5:4> cero)
Registreo de Periodos La patilla RC2/CCP1 se pone a
"1"
CCPR1L El valor de CCPR1L, que es el
que determina la anchura del
impulso se carga en CCPR1H
El tiempo que la patilla de salida
est a nivel alto, que es la anchura
CCPR1H(Slave) del impulso, depende del contenido
cargado de CCPR1L y de los bits 5
y 4 del CCP1CON, cuando trabaja-
Comparador R Q mos con una precisin de 10 bits.
Por su parte, la anchura del
RC2/CCP1 impulso a nivel alto viene dada por
S la expresin:
TMR2 (Nota1) El valor de CCPR1L:
TRISC<2> CCP1CON<5:4> puede cargarse en
cualquier momento, puesto que el
Comparador mismo no se traspasa a CCPR1H y
Borra Timer, compara hasta que coincidan PR2
patilla CCP1 y
Latch D.C. con TMR2. En el modo PWM el
registro CCPR1L solo puede ser
PR2
ledo.
Como en todos los mdulos del
Nota 1.- Los 8 bits del TMR2 se concatenan con los 2 bits Q del reloj interno microcontrolador, en necesario res-
o con los 2 bits del preescaler para crear una base de tiempos de 10 bits petar y mantener cierto orden en la
programacin. El orden seguido
Figura 5.-Diagrama de bloques del mdulo CCP trabajando en modo PWM. para su configuracin ser:
Periodo PWM PWM es la inversa del periodo Colocar en PR2 el periodo calculado
La salida PWM que se obtiene (1/T). La duracin del perodo de la Colocar en los registros CCPR1L y en los bit <5:4> de
en el pin RC2/CCP1, como puede seal depende del valor que se haya CCP1CON los valores calculados
verse en la figura 6, la seal tiene cargado en PR2, de acuerdo con la Programar como salida el bits TRISC<2>.
un periodo base y sobre el la seal siguiente expresin. Poner el valor del preescaler del TMR2 y habilitar el
est a nivel alto durante un tiempo Cuando el valor TMR2 coincide temporizador (T2CON).
(duty cycle). La frecuencia del con el de PR2 suceden tres eventos: Configurar el CCP1 para una operacin PWM.
56-83 MICROCONTROLADORES 14/8/03 13:26 Pgina 62
Periodo (PR2)
CCPR1H
Duty Cycle
TMR2=PR2
TMR2=Duty Cycle
TMR2=PR2
Figura 6.- Impulsos de salida donde se controla el tiempo que est a nivel
alto la seal
Vcc= 5V
MOTOR
R5 10K
R4 10K
R6 10K
R7 10K
R8 10K
R9 10K
R1
10K
+Vcc
Reset PIC16F876
R2 100
MCLR 1 L293B
16
RB7 2 EN1 15
RA0 RB6 IN1 IN4
RA1 RB5
RA2 RB4 1 4
RA3 RB3
RA4 RB2 3 OUT1 OUT4 14
RA5 RB1
Vss RB0 4 GND GND 13
C1 27 pF 5 GND GND 12
6 11
RA0
RA1
RA2
RA3
RA4
RA5
Figura 7.- Circuito para la comprobacin de la seal PWM generada por el microcontrolador
56-83 MICROCONTROLADORES 14/8/03 13:26 Pgina 63
;***********************************************************************************
************************
; Programa PWM1.ASM
; Este programa emplea al mdulo CCP1 con salida de seal por la lnea RC2/CCP1. La seal
; de salida tiene un periodo determinado pora la constante "Periodo" y una anchura de la
; seal a nivel alto determinada por la constante "Anchura" .
; Revisin : 0.0 Programa para PIC16F87X
; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz =1 s
; Perro Guardin :deshabilitado Tipo de Reloj : XT
; Proteccin del cdigo : OFF
;***********************************************************************************
**********************
List p=16F876 ;Tipo de procesador
include "P16F876.INC" ;Definiciones de registros internos
PERIODO equ .200 ;Periodo de 200 s
ANCHURA equ .50 ;Anchura 50 s
; org 0x00 ;Vector de Reset
; goto INICIO
org 0x05
;***********************************************************************************
**********************
; Programa principal
;***********************************************************************************
**********************
INICIO clrf PORTA
clrf PORTB
clrf PORTC ;Borra salidas
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'00000110'
movwf ADCON1 ;Puerta A E/S digitales
clrf TRISB ;Puerta B se configura como salida
movlw b'11111011'
movwf TRISC ;RC2 salida
movlw PERIODO-1
movwf PR2 ;Carga el registro de periodos
bcf STATUS,RP0 ;Selecciona banco 0
movlw b'00000001' ;hace girar el motor en sentido horario
movwf PORTB
movlw ANCHURA
movwf CCPR1L ;Carga la anchura del pulso
;Mdulo CCP1 en el modo PWM con salida de seal por RC2/CCP1
movlw b'00001100'
movwf CCP1CON
movlw b'00000100'
movwf T2CON ;T2 en On
BUCLE goto BUCLE ;Bucle infinito
;***********************************************************************************
**********************
ORG 0x1F00
bcf PCLATH,4
bcf PCLATH,3 ;Selecciona la pgina 0
goto INICIO
;***********************************************************************************
**********************
end
Leyenda
x = desconocido, u = inalterado; - = no implementado se lee como 0. Las celdas sombreadas no son usadas por el TIMER2
Nota 1: Los bits PSP no estn implementados para el PIC16F873/876, mantener estos bits a cero.
56-63 MICROCONTROLADORES 28/10/04 14:20 Pgina 56
CURSO DE
MICROCONTROLADORES
PIC16F87X (...y VIII)
MICROCONTROLADORES
Fernando Remiro Domnguez
Profesor de Sistemas Electrnicos
IES. Juan de la Cierva
www.terra.es/personal/fremiro
56
RESISTOR
Bit 7
00 Fosc/2
01 Fosc /8
10 Fosc/32
11 FRC (Procede del
oscilador RC interno)
bit 7: ADFM: Selecciona el formato del resultado de la conversin A/D (ver figura 5)
1 = Pone en el registro ARDESH los seis bit de mayor peso a "0" (alineacin a la derecha).
MICROCONTROLADORES
0 = pone los 6 bit de menor peso del registro ADRESL a "0" (alineacin 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 estn a cero
bit 3-0: PCFG3:PCFG0: bits de configuracin de los canales de entrada del convertidor A/D. Se utilizan para
configurar las patillas como E/S digital o como entrada analgica 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
cuenta que existen algunas limitacio- ADRESH : Parte alta del resultado ADRESH:ADRESL y se pone a cero
nes; la mxima tensin aplicada a la de la conversin el bit GO/DONE y el flag de fin de
patilla VREF+ (RA3/AN3) podr ser ADRESL : Parte baja del resultado conversin ADIF (PIR1<6>) se pone a
de VDD+0,3V y la mnima de VDD- de la conversin 1. El diagrama de bloques del mdulo
2,5V. En cuanto a la tensin VREF- ADCON0: Registro de Control 0 conversar A/D es el de la Figura 1.
(RA2/AN2) la mnima tensin ser ADCON1, Registro de Control 1 Despus de que el conversor A/D
VSS-0,3V y la mxima VREF+ - 2V, En esta pgina se muestra el se ha configurado como se desea uti-
as por ejemplo, si la tensin de ali- registro ADCON0 de configuracin lizar, la seleccin del canal debe rea-
mentacin es de 5V, la tensin en del funcionamiento del convertidor lizarse antes de hacer la adquisicin.
RA3/AN3 no podr exceder de 5V. y en la pgina anterior el ADCON1 Los canales de entrada analgica
Por lo que la mxima tensin en la que es el registro de configuracin 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 analgicas (RA, tambin Para realizar una conversin A/D
caracterstica especial el ser capaz de puede ser entrada de tensin de refe- deben seguirse los siguientes pasos:
seguir trabajando mientras el dispo- rencia) o como E/S digital. 1. Configurar el mdulo conversor A/D
sitivo est en el modo SEEP. Para Los registros ADRESH: ADRESL Configurar los pines que actan
ello el oscilador interno RC debe contienen los 10 bits resultado de como entradas analgicas, las
conectarse al conversor A/D. la conversin A/D. Cuando se seales que harn de tensin de
El mdulo conversor A/D tiene completa la conversin A/D, el resul- referencia la que trabajarn como
asociados cuatro registros: tado se guarda en los registros E/S digitales (ADDCON1).
56-63 MICROCONTROLADORES 28/10/04 14:20 Pgina 58
58
RESISTOR
Figura 2.- Diagrama de flujos que deber seguir el programa para realizar una conversin A/D
56-63 MICROCONTROLADORES 28/10/04 14:20 Pgina 59
VDD
Conmutador
de muestreo
VT=0.6V SS
Rs RAx RIC <1K Rss
MICROCONTROLADORES
CHOLD
+500nA =DAC capacidad
VA =51.2 pF
Cpin VT=0.6V I de dispersin
5pF + 500 nA
Vss
VDD
6V
5V
Leyenda:
Cpin = Capacidad de entrada 4V
VT = Tensin de umbral
Idispersin = Corriente de dispersin 3V
debida a varias uniones
RIC =Tesistencia de interconexin 2V
SS = Conmutador de muestreo
CHOLD = Capacidad del A/D
(Kohm)
5 6 7 8 9 10 11
Conmutador de muestreo
FOSC/32 10 20 MHz
RC (1,2,3) 11 Nota 1
Nota.-
1. Si la fuente es el oscilador RC tiene un TAD tpico de 4 s, pero puede variar entre 2 6 s.
2. Cuando la frecuencia del dispositivo es mayor de 1MHz, la fuente del oscilador RC para la conversin A/D se
recomienda solo si se trabaja en el modo Sleep.
3. Para dispositivos de tensin mayores (LC), comprobar las caractersticas elctricas
56-63 MICROCONTROLADORES 28/10/04 14:20 Pgina 60
MICROCONTROLADORES
para la conversin de los 10 bits. La Para realizar conversiones Configuracin de los Pines
seal de reloj para la conversin A/D correctas el reloj del convertidor del Puerto Analgico
se selecciona por software mediante A/D debe seleccionarse para Los registros ADCON1 y TRI-
los bits ADCS1:ADCS0 asegurar un tiempo mnimo de TAD SA controlan la configuracin de los
2 TOSC de 1,6 mS. pines del puerto del convertidor A/D.
8 TOSC La tabla 2 muestra los tiempos de Cuando se desea configurar una
60
RESISTOR
32 TOSC
Oscilador interno RC
(2-6 s)
TAD dependiendo de la seal de
reloj seleccionada para la conversin
A/D
entrada como analgica, debe confi-
gurarse como entrada los bits corres-
pondientes del registro TRISA. Si
MICROCONTROLADORES
10Bh,18Bh
0Ch PIR1 PSPIF1 ADIF RCIF TXIFSSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
8Ch PIE1 PSPIE1 ADIE RCIE TXIESSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
1E h ADDRESH Parte alta de la conversin A/D xxxx xxxx uuuu uuuu
9E h ADDRESL Parte baja de la conversin A/D xxxx xxxx uuuu uuuu
1Fh ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/#DONE ADON 0000 00-0 0000 00-0
9Fh ADCON1 ADFM --- --- --- PCFG3 PCFG2 PCFG1 PCFG0 --0- 0000 --0- 0000
85h TRISA --- --- Registro de direccionamiento de datos de PORTA --11 1111 --11 1111
05h PORTA --- --- Latch de datos para escritura del PORTA --0x 0000 --0u 0000
89h (1) TRISE IBF OBF IBOV PSPMODE --- Bit de direccionamiento 0000 -111 0000 -111
del PORTE
09h (1) PORTE --- --- --- --- --- RE2 RE1 RE0 ---- -xxx ---- uuuu
MICROCONTROLADORES
62
RESISTOR
NR
EIL
Resolucin
Error absoluto
--
--
--
--
10-bits
<1
Bit
LSb
VREF=VDD = 5.12V
VssVAIN VREF
VREF=VDD = 5.12V
VssVAIN VREF
EDL Error Direccional -- -- <1 LSb VREF=VDD = 5.12V
VssVAIN VREF
EGN Error de ganancia -- -- <1 LSb VREF=VDD = 5.12V
VssVAIN VREF
-- Monotonicidad -- Garantizada -- -- VssVAIN VREF
VREF Voltaje de referencia (VREF+- VREF-) 2.0V -- VDD+0.3 V Absoluta especificacin.
Asegura la precisin de 10 bits
VREF+ Voltaje de referencia alto AVDD-2.5V AVDD+0.3V V
VREF- Voltaje de referencia bajo AVSS 0.3 -- VREF + 0.3 V
VAIN Voltaje analgico de entrada VSS-0.3 -- VREF + 0.3 V
ZAIN Impedancia recomendada
para la fuente de voltaje analgico -- -- 10.0 K
IAD Corriente de conversin Estndar -- 220 -- A Promedio de consumo
de corriente cuando el
A/D est activado
(Nota1)
Extendida -- 90 -- A
IREF Corriente de entrada VREF (Nota 2) 10 -- 1000 A Durante la adquisicin
VAIN basada en la dife-
rencia VHOLD y VAIN
a carga
Durante el ciclo de
-- -- 10 A conversin.
56-63 MICROCONTROLADORES 28/10/04 14:20 Pgina 63
registros ADRESH:ADRESL no es que en el esquema del circuito de poder realizar la carga del mismo y
modificado por un Power-on Reset. aplicacin que hemos utilizado y que en color verde, las lneas que hemos
se muestra en la figura 6, est conec- aadido, de tal manera que eliminado
EJEMPLO DE MANEJO DEL tada a una resistencia variable que las lneas de color verde y habilitando
CONVERTIDOR A/D acta como divisor de tensin. Como las que estn en azul el programa
El programa AD1_LEDS.asm, viene siendo habitual en el programa pueda grabarse directamente en un
presenta en el PORTB lo 8 bits se ha marcado en color azul las lneas PIC16F876 utilizando un programa-
menos significativos del resultado de de cdigo que hemos eliminado para dor universal, un T-20 o cualquier
MICROCONTROLADORES
la conversin A/D de la entrada AN3 utilizar el programa bootloader para otro.
;***********************************************************************************
; Programa AD1_LEDS.asm Fecha : 6- Octubre-2003
;Este programa realiza la conversin de la tensin presente en el canal RA3/AN3. Esta
;se puede variar con el potencimetro conecatodo a AN3 . Lo 8 bits menos significativos
;de la conversin se visualiza sobre los 8 LEDS conectados al PORTB
; Revisin 0.0 Programa para PIC16F87X
; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS
; Perro Guardin :habilitado Tipo de Reloj : XT
; Proteccin del cdigo : OFF
;***********************************************************************************
;Visualiza: Esta rutina coge los 8 bits menos significativos resultantes de la conversin
;y los visualiza sobre el los LEDS conectados al PORTB
;Selecciona pgina 0
63
RESISTOR
movwf PORTB
return
;***********************************************************************************
; Programa principal
;***********************************************************************************
INICIO clrf PORTB
bsf STATUS,RP0 ;Selecciona banco 1
clrf TRISB ;Puerta B se configura como salida
movlw b'00001000' ;Configura RA3 com entrada
movwf TRISA
bcf STATUS,RP0 ;Selecciona banco 0
;Se activa el ADC y se selecciona el canal RA3/AN3. Frecuencia de trabajo Fosc/32
movlw b'10011001'
movwf ADCON0 ;ADC en On, seleciona canal AN3
BUCLE bsf STATUS,RP0 ;Selecciona pgina 1
movlw b'10000000'
movwf ADCON1 ;PORTA entradas analgicas y justificacin a la izquierda
bcf STATUS,RP0 ;Selecciona pgina 0
bcf PIR1,ADIF ;Restaura el flag del conversor AD
nop
bsf ADCON0,GO ;Inicia la conversin
ADC_Wait btfss PIR1,ADIF ;Fin de conversin ??
goto ADC_Wait ;Todava no
call Visualiza ;Visualiza el resultado de la conversin
goto BUCLE
;***********************************************************************************
ORG 0x1F00
bcf PCLATH,4
bcf PCLATH,3 ;Selecciona la pgina 0
goto INICIO
;***********************************************************************************
end ;Fin del programa fuente
64-73 MICROCONTROLADORES 30/12/03 12:32 Pgina 64
CURSO DE
MICROCONTROLADORES
PIC16F87X (...y IX)
MICROCONTROLADORES
Fernando Remiro Domnguez
Profesor de Sistemas Electrnicos
Registro SSPSTAT: Registro de estado
IES. Juan de la Cierva del puerto Serie (Direccin 94h)
www.terra.es/personal/fremiro
R/W-0 R/W-0 R-0 R-0 R-0 R-0 R-0 R-0
SMP CKE D/#A P S R/#W UA BF
Bit 7 Bit 0
MDULO DE bit 7: SMP: Fase de datos de entrada SPI
COMUNICACIONES Modo Master SPI
SERIE SNCRONA: MSSP 1 = Muestra datos de entrada al final del tiempo de salida
El mdulo de comunicaciones se- 0 = Muestra datos de entrada a la mitad del tiempo de salida
rie sncrona (MSSP) es un interface Modo esclavo SPI
serie, til para comunicar con otro pe- SMP debe ser borrado cuando SPI se emplea en modo esclavo
rifrico o dispositivos. Estos perif- Modo I2C Master o Esclavo
ricos pueden ser memorias EEPROMs 1= Deshabilita control de variaciones para velocidad estndar
serie, registros de desplazamiento, (100 KHz y 1MHz)
controladores de displays, converti- 0= Habilita control (400KHz)
dores A/D, convertidores D/A, etc. bit 6: CKE: Seleccin del flanco de reloj SPI
64
RESISTOR
El mdulo de MSSP pueda ope-
rar en uno de estos dos modos:
Serial Peripheral Interface (SPI)
SI CKP = 0
1= Dato transmitido en flanco ascendente de SCK
0= Dato transmitido en flanco descendente de SCK
SI CKP = 1
Inter-Integrated el Circuito (I2C)
1= Dato transmitido en flanco descendente de SCK
Para el control de este mdulo hay 0= Dato transmitido en flanco ascendente de SCK
dos registros de configuracin se tra- Modo I2C Master o Esclavo
ta del registro SSPCON : Registro de 1= Niveles de entrada de acuerdo a SMBUS
control del Puerto Serie Sncrono 0= Niveles de entrada conforme a I2C
(Sync Serial Port Control Register) bit 5: D/#A: Bit Datos/Direcciones (solo en modo I2C)
en la direccin 14h y el SSPCON2: 1= Indica el ltimo byte recibido o transmitido es un dato
Registro de Control 2 del Puerto Serie 0= Indica que el ltimo byte recibido o transmitido es una
Sncrono (Sync Serial Port Control direccin
Register2) en la direccin 91h . Ade- bit 4: P: Bit de Stop (Solo en modo I2C. Ese bit es borrado cuando se
ms se dispone del registro SSPSTAT: deshabilita el mdulo SSP, o cuando el ltimo bit Start es
detectado, SSPEN es borrado)
Registro de estado del puerto Serie 1= Indica que se ha detectado un bit de Stop (este bit es "0" en
(Sync Serial Port Status Register) en RESET)
la direccin 94h, que seguidamente 0= Bit de Stop no detectado.
se describen. bit 3: S: Bit de Start (Solo en modo I2C. Este bit es borrado cuando se
deshabilita el mdulo SSP, o cuando el bit ltimo bit Start es
Modo SPI detectado, SSPEN es borrado)
Este modo permite la transferencia 1= Indica que se ha detectado un bit de Start (este bit es "0" en
de datos de 8 bits en serie, que pueden RESET)
ser transmitidos y recibidos de forma 0= Bit de Start no detectado
sncrona y simultanea. Para el esta- Bit 2: R/#W: Bit de informacin Lectura/Escritura (solo en modo I2C)
blecimiento de la comunicacin se 1= Lectura
utilizan tres hilos de conexin : 0= Escritura
Serial Data Out (SDO): Salida de Modo I2C Modo Esclavo
1= Lectura
datos Serie 0= Escritura
Serial Data In (SDI); Entrada de da-
Modo I2C Modo Master
tos Serie 1= Transmisin en progreso
Serial Clock (SCK), Reloj de 0= Transmisin no en progreso
Sincronizacin
64-73 MICROCONTROLADORES 30/12/03 12:32 Pgina 65
MICROCONTROLADORES
0= Recepcin no completa, SSPBUF est vaco Seleccin del flanco del reloj
Transmisor (Modo I2C)
1= Transmisin en progreso, SSPBUF est lleno (no incluye ACK (Transmisin por flanco de bajada o
y bit de Stop) subida de SCK)
0= Transmisin completa, SSPBUF est vaco (no incluye ACK y Velocidad de SCK (Solo en modo
bit de Stop) Master)
Seleccin del modo Es-
clavo, si trabajamos de
esta forma.
En la Figura 1 se mues-
tra el diagrama de bloques
del mdulo SSP, donde
pueden apreciarse los cua-
tro pines que intervienen
en las comunicaciones.
Para habilitar el puerto
serie, deben configurarse
adecuadamente los bits del
registro SSPCON <5:0> y
los bit SMP y CKE del re-
gistro SSPSTAT <7:6>.
Cuando se inicializa el mo-
do SPI es necesario espe-
cificar en el registro SSP-
CON la diferentes opcio-
65
RESISTOR
nes de trabajo:
Modo Mater, donde la
seal SCK ser salida
Modo Slave, donde la l-
nea SCK ser entrada
Polaridad de la seal de
reloj, flanco ascendente
o descendente.
Velocidad del SCK, evi-
dentemente solo en el
modo master.
Definir el momento en el
que se va a tomar la
muestra del dato de en-
trada, que puede ser en
la mitad o al final del
Figura 1.- Diagrama de bloques del mdulo SSP. impulso.
Bit 3-0:SSPM3:SSPM0: Bit de seleccin del modo del SSP (Syncrhonous Serial Port)
0000 Modo Master del SPI, reloj = FOSC/4 0110 Modo Esclavo I2C, direccin de 7 bits
0001 Modo Master del SPI, reloj =FOSC/16 0111 Modo Esclavo I2C, direccin de 10 bits
0010 Modo Master del SPI, reloj =FOSC/32 1000 Modo Master I2C, reloj =
F=OSC/(4x(SSPADD+1))
0011 Modo Master del SPI, reloj =TMR2 salida/2 1011 Modelo Esclavo I2C con soporte
0100 Modo Master del SPI, reloj = patilla SCK. 1110 Modo Esclavo I2C, direccin de 7 bits
MICROCONTROLADORES
Habilita patilla de control #SS de interrupcin Start y Stop habilitados
0101 Modo Esclavo del SPI, reloj = patilla SCK. 1111 Modo Esclavo I2C, direccin de 10 bits con bits
Deshabilitada patilla #SS, se puede emplear de interrupcin Start y Stop habilitados
como I/O
1001, 1010, 1100 y 1101 Estn reservados
Figura 3.- Cronograma del modo SPI (Modo Master). La seal de reloj
acta como motor del proceso.
Figura 6.- Cronograma del SPI en Modo Esclavo (CKE=1)El bit CKE
del registro SSPSTAX determina el flanco del reloj que transmite el bit;
hay que tener en cuenta que actuar de forma inversa con el bit CKP del
registro SSPCON.
el pin #SSP se comporta como caso las patillas SDI y SDO pueden
una entrada, por lo que habr que unirse eliminando as la tercera cone-
programarla como tal (TRI- xin. Cuando la pastilla SDI necesita
SA<5> =1). Forzando esta pati- operar como receptora, la patilla SDO
lla a nivel alto, el mdulo SPI se deber ser configurada como una nue-
Resetea y el bit SSPEN se borra. va entrada, de este modo, se deshabi-
Es posible realizar transmi- lita la transmisin por esta ltima y
siones y recepciones con slo no crea conflictos con los datos de la
Figura 4.- Cronograma de sincronizacin del slave dos hilos de conexin; en este SDI.
64-73 MICROCONTROLADORES 30/12/03 12:32 Pgina 69
EJEMPLO DE MANEJO DE UN
PERIFRICO SPI
El montaje de la Figura 8, est
basado en una nota de aplicacin que
nos ha mandado Marcos Fernndez.
Se trata de un convertidor A/D con
protocolo SPI de 16 bits con dos
canales de entrada de la marca Analog
Device con un circuito de referencia
de tensin de referencia de 2,50V de
la misma marca, conectados al puerto
de comunicaciones serie sncronas de
un PIC16F876.El programa propuesto
para comprobar el funcionamiento de
puerto SPI del PIC16F876 es el
siguiente. Los pines del AD7705 son Figura 7.- Patillas de los convertidores AD7006 y AD7706
los que se muestran en la Figura 7 y la
6 AIN2(+)[AIN1] AD7705: entrada positiva o entrada analgica diferencial del Canal 2. AD7706: La Entrada analgica Canal 1.
7 AIN1(+)[AIN2] AD7705: entrada positiva o entrada analgica diferencial del Canal 1. AD7706: La Entrada analgica Canal 2
8 AIN1()[COMMON] AD7705: Entrada negativa o Entrada de Analgica diferencial del Canal . AD7706:
La entrada COMN. Entradas analgicas de referencia para los canales 1, 2 y 3.
9 REF IN(+) Entrada de Referencia. Entrada positiva de Referencia diferencia del AD7705/AD7706.
La entrada de la referencia es diferencial y puede tomar cualquier valor teniendo la prevencin de que REF
IN(+) debe ser mayor que REF IN (). REF IN(+) puede ser cualquier valor entre VDD y GND.
10 REF IN() Entrada de referencia. Entrada negativa de referencia diferencial del AD7705/AD7706.
La entrada de la referencia es diferencial y puede tomar cualquier valor teniendo la prevencin de que REF
IN(+) debe ser mayor que REF IN (). REF IN(+) puede ser cualquier valor entre VDD y GND.
11 AIN2()[AIN3] AD7705: Entrada diferencial negativa de la entrada analgica del Canal 2. AD7706: Entrada analgica del
Canal 3.
12 DRDY Salida lgica. Un nivel lgico bajo en esta salida indica que una nueva palabra de salida est disponible en
el registro de datos del AD7705/AD7706 . El pin DRDY volver a tomar el nivel alto cuando se realice una
funcin de lectura de la palabra de salida completa. Si los datos no se leen la lnea DRDY volver a tomar un
nivel alto cuando pasen 500 x tCLK IN ciclos, para actualizar la salida.
Mientras DRDY est a nivel alto, deber intentarse realizar una funcin de lectura. La lnea DRDY volver
indicar de nuevo cuando la actualizacin ha tenido lugar. DRDY tambin es acostumbrado a indicar cuando
el AD7705/AD7706 ha completado secuencia de calibracin del chip.
13 DOUT Salida de datos serie con los datos en serie se lee la saoda del registro de desplazamiento que contiene la
informacin del registro de indicio, registro de comunicaciones, registro de reloj o registro de datos, depen-
de en cada momento del registro de seleccin de comunicaciones
14 DIN Entrada de datos serie que se escriben en serie por la entrada de desplazamiento de entrada. Los datos de este
registro de desplazamiento de entrada se transfiere al registro de configuracin, al registro del reloj o al regis-
tro de comunicaciones, dependiendo, en el momento del registro de de seleccin o del Registro de
Comunicaciones.
15 VDD Tensin de alimentacin comprendida entre +2.7 V a +5.25 V.
16 GND Masa , punto de tendin de referencia para el AD7705/AD7706 en el interior del circuito.
El programa propuesto para comprobar el funcionamiento de puerto SPI del PIC16F976 es el siguiente.
;***********************************************************************************
;Para trabajar con el A/D utilizo bsicamente dos rutinas:
;1-CONFAD, donde se realiza la configuracin del A/D
MICROCONTROLADORES
;2-MEDIR, donde se realiza una nueva medida
;El tratamiento que realizo es por poling de la pata DRDY(RC6).Se Utiliza una referencia
;de tensin que se obtiene del ANALOG DEVICES (REF192 de 2.5V). El cristal del A/D es de 2.4576
;El pin de RESET del A/D se conecta a nivel alto porque no utiliza (se activa a nivel bajo).
;Nada mas comenzar el inicio se realiza una temporizacin de 6msg y a continuacin se activa el
;SPI, se realiza toda la configuracin; a continuacin se configura el A/D y se pone la pata SCK
;a nivel alto. A partir de este momento se puede hacer cualquier cosa y en el momento que se
;desee realizar una medicin se llama a la funcin ACTSPI que activa al SPI y a MEDIR, guardando
;el resultado en DATOL y DATOH. Al final de esta rutina se vuelve a poner SCK a alto.
;La visualizacin de la conversin se realiza sobre los diodos LED, primero la parte alta y pasado
;un tiempo la parte baja.
;***********************************************************************************
INICIO
bsf
movlw
movwf
STATUS,RP0
b'11000111'
OPTION_REG
71
RESISTOR
clrf TRISB
bcf STATUS,RP0
bcf SSPCON,SSPEN
bsf PORTC,3 ;PONGO A ALTO SCK
;-----------------------------EJEMPLO DE PRUEBA
;------------------------
MICROCONTROLADORES
CONFAD
movlw 0x20 ;dato a enviar- al C. R. dando el canal y el registro a
movwf SSPBUF ;escribir (sera el clock register)
call WAITBF
btfsc SSPCON,SSPOV
goto PREINI
movlw 0x0C ;dato a enviar- al clock r. dando datos para que funcione con
movwf SSPBUF
call WAITBF
72
RESISTOR
btfsc
goto
return
SSPCON,SSPOV
PREINI
;--------------------------
movwf DATOH
movlw 0x00
movwf SSPBUF
call WAITBF
btfsc SSPCON,SSPOV
goto PREINI
movwf DATOL
bcf SSPCON,SSPEN
bsf PORTC,3 ;PONGO A ALTO SCK
return
64-73 MICROCONTROLADORES 30/12/03 12:32 Pgina 73
;----------------------------
TEMPO clrf AUX1
ACTSPIAD clrf AUX2
BUCLE decfsz AUX1,f
movlw b'00110000' ;modo master goto BUCLE
spi, reloj = fosc/4 decfsz AUX2,f
movwf SSPCON goto BUCLE
return return
;--------------------------- ;------------------------------
WAITBFbsf STATUS,RP0
WAITB btfss SSPSTAT,BF TEMP_6MS
goto WAITB movlw D'2'
bcf STATUS,RP0 movwf AUX1
movf SSPBUF,W movlw D'53'
return movwf AUX2
BUCLE1 decfsz AUX2,1
;------------------------------ goto BUCLE1
decfsz AUX1,1
VISUALIZA goto BUCLE1
movf DATOH,W return
movwf PORTB ;------------------------------
call TEMPO
movf DATOL,W PREINI bcf SSPCON,SSPOV
movwf PORTB goto INICIO
call
return
TEMPO ;------------------------------
END
73
RESISTOR
;------------------------------
PICTRONIC
Herramientas para el aprendizaje y desarrollo de los C PIC