Está en la página 1de 78

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
PIC18 - Periféricos
 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 - Micros disponibles
Organización
de
Memoria
PIC18 - Organizacion 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
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 Microprocesador Modo Microprocesador
Permite acceso con Boot Block
solamente a la memoria Permite acceso a las
de programa externa y direcciones 0000h a la
el contenido de la 01FFh de la flash
memoria flash interna interna. Por sobre esta
es ignorado. Puede dirección, la memoria de
acceder hasta 2Mbytes programa es externa
de memoria hasta 2Mbytes.

Modo Microcontrolador Modo Microcontrolador


Permite acceso solamente Extendido
a la flash interna la cual Permite acceso a la
depende el uC en memoria de programa
particular interna y externa como un
solo bloque de memoria.
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 STKFUL Flag de SP lleno
(Poped) cuando se ejecutan las instrucciones 1 = SP lleno
Return, Retlw o Retfie. 0 = Aún no lleno
 Durante la ejecución de instrucciones tipo Call, STKUNF Flag de Underflow del SP
que causan un Push en el SP, este es 1 = Un underflow ha ocurrido
incrementado automáticamente, y la pocisión del 0 = no hay underflow
SP apuntada por los bits STKPTR<SP4:SP0> es SP4:SP0 Bits de localización del SP
escrita con el contenido del PC 00000 = Pocisión 0 del SP
 Durante la ejecucíón de instrucciones tipo 00001 = Pocisión 1 del SP
Return, que causan un Pop del SP, el contenido 00010 = Pocisión 2 del SP
de la pocisión del SP apuntada por los bits .
STKPTR<SP4:SP0>, es transferido el PC y el SP .
es decrementado automáticamente. 11111 = Pocisión 31 del SP
PIC18 - Memoria de Programa/Stack Pointer (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  Después de que se han llenado todas las pocisiones del
de Stack por software SP sin hacer un POP de ninguna de ellas, el flag
 Después de la ejecución de las instrucciones STKPRT<STKFUL> es puesto y sólo puede ser
Call, Rcall, o de una interrupción, el usuario limpiado por software o mediante un POR
 Lo que suceda con el SP luego de su rebalse, dependerá
puede leer los valores contenidos en el SP,
del estado del bit CONFIG4L<STVREN>.
leyendo los registros TOSU, TOSH y TOSL.
 Si el STVREN está puesto (defecto), en el último Push
Estos valores pueden ser puestos en una zona al SP (11111), provocará que el PC sea respaldado en el
de memoria definida como un SP por SP, el flag STKFUL será puesto y se provocará un
software. RESET del uC. El flag STKFUL seguirá puesto y el SP
 En el momento del retorno, el usuario puede apuntará a la dirección 00000.
reemplazar los valores de los TOSx y luego  Si el STVREN = 0, el STKFUL será puesto en el último
push del SP (11111). Un Push adicional no sobre-
hacer un Return para cambiar la dirección de
escibirá la pocisión 31 del SP y los bits
retorno.
STKPTR<SP4:SP0> permanecerán el 31 (11111)
 El usuario debe deshabilitar las  Cuando el SP es descargado (POPed) totalmente , el
interrupciones globales durante este proceso, siguiente POP retornará un 0 al PC y el flag
para evitar alteraciones del SP. STKPTR<STKUNF> será puesto.
PIC18 - Memoria de Programa/Push y Pop
 Como el TOS es leíble y escribible, esto
permite la manipulación de SP poniendo Corregir programa
(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 - Reset por Full/Underflow del SP

 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 - 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.
PIC18 - Goto Computado/Ejemplo

CLRF PCLATH
RB0 A MOVF Valor del Display,W
CALL DecodificaSieteSegmentos
RB1 B A MOVWF PORTB
GOTO Continua

RB2 C F B DecodificaSieteSegmentos
ADDWF PCL,F
RETLW B’00111111’ ;Decodifica 0
RB3 D RETLW B’00000110’ ; Decodifica 1
PIC16xxx G RETLW B’01011011’ ; Decodifica 2
PIC18xxx RETLW B’01001111’ ; Decodifica 3
RB4 E
RETLW B’01100110’ ; Decodifica 4
RETLW B’01101101’ ; Decodifica 5
RB5 F E C RETLW B’01111101’ ; Decodifica 6
RETLW B’00000111’ ; Decodifica 7
D RETLW B’01111111’ ; Decodifica 8
RB6 G RETLW B’01101111’ ; Decodifica 9
Continua
.
.
.
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
PIC18 - Table Read/Table Write (TLBRD/TLBWT)
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
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.
PIC18 - Características Especiales/Interrupciones
 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 - 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 HW
 Un 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
PIC18 - Características Especiales/Osciladores

OSCILADOR HS/XT/LP RC EXTERNO

EC/ECIO HS + PLL
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
PIC18 - Periféricos/MSSP
 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/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 Instrucciones
Instrucciones 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
Set de Instrucciones
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

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

También podría gustarte