PIC18 (Español)

78
Victronics Ltda Microcontroladores PIC18

Transcript of PIC18 (Español)

Page 1: PIC18 (Español)

Victronics Ltda

Microcontroladores

PIC18

Page 2: PIC18 (Español)

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

Page 3: PIC18 (Español)

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

Page 4: PIC18 (Español)

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

Page 5: PIC18 (Español)

PIC18 - Micros disponibles

Page 6: PIC18 (Español)

Organización

de

Memoria

Page 7: PIC18 (Español)

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

Page 8: PIC18 (Español)

Organización de Memoria

Memoria de Programa

Page 9: PIC18 (Español)

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

Page 10: PIC18 (Español)

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

Page 11: PIC18 (Español)

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

Page 12: PIC18 (Español)

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”)

Page 13: PIC18 (Español)

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

Page 14: PIC18 (Español)

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)

Page 15: PIC18 (Español)

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

Page 16: PIC18 (Español)

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

Page 17: PIC18 (Español)

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.

Page 18: PIC18 (Español)

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.

Page 19: PIC18 (Español)

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

Page 20: PIC18 (Español)

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

Page 21: PIC18 (Español)

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)

Page 22: PIC18 (Español)

Organización de Memoria

Memoria Externa

Page 23: PIC18 (Español)

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

Page 24: PIC18 (Español)

PIC18 - Memoria de Programa/Externa

Modo 16 bits

Byte Write

Modo 16 bits

Word Write

Page 25: PIC18 (Español)

Organización de Memoria

Ram

Page 26: PIC18 (Español)

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

Page 27: PIC18 (Español)

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

Page 28: PIC18 (Español)

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

Page 29: PIC18 (Español)

PIC18 - RAM/SFRs

Page 30: PIC18 (Español)

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)

Page 31: PIC18 (Español)

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

Page 32: PIC18 (Español)

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

Page 33: PIC18 (Español)

PIC18 - Direccionamiento Indirecto/Ejemplo

Page 34: PIC18 (Español)

Características Especiales

Interrupciones

Page 35: PIC18 (Español)

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

Page 36: PIC18 (Español)

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.

Page 37: PIC18 (Español)

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

Page 38: PIC18 (Español)

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

Page 39: PIC18 (Español)

Características Especiales

Multiplicador Por Hardware

Page 40: PIC18 (Español)

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

Page 41: PIC18 (Español)

Características Especiales

Osciladores

Page 42: PIC18 (Español)

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

Page 43: PIC18 (Español)

OSCILADOR HS/XT/LP RC EXTERNO

EC/ECIO HS + PLL

PIC18 - Características Especiales/Osciladores

Page 44: PIC18 (Español)

Características Especiales

Protección de Memoria

Page 45: PIC18 (Español)

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

Page 46: PIC18 (Español)

Características Especiales

ICSP + ICD + LVP

Page 47: PIC18 (Español)

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.

Page 48: PIC18 (Español)

Periféricos

Resumen

Page 49: PIC18 (Español)

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

Page 50: PIC18 (Español)

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

Page 51: PIC18 (Español)

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

Page 52: PIC18 (Español)

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

Page 53: PIC18 (Español)

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

Page 54: PIC18 (Español)

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

Page 55: PIC18 (Español)

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

Page 56: PIC18 (Español)

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

Page 57: PIC18 (Español)

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

Page 58: PIC18 (Español)

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

Page 59: PIC18 (Español)

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

Page 60: PIC18 (Español)

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

Page 61: PIC18 (Español)

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.

Page 62: PIC18 (Español)

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

Page 63: PIC18 (Español)

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

Page 64: PIC18 (Español)

PIC18 - Comparadores Analógicos/Modos

Page 65: PIC18 (Español)

PIC18 - Comparadores Analógicos/Modos

Page 66: PIC18 (Español)

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

Page 67: PIC18 (Español)

Set de Instrucciones

Page 68: PIC18 (Español)

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

Page 69: PIC18 (Español)

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

Page 70: PIC18 (Español)

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

Page 71: PIC18 (Español)

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

Page 72: PIC18 (Español)

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

Page 73: PIC18 (Español)

Micros sugeribles

Page 74: PIC18 (Español)

PIC18

Plataformas de Desarrollo

Page 75: PIC18 (Español)

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

Page 76: PIC18 (Español)

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

Page 77: PIC18 (Español)

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

Page 78: PIC18 (Español)

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