Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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)
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
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