PIC18 (Español)
Transcript of PIC18 (Español)
Victronics Ltda
Microcontroladores
PIC18
PIC18 - Característica Generales
La serie de microcontroladores PIC18 es una
mejora de la arquitectura presente en la familia
PIC16 y PIC17
77 instrucciones
Arquitectura orientada al uso de Lenguaje C
Memoria de programa lineal hasta 2Mbytes
Memoria de datos hasta 4Kbytes
Capacidad de proceso hasta 10MIPS
Clock: DC - 40Mhz
Instrucciones de 16 bits y datos de 8 bits
Niveles de prioridad para las interrupciones
Multiplicador por hardware de 8x8 bits
PIC18 - Periféricos
Pines soportan hasta 25mA en modo sink/source
Hasta 4 pines para interrupciones externas
Hasta 3 timers de 16 bits
Hasta 2 timers de 8 bits
Timer 1 con oscilador LP
Hasta 5 módulos CCP, configurables como
Entradas de captura de 16 bits de resolución
Modo Comparador de 16 bits de resolución
Salida PWM hasta 10 bits de resolución
156Khz Max con 8 bits de resolución
39Khz max con 10 bits de resolución
Puerto MSSP que puede ser configurado como
Puerto Serial SPI - 3 hilos. Soporta los 4 modos
Puerto I2C Master y Slave
Puerto serial USART direccionable
Puerto Paralelo PSP
Conversor Análogo Digital
10 bits
Hasta 16 canales
Detector de bajo voltaje programable (LVD)
Genera interrupción
Brown Out Reset Proramable (PBOR)
Comparadores analógicos
Programación Serial en Circuito (ICSP)
Protecciones
Power On Reset (POR)
Power Up Timer (PWRT)
Oscilator Start Up Timer (OST)
WatchDog timer con oscilador RC propio
Protección de Código
Generales
Alimentación: 2.0V - 5.5V
Rango temperatura
Comercial: 0-70ºC
Industrial: -40ºC a 85ºC
Extendido: -40ºC a 125ºC
18 a 80 pines
PIC18 - Periféricos
PIC18 - Micros disponibles
Organización
de
Memoria
Los PIC18 tienen 3 bloques de memoria
Memoria de Programa Flash/Rom
Memoria de Datos RAM
Memoria de Datos E2prom
La memoria de datos y de programa tienen
buses separados, lo que permite accesos a ambas
zonas en un mismo ciclo de máquina.
Además de la zona memoria Flash/Rom,
algunos componentes de la serie PIC18 pueden
acceder a memoria externa para programa
utilizando buses dedicados
PIC18 - Organizacion de Memoria
Organización de Memoria
Memoria de Programa
PIC18 - Memoria de Programa
La serie PIC18 tiene un PC
(Contador de programa) de 21 bits,
lo que le permite direccionar hasta
2Mbytes de memoria de programa
El Vector de Reset se encuentra en
la dirección 0000h
Los Vectores de Interrupción se
encuentran en las direcciones
0008h y la 0018h
La memoria de programa es plana,
por lo que no posee bancos
PIC18 - Memoria de Programa/Modos
Algunos PIC pueden acceder a memoria externa y
la cantidad de memoria de programa disponible es
administrable, de esta forma, los micros pueden
trabajar en 4 modos distintos
MP Modo Microprocesador
MPBB Modo Microprocesador con Boot Block
MC Modo Microcontrolador
EMC Modo Microcontrolador Extendido
PIC18 - Memoria de Programa/Modos
Modo Microcontrolador
Extendido
Permite acceso a la
memoria de programa
interna y externa como un
solo bloque de memoria.
Modo Microprocesador
Permite acceso
solamente a la memoria
de programa externa y
el contenido de la
memoria flash interna
es ignorado. Puede
acceder hasta 2Mbytes
de memoria
Modo Microprocesador
con Boot Block
Permite acceso a las
direcciones 0000h a la
01FFh de la flash
interna. Por sobre esta
dirección, la memoria de
programa es externa
hasta 2Mbytes.
Modo Microcontrolador
Permite acceso solamente
a la flash interna la cual
depende el uC en
particular
PIC18 - Memoria de Programa/PC El PC especifica la dirección de la memoria de programa que se está
ejecutando
Tiene una longuitud de 21 bits por lo que puede direccionar hasta 2Mbytes
Se divide en 3 partes
PCL Bits 0-7. Es escribible y leíble porque está mapeado en ram.
PCH Bits 8-15. Puede ser accedido en forma indirecta a través de
registro PCLATH
PCU Bits 16-20. Puede ser accedido en forma indirecta por medio del
registro PCLATU
El PC direcciona bytes en la memoria de programa (no palabras) por lo que se
incrementa dos posiciones a la vez (2 bytes = 1 palabra de instrucción).
Las instrucciones CALL, RCALL, GOTO y las instruciones de saltos, escriben el
PC completo directamemte, por lo que el PCLATH/PCLATU no son
transferidos al PC
Por otro lado, el contenido del PCLATH/PCLATU son transferidos al PC
cuando se ejecuta alguna instrucción que escriba el PCL
De forma similar, los dos bytes superiores del PC serán transferidos a los
registros PCLATH/PCLATU cuando el PCL es leído (muy útil en “saltos
computados”)
PIC18 - Memoria de Programa/Stack Pointer (SP)
El Stack Pointer se comporta como una RAM
de 31 pocisiones de 21 bits cada una + un
puntero de 5 bits.
El SP no utiliza RAM ni ROM, sino que es una
zona de memoria totalmente independiente.
El SP es totalmente escribible y leíble por el
usuario .
El PC es puesto (Pushed) en el SP cuando se
ejecutan las instrucciones Call o RcalL. Por el
contrario, el contenido del SP es puesto en el PC
(Poped) cuando se ejecutan las instrucciones
Return, Retlw o Retfie.
Durante la ejecución de instrucciones tipo Call,
que causan un Push en el SP, este es
incrementado automáticamente, y la pocisión del
SP apuntada por los bits STKPTR<SP4:SP0> es
escrita con el contenido del PC
Durante la ejecucíón de instrucciones tipo
Return, que causan un Pop del SP, el contenido
de la pocisión del SP apuntada por los bits
STKPTR<SP4:SP0>, es transferido el PC y el SP
es decrementado automáticamente.
STKFUL Flag de SP lleno
1 = SP lleno
0 = Aún no lleno
STKUNF Flag de Underflow del SP
1 = Un underflow ha ocurrido
0 = no hay underflow
SP4:SP0 Bits de localización del SP
00000 = Pocisión 0 del SP
00001 = Pocisión 1 del SP
00010 = Pocisión 2 del SP
.
.
11111 = Pocisión 31 del SP
El TOS (Top of Stack) es leíble/escribible por
el usuario. Para ello se hace uso de 3 registros
específicos que mantienen el contenido de la
pocisión del SP apuntada por los bits
STKPTR<SP4:SP0> : TOSU, TOSH, TOSL,
los tres mapeados en ram
Esto permite al usuario implementar técnicas
de Stack por software
Después de la ejecución de las instrucciones
Call, Rcall, o de una interrupción, el usuario
puede leer los valores contenidos en el SP,
leyendo los registros TOSU, TOSH y TOSL.
Estos valores pueden ser puestos en una zona
de memoria definida como un SP por
software.
En el momento del retorno, el usuario puede
reemplazar los valores de los TOSx y luego
hacer un Return para cambiar la dirección de
retorno.
El usuario debe deshabilitar las
interrupciones globales durante este proceso,
para evitar alteraciones del SP.
Después de que se han llenado todas las pocisiones del
SP sin hacer un POP de ninguna de ellas, el flag
STKPRT<STKFUL> es puesto y sólo puede ser
limpiado por software o mediante un POR
Lo que suceda con el SP luego de su rebalse, dependerá
del estado del bit CONFIG4L<STVREN>.
Si el STVREN está puesto (defecto), en el último Push
al SP (11111), provocará que el PC sea respaldado en el
SP, el flag STKFUL será puesto y se provocará un
RESET del uC. El flag STKFUL seguirá puesto y el SP
apuntará a la dirección 00000.
Si el STVREN = 0, el STKFUL será puesto en el último
push del SP (11111). Un Push adicional no sobre-
escibirá la pocisión 31 del SP y los bits
STKPTR<SP4:SP0> permanecerán el 31 (11111)
Cuando el SP es descargado (POPed) totalmente , el
siguiente POP retornará un 0 al PC y el flag
STKPTR<STKUNF> será puesto.
PIC18 - Memoria de Programa/Stack Pointer (SP)
Como el TOS es leíble y escribible, esto
permite la manipulación de SP poniendo
(Push) y descargando (Pop) datos de el.
Al ejecutar la instrucción PUSH, el SP
automáticamente es incrementado y
cargado con el valor actual del PC + 2
Además, los registros TOSU, TOSH y
TOSL pueden ser modificados para poner
una dirección de retorno en la pocisión
del SP apuntada por el STKPTR.
La instrucción POP decrementa el valor
actual del STKPTR, “descargando” el
valor actual del TOS, con lo que el valor
previamente almacenado en el SP
quedará ahora como el TOS.
Este valor “descargado” no se pierde, sino
que simplemente ya no es el TOS
PIC18 - Memoria de Programa/Push y Pop
Corregir programa
Estos Resets son habilitables por medio del bits
de configuración CONFIG4L<STVREN> .
Cuando el STVREN está deshabilitado, los
flags de STKFUL y STKUNF serán puestos
según corresponda, pero el micro no será
reseteado
Cuando el STVREN está habilitado, los flags
correspondientes también serán puestos, pero
además provocarán un RESET del micro
Estos flags pueden ser limpiados por software o
por medio de un POR
PIC18 - Reset por Full/Underflow del SP
PIC18 - Memoria de Programa/Fast Register Stack
El Fast Register Stack es una opción que permite respaldar el valor de
los registros STATUS, BSR y W automáticamente en sus respectivos
“Shadow Register” cuando la CPU reconoce una interrupción de alta o
baja prioridad.
STATUS STATUSS
BSR BSRS
WREG WS
El respaldo es de sólo un nivel.
Si una interrupción de Alta Prioridad ocurre mientras se está
procesando una de baja prioridad, los valores previamente almacenados
por la interrupción de baja prioridad, serán reemplazados.
Cuando no se están utilizando interrupciones, el Fast Register Stack,
puede ser utilizado para respaldar el estado de estos registros ante los
llamados a sub-rutinas.
Para hacer uso del Fast Register Stack en los llamados a sub-rutinas es
necesario hacer un FAST CALL y luego un FAST RETURN, por medio
de los instrucciones CALL,FAST y RETURN,FAST.
PIC18 - Goto Computado
Hay dos técnicas para el manejo de tablas de
datos.
Una de ellas es llamada GOTO COMPUTADO
Permite, mediante la manipulación del PC,
acceder a una tabla de datos almacenada en la
memoria de programa
Cada dato de la tabla corresponde a una
instrucción “RETLW DATO”
Un valor offset almacenado en W, es sumado al
PC para provocar un salto calculado a una
pocisión en la tabla de datos.
CLRF PCLATH
MOVF Valor del Display,W
CALL DecodificaSieteSegmentos
MOVWF PORTB
GOTO Continua
DecodificaSieteSegmentos
ADDWF PCL,F
RETLW B’00111111’ ;Decodifica 0
RETLW B’00000110’ ; Decodifica 1
RETLW B’01011011’ ; Decodifica 2
RETLW B’01001111’ ; Decodifica 3
RETLW B’01100110’ ; Decodifica 4
RETLW B’01101101’ ; Decodifica 5
RETLW B’01111101’ ; Decodifica 6
RETLW B’00000111’ ; Decodifica 7
RETLW B’01111111’ ; Decodifica 8
RETLW B’01101111’ ; Decodifica 9
Continua
.
.
.
PIC16xxx
PIC18xxx
RB0 A
RB1 B
RB2 C
RB3 D
RB4 E
RB5 F
RB6 G
A
B
C
D
E
F
G
PIC18 - Goto Computado/Ejemplo
PIC18 - Table Read/Table Write (TLBRD/TLBWT)
Un método más eficiente de almacenar datos en la memoria
de programa, es el uso de las tablas de lecturas/escrituras
Permite almacenar 2 bytes por palabra de instrucción
TBLPRT Registro Puntero de memoria de programa
para tablas de datos (22 bits)
TABLAT Registro que contiene el byte que fue leído o
el que serán escrito (8 bits)
TBLRD Instrucción de lectura de tablas de datos
TBLWT Instrucción de escritura de tablas de datos
La memoria de programa es de 16 bits, mientras que la Ram
es de 8 bits. Las instrucciones TBLRD/TBLWT mueven datos
entre estas dos zonas de memoria
Pueden ser escritos datos o instrucciones
El registro TBLPRT, está compuesto por tres registros
TBLPTRU Bits 16- 21
TBLPTRH Bits 8-15
TBLPTRL Bits 0-7
Los 21 primeros bits direccionan hasta 2Mbytes de
memoria de programa. El 22º bits, se usa para acceder a los
Bits de Cofiguración
PIC18 - Table Read/Table Write (TLBRD/TLBWT)
Organización de Memoria
Memoria Externa
PIC18 - Memoria de Programa/Externa
Permite el acceso a memoria externa tales como eprom, flash o
sram
Utiliza 27 pines. Cuando se configura en uC para acceder a
memoria externa, 4 puertos I/O se comportan como bus de
datos/direcciones
Control de tiempos de espera programables por software (para
memorias lentas)
Modos de funcionamiento (8/16 bits) programable por software
Modo 8 bits
PIC18 - Memoria de Programa/Externa
Modo 16 bits
Byte Write
Modo 16 bits
Word Write
Organización de Memoria
Ram
PIC18 - RAM
La memoria de datos está dividida hasta
en 15 bancos de 256 bytes cada uno
El registro BSR es utilizado para
seleccionar uno de los 15 bancos. Para
ello, sólo los 4 bits LSBs están
implementados
La Ram está compartida con los SFRs y
la ram disponible para el usuario (GPRs)
Los SFRs comienzan su localización en la
última posición del banco 15 (0FFFh) y
hacia abajo y los GPRs están ubicados
desde la primera posición del banco 0
(0000h)
Toda la Ram puede ser accedida en forma
directa o indirecta. El acceso en forma
directa se realiza utilizando el puntero
BSR y el acceso en forma indirecta hace
uso del punteros FSRn y el registro
INDFn
PIC18 - RAM/Access Bank
Uno de los problemas más comunes en la arquitectura de los PIC16 era su
organización de memoria RAM. Los SFRs y los GPRs estaban agrupados en bancos
de ram y para acceder a ellos, era necesario utilizar 2-3 instrucciones. Una que
seleccionaba el banco donde estaba el registro, y otra que operaba con el registro
La arquitectura de los PIC18 permite el acceso a las posiciones de ram más
utilizadas (SFRs/GPRs) en una sola instrucción, independientemente del valor actual
del puntero BSR
El Access Bank es una mejora en la arquitectura para hacer más eficiente el uso de
compiladores C y mejorar el acceso a los SFRs
El Access Bank está compuesto las 128 pocisiones más altas del banco 15 de ram
(SFRs) + las 128 pocisiones más bajas del banco 0 de ram. Estas secciones de ram
son conocidas como Access Ram High y Acces Bank Low
Access Bank Low Pocisiones 00h - 7Fh Banco 0
Access Bank High Pocisiones 80h - FFh Banco 15
El bit “a” en las instrucciones define si las operaciones serán realizadas en el banco
especificado por el BSR o en el Access Bank
PIC18 - RAM /Access Bank
Si a = 0, en la instrucción, la
operación es realizada en las
posiciones de memoría dentro del
Accesss Bank. Esto permite fácil
acceso a los SFRs, a los bits de
control y a ciertas posiciones de ram
(00-7F del banco 0), sin necesidad de
instrucciones adicionales
Si a = 1, las operaciones de realizarán
en las pocisiones de ram apuntadas
por el registro BSR (banco 0 - 15)
La instrucción movlb k carga
directamente el registro BSR
PIC18 - RAM/SFRs
PIC18 - RAM/Direccionamiento Directo
El direccionamiento directo de la
ram se realiza por medio de los bits
punteros BSR <3:0>, que
seleccionan el banco de ram al que
se accederá, lo que permite
direccionar hasta 4Kbytes de ram
Los bits BSR<7:4> no están
implementados
El BSR permite direccionar hasta 15
bancos de 256 bytes cada uno
En los PIC16 esta función la
realizaban los bits
STATUS<RP1:RP0>, lo que
limitaba la ram a 4 bancos de 128
bytes cada uno (512 bytes)
La instrucción movff f1,f2 ignora el
estado del puntero BSR, dado que la
instrucción misma permite
direccionamiento de hasta 12 bits
(4Kbytes)
PIC18 - RAM/Direccionamiento Indirecto
El direccionamiento indirecto es un modo de
direccionamiento para datos en ram que no tienen una
posición fija o cuyo acceso implican muchas instrucciones.
Se utiliza un registro como puntero de ram (FSRn) y otro
como operador (INDFn). Estos registros son muy útiles
cuando se desea trabajar con tablas de datos
Cualquier instrucción que utilize el registro INDFs, en
realidad afectará a la dirección de ram apuntada por los
FSRs
Los registros FRSs permiten direccionar toda la ram, ya
que son de 12 bits, por lo que a su vez, están formados por
2 registros: FSRxH:FSRxL de 8 bits cada uno
Hay tres registros FSR y tres registros INDF
FSR0 compuesto por FSR0H:FSR0L INDF0
FSR1 compuesto por FSR1H:FSR1L INDF1
FSR2 compuesto por FSR2H:FSR2L INDF2
Cualquier operación de lectura/escritura sobre el registro
INDF0, afectará a la dirección apuntada por el FSR0. Lo
mismo ocurre con los demás registros.
Los registros FSRs son registros físicos y están mapeados
en ram, pero los registros INDFs no son registros físicos,
por lo que no se encuentran mapeados y no son accesibles
PIC18 - RAM/Direccionamiento Indirecto
Cada FSR tiene asociado un INDF + 4 registros adicionales. Estos registros permiten
realizar funciones previas y posteriores al acceso indirecto de una pocisión de memoría
De acuerdo al uso de estos registros asociados en la instrucción, podemos realizar
automáticamente las siguientes funciones antes o después del acceso a una pocisión de
memoria.
Operador Efecto
INDFn Sin cambio: El registro FRSn no es afectado de forma alguna
después de un acceso indirecto a memoria
POSTDECn Post-Decremento: Auto-decrenenta el FRSn después de un acceso
indirecto a memoria
POSTINCn Post-Incremento: Auto-increnenta el FRSn después de un acceso
indirecto a memoria
PREINCn Pre-Incremento: Auto-increnenta el FRSn antes de un acceso
indirecto a memoria
PLUSWn Sin cambio: Utiliza el valor contenido en WREG como un offset
para el FSRn, pero no modifica el valor del WREG o el FSRn
después del acceso indirecto
Cuando se utilizan las opciones de auto-incremento o auto-decremento, el registro
STATUS no es afectado
De esta forma los FSRs pueden ser utlizados para acceso a ram y como Stack Pointer
PIC18 - Direccionamiento Indirecto/Ejemplo
Características Especiales
Interrupciones
PIC18 - Características Especiales/Interrupciones
Los PIC18 tienen múltiples fuentes de interrupción tanto internas como externas
000008h Vector de interrupción para interrupciones de Alta prioridad
000018h Vector de interrupción para interrupciones de baja prioridad
Hay máximo 13 registros asociados a las interrupciones
RCON PIR1, PIR2, PIR3
INTCON PIE1, PIE2, PIE3
INTCON2/3 IRP1, IRP2, IRP3
Cada fuente de interrupcion tiene asociado tres bits de control
Bit Flag Que indica que una interrupción ha ocurrido
Bit Habilitacion Bit que habilita la interrupción
Bit Prioridad Bit que define la prioridad de la Interrupción
El usuario puede definir por software que interrupciones serán de Alta/baja Priridad.
Para ello el bit RCON<IPEN> debe ser puesto. Una vez que RCON<IPEN>:
INTCON<GIEH> Habilita todas las interrupciones de alta prioridad
INTCON>GIEL> Habilita todas las interrupciones de baja prioridad
Los registros PIE1/2/3 + los del INTCON habilitan/deshabilitan las interrupciones
particulares
Los registros IRP1/2/3 + INTCON2/3 definen que interrupciones serán de alta o baja
prioridad
Los registros PIR1/2/3 + INTCON/3 contienen los flasg de interrupciones
PIC18 - Características Especiales/Interrupciones
Cuando RCON<IPEN> = 0 (valor por defecto), las prioridades
de las interrupciones son deshabilitadas y las interrupciones son
compatibles con la lógica de interrupciones de los PIC16. Se dice
que el micro esta en Modo Compatibilidad
En Modo Compatibilidad:
El bit INTCON<GIE> sigue siendo el bit de
habilitación/deshabilitación de interrupciones globales.
El bit INTCON<PEIE> sigue siendo el bit de
habilitación/deshabilitación de interrupciones periféricas
El Vector de Interrupción cambia: 0004h 0008h
Cuando una interrupción es reconocida, el bit GIEx es limpiado
En Modo Compatbilidad el bit GIE = 0
Modo Prioridad, el bit GIEH o GIEL es limpiado,
dependiendo de la prioridad.
Una interrupción de alta prioridad puede interrumpir
una de baja prioridad
Una vez reconocido el tipo de interrupción, la dirección
de retorno es respaldada en el SP y el PC es cargado
con el Vector de Interrupción correspondiente.
Los registros Wreg, STATUS y BSR son respaldados en
los registros Shadow
Una vez en la Rutina de Interrupción, se puede detectar
cual fue la fuente de interrupción, haciendo un pulling
a los flags de interrupción
El flag de interrupción debe ser limpiado por software
antes de salir de la rutina de interrupción. La
instrucción RETFIE restituye el estado del bit GIEx y
del PC y rescata la dirección de retorno.
PIC18 - Características Especiales/Interrupciones
PIC18 - Fuentes de Interrupciones
Fuentes de Interrupciones Externas
Pin RBO/INT0
Pin RB1/INT1
Pin RB2/INT2
Pin RB3/INT3
PORTB <7:4>
Fuentes de Interrupciones Internas
Timer 0, 1, 2, 3, 4
Módulos CCP1, 2, 3, 4, 5
Puerto serial MSSP
Usart1, 2
CAD
Comparadores
Modulo dd Detección de Bajo Voltaje
Características Especiales
Multiplicador Por Hardware
PIC18 - Caractericticas Especiales/Multiplicador por HWUn multiplicador de 8x8 bits por hardware viene incorporado en los
PIC18
Permite realizar multiplicaciones sin signo en un solo ciclo de
máquina
El resultado de la multiplicación es un nº de 16 bits, el que queda
almacenado en los registros PRODH:PRODL
Dos instrucciones de multiplicación son parte del set de
instrucciones
MULLW k ( Wreg ) x k PRODH:PRODL
MULWF f,a ( Wreg ) x ( f ) PRODH:PRODL
Si a = 0, f debe estar en el Access Bank
Si a = 1, f es apuntado por el registro BSR
Multiplicación 8x8 bits sin signo
movf ARG1,W ;carga primer argumente en Wreg
mulwf ARG2,0 ;(Wreg) x (ARG1) PRODH:PRODL
Multiplicaciones de 8x8 econ bit de signo es posible solo por
software
Características Especiales
Osciladores
PIC18 - Características Especiales/Osciladores
Tipos de Osciladores
LP 32-200Khz Cristal bajo consumo.
XT 100Hz - 4Mhz. Cristal o Resonador
HS 4Mhz - 25Mhz Alta velocidad o resonador
HS+PLL 40Mhz Max HS con PLL habilitado
RC 4Mhz Max Malla RC externa
RCIO 4Mhz RC Interno son salida clock
EC 40Mhz Max Clock Externo
ECIO 40Mhz Max EC con salida de clock
OSCILADOR HS/XT/LP RC EXTERNO
EC/ECIO HS + PLL
PIC18 - Características Especiales/Osciladores
Características Especiales
Protección de Memoria
PIC18 - Protección de Memoria
Para los efectos de protección de la memoria de
programa, esta está dividida hasta en 8 bloques de
memoria.
La cantidad de bloques y el tamaño de cada uno de
ellos, depende del uC (ver datasheet particular)
Cada uno de estos bloques de memoria, tiene
asociado 3 bits de protección
Bit de protección de Código (CPx)
Bit de protección contra escritura (WRTx)
Bit de protección de lectura mediante
instrucciones TBLRD (EBTRx)
Los bits de protección de código se encuentran en
los registros CONFIG5L, e impiden que el código
pueda ser leído o escrito por cualquier medio
Los bits de protección contra escritura, se
encuentran en el registro CONFIG6L, e impiden
que estas zonas puedan ser escritas, pero si pueden
ser leídas
Los bits de protección contra lectura usando
TBLRD, se encuentran en los registros CONFIG7L
y CONFIG7H, e impiden la lectura de datos desde
otro bloque. Solo permite lecturas de datos en el
mismo bloque
Características Especiales
ICSP + ICD + LVP
PIC18 - ICSP + ICD + LVP
Los PIC18, como casi todos los PICs, pueden ser programados serialmente en
circuito
Para ello hace uso del módulo ICSP (In- Circuit Serial Program) incorporado en
casi todos los micros
El ICSP es utilizado con el ICD (In-Circuit Debugger) para hacer el
debugging/programación del programa en circuito, utilizando el MPLAB. Primero
se programa el micro serialmente y luego se realiza el debugging.
Cuando el ICD está habilitado, el sistema hace uso de algunos recursos del micro
2 Niveles de SP
512 bytes de memoria de programa
10 bytes de ram
Para usar el ICD se deben implementar las siguientes conexiones
MCLR/Vpp
VDD/VSS
RB6/7
Para que el micro pueda ser programado serialmente utilizando la misma
alimentación del micro (VDD) dentro de todo su rango operativo, debe estar
habilitada la opción LVP (Low Voltage Program).
Para los efectos de la programación serial solamente, el pin RB5/PGM también es
utilizado y dedicado a la programación.
Periféricos
Resumen
PIC18 - Resumen Periféricos/Puertos I/Os
A igual que en los PIC16/17, los puertos están mapeados, por lo que
operaciones de escritura y lectura son posibles por software
Los PIC18 agregan una mejora a la manipulación de los pines I/O. Todos
los puertos están mapeados en memoria, pero además un registro adicional
está asociado a los puertos
PORTx Registro de lectura del puerto. Permite leer el estado de los
pines I/O asociados al puerto
TRISx Registro para configurar los pines asociados al puerto como
entrada o salida
LATx Registro de salida del puerto
El registro LATx es el registro de salida del puerto. Escribiendo LATx, los
datos escritos serán puestos en las Lacth de salida. Los pines configurados
como salidas, cambiarán o no de estado, de acuerdo al valor escrito en
LATx
El registro PORTx, permite leer el estado de los pines de entrada
Una escritura sobre los registros PORTx, provocará el mismo efecto que
una escritura sobre el registro LATx
Hay un registro PORTx, LATx y TRISx por puerto disponible
PIC18 - Resumen Periféricos/Timer 0
Timer de 8 (TMR0) ó 16 bits
(TMR0H:TMROL),
seleccionable por software
Puede ser detenido y activado
por software Prescaler sólo en
modo de 8 bits
Prescaler : 1/2, 1/4, 1/8, 1/16,
1/32, 1/64, 1/128, 1/256
Timer mapeado en memoria
Genera interrupción por
rebalse.
Acepta clock interno o externo
PIC18 - Resumen Periféricos/Timer 1
Timer de 16 bits, seleccionable por software: TMR1L:TMR1H
Prescaler sólo en modo de 8 bits
Prescaler : 1/1, 1/2, 1/4, 1/8
Timer mapeado en memoria
Genera interrupción por rebalse.
Acepta clock interno o externo
Puede trabajar con Cristal externo dedicado
Puede ser detenido y activado por software
PIC18 - Resumen Periféricos/Timer 1
Timer 1 puede ser configurado para lectura y escritura de 16 bits.
Si trabaja en este modo, una lectura del TMR1L, actualizará
automáticamente el contenido del TMR1H con el byte superior
del Timer 1
En este mismo modo, si el registro TMR1L es escrito, el byte
superior del Timer 1 es cargado con el valor contenido en el
TMR1H
PIC18 - Resumen Periféricos/Timer 2
Timer 2 de 8 bits (TMR2)
Prescaler: 1/1, 1/4, 1/16
Postscaler: 1/1 hasta 1/16
Contiene registro auxiliar PR2
Provoca interrupción cuando PR2 = TMR2
No acepta clock externo
Puede ser detenido y activado por software
PIC18 - Resumen Periféricos/Timer 3
Similar al timer 1
Timer de 16 bits, seleccionable por software:
TMR3L:TMR3H
Prescaler sólo en modo de 8 bits
Prescaler : 1/1, 1/2, 1/4, 1/8
Timer mapeado en memoria
Genera interrupción por rebalse.
Acepta clock interno o externo
Puede trabajar con Cristal externo dedicado
Puede ser detenido y activado por software
Puede trabajar en modo de lectura y escritura de
16 bits al igual que el Timer 1
PIC18 - Resumen Periféricos/Timer 4
Timer 4 de 8 bits (TMR4)
Prescaler: 1/1, 1/4, 1/16
Postscaler: 1/1 hasta 1/16
Contiene registro auxiliar PR4
Provoca interrupción cuando PR4 = TMR4
No acepta clock externo
Puede ser detenido y activado por software
PIC18 - Resumen Periféricos/Módulo CCP
Hasta 5 módulos CCP pueden estar
presentes en algunos micros
Cada módulo CCP está compuesto por un
registro de 16 bits que puede funcionar en
3 modos
Modo Captura
Modo Comparador
Generador de señales PWM
PIC18 - CCP/Modo Captura
En modo Captura el valor del Timer 1 o el Timer 3 es capturado
por el registro de 16 bits del CCPx, cuando uno de los siguientes
eventos se presenta en el pin de captura
Cada flanco de bajada
Cada flanco de subida
Cada 4 flancos de subida
Cada 16 flancos de subida
Cada evento es configurable por software.
El timer asociado al módulo de Captura es seleccionable por
software
PIC18 - CCP/Modo Comparación
En modo Comparación, el valor del Timer 1 o el Timer 3 es
constantemente comparado con el valor contenido en el registro CCPx
respectivo.
Cuando ambos son iguales, uno de los siguientes eventos puedes ser
generado
La salida se comparación se pone en alto
La salida se comparación se pone en bajo
La salida se comparación cambia al estado lógico opuesto al actual
Sin cambios. Genera interrupción solamente
Cada evento es configurable por software.
El timer asociado al módulo de Captura es seleccionable por software
PIC18 - CCP/Modo PWM
En modo PWM, cada módulo CCP puede
generar señales Moduladas por Ancho de Pulso
Hasta 10 bits de resolución
Frecuencia configurable pro software
Ciclo de servicio configurable por software
Funcionamiento automático, una vez definidos
los parámetros básicos, el módulo por sí solo
genera las señales
No genera interrupciones
Hace uso del Timer 2
Máxima señal PWM: 416.67Khz
Puerto de comunicación serial síncrona half y full
duplex
Orientado para comunicaciones con componentes
externos como e2prom (24LCxx), RTC (DS1302), DTMF
generators (PCD3312), Chips de voz (ISD4002), etc.
Puede funcional en dos modos de comunicación
SPI Serial Peripheral Interface
Estándar comunicación 3 hilos
Full-Duplex
I2C Inter-Integrated Circuit
Estándar de comunicación 2 hilos
Half - Duplex
Genera interrupción
PIC18 - Periféricos/MSSP
PIC18 - Periféricos/USART
Puerto serial orientado a establecer comunicación con equipos con
protocolo EIA-232
Hasta 2 puertos seriales Usart pueden estar incorporados en
algunos PIC18
Cada puerto serial puede ser configurado en forma distinta.
Puede funcionar en los siguientes modos
Asíncrono - Full Duplex
Síncrono Master - Half Duplex
Síncrono Slave - Half Duplex
Generador de baudios dedicado
No generan ni detectan paridad (por software solamente)
Formato de datos: 1 Start bit + 8/9 bits de datos + 1 Stop bit
Gereran interrupciones por fin de transmisión y por recepción
Máxima velocidad: 1.250Mbaudios@40Mhz. 0% error en modo
síncrono o asíncrono.
PIC18 - Periféricos/CAD
CAD 10 bits de Aproximaciones
Sucecivas
Hasta 16 canales AD
Error Absoluto: 1% LSB
Vref. interna (VDD/VSS) y externa
Tad = Tiempo de adquisición por bits
= 1.6uS (mínimo)
Tiempo de Conversión: 12Tad =
19.2uS mínimo
Usa dos registros para almacenar el
resultado de la convesrsión
ADRESH: ADRESL
Resultado de la conversión justificable
Clock para el CAD seleccionable por
software
Puede convertir en modo de bajo
consumo
Genera interrupción por fin de
conversión
PIC18 - Periféricos/Comparadores Analógicos
2 comparadores analógicos incorporados
8 modos de funcionamiento
Referencia de voltaje interna o externa
Referencia de voltaje interna trabaja con
módulo Vref
Condiciones de comparación configurables pro
software
Genera interrupción
Salida de los comparadores pueden ser asociadas
a un pin I/O
PIC18 - Comparadores Analógicos/Modos
PIC18 - Comparadores Analógicos/Modos
PIC18 - Módulo de Referencia de Voltaje (Vref)
Malla resistiva de 16 etapas
La salida del módulo Vref, Cvref, es seleccionable por software, por medio de los bits
CVRCON<CVR3:CVR2:CVR1:CVR0>
Las referencias de voltaje del módulo Vref, pueden ser internas o externas
CVrsrc = Vref+(RA3) y Vref- (RA2)
CVrsrc = VDD y VSS
Puede ser habilitada o no para ahorro de energía
Se pueden seleccionar por software 2 rangos de voltajes de salida del módulo Vref
Cvref = (CVR3/2/1/0)/24 x CVrsrc
Cvref = (VDDx1/4) + (CVR3/2/1/0)/32 x CVrsrc
Set de Instrucciones
Set de InstruccionesInstrucciones orientadas bytes
Nemónico Ciclos Descripción
addwf f,d,a 1 (W) + (F)
addwfc f,d,a 1 (W) + (F) + C
andwf f,d,a 1 (W) AND (F)
clrf f,a 1 00 F
comf f,d,a 1 Complementa F
cpfseq f,a 1,2,3 Compara F con W y salta si F = W
cpfsgt f,a 1,2,3 Compara F con W y salta si F > W
cpfslt f,a 1,2,3 Compara F con W y salta si F < W
decf f,d,a 1 Decrementa F
decfsz f,d,a 1,2,3 Decrementa F y salta si = 0
dcfsnz f,d,a 1,2,3 Decrementa F y salta si no es 0
incf f,d,a 1 Incrememta F
incfsz f,d,a 1,2,3 Incrementa F y salta si = 0
infsnz f,d,a 1,2,3 Incrementa F y salta si no es 0
iorwf f,d,a 1 (W) OR (F)
movf f,d,a 1 Mueve F
movff fs,fd 2 Mueve registro fs a fd
movwf f,a 1 (W) F
mulwf f,a 1 (W) x (F) PRODH:PRODL
Set de Instrucciones
Instrucciones orientadas bytes (Continuación)
Nemónico Ciclos Descripción
negf f,a 1 Niega F F
rlcf f,d,a 1 Rota F a la izquierda a través del carry
rlncf f,d,a 1 Rota F a la izquierda sin carry
rrcf f,d,a 1 Rota F a la derecha a través del carry
rrncf f,d,a 1 Rota F a la derecha sin carry
setf f,a 1 FFh F
subfwb f,d,a 1 (W) - (F) con borrow
subwfb f,d,a 1 (F) - (W) con borrow
subwf f,d,a 1 (F) - (W)
swapf f,d,a 1 Intercambia nibbles de F
tsffsz f,a 1,2,3 Testea F y salta si es 0
xorwf f,d,a 1 (W) OREX (F)
Instrucciones orientadas bits
bcf f,b,a 1 Limpia bit b de registro F
bsf f,b,a 1 Pone bit b de registro F
btfsc f,b,a 1,2,3 Testea bit b de registro F, skip si es 0
btfss f,b,a 1,2,3 Testea bit b de registro F, skip si es 1
btg f,d,a 1 Complementa estado del bit b del registro F
Set de Instrucciones
Instrucciones de Control
Nemónico Ciclos Descripción
bc n 1,2 Salta a la dirección n si hay carry
bn n 1,2 Salta a la dirección n si es negativo
bnc n 1,2 Salta a la dirección n si no hay carry
bnn n 1,2 Salta a la dirección n si no es negativo
bnov n 1,2 Salta a la dirección n si no hay overflow
bnz n 2 Salta a la dirección n si no es cero
bov n 1,2 Salta a la dirección n si hay overflow
bra n 1,2 salto incondicional a la dirección n
bz n 1,2 Salta a la dirección n si es cero
call n,s 2 Llamado a subrutina (2Mb)
clrwdt 1 Limpia watchdog timer
daw 1 Ajuste decimal del acumulador
goto n 2 Salto incondicional a dirección n (2Mb)
nop 1 No operar
pop 1 Descarga TOS
push 1 Carga TOS
Instrucciones de Control (continuación)
Nemónico Ciclos Descripción
rcal n 2 Call relativo (limitado a 1K)
reset 1 Reset por software
retfie s 2 Retorno de interrupción
retlw k 2 Retorno de subrutina con literal en W
return s 2 Retorno de subrutina
sleep 1 Va a modo de bajo consumo
Instrucciones literales
addlw k 1 k + (W) W
andlw k 1 k AND (W) W
iorlw k 1 k OR (W) W
lfsr f,k 2 k (12 bits) FSRx
movlb k 1 k BSR<3:0>
movlw k 1 k W
mullw k 1 k X (W) PRODH:PRODL
retlw k 2 Retorno de subrutina con k en W
sublw k 1 k - (W) W
xorlw k 1 k XOR (W) W
Set de Instrucciones
Set de Instrucciones
Instrucciones de operación en memoria de programa
Nemónico Ciclos Descripción
tblrd* 2 Lee tabla
tblrd*+ Lee tabla con Post incremento
tblrd*- Lee tabla con Post decremento
tblrd+* Lee tabla con Pre-incremento
tblwt* 2(5) Escribe tabla
tblwt*+ Escribe tabla con Post incremento
tblwt*- Escribe tabla con Post decremento
tblwt+* Escribe tabla con Pre incremento
Micros sugeribles
PIC18
Plataformas de Desarrollo
PicStart - Plus Programador para
PIC12/16/18 en formato DIP
hasta 40 pines
Usa MPLAB - IDE
Ensamblador
Simulador
Interfase para Debugger
Interfase para
programadores
Permite grabar directamente
algunos PIC18 (no todos)
Algunos adaptadores SMD-
TH disponibles
USD 272 + IVA
MPLAB ICD2 - In Circuit Debugger
Debugger y programador para
PIC16/18 en formato DIP y SMD.
Permite grabar el micro en circuito
y hacer el debugging del programa
(no tiempo real)
Usa ICSP para programar
Usa RB3/6/7, MCLR, VSS y VDD
para programación y debugging
Trabaja con MPLAB IDE 6.20 en
adelante
Comunicación por puerto EIA232
y USB
Elimina necesidad de adaptadores
USD 257 + IVA a pedido
MPLAB ICE 2000 - In Circuit Emulator
Emulador para todos los
PICs
Permite emulación a full
velocidad con todo tipo de
encapsulados
No tiene capacidad de
programación
Permite múltiples Break
Point
Está compuesto por
POD Emulador Unidad básica. Soporta todos los uC
Processor Module Contiene la lógica de emulación para el o los
micros a emular.
Device Adapter: Adaptador a cáspsula DIP
Transition Socket Adptador de DIP a SMD
PIC18Fxxxx - BootLoader Requerimientos
Usart en modo síncrono 8/N/1
255 bytes de ram
512 bytes (256 words) de memoria de
programa
Cambio de vectores
Vector de reset = 0200h
vector de interrupción de alta prioridad
= 0208h
Vector de interrupción de baja
prioridad = 0218h
Aplicable a todo tipo de memorias no-
volátiles
El algoritmo permite
Borrar memoria
Escribir memoria
Leer memoria
Auto baud rate