Microcontrolador PIC
PIC es una familia de Arquitectura Harvard modificada Microcontroladores hecho por Microchip Technology, derivado del PIC1650[1][2][3] originalmente desarrollado por Instrumento generalde la división de microelectrónica. El nombre de PIC inicialmente se refirió a"Controlador de interfaz periférico"ahora es"PIC"solamente.[4][5]
Fotos son populares entre los desarrolladores industriales y aficionados por igual debido a su bajo costo y amplia disponibilidad, gran usuario base extensa colección de notas de aplicación, capacidad de disponibilidad de herramientas de desarrollo de bajo costo o gratis y programación serial (y reprogramación con memoria flash).
Contenido
- 1 Historia
- 2 Arquitectura de núcleo
- 2.1 Espacio de datos (RAM)
- 2.2 Espacio de código
- 2.3 Tamaño de palabra
- 2.4 Pilas
- 2.5 Conjunto de instrucciones
- 2.6 Rendimiento
- 2.7 Ventajas
- 2.8 Limitaciones
- 2.9 Desarrollo del compilador
- 3 Diferencias arquitectónicas del núcleo familiar
- 3.1 Dispositivos de núcleo basal (12 bits)
- 3.2 Clones ELAN Microelectronics (13 bits)
- 3.3 Dispositivos básicos de gama media (14 bits)
- 3.4 Dispositivos de núcleo de gama media mejorada (14 bits)
- 3.5 Dispositivos de núcleo de high-end PIC17 (16 bits)
- 3.6 Dispositivos PIC18 high-end base (16 bits)
- 3.7 Microcontroladores de 16-bit PIC24 y dsPIC
- 3.8 Microcontroladores de 32-bit PIC32
- 4 Dispositivo variantes y características de hardware
- 4.1 Variantes
- 4.2 Tendencias
- 4.3 Sufijos números parte
- 4.4 Foto de clones
- 5 Herramientas de desarrollo
- 6 Programadores de dispositivo
- 6.1 PICKit 2 clones y open source
- 7 Depuración
- 7.1 Emulación de software
- 7.2 En el circuito de depuración
- 7.3 Emuladores en circuito
- 8 Sistemas operativos
- 9 Véase también
- 10 Referencias
- 11 Enlaces externos
Historia
La foto original fue construida para ser utilizado con del instrumento General nuevo CP1600 16-bit CPU. Mientras que generalmente un buen CPU, el CP1600 tenido pobres ENTRADA-SALIDA el rendimiento y el PIC de 8 bits se desarrolló en 1975 para mejorar el rendimiento del sistema total descarga tareas I/O de la CPU. El PIC utiliza simple microcódigo almacenado en ROM para realizar sus tareas, y aunque el término no fue usado en el momento, comparte algunas características comunes con RISC diseños.
En 1985, un trompo instrumento General su Microelectrónica División y el nuevo propietario cancelarán casi todo — que por esta vez fue en su mayoría obsoleto. El PIC, sin embargo, se ha actualizado con un interno EPROM para producir un programable controlador de canal. Hoy en día están disponibles con varios periféricos a bordo (una gran variedad de fotoscomunicación serial módulos, UARTsnúcleos de control del motor, etc..) y el programa de memoria de 256 palabras a 64 k palabras y mucho más (una "palabra" es una instrucción de lenguaje ensamblador, variando de 8, 12, 14 o 16 brocas según el PIC específico micro familia).
PIC y PICmicro son marcas registradas de Microchip Technology. Generalmente se piensa que el PIC está parado para Controlador de interfaz periféricoAunque el acrónimo original de instrumentos generales para los dispositivos PIC1640 y PIC1650 iniciales era "Controlador de interfaz programable".[4] El acrónimo fue rápidamente reemplazado con"Computadora programable inteligente".[5]
El Microchip (C 16 84PIC16x84), introducido en 1993, fue el primero[citación necesitada] Microchip CPU con memoria EEPROM en el chip. Esta memoria borrable eléctricamente hizo costar menos de CPUs que requirió un cuarzo "ventana borrar" para borrar EPROM.
Para el año 2013, Microchip fue envío más 1 billón microcontroladores PIC cada año.[6]
Arquitectura de núcleo
La arquitectura PIC se caracteriza por sus atributos múltiples:
- Datos y código separado espacios)Arquitectura de Harvard).
- Un pequeño número de instrucciones de longitud fija
- La mayoría de las instrucciones son solo ciclo de ejecución (reloj 2 ciclos, o ciclos de reloj 4 en modelos de 8 bits), con un ciclo de retardo en las ramas y salta
- Uno acumulador (W0), el uso de los cuales (como operando fuente) está implícita (es decir, no está codificado en el OpCode)
- Todos RAM ubicaciones funcionan como se registra como ambos de origen y/o de destino de las matemáticas y otras funciones.[7]
- Una pila de hardware para almacenar direcciones de retorno
- Una pequeña cantidad de espacio direccionable datos (32, 128 o 256 bytes, dependiendo de la familia), extendido a través de banca
- Espacio de datos asigna CPU, puerto y registros periféricos
- ALU estado banderas se asignan en el espacio de datos
- El contador de programa también es asignada en el espacio de datos y escritura (esto se utiliza para implementar saltos indirectos).
No hay distinción entre el espacio de memoria y registro porque la memoria RAM sirve el trabajo de memoria y registros, y la memoria RAM normalmente se conoce como el archivo de registro o simplemente como los registros.
Espacio de datos (RAM)
Fotos tienen un conjunto de registros que funcionan como RAM de propósito general. Control de propósito especial se registra para el hardware de la en-viruta también se asignan los recursos en el espacio de datos. El direccionamiento de memoria varía en función de serie del dispositivo, y algunos tienen todos los dispositivos PIC mecanismo bancario para extender el direccionamiento de memoria adicional. Serie después de la función de dispositivos mover instrucciones que pueden cubrir el espacio entero direccionable, independiente del banco seleccionado. En los dispositivos anteriores, cualquier movimiento de registro debía lograrse mediante el acumulador.
Implementar indirecta direccionamiento, un "archivo seleccione Registrar" (FSR) y "registro indirecta" (INDF) se utilizan. Un número de registro se escribe en el FSR, después de que lee o escribe a INDF será en realidad hacia o desde el registro apuntado por FSR. Dispositivos más tarde amplió este concepto con pre y post incremento/decremento para una mayor eficiencia en el acceso a los datos almacenados secuencialmente. Esto también permite FSR ser tratado casi como un puntero de pila (SP).
Memoria de datos externo no es direccionable directamente excepto en algunos dispositivos perno alto conteo PIC18.
Espacio de código
El espacio de código se implementa generalmente como ROM, EPROM o Flash ROM. En general, código externo de memoria no es direccionable directamente debido a la falta de una interfaz de memoria externa. Las excepciones son PIC17 y seleccione dispositivos perno alto conteo PIC18.[8]
Tamaño de palabra
Todos fotos mango (dirección) los datos y en trozos de 8 bits. Sin embargo, la unidad de capacidad de direccionamiento del espacio de código no es generalmente igual que el espacio de datos. Por ejemplo, fotos de las familias de gama media (PIC16) y base (PIC12) tienen memoria direccionable en el mismo wordsize como la anchura de la instrucción, es decir, 12 o 14 bits respectivamente. En contraste, en la serie PIC18, la memoria del programa está dirigida en incrementos de 8 bits (bytes), que difiere de la anchura de la instrucción de 16 bits.
Para ser claros, la capacidad de memoria de programa se indica generalmente en número de instrucciones (palabra), en lugar de bytes.
Pilas
Fotos tienen un hardware pila de llamadas, que se utiliza para guardar direcciones de retorno. La pila de hardware no es un software accesible en dispositivos anteriores, pero esto cambió con los dispositivos de la 18 serie.
Soporte de hardware para una pila de parámetro de propósito general carecía en serie temprana, pero esto mejora grandemente en la 18 serie, haciendo de la arquitectura de la 18 serie más compiladores de lenguaje amistoso a alto nivel.
Conjunto de instrucciones
Instrucciones de un PIC varían de unos 35 instrucciones para las fotos de gama baja a más de 80 instrucciones para las fotos de alta calidad. El conjunto de instrucciones incluye instrucciones para realizar una variedad de operaciones sobre registros directamente, la acumulador y una constante literal o el acumulador y un registro, así en cuanto a la ejecución condicional y programa de ramificación.
Algunas operaciones, como poco, ajuste y pruebas, se pueden realizar en cualquier registro numerado, pero siempre implican operaciones aritméticas bi-operando registro W (acumulador), escribiendo el resultado vuelve a W o el otro operando. Para cargar una constante, es necesario cargarlo en W antes de que se pueda mover a otro registro. En los mayores núcleos, todos registrar movimientos necesarios para pasar a través de W, pero esto cambió en los núcleos de "gama alta".
Núcleos de PIC tienen instrucciones de salto que se utilizan para la ejecución condicional y ramificación. Las instrucciones de salto son 'saltar si el bit' y 'saltar si no se establece el bit'. Porque los corazones antes PIC18 tenían instrucciones sólo incondicional rama, saltos condicionales son ejecutadas por un salto condicional (con la condición opuesta) seguido por una rama incondicional. Salta también es de utilidad para la ejecución condicional de cualquier instrucción siguiente single inmediata. Es posible saltar saltar instrucciones. Por ejemplo, la secuencia de instrucción "omitir si A; saltar si B; C"ejecutará C si es verdadero o B es falsa.
La 18 serie implementa registros de sombra que salvar varios registros importantes durante una interrupción, proporcionando soporte de hardware para guardar automáticamente estado procesador Cuande le interrumpe.
En general, las instrucciones del PIC se dividen en 5 clases:
- Operación de registro de trabajo (WREG) con 8 bits inmediata operando ("literal"). Por ejemplo
movlw
(movimiento literal a WREG),andlw
(Y literal con WREG). Es una instrucción peculiar de la fotoretlw
, carga inmediata en WREG y vuelta, que se utiliza con computarizada sucursales para producir tablas de búsqueda. - Operación con WREG y registro indexada. El resultado puede escribirse o el registro de trabajo (ej.:
addwf reg,w
). o registro seleccionado (por ejemploaddwf reg,f
). - Operaciones poco. Estos tomar un número de registro y un número de bits y realice una de 4 acciones: establecer o borrar un poco y probar y saltar en establecer o borrar. Estos últimos se utilizan para realizar ramas condicionales. Las banderas de estado ALU generalmente están disponibles en un registro numerado para que operaciones como la "rama de llevar claro" son posibles.
- Control de las transferencias. Aparte de las instrucciones de salto mencionadas anteriormente, hay sólo dos:
Goto
yllamada
. - Unas instrucciones de cero-operando varias, como el retorno de subrutina, y
sueño
para entrar en modo de baja potencia.
Rendimiento
Las decisiones arquitectónicas están dirigidas a la maximización del cociente de la velocidad-a-coste. La arquitectura PIC estuvo entre los primeros diseños de CPU escalares,[citación necesitada] y aún entre los más simples y más barato. La arquitectura Harvard — en la cual las instrucciones y los datos provienen de fuentes separadas — simplifica el diseño de sincronización y microcircuito grandemente, y esto beneficia a velocidad de reloj, precio y consumo de energía.
El conjunto de instrucciones PIC es adecuado para la aplicación de tablas de búsqueda rápida en el espacio del programa. Tales búsquedas toma una instrucción y dos ciclos de instrucción. De esta manera se pueden modelar muchas funciones. Optimización es facilitada por el espacio del programa relativamente grande de la foto (por ejemplo 4096 × 14-bit palabras sobre el 16F690) y el diseño del conjunto de instrucciones, que permite para las constantes incrustadas. Por ejemplo, objetivo de la instrucción de una rama puede ser indexado por W y ejecutar un "RETLW" que como su nombre - volver con literal en w el.
Latencia de interrupción es constante en tres ciclos de instrucción. Interrupciones externas tienen que ser sincronizado con el ciclo de instrucción cuatro reloj, de lo contrario puede haber una variación de ciclo de una instrucción. Interrupciones internas ya están sincronizadas. La latencia de interrupción constante permite fotos para lograr la interrupción conducido bajo jitter secuencias de cronometraje. Un ejemplo de esto es un generador de pulsos de sincronización de vídeo. Esto ya no es cierto en los modelos más recientes de la foto, porque tienen una latencia de interrupción sincrónica de tres o cuatro ciclos.
Ventajas
- Pequeña instrucción set para aprender
- RISC arquitectura
- Construido en el oscilador con velocidades seleccionables
- Programación en el circuito de nivel de entrada fácil, además de en el circuito de depuración PICKit unidades disponibles por menos de $50
- Microcontroladores barato
- Amplia gama de interfaces, incluyendo I²C, SPI, USB, USART, A/D, comparadores programables, PWM, LIN, PUEDE, PSPy Ethernet[9]
- Disponibilidad de los procesadores en DIL paquete hacerlos fáciles de manejar para el uso de la afición.
Limitaciones
- Uno acumulador
- Registro-Banco de conmutación Es necesaria para acceder a la RAM entera de muchos dispositivos
- Las operaciones y registros no son ortogonal; algunas instrucciones pueden abordar RAM o inmediata constantes, mientras que otros pueden utilizar el acumulador sólo.
Se han abordado las siguientes limitaciones de pila en el PIC18 la serie, pero aún se aplican a núcleos anteriores:
- La pila de llamadas de hardware no es direccionable, tan derecho preferente conmutación de tarea No pueden ser implementadas
- Software implementado pilas No son eficientes, lo que es difícil generar reentrante código y soporte variables locales
Con memoria paginada del programa, hay dos tamaños de página que preocuparse: uno para CALL y GOTO y otro para computaban GOTO (típicamente usado para las búsquedas de mesa). Por ejemplo, en PIC16, llama y GOTO 11 bits de direccionamiento, así que el tamaño de página es 2048 palabras de instrucción. Para GOTOs computados, donde se agrega al PCL, el tamaño de página es 256 palabras de instrucción. En ambos casos, registrar la dirección superior pedacitos son proporcionados por el PCLATH. Este registro debe ser cambiado cada vez control de transferencias entre páginas. PCLATH también debe ser preservada por cualquier manejador de interrupción.[10]
Desarrollo del compilador
Mientras que varios compiladores comerciales están disponibles, en 2008, Microchip lanzó sus propio compiladores C, C18 y C30, para la línea de procesadores 24F y 30/33F 18F.
A partir de 2013, Microchip ofrece su serie XC de compiladores, para su uso con MPLAB X. Microchip eventualmente será gradualmente sus compiladores mayores como C18 y recomienda el uso de sus compiladores XC series para los nuevos diseños.[11]
El fácil de aprender el juego de instrucciones RISC del código de lenguaje ensamblador PIC puede dificultar el flujo general de comprender. Uso juicioso de simple macros puede aumentar la legibilidad del lenguaje ensamblador PIC. Por ejemplo, el original Paralaje Ensamblador PIC ("espasmo") tiene macros que ocultar W y hacer la foto parecen una máquina de dos-dirección. Tiene macro instrucciones como"MOV b, un
"(mover los datos de dirección a a dirección b) y "b, añadir un
"(agregar datos de dirección a a los datos de dirección b). También se esconde las instrucciones de salto por proporcionando tres operando rama macro instrucciones tales como"cjne a, b, dest
"(Comparar a con b y salto dest Si no son iguales).
Diferencias arquitectónicas del núcleo familiar
PICmicro fichas tienen una arquitectura de Harvard, y palabras de instrucción son tamaños inusuales. Originalmente, incluyen instrucciones de 12 bits 5 pedacitos de dirección para especificar el operando de la memoria y Rama 9 bits destinos. Las revisiones posteriores añadió opcode pedacitos, permitiendo que los bits de dirección adicional.
Dispositivos de núcleo basal (12 bits)
Estos dispositivos cuentan con una código amplio 12 bits de memoria, un archivo de registro de 32 bytes y una pila de llamadas profundo nivel dos diminutos. Son representados por las series PIC10, así como por algunos dispositivos PIC12 y PIC16. Dispositivos de referencia están disponibles en 6 pines a paquetes de 40 pines.
Los registros especiales son generalmente los primeros bytes de 7 a 9 del archivo de registro, y los bytes restantes son de propósito general RAM. Punteros se implementan mediante un par de registro: después de escribir una dirección a la FSR (archivo seleccione Registro), el registro INDF (f indirecta) se convierte en un alias para el registro accedido. Si se implementa en bancos de memoria RAM, el número de banco es seleccionado por los altos 3 bits de la FSR. Esto afecta a los números de registro 16 – 31; registros 0 – 15 son globales y no afectados por los bits seleccione banco.
Debido a la muy limitada Registro espacio (5 pedacitos), 4 raramente leer registros no fueron asignados direcciones, pero escrito por instrucciones especiales)OPCIÓN
y TRIS
).
El espacio de direcciones ROM es 512 palabras (12 bits cada uno), que podrán ser prorrogados hasta 2048 palabras de la banca. LLAMADA
y GOTO
instrucciones especifican los bits 9 bajos de la nueva ubicación del código; bits de orden superior adicionales se extraen el registro del estado. Tenga en cuenta que una instrucción CALL sólo incluye 8 bits de dirección y sólo puede especificar direcciones en la primera mitad de cada página 512-palabra.
Tablas de búsqueda se implementan mediante un computada GOTO
(asignación al registro PCL) en una tabla de RETLW
instrucciones.
El conjunto de instrucciones es la siguiente. Números de registro se denominan "f", mientras que las constantes son referidas como "k". Número de bits (0-7) es seleccionado por "b". La broca "d" selecciona el destino: 0 indica W, mientras que 1 indica que el resultado se escribe vuelve a fuente registro f. Los indicadores de estado C y Z pueden establecerse con base en el resultado; de lo contrario son sin modificar. Añadir y restar (pero no gira) instrucciones que establezca C también establece la bandera DC (dígito carry), el acarreo del bit 3 al bit 4, que es útil para BCD aritmética.
11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotecnias | C? | Z? | Descripción |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | OpCode | Instrucciones misceláneas | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | Ninguna operación (MOVW 0, W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | OPCIÓN | Copia W a la opción registrar | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | DORMIR | Entrar en modo de espera | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | CLRWDT | Reiniciar el temporizador de vigilancia | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | f | TRIS f | Copia W a tri-state register)f = 1, 2 o 3) | |||
0 | 0 | OpCode | d | registro | Las operaciones de la ALU: dest ← OP(f,W) | ||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | f | MOVWF f | ← dest W | ||||||
0 | 0 | 0 | 0 | 0 | 1 | d | f | CLR f,d | Z | dest ← 0, generalmente escrito CLRW o CLRF f | |||||
0 | 0 | 0 | 0 | 1 | 0 | d | f | SUBWF f,d | C | Z | f−W ← dest (dest ← f + ~ W + 1) | ||||
0 | 0 | 0 | 0 | 1 | 1 | d | f | DECF f,d | Z | dest ← f−1 | |||||
0 | 0 | 0 | 1 | 0 | 0 | d | f | IORWF f,d | Z | f ← dest | W, lógica inclusiva o | |||||
0 | 0 | 0 | 1 | 0 | 1 | d | f | ANDWF f,d | Z | ← dest f & W, lógica y | |||||
0 | 0 | 0 | 1 | 1 | 0 | d | f | XORWF f,d | Z | dest ← f ^ W, lógica exclusiva o | |||||
0 | 0 | 0 | 1 | 1 | 1 | d | f | ADDWF f,d | C | Z | dest ← f + W | ||||
0 | 0 | 1 | 0 | 0 | 0 | d | f | ACCEDEMOS f,d | Z | f ← dest | |||||
0 | 0 | 1 | 0 | 0 | 1 | d | f | COMF f,d | Z | ← dest ~ f, complemento bit a bit | |||||
0 | 0 | 1 | 0 | 1 | 0 | d | f | INCF f,d | Z | dest ← f + 1 | |||||
0 | 0 | 1 | 0 | 1 | 1 | d | f | DECFSZ f,d | dest ← f−1, luego saltar si es cero | ||||||
0 | 0 | 1 | 1 | 0 | 0 | d | f | FRR f,d | C | ← dest CARRY << 7 | f >> 1, gire a través de llevar | |||||
0 | 0 | 1 | 1 | 0 | 1 | d | f | RLF f,d | C | ← dest F << 1 | LLEVAR, rotar a la izquierda a través de llevar | |||||
0 | 0 | 1 | 1 | 1 | 0 | d | f | SWAPF f,d | f ← dest << 4 | f >> 4, swap nibbles | ||||||
0 | 0 | 1 | 1 | 1 | 1 | d | f | INCFSZ f,d | dest ← f + 1, entonces salta si es cero | ||||||
0 | 1 | op | bit | registro | Operaciones de bit | ||||||||||
0 | 1 | 0 | 0 | bit | f | BCF f,b | Poco clara b de f | ||||||||
0 | 1 | 0 | 1 | bit | f | BSF f,b | Set bit b de f | ||||||||
0 | 1 | 1 | 0 | bit | f | BTFSC f,b | Saltar si el bit b de f es claro | ||||||||
0 | 1 | 1 | 1 | bit | f | BTFSS f,b | Skip si está establecido el bit b de f | ||||||||
1 | 0 | op | k | Transferencias de control | |||||||||||
1 | 0 | 0 | 0 | k | RETLW k | Set W ← k, luego retorno de subrutina | |||||||||
1 | 0 | 0 | 1 | k | LLAMADA k | Llamar a la subrutina, dirección de 8 bits k | |||||||||
1 | 0 | 1 | k | GOTO k | Saltar a direcciones de 9 bits k[12] | ||||||||||
1 | 1 | op | 8-bit inmediata | Operaciones con W y 8 bits literal: W ← OP(k,W) | |||||||||||
1 | 1 | 0 | 0 | k | MOVLW k | W ← k | |||||||||
1 | 1 | 0 | 1 | k | IORLW k | Z | W ← k | W, bit a bit lógico o | ||||||||
1 | 1 | 1 | 0 | k | ANDLW k | Z | ← k de W & W, bit a bit y | ||||||||
1 | 1 | 1 | 1 | k | XORLW k | Z | W ← k ^ W, bit a bit exclusiva o | ||||||||
11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotecnias | C? | Z? | Descripción |
Clones ELAN Microelectronics (13 bits)
ELAN Microelectronics Corp. realizar una serie de microcontroladores PICmicro-como con una palabra de instrucción 13 bits.[13] Las instrucciones en su mayoría son compatibles con la instrucción de 14 bits de gama media establece, pero limitada a una dirección de registro de 6 bits (16 registros especiales y 48 bytes de RAM) y un espacio de 10 bits (palabra 1024) programa.
El contador de programa de 10 bits es accesible como R2. Lee acceso sólo las partes bajas y escribe claro los bits altos. Una excepción es la instrucción TBL, que modifica el byte bajo conservando partes 8 y 9.
Las acumulador de inmediato instrucciones se vuelven a numerar en relación con el PICmicro de 14 bits, para encajar en 3 pedacitos de operación en lugar de 4, pero hay de todo, así como una instrucción de interrupción de software adicional.
Hay unas pocas instrucciones adicionales varias, y hay algunos cambios en la terminología (el registro PICmicro opción se llama el registro de CONTrol; los registros TRIS PICmicro 1 – 3 se llaman registros de control de I/O 5 – 7), pero los equivalentes son evidentes.
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotecnias | C? | Z? | Descripción |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | OpCode | Instrucciones misceláneas | ||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP* | Ninguna operación (MOVW 0, W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | DAA† | C | Ajuste decimal después de la adición | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | CONTW* | Escribir registro CONT (CONT ← W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | DORMIR* | Entrar en modo de espera (WDT ← 0, reloj de parada) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | CLRWDT* | Reiniciar el temporizador watchdog (WDT ← 0) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | f | IOW f* | Copia W para control de E/S del registro)f = 5 – 7, 11-15) | |||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | ENI† | Habilitar interrupciones | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | DISI† | Deshabilitar interrupciones | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | RET | Retorno de subrutina, W sin modificar | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | RETI | Retorno de interrupción; devolución y habilitar las interrupciones | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | CONTR† | Registro de lectura CONT (W ← CONT) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | f | IOR f† | Copiar registro de control de I/O () Wf = 5 – 7, 11-15) | |||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | TBL† | C | Z | PCL += w. preservar bits PC 8 & 9 |
0 | 0 | OpCode | d | registro | Las operaciones de la ALU mismo como 12 y 14-bit PIC | |||||||||||
0 | 1 | op | bit | registro | Poco operaciones mismo como 12 y 14-bit PIC | |||||||||||
1 | 0 | op | k | Control de transferencias mismo como 14-bit PIC | ||||||||||||
1 | 1 | OpCode | 8-bit inmediata | Operaciones con W y 8 bits literal: W ← OP(k,W) | ||||||||||||
1 | 1 | 0 | op | k | MOV/IOR/AND/XOR, igual a 12-bit PIC | |||||||||||
1 | 1 | 1 | 0 | 0 | k | RETLW k | W ← k, luego retorno de subrutina | |||||||||
1 | 1 | 1 | 0 | 1 | k | SUBLW k | C | Z | K−W ← W (W ← k + ~ W + 1) | |||||||
1 | 1 | 1 | 1 | 0 | k | INT k† | Empuje PC, PC ← k (interrupción de software específica, generalmente k = 1) | |||||||||
1 | 1 | 1 | 1 | 1 | k | ADDLW k | C | Z | W ← k + W | |||||||
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotecnias | C? | Z? | Descripción |
*: Mismo opcode como 12-bit PIC
†: Conjunto de instrucciones exclusivo de instrucción EM78 con ningún equivalente PIC
Algunos modelos soportan varios bancos ROM o RAM, de manera similar a otros microcontroladores PIC.
Dispositivos básicos de gama media (14 bits)
Estos dispositivos cuentan con una código amplio 14 bits de memoria y una pila de llamadas profundo nivel 8 mejorada. El conjunto de instrucciones difiere muy poco de los dispositivos de línea de base, pero el código de operación adicional 2 bits permiten 128 registros y 2048 palabras de código para abordarse directamente. Hay unas pocas instrucciones adicionales misceláneas y dos instrucciones literales de 8 bits adicionales, sumar y restar. El núcleo de la clase media está disponible en la mayoría de los dispositivos etiquetados PIC12 y PIC16.
Los primeros 32 bytes del espacio de registro se asignan a los registros especiales; los 96 bytes restantes se utilizan para uso general RAM. Si se utiliza en bancos de memoria RAM, los alto 16 registros (0x70 – 0x7F) son globales, como son algunos de los más importantes registros especiales, incluyendo el registro del estado que sostiene el Banco RAM seleccione pedacitos. (Los otros registros mundiales son FSR y INDF, los bajos 8 bits del contador de programa PCL, el registro precarga alto PC PCLATH, y el control maestro interrupción registro INTCON).
El registro PCLATH suministra instrucción de orden superior dirección bits cuando se registran los 8 bits suministrados por una escritura de la LCP, o los 11 bits suministrados por un GOTO
o LLAMADA
instrucción, no es suficiente para abordar el espacio disponible en el ROM.
13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotecnias | C? | Z? | Descripción |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | OpCode | Instrucciones misceláneas | |||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | Ninguna operación (MOVW 0, W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | RETORNO | Retorno de subrutina, W sin modificar | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | RETFIE | Retorno de interrupción | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | OPCIÓN | Copia W a la opción registrar (obsoleto) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | DORMIR | Entrar en modo de espera | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | CLRWDT | Reiniciar el temporizador de vigilancia | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | f | TRIS f | Copia W a tri-state register)f = 1, 2 o 3) (obsoleto) | |||
0 | 0 | OpCode | d | registro | Las operaciones de la ALU: dest ← OP(f,W) | ||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | f | MOVWF f | f ← W | ||||||||
0 | 0 | 0 | 0 | 0 | 1 | d | f | CLR f,d | Z | dest ← 0, generalmente escrito CLRW o CLRF f | |||||||
0 | 0 | 0 | 0 | 1 | 0 | d | f | SUBWF f,d | C | Z | f−W ← dest (dest ← f + ~ W + 1) | ||||||
0 | 0 | 0 | 0 | 1 | 1 | d | f | DECF f,d | Z | dest ← f−1 | |||||||
0 | 0 | 0 | 1 | 0 | 0 | d | f | IORWF f,d | Z | f ← dest | W, lógica inclusiva o | |||||||
0 | 0 | 0 | 1 | 0 | 1 | d | f | ANDWF f,d | Z | ← dest f & W, lógica y | |||||||
0 | 0 | 0 | 1 | 1 | 0 | d | f | XORWF f,d | Z | dest ← f ^ W, lógica exclusiva o | |||||||
0 | 0 | 0 | 1 | 1 | 1 | d | f | ADDWF f,d | C | Z | dest ← f + W | ||||||
0 | 0 | 1 | 0 | 0 | 0 | d | f | ACCEDEMOS f,d | Z | f ← dest | |||||||
0 | 0 | 1 | 0 | 0 | 1 | d | f | COMF f,d | Z | ← dest ~ f, complemento bit a bit | |||||||
0 | 0 | 1 | 0 | 1 | 0 | d | f | INCF f,d | Z | dest ← f + 1 | |||||||
0 | 0 | 1 | 0 | 1 | 1 | d | f | DECFSZ f,d | dest ← f−1, luego saltar si es cero | ||||||||
0 | 0 | 1 | 1 | 0 | 0 | d | f | FRR f,d | C | ← dest CARRY << 7 | f >> 1, gire a través de llevar | |||||||
0 | 0 | 1 | 1 | 0 | 1 | d | f | RLF f,d | C | dest ← f << 1 | LLEVAR, rotar a la izquierda a través de llevar | |||||||
0 | 0 | 1 | 1 | 1 | 0 | d | f | SWAPF f,d | f ← dest << 4 | f >> 4, swap nibbles | ||||||||
0 | 0 | 1 | 1 | 1 | 1 | d | f | INCFSZ f,d | dest ← f + 1, entonces salta si es cero | ||||||||
0 | 1 | op | bit | registro | Operaciones de bit | ||||||||||||
0 | 1 | 0 | 0 | bit | f | BCF f,b | Poco clara b de f | ||||||||||
0 | 1 | 0 | 1 | bit | f | BSF f,b | Set bit b de f | ||||||||||
0 | 1 | 1 | 0 | bit | f | BTFSC f,b | Saltar si el bit b de f es claro | ||||||||||
0 | 1 | 1 | 1 | bit | f | BTFSS f,b | Skip si está establecido el bit b de f | ||||||||||
1 | 0 | op | k | Transferencias de control | |||||||||||||
1 | 0 | 0 | k | LLAMADA k | Llamada de subrutina | ||||||||||||
1 | 0 | 1 | k | GOTO k | Jump to Dirección k | ||||||||||||
1 | 1 | OpCode | 8-bit inmediata | Operaciones con W y 8 bits literal: W ← OP(k,W) | |||||||||||||
1 | 1 | 0 | 0 | x | x | k | MOVLW k | W ← k | |||||||||
1 | 1 | 0 | 1 | x | x | k | RETLW k | W ← k, luego retorno de subrutina | |||||||||
1 | 1 | 1 | 0 | 0 | 0 | k | IORLW k | Z | W ← k | W, bit a bit lógico o | ||||||||
1 | 1 | 1 | 0 | 0 | 1 | k | ANDLW k | Z | ← k de W & W, bit a bit y | ||||||||
1 | 1 | 1 | 0 | 1 | 0 | k | XORLW k | Z | W ← k ^ W, bit a bit exclusiva o | ||||||||
1 | 1 | 1 | 0 | 1 | 1 | k | (reservado) | ||||||||||
1 | 1 | 1 | 1 | 0 | x | k | SUBLW k | C | Z | K−W ← W (dest ← k + ~ W + 1) | |||||||
1 | 1 | 1 | 1 | 1 | x | k | ADDLW k | C | Z | W ← k + W | |||||||
13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotecnias | C? | Z? | Descripción |
Dispositivos de núcleo de gama media mejorada (14 bits)
Dispositivos de base mejorada gama media introducen una pila de hardware más profunda, métodos de reajuste adicional, 14 instrucciones adicionales y optimizaciones de lenguaje programación 'C'. En particular. Hay dos Registros INDF
(INDF0
y INDF1
) y dos correspondientes FSR
registro (paresFSRnL
y FSRnH
). Instrucciones especiales de uso FSRn
registros como registros de la dirección, con una gran variedad de modos de direccionamiento.
13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotecnias | C? | Z? | Descripción |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | OpCode | Instrucciones misceláneas | |||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | RESET | Software reset | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | CALLW | Empuje el PC y luego saltar al PCLATH:W | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | BRW | ← PC PC + W, relativa salta usando W | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n | 0 | 0 | MOVIW ++ FSRn | Z | Incremento de FSRn, entonces W ← INDFn | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n | 0 | 1 | MOVIW −−FSRn | Z | Decremento FSRn, entonces W ← INDFn | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n | 1 | 0 | MOVIW FSRn++ | Z | W ← INDFn, entonces incrementar FSRn | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n | 1 | 1 | MOVIW FSRn−− | Z | W ← INDFn, luego disminuir FSRn | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | n | m | MOVWI usando FSRn | INDFn ← W, mismos modos como MOVIW | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | k | MOVLB k | BSR ← k, movimiento literal al Registro seleccione Banco | ||||||
1 | 1 | OpCode | d | registro | Las operaciones de la ALU: dest ← OP(f,W) | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | d | f | LSLF f,d | C | Z | ← dest f << 1, lógica shift izquierdo | ||||||
1 | 1 | 0 | 1 | 1 | 0 | d | f | LSRF f,d | C | Z | ← dest f >> 1, lógica shift derecho | ||||||
1 | 1 | 0 | 1 | 1 | 1 | d | f | ASRF f,d | C | Z | ← dest f >> 1, aritméticas cambio bien | ||||||
1 | 1 | 1 | 0 | 1 | 1 | d | f | SUBWFB f,d | C | Z | ← dest f + ~ W + C, restar con acarreo | ||||||
1 | 1 | 1 | 1 | 0 | 1 | d | f | ADDWFC f,d | C | Z | ← dest f + W + C, añadir con lleva | ||||||
1 | 1 | OpCode | k | Operaciones con literales k | |||||||||||||
1 | 1 | 0 | 0 | 0 | 1 | 0 | n | k | ADDFSR FSRn,k | FSRn ← FSRn + k, añadir 6 bits firmado offset | |||||||
1 | 1 | 0 | 0 | 0 | 1 | 1 | k | MOVLP k | PCLATH ← k, movimiento 7 bits literal al cierre PC alto | ||||||||
1 | 1 | 0 | 0 | 1 | k | SUJETADOR k | ← PC PC + k, rama relativa mediante desplazamiento firmado 9 bits | ||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | n | k | MOVIW k[FSRn] | Z | ← W [FSRn+k], desplazamiento firmado 6 bits | ||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | n | k | MOVWI k[FSRn] | [FSRn+k] ← W, desplazamiento firmado 6 bits | |||||||
13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotecnias | C? | Z? | Descripción |
Dispositivos de núcleo de high-end PIC17 (16 bits)
La 17 serie nunca llegó a ser popular y ha sido reemplazada por la arquitectura PIC18. No se recomienda para los nuevos diseños, y la disponibilidad puede ser limitada.
Mejoras respecto a anteriores núcleos son 16 bits amplia opcodes (permitiendo muchas nuevas instrucciones) y una pila de llamadas profundo nivel 16. PIC17 dispositivos fueron producidos en paquetes de 40 a 68 pins.
La 17 serie presentó a una serie de importantes novedades:
- un acumulador de memoria asignada
- acceso de lectura al código de memoria (tabla lecturas)
- movimientos al registro directos (núcleos previas necesarias para mover los registros a través de la batería)
- una interfaz de memoria de programa externo para ampliar el espacio de código
- un multiplicador del hardware de 8 bits 8 bits ×
- un segundo par de registro indirecto
- auto-incremento/decremento abordar controlado por bits de control en el registro de estado (ALUSTA)
Dispositivos PIC18 high-end base (16 bits)
Microchip introdujo la arquitectura PIC18 en 2000. [2] A diferencia de la 17 serie, que ha demostrado para ser muy popular, con un gran número de variantes del aparato pueden actualmente en fabricación. En contraste con los dispositivos anteriores, que más a menudo que no fueron programados en Asamblea, C se ha convertido en el lenguaje de desarrollo predominante.[15]
La 18 serie hereda la mayoría de las características e instrucciones de la 17 serie, mientras que la adición de un número de importantes novedades:
- pila de llamadas es de 21 bits mucho más profundas y amplia (31 niveles de profundidad)
- la pila de llamadas puede ser leída y escrita (registros TOSU:TOSH:TOSL)
- instrucciones de rama condicional
- modo de direccionamiento indexado (PLUSW)
- extender el FSR registra a 12 bits, permitiéndoles Dirección linealmente el espacio de direcciones de todos los datos
- la adición de otro registro FSR (elevando el número hasta 3)
El espacio de memoria RAM es de 12 bits, dirigidas mediante un registro seleccione Banco de 4 bits y un desplazamiento de 8 bits en cada instrucción. Un poco de "acceso" adicional en cada instrucción selecciona entre banco 0)a= 0) y el banco seleccionado por el (BSRa= 1).
Una pila de 1 nivel también está disponible para los registros de estado, WREG y BSR. Se guardan en cada interrupción y puede ser restaurados en retorno. Si las interrupciones están deshabilitadas, se puede también utilizar en subrutina llamada/retorno estableciendo la s bit (adición ", rápida" a la instrucción).
La característica de incremento/decremento fue mejorada por eliminar los bits de control y agregar cuatro nuevos registros indirectos por FSR. Dependiendo de qué fichero indirecta registro está siendo accedido es posible postdecrement, coma o preincrement FSR; o la dirección efectiva de la forma mediante la adición de W a FSR.
En los más avanzados dispositivos PIC18, está disponible un "modo extendido" que hace la dirección más favorable a código compilado:
- un nuevo desplazamiento de abordar de modo; algunas direcciones que estaban en relación con el Banco de acceso ahora se interpretan en relación con el registro de FSR2
- la adición de varias nuevas instrucciones, notables para manipular los registros FSR.
Estos cambios fueron dirigidos principalmente a mejorar la eficiencia de una implementación de la pila de datos. Si FSR2 se utiliza como el puntero de pila o puntero de marco, elementos de la pila pueden ser indexados fácilmente, permitiendo más eficiente Código reentrante. Compilador de microchip MPLAB C18 C opta por utilizar FSR2 como un puntero de marco.
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotecnias | C? | Z? | N? | Descripción | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | OpCode | Instrucciones misceláneas | |||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | Ninguna operación | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | DORMIR | Entrar en modo de espera | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | CLRWDT | Reiniciar el temporizador de vigilancia | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | EMPUJE | Empujar la PC parte superior de la pila | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | POP | Pop (y descartar) parte superior de la pila | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | DAW | C | Ajuste decimal W | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | TBLRD * | Mesa de lectura | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | TBLRD * + | Mesa de lectura con coma | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | TBLRD * − | Mesa de lectura con postdecrement | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | TBLRD + * | Tabla Lea con incremento de pre | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | mod | TBLWR | Mesa de escribir, mismos modos como TBLRD | |||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | s | RETFIE [, RÁPIDO] | Retorno de interrupción | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | s | RETORNO [, RÁPIDO] | Retorno de subrutina | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | RESET | despejado | Software reset | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | k | MOVLB | Movimiento literal k para Banco seleccione Registrar | |||||||
0 | 0 | 0 | 0 | 1 | OpCode | literal | Operaciones literales: W ← OP(k,W) | ||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | k | SUBLW k | W ← k - W | |||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | k | IORLW k | W ← k | W, lógica inclusiva o | |||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | k | XORLW k | W ← k ^ W, exclusiva o | |||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | k | ANDLW k | ← k de W & W, lógica y | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | k | RETLW k | RETORNO W ← k | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | k | MULLW k | W ← k × W | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | k | MOWLW k | W ← k | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | k | ADDLW k | W ← k + W | |||||||||||
0 | OpCode | d | a | registro | Las operaciones de la ALU: dest ← OP(f,W) | ||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | a | f | MULWF f,a | PRODH:PRODL ← W × f (sin firmar) | |||||||||||
0 | 0 | 0 | 0 | 0 | 1 | d | a | f | DECF f,d,a | C | Z | N | dest ← f − 1 | ||||||||
0 | 0 | 0 | 1 | 0 | 0 | d | a | f | IORWF f,d,a | Z | N | f ← dest | W, lógica inclusiva o | |||||||||
0 | 0 | 0 | 1 | 0 | 1 | d | a | f | ANDWF f,d,a | Z | N | ← dest f & W, lógica y | |||||||||
0 | 0 | 0 | 1 | 1 | 0 | d | a | f | XORWF f,d,a | Z | N | dest ← f ^ W, exclusiva o | |||||||||
0 | 0 | 0 | 1 | 1 | 1 | d | a | f | COMF f,d,a | Z | N | ← dest ~ f, complemento bit a bit | |||||||||
0 | 0 | 1 | 0 | 0 | 0 | d | a | f | ADDWFC f,d,a | C | Z | N | dest ← f + W + C | ||||||||
0 | 0 | 1 | 0 | 0 | 1 | d | a | f | ADDWF f,d,a | C | Z | N | dest ← f + W | ||||||||
0 | 0 | 0 | 0 | 1 | 0 | d | a | f | INCF f,d,a | C | Z | N | dest ← f + 1 | ||||||||
0 | 0 | 1 | 0 | 1 | 1 | d | a | f | DECFSZ f,d,a | dest ← f − 1, omitir si 0 | |||||||||||
0 | 0 | 1 | 1 | 0 | 0 | d | a | f | RRCF f,d,a | C | Z | N | dest ← f >> 1 | C << 7, gire a través de llevar | ||||||||
0 | 0 | 1 | 1 | 0 | 1 | d | a | f | RLCF f,d,a | C | Z | N | dest ← f << 1 | C, gire izquierda acarreo | ||||||||
0 | 0 | 1 | 1 | 1 | 0 | d | a | f | SWAPF f,d,a | f ← dest << 4 | f >> 4, swap nibbles | |||||||||||
0 | 0 | 1 | 1 | 1 | 1 | d | a | f | INCFSZ f,d,a | dest ← f + 1, omitir si 0 | |||||||||||
0 | 1 | 0 | 0 | 0 | 0 | d | a | f | RRNCF f,d,a | Z | N | dest ← f >> 1 | f << 7, Gire derecha (sin llevar) | |||||||||
0 | 1 | 0 | 0 | 0 | 1 | d | a | f | RLNCF f,d,a | Z | N | dest ← f << 1 | f >> 7, rotar a la izquierda (sin llevar) | |||||||||
0 | 1 | 0 | 0 | 1 | 0 | d | a | f | INFSNZ f,d,a | dest ← f + 1, omitir si no 0 | |||||||||||
0 | 1 | 0 | 0 | 1 | 1 | d | a | f | DCFSNZ f,d,a | dest ← f − 1, omitir si no 0 | |||||||||||
0 | 1 | 0 | 1 | 0 | 0 | d | a | f | ACCEDEMOS f,d,a | Z | N | f ← dest | |||||||||
0 | 1 | 0 | 1 | 0 | 1 | d | a | f | SUBFWB f,d,a | C | Z | N | ← dest W + ~ f + C (dest ← W − f − C̅) | ||||||||
0 | 1 | 0 | 1 | 1 | 0 | d | a | f | SUBWFB f,d,a | C | Z | N | dest ← f + ~ W + C (dest ← f − W − C̅) | ||||||||
0 | 1 | 0 | 1 | 1 | 1 | d | a | f | SUBWF f,d,a | C | Z | N | dest ← f − W (dest ← f + ~ W + 1) | ||||||||
0 | 1 | 1 | 0 | OpCode | a | registro | Las operaciones de ALU, no escribo para W | ||||||||||||||
0 | 1 | 1 | 0 | 0 | 0 | 0 | a | f | CPFSLT f,a | saltar si f < W | |||||||||||
0 | 1 | 1 | 0 | 0 | 0 | 1 | a | f | CPFSEQ f,a | saltar si f == W | |||||||||||
0 | 1 | 1 | 0 | 0 | 1 | 0 | a | f | CPFSGT f,a | saltar si f > W | |||||||||||
0 | 1 | 1 | 0 | 0 | 1 | 1 | a | f | TSTFSZ f,a | saltar si f == 0 | |||||||||||
0 | 1 | 1 | 0 | 1 | 0 | 0 | a | f | SETF f,a | f ← 0xFF | |||||||||||
0 | 1 | 1 | 0 | 1 | 0 | 1 | a | f | CLRF f,a | 1 | f ← 0, Rep.← Z 1 | ||||||||||
0 | 1 | 1 | 0 | 1 | 1 | 0 | a | f | NEGF f,a | C | Z | N | f ← −f | ||||||||
0 | 1 | 1 | 0 | 1 | 1 | 1 | a | f | MOVWF f,a | f ← W | |||||||||||
1 | 0 | OPC | bit | a | registro | Operaciones de bit | |||||||||||||||
0 | 1 | 1 | 1 | bit | a | f | BTG f,b,a | Toggle bit b de f | |||||||||||||
1 | 0 | 0 | 0 | bit | a | f | BSF f,b,a | Set bit b de f | |||||||||||||
1 | 0 | 0 | 1 | bit | a | f | BCF f,b,a | Poco clara b de f | |||||||||||||
1 | 0 | 1 | 0 | bit | a | f | BTFSS f,b,a | Skip si está establecido el bit b de f | |||||||||||||
1 | 0 | 1 | 1 | bit | a | f | BTFSC f,b,a | Saltar si el bit b de f es claro | |||||||||||||
1 | 1 | 0 | OPC | Dirección | Grande-Dirección operaciones | ||||||||||||||||
1 | 1 | 0 | 0 | fuente | MOVFF s,d | Movimiento absoluto | |||||||||||||||
1 | 1 | 1 | 1 | destino | |||||||||||||||||
1 | 1 | 0 | 1 | 0 | n | SUJETADOR n | Rama de PC + 2n | ||||||||||||||
1 | 1 | 0 | 1 | 1 | n | RCALL n | Subrutina llamada a PC + 2n | ||||||||||||||
1 | 1 | 1 | 0 | 0 | Cond | n | Rama condicional | ||||||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | n | BZ n | Si la rama PSR.Z se establece | |||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | n | BNZ n | Si la rama PSR.Z es clara | |||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | n | BC n | Si la rama PSR.C se establece | |||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | n | BNC n | Si la rama PSR.C está claro | |||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | n | BOV n | Si la rama PSR.V se establece | |||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | n | BNOV n | Si la rama PSR.V está claro | |||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | n | BN n | Si la rama PSR.N se establece | |||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | n | BNN n | Si la rama PSR.N es clara | |||||||||||
1 | 1 | 1 | 0 | 1 | 0 | (reservado) | |||||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | OPC | k | 2-palabra instrucciones | |||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | s | k (lsbits) | LLAMADA k[, RÁPIDO] | Llamada de subrutina | |||||||||||
1 | 1 | 1 | 1 | k (msbits) | |||||||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | f | k (msb) | LFSR f,k | 12-bit literal hacia FSRf | ||||||||
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | k (lsbits) | |||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | k (lsbits) | GOTO k | Salto absoluto, PC ← k | |||||||||||
1 | 1 | 1 | 1 | k (msbits) | |||||||||||||||||
1 | 1 | 1 | 1 | k | (Sin operación) |
Microcontroladores de 16-bit PIC24 y dsPIC
En 2001, Microchip introdujo la serie dsPIC de fichas,[17] que entró en producción en masa a finales de 2004. Son microcontroladores de 16-bits inherentemente primera del Microchip. PIC24 dispositivos están diseñados como microcontroladores de propósito general. dsPIC dispositivos incluyen procesamiento de señal digital capacidades además.
Aunque todavía similar a anteriores arquitecturas PIC, existen mejoras significativas:[18]
- Todos los registros son de 16 bits de ancho
- Espacio de dirección de datos ampliada a 64 Kbytes
- Primer 2K está reservado para los registros de control periférico
- Banco de datos de conmutación no es necesaria salvo RAM supera los 62K
- "operando f" directo direccionamiento extendido a 13 bits (8 Kbytes)
- Los registros disponibles para las operaciones de registro 16 W.
(Pero siempre operaciones sobre operandos de tipo f de referencia W0).
- Contador de programa es de 22 bits (Bits 22:1; bit 0 siempre es 0)
- Las instrucciones son de 24 bits de ancho
- Las instrucciones vienen en bytes (B = 1) y formas de la palabra (16 bits) (B = 0)
- Pila está en la memoria RAM (con W15 como puntero de pila); No hay ninguna pila de hardware
- W14 es el puntero de marco
- Pueden accederse directamente a los datos almacenados en la ROM ("programa espacio visibilidad")
- Los vectores de interrupción para fuentes de interrupción diferentes son compatibles.
Algunas características son:
- hardware MAC (multiplicar – acumular)
- barril de desplazamiento
- revocación de bit
- (16 × 16)-solo-ciclo de multiplicación y otras operaciones de DSP
- hardware de dividir assist (19 ciclos de división 16/32-bit)
- soporte de hardware para la indización de lazo
- Acceso directo a memoria
dsPICs puede ser programado en C utilizando el compilador de XC16 del Microchip (anteriormente llamado C30) que es una variante del GCC.
Instrucción ROM es 24 bits de ancho. Acceso software ROM en palabras de 16 bits, donde incluso las palabras mantenga los 16 bits menos significativos de cada instrucción y extrañas palabras mantenga los 8 bits más significativos. La mitad alta de extrañas palabras Lee como cero. El contador de programa es 23 bits de ancho, pero el bit menos significativo es siempre 0, así que hay 22 bits modificables.
Las instrucciones vienen en 2 variedades principales. Uno es como las instrucciones PIC clásicas, con una operación entre W0 y un valor en un registro especificado f (es decir, el primer 8K de RAM), y un destino seleccione poco seleccionar que se actualiza con el resultado. Los registros W son asignados a la memoria. Así que el operando f puede ser cualquier registro W,
La otra forma, nueva para el PIC24, especifica 3 W registro operandos, 2 de los cuales permiten una especificación de modo direccionamiento 3 bits:
operando s | d operando | Descripción | ||||
---|---|---|---|---|---|---|
PPP | Reg | Sintaxis | QQQ | Reg | Sintaxis | |
000 | SSSS | Ws | 000 | dddd | Wd | Registro directo |
001 | SSSS | [Ws] | 001 | dddd | [Wd] | Indirecta |
010 | SSSS | [Ws−−] | 010 | dddd | [Wd−−] | Indirecta con postdecrement |
011 | SSSS | [Ws ++] | 011 | dddd | [Wd ++] | Indirecta con coma |
100 | SSSS | [−−Ws] | 100 | dddd | [−−Wd] | Indirecta con predecrement |
101 | SSSS | [++ Ws]. | 101 | dddd | [++ Wd] | Indirecta con preincrement |
11x | SSSS | [Ws + Ww] | 11x | dddd | [Wd + Ww] | Indirecto con registro de desplazamiento |
11k | kkkk | #u5 | (Unused, ilegal) | 5 bits sin signo inmediato |
El desplazamiento de registro abordar de modo sólo está disponible para 2-operando instrucciones. 3-operando instrucciones utilizan Ww como el segundo operando fuente y esta codificación para una fuente inmediata de 5 bits sin signo. Tenga en cuenta que se puede agregar el mismo Ww Wd y Ws.
Algunas instrucciones son 2 palabras largas. La segunda palabra es un NOP, que incluye hasta 16 bits del operando inmediato adicional.
2 3 |
2 2 |
2 1 |
2 0 |
1 9 |
1 8 |
1 7 |
1 6 |
1 5 |
1 4 |
1 3 |
1 2 |
1 1 |
1 0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Mnemotecnias | C ? |
Z ? |
N ? |
Descripción |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | OpCode | offset | Transferencias de control | ||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | — | NOP | Ninguna operación (& 2 palabra de instrucción) | ||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | n | NOP | Segunda palabra de rama absoluta (pedacitos 22:16) | |||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | n | NOP | Segunda palabra de la instrucción | ||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | op | — 0 — | a | Transferencia de control computarizada (a Wa 16-bit) | ||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | — 0 — | a | LLAMADA Ra | Empuje PC, saltar a Wa | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | — 0 — | a | RCALL Ra | Empuje PC, saltar a la PC + 2 × Wa | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | — 0 — | a | GOTO Ra | Saltar a Wa | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | — 0 — | a | SUJETADOR Ra | Saltar a PC + 2 × Wa | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n < 15:1 > | 0 | LLAMADA addr23 | Empuje PC, saltar a la dirección absoluta | |||||||||||||||||
— 0 — | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | n < 22:16 > | ||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | — | (Reservado) | |||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | n | 0 | GOTO addr23 | Salto a la dirección absoluta | |||||||||||||||||
— 0 — | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | n < 22:16 > | ||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | B | k | d | RETLW #k, Wd | WN [.B] = #u10, PC pop | |||||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | — 0 — | RETORNO | PC pop | ||||||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | — 0 — | RETFIE | C | Z | N | SR pop, PC | |||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | n | Dirección RCALL | Empuje PC, PC += 2 * s16 | ||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | k | HACER #k, addr | Cero overhead lazo; k + 1 es repetición Conde, PC + 2n última instrucción | ||||||||||||||||
— 0 — | n | |||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | k | REPETICIÓN #k | Repita la siguiente instrucción k + 1 veces | ||||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | n | Dirección RCALL | Empuje PC, PC += 2 * s16 | ||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 1 | — | (Reservado) | ||||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 0 | a | n | SUJETADOR Oa, addr | Si acumulador un desbordado, PC += 2 * simm16 | ||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 1 | a | n | BRA Sa, addr | Si un saturado de acumulador, PC += 2 * simm16 | ||||||||||||||||||
0 | OpCode | w | B | q | d | p | s | Las operaciones de la ALU: Wd ← OP(Ww,Ws) | ||||||||||||||||||||
0 | 0 | 0 | 1 | 0 | w | B | q | d | p | s | SUBR [.B] Ww, Ws, Wd | C | Z | N | WD ← Ws − Ww (Wd ← Ws + ~ PD + 1) | |||||||||||||
0 | 0 | 0 | 1 | 1 | w | B | q | d | p | s | SUBBR [.B] Ww, Ws, Wd | C | Z | N | WD ← Ws + ~ Ww + C (Wd ← Ws − Ww − C̅) | |||||||||||||
0 | 0 | 1 | 0 | k | d | MOV #k, Wd | WD ← #imm16 | |||||||||||||||||||||
0 | 0 | 1 | 1 | Cond | n | Rama condicional para PC + 2 * n | ||||||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | n | SUJETADOR OV, addr | Si la rama PSR.V se establece | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | n | SUJETADOR C, addr | Si la rama PSR.C se establece | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | n | SUJETADOR Z, addr | Si la rama PSR.Z se establece | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | n | SUJETADOR N, addr | Si la rama PSR.N se establece | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | n | BRA LE, addr | Si la rama PSR.Z o PSR.N ≠ PSR.V | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | n | SUJETADOR LT, addr | Si la rama PSR.N ≠ PSR.V | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | n | SUJETADOR LEU, addr | Si la rama PSR.Z es el conjunto o PSR.C está claro | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | n | SUJETADOR addr | Rama incondicionalmente | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | n | SUJETADOR NOV, addr | Si la rama PSR.V está claro | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | n | SUJETADOR NC, addr | Si la rama PSR.C está claro | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | n | SUJETADOR NZ, addr | Si la rama PSR.Z es clara | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | n | SUJETADOR NN, addr | Si la rama PSR.N es clara | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | n | SUJETADOR GT, addr | Si la rama PSR.Z es clara y PSR.N = PSR.V | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | n | SUJETADOR GE, addr | Si la rama PSR.N = PSR.V | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | n | SUJETADOR GTU, addr | Si la rama PSR.Z es clara y PSR.C se establece | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | n | (Reservado) | |||||||||||||||||||
0 | OpCode | w | B | q | d | p | s | Las operaciones de la ALU: Wd ← OP(Ww,Ws) | ||||||||||||||||||||
0 | 1 | 0 | 0 | 0 | w | B | q | d | p | s | AÑADIR [.B] Ww, Ws, Wd | C | Z | N | WD ← Ww + Ws | |||||||||||||
0 | 1 | 0 | 0 | 1 | w | B | q | d | p | s | ADDC [.B] Ww, Ws, Wd | C | Z | N | WD ← Ww + Ws + C | |||||||||||||
0 | 1 | 0 | 1 | 0 | w | B | q | d | p | s | SUB [.B] Ww, Ws, Wd | C | Z | N | WD ← Ww − Ws | |||||||||||||
0 | 1 | 0 | 1 | 1 | w | B | q | d | p | s | SUBB [.B] Ww, Ws, Wd | C | Z | N | WD ← Ww + ~ Ws + C (Wd ← Ww − ~ Ws − C̅) | |||||||||||||
0 | 1 | 1 | 0 | 0 | w | B | q | d | p | s | Y [.B] Ww, Ws, Wd | Z | N | WD ← Ww & Ws, lógicas y | ||||||||||||||
0 | 1 | 1 | 0 | 1 | w | B | q | d | p | s | XOR [.B] Ww, Ws, Wd | Z | N | WD ← Ww ^ Ws, exclusivas o | ||||||||||||||
0 | 1 | 1 | 1 | 0 | w | B | q | d | p | s | IOR [.B] Ww, Ws, Wd | Z | N | WD ← Ww | WS, inclusivos o | ||||||||||||||
0 | 1 | 1 | 1 | 1 | w | B | q | d | p | s | MOV [.B] ws, Wd | Z | N | WD ← Ws (modo desplazamiento permitido) | ||||||||||||||
1 | 0 | 0 | 0 | 0 | f | d | MOV f, Wd | F ← WD | ||||||||||||||||||||
1 | 0 | 0 | 0 | 1 | f | s | MOV Ws, f | f ← Ws | ||||||||||||||||||||
1 | 0 | 0 | 1 | 0 | k | B | k | d | k | s | MOV [Ws + s10], Wd | Carga con 10 bits firmado offset | ||||||||||||||||
1 | 0 | 0 | 1 | 1 | k | B | k | d | k | s | MOV Ws, [Wd + s10] | Almacenar con desplazamiento firmado 10 bits | ||||||||||||||||
1 | 0 | 1 | 0 | 0 | OPC | b | Z | B | 0 | 0 | 0 | p | s | Operaciones de bit en Ws | ||||||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | b | 0 | B | 0 | 0 | 0 | p | s | BSET [.B] #b, Ws | B bit set de Ws | |||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | b | 0 | B | 0 | 0 | 0 | p | s | BCLR [.B] #b, Ws | B poco clara de Ws | |||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | b | 0 | B | 0 | 0 | 0 | p | s | BTG [.B] #b, Ws | Toggle bit b de Ws | |||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | b | 0 | 0 | 0 | 0 | 0 | p | s | BTST.C #b, Ws | C | PSR el set.C = bit b de Ws | ||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | b | 1 | 0 | 0 | 0 | 0 | p | s | BTST.Z #b, Ws | Z | PSR el set.Z como complemento de la parte b del Ws | ||||||||||
1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | b | Z | 0 | 0 | 0 | 0 | p | s | BTSTS.z #b, Ws | C/Z | Prueba un poco (a C o Z), luego fije el | ||||||||||
1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | Z | w | 0 | 0 | 0 | 0 | p | s | BTST.z Ww, Ws | C/Z | Pedacito de prueba (dinámico) | ||||||||||
1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | b | 0 | 0 | 0 | 0 | 0 | p | s | BTSS #b, Ws | Prueba bit b de Ws, omitir si establece | |||||||||||
1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | b | 0 | 0 | 0 | 0 | 0 | p | s | BTSS #b, Ws | B prueba un poco de Ws, omitir si claro | |||||||||||
1 | 0 | 1 | 0 | 1 | OPC | b | f | Operaciones de bit en f | ||||||||||||||||||||
1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | b | f | b | BSET [.B] f, #b | Set bit b de f | ||||||||||||||||
1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | b | f | BCLR.B #b, f | Poco clara b de f | |||||||||||||||||
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | b | f | BTG.B #b, f | Toggle bit b de f | |||||||||||||||||
1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | b | f | BTST.B #b, f | Z | Prueba bit b de f | ||||||||||||||||
1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | b | f | BTSTS.B #b, f | Z | Prueba bit b de f, luego fije el | ||||||||||||||||
1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | Z | w | 0 | 0 | 0 | 0 | p | s | BSW.z Ws, Ww | Ww poco a poco de Wb PSW copia | |||||||||||
1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | b | f | BTSS #b, f | Prueba bit b de f, omitir si establece | |||||||||||||||||
1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | b | f | BTSC #b, f | Prueba bit b de f, omitir si claro | |||||||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | OPC | B | k | d | Operaciones de registro inmediato | ||||||||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | B | k | d | AÑADIR [.B] #u10, Wd | C | N | Z | WD ← Wd + imm10 | ||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | B | k | d | ADC [.B] #u10, Wd | C | N | Z | WD ← Wd + imm10 + C | ||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | B | k | d | SUB [.B] #u10, Wd | C | N | Z | WD ← Wd − imm10 | ||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | B | k | d | SUBB [.B] #u10, Wd | C | N | Z | ← WD Wd − imm10 − C̅ | ||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | B | k | d | Y [.B] #u10, Wd | N | Z | WD ← Wd & imm10 | |||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | B | k | d | XOR [.B] #u10, Wd | N | Z | WD ← Wd ^ imm10 | |||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | B | k | d | IOR [.B] #u10, Wd | N | Z | WD ← Wd | imm10 | |||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | B | k | d | MOV [.B] #u10, Wd | WD ← imm10 | |||||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | OPC | B | D | f | Las operaciones de la ALU: dest ← OP(f,W0) | ||||||||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | B | D | f | AÑADIR [.B] f [, WREG] | C | N | Z | dest ← f + W0 | ||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | B | D | f | ADC [.B] f [, WREG] | C | N | Z | f ← dest W0 + C | ||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | B | D | f | SUB [.B] f [, WREG] | C | N | Z | dest ← f − W0 | ||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | B | D | f | SUBB [.B] f [, WREG] | C | N | Z | dest ← f − W0 + C̅ | ||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | B | D | f | Y [.B] f [, WREG] | N | Z | f ← dest & W0 | |||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | B | D | f | XOR [.B] f [, WREG] | N | Z | dest ← f ^ W0 | |||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | B | D | f | IOR [.B] f [, WREG] | N | Z | f ← dest | W0 | |||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | B | 1 | f | MOV [.B] WREG, f | ← dest W0 | |||||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | op | w | d | 0 | p | s | Multiplicación de 16 × 16→32 | |||||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | w | d | 0 | p | s | MUL.UU Ww, Ws, Wd | WD + 1:Wd ← Wb * Ws (sin firmar) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | w | d | 0 | p | s | MUL.Estados Unidos Ww, Ws, Wd | WD + 1:Wd ← Wb * Ws (Ws firmados) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | w | d | 0 | p | s | MUL.SU Ww, Ws, Wd | WD + 1:Wd ← Wb * Ws (BM firmado) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | w | d | 0 | p | s | MUL.SS Ww, Ws, Wd | WD + 1:Wd ← Wb * Ws (firmados) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | op | w | d | p | s | Acceso de memoria de programa | ||||||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | B | QQQ | d | p | s | TBLRDL [Ws], Wd | WD ← programa [TBLPAG:Ws] (bits 15:0) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | B | QQQ | d | p | s | TBLRDH [Ws], Wd | WD ← programa [TBLPAG:Ws] (bits 23:16) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | B | QQQ | d | p | s | TBLWTL Ws, [Wd] | PROGRAMA [TBLPAG:Wd] ← Ws (bits 15:0) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | B | QQQ | d | p | s | TBLWTH [Ws], [Wd] | PROGRAMA [TBLPAG:Wd] ← Ws (bits 23:16) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | B | 0 | f | MUL [.B] f | W3:W2 ← f * W0 (sin firmar) | |||||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | — | (Reservado) | |||||||||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 000 | d | 0 | p | s | MOV.D Ws, Wd | Mover registro par (fuente puede ser la memoria) | ||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | q | d | 000 | s | 0 | MOV.D Ws, Wd | Mover registro par (dest puede ser memoria) | ||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | — | (Reservado) | |||||||||||||||||||
1 | 1 | 0 | 0 | 0 | m | A | S | x | y | i | j | a | DSP MAC (sólo dsPIC) | |||||||||||||||
1 | 1 | 0 | 0 | 1 | Otras instrucciones DSP (dsPIC solamente) | |||||||||||||||||||||||
1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 000 | d | p | s | FF1R Ws, Wd | Descubrió primero desde la derecha (lsb) | |||||||||||||
1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 000 | d | p | s | FF1L Ws, Wd | Descubrió primero desde la izquierda (msb) | |||||||||||||
1 | 1 | 0 | 1 | 0 | 0 | OPC | B | q | d | p | s | Registro de cambio/rotación W | ||||||||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | B | q | d | p | s | SL [.B] ws, Wd | C | N | Z | WD ← Ws << 1, izquierda cambia (a llevar) | ||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | B | q | d | p | s | LSR [.B] ws, Wd | C | N | Z | WD ← Ws >> 1, lógica shift derecho | ||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | B | q | d | p | s | ASR [.B] ws, Wd | C | N | Z | WD ← Ws >> 1, aritméticas cambio bien | ||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | B | q | d | p | s | RLNC [.B] ws, Wd | N | Z | WD ← Ws <<< 1, rotar a la izquierda (sin llevar) | |||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | B | q | d | p | s | RLC [.B] ws, Wd | C | N | Z | C:WD ← Ws:C << 1, rotar a la izquierda a través de llevar | ||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | B | q | d | p | s | RRNC [.B] ws, Wd | N | Z | WD ← Ws >>> 1, Gire derecha (sin llevar) | |||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | B | q | d | p | s | CRR [.B] ws, Wd | C | N | Z | WD:C ← C:Ws >> 1, gire a través de llevar | ||||||||||
1 | 1 | 0 | 1 | 0 | 1 | OPC | B | D | f | F cambio/rotación | ||||||||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | B | D | f | SL [.B] f [, WREG] | C | N | Z | f ← dest << 1, izquierda cambia (a llevar) | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | B | D | f | LSR [.B] f [, WREG] | C | N | Z | f ← dest >> 1, lógica shift derecho | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | B | D | f | ASR [.B] f [, WREG] | C | N | Z | f ← dest >> 1, aritméticas cambio bien | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | B | D | f | RLNC [.B] f [, WREG] | N | Z | f ← dest <<< 1, rotar a la izquierda (sin llevar) | |||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | B | D | f | RLC [.B] f [, WREG] | C | N | Z | C:dest ← f:C << 1, rotar a la izquierda a través de llevar | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | B | D | f | RRNC [.B] f [, WREG] | N | Z | f ← dest >>> 1, Gire derecha (sin llevar) | |||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | B | D | f | CRR [.B] f [, WREG] | C | N | Z | Dest:C ← C:f >> 1, gire a través de llevar | ||||||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | U | t | v | W | 0 | 0 | s | 32/16 y 16/16 dividir pasos (prefijo con repetir #17) | |||||||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0000 | v | 0 | 0 | 0 | s | DIV.S Wv, Ws | C | N | Z | Dividir paso, W0 ← Wv/Ws, resto ← W1 | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | t | v | 1 | 0 | 0 | s | DIV.SD Wv, Ws | C | N | Z | Dividir paso, Wt:Wv ← W0 / Ws, resto ← W1 | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0000 | v | 0 | 0 | 0 | s | DIV.U Wv, Ws | C | N | Z | Dividir paso, W0 ← Wv/Ws, resto ← W1 | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | t | v | 1 | 0 | 0 | s | DIV.UD Wv, Ws | C | N | Z | Dividir paso, Wt:Wv ← W0 / Ws, resto ← W1 | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | t | 0 | 0 | 0 | 0 | 0 | 0 | 0 | s | DIVF Wt, Ws | C | N | Z | Dividir paso, Wt:0 ← W0 / Ws, resto ← W1 | ||||||
1 | 1 | 0 | 1 | 1 | 0 | 1 | — | (Reservado) | ||||||||||||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | — | (Reservado) | |||||||||||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | w | d | 0 | 0 | 0 | s | Ww SL, Ws, Wd | N | Z | WD ← Wv << Ws | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | w | d | 1 | 0 | 0 | k | Ww SL, #u4, Wd | N | Z | WD ← Wv << imm4 | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | w | d | 0 | 0 | 0 | s | LSR Ww, Ws, Wd | N | Z | WD ← Wv >> Ws, lógicas shift derecho | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | w | d | 1 | 0 | 0 | k | LSR Ww, #u4, Wd | N | Z | WD ← Wv >> imm4, razón lógica shift | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | w | d | 0 | 0 | 0 | s | ASR Ww, Ws, Wd | N | Z | WD ← Wv >> Ws, aritméticas cambio bien | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | w | d | 1 | 0 | 0 | k | ASR Wv, #u4, Wd | N | Z | WD ← Wv >> imm4, cierto desplazamiento aritmético | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0000 | d | p | s | FBCL Ws, Wd | C | Encuentre shift permisible normalización aritmética | |||||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0000 | B | 0 | 0 | 0 | p | s | CP0 [.B] ws | C | N | Z | Comparar con cero, Ws − 0 | ||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | w | B | 0 | 0 | 0 | p | s | CP [.B] Ww, Ws | C | N | Z | Comparar, Wb − Ws (Wb + ~ Ws + 1) | ||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | w | B | 0 | 0 | 0 | p | s | CPB [.B] Ww, Ws | C | N | Z | Comparar con prestado, Wb + ~ Ws + C (Wb Ws − − C̅) | ||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | B | 0 | f | CP0 [.B] ws | C | N | Z | Comparar con cero, f − 0 | ||||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | B | 0 | f | CP [.B] f | C | N | Z | Comparar f, f − W0 | ||||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | B | 0 | f | CPB [.B] f | C | N | Z | Comparar con borrow, f f + ~ W0 + C (f − W0 − C̅) | ||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 0 | — | (Reservado) | ||||||||||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | w | B | 0 | 0 | 0 | 0 | 0 | 0 | s | CPSGT [.B] Ww, Ws | Comparar y omitir si mayor (Wb > Ws, firmados) | |||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | w | B | 0 | 0 | 0 | 0 | 0 | 0 | s | CPSLT [.B] Ww, Ws | Comparar y omitir si menos (Wb < Ws, firmados) | |||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | w | B | 0 | 0 | 0 | 0 | 0 | 0 | s | CPSNE [.B] Ww, Ws | Comparar y omitir si no es igual (Wb ≠ Ws) | |||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | w | B | 0 | 0 | 0 | 0 | 0 | 0 | s | CPSNE [.B] Ww, Ws | Comparar y omitir si igual (Wb = Ws) | |||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | B | q | d | p | s | INC [.B] ws, Wd | C | N | Z | WD ← Ws + 1 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | B | q | d | p | s | INC2 [.B] ws, Wd | C | N | Z | WD ← Ws + 2 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | B | q | d | p | s | DEC [.B] ws, Wd | C | N | Z | WD ← Ws−1 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | B | q | d | p | s | DEC2 [.B] ws, Wd | C | N | Z | WD ← Ws−2 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | B | q | d | p | s | NEG [.B] ws, Wd | C | N | Z | WD ← ~ Ws + 1 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | B | q | d | p | s | COM [.B] ws, Wd | N | Z | WD ← ~ Ws | |||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | B | q | d | 000 | 0000 | CLR [.B] Wd | WD ← 0 | |||||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | B | q | d | 000 | 0000 | SETM [.B] Wd | WD ← ~ 0 | |||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | B | D | f | INC [.B] f [, WREG] | C | N | Z | dest ← f + 1 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | B | D | f | INC2 [.B] f [, WREG] | C | N | Z | dest ← f + 2 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | B | D | f | DEC [.B] f [, WREG] | C | N | Z | dest ← f−1 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | B | D | f | DEC [.B] f [, WREG] | C | N | Z | f−2 ← dest | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | B | D | f | NEG [.B] f [, WREG] | C | N | Z | ← dest ~ f + 1 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | B | D | f | COM [.B] f [, WREG] | N | Z | ← dest ~ f | |||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | B | D | f | CLR [.B] f [, WREG] | ← dest 0 | |||||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | B | D | f | SETM [.B] f [, WREG] | ← dest ~ 0 | |||||||||||||||
1 | 1 | 1 | 1 | 0 | 0 | m | A | 1 | x | y | i | j | OPC | MPY DSP/MAC/ED/EDAC (dsPIC solamente) | ||||||||||||||
1 | 1 | 1 | 1 | 0 | 1 | — | (Reservado) | |||||||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | f | 0 | EMPUJE f | Empuje f encima de pila | |||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | f | 0 | POP f | F pop desde la parte superior de la pila | |||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | k | LNK #u14 | Empuje W14, W14 ← W15, W15 += u14 | ||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | — 0 — | ULNK | W15 ← W14, W14 pop | ||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 000 | d | p | s | SE Ws, Wd | C | N | Z | WD ← sign_extend(Ws), broca copia 7 pedacitos 15:8 | ||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 000 | d | p | s | ZE Ws, Wd | 1 | 0 | Z | 15:8 bits de WD ← zero_extend(Ws), clara | ||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | k | DISI #u14 | Desactivar la interrupción para el k + 1 ciclos | ||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 000 | d | 000 | s | EXCH Ws, Wd | Cambiar el contenido de registros Ws, Wd | |||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 000 | 0000 | 000 | s | DAW.B Ws | C | Decimal ajuste basado en C, DC | ||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | B | 000 | 0000 | 000 | s | INTERCAMBIO [.B] ws | Intercambiar mitades de Ws | |||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | — 0 — | RESET | Software reset | ||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | — 0 — | k | PWRSAV #u1 | Entrar en modo inactivo o sueño | ||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | — 0 — | CLRWDT | Temporizador watchdog clara | |||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | — 0 — | POP.S | Sombra pop registra (W0 – 3, parte del PSR) | |||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | — 0 — | EMPUJE.S | Empujar sombra registra (W0 – 3, parte del PSR) | |||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | — | (Reservado) | |||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | — | NOPR | Ninguna operación (versión #2) |
Microcontroladores de 32-bit PIC32
En noviembre de 2007 introdujo el nuevo Microchip PIC32MX familia de microcontroladores de 32 bits. La alineación inicial del dispositivo se basa en el estándar de la industria MIPS32 Núcleo M4K.[20] El dispositivo puede ser programado usando el Microchip MPLAB C Compiler for PIC32 MCU, una variante del compilador GCC. Los primeros 18 modelos actualmente en producción (PIC32MX3xx y PIC32MX4xx) son compatible pin a pin y compartir los periféricos mismos conjunto con la familia de PIC24FxxGA0xx de dispositivos (16 bits) permitiendo el uso de las bibliotecas comunes, herramientas de software y hardware. Hoy a partir de 28 pines en paquetes pequeños QFN hasta dispositivos de alto rendimiento con Ethernet, CAN y USB OTG, gama completa familia de microcontroladores de 32 bits de clase media están disponibles.
La arquitectura PIC32 trae una serie de nuevas características a la cartera de Microchip, incluyendo:
- La ejecución más alta velocidad 80 MIPS (120 +[21] Dhrystone MIPS @ 80 MHz)
- La memoria flash más grande: 512 kByte
- Una instrucción por la ejecución del ciclo de reloj
- El primer procesador en la memoria caché
- Permite la ejecución de RAM
- Capacidades completas de velocidad Host/doble papel y USB OTG
- Completo JTAG 2 cables de programación y depuración
- Seguimiento en tiempo real
Un próximo producto del Microchip es la PIC32MZ familia de microcontroladores.
Dispositivo variantes y características de hardware
Generalmente cuentan con dispositivos de PIC:
- Modo de reposo (ahorro de energía).
- Temporizador de vigilancia.
- Varios cristal o RC configuraciones del oscilador, o un reloj externo.
Variantes
Dentro de una serie, hay todavía muchas variantes del dispositivo dependiendo de qué recursos de hardware las características del chip.
- Pasadores de fines generales de la entrada-salida.
- Osciladores de reloj interno.
- 16/08/32 bits temporizadores.
- Interno EEPROM Memoria.
- Interfaz Serial síncrono/asíncrono USART.
- Periférico MSSP para I²C y SPI Comunicaciones.
- Captura/comparar y SW. módulos.
- Convertidores de analógico a digital (hasta ~1.0 MHz).
- USB, Ethernet, PUEDE soporte de interfaz.
- Interfaz de memoria externa.
- Integrado análogo RF front-ends (PIC16F639 y rfPIC).
- KEELOQ Balanceo cifrado código periférica (codificar/decodificar)
- Y muchos más.
Tendencias
La primera generación de fotos con EPROM almacenamiento son casi totalmente sustituidos por chips con Memoria Flash. Asimismo, el conjunto de instrucciones de 12 bits original del PIC1650 y sus descendientes directos ha sido reemplazado por conjuntos de instrucciones de 14 bits y 16 bits. Microchip todavía vende OTP (one-time-programable) y ventana (UV-borrable) versiones de algunas de su EPROM basado en fotos para pedidos de apoyo o volumen obsoleta. El sitio web de Microchip contiene fotos que no son eléctricamente borrables como OTP. Las versiones con ventana borrables UV de estos chips pueden pedirse.
Sufijos números parte
La F en un nombre indica generalmente el PICmicro utiliza la memoria flash y puede ser borrada electrónicamente. Por el contrario, una C generalmente significa que sólo puede ser borrada exponiendo el dado a la luz ultravioleta (que sólo es posible si se utiliza un estilo de ventana paquete). Una excepción a esta regla es el PIC16C84 que utiliza EEPROM y por lo tanto es eléctricamente borrable.
Una L en el nombre indica que la parte se desarrollará en una tensión más baja, a menudo con frecuencia los límites impuestos.[22]
Piezas diseñadas específicamente para la operación de bajo voltaje, dentro de un rango estricto de 3-3.6 voltios, están marcadas con una J en el número de pieza. Estas piezas son también excepcionalmente I/O tolerante como aceptan hasta 5 V como entradas.[22]
Foto de clones
Terceros fabricantes hacen productos compatibles, por ejemplo el Paralaje SX.
Herramientas de desarrollo
Microchip proporciona un Freeware IDE paquete llamado MPLAB, que incluye un ensamblador, enlazador, software simuladory depurador. También venden los compiladores de C para el PIC18 y dsPIC que integran limpiamente con MPLAB. Las versiones de estudiante libre de los compiladores de C también están disponibles con todas las características. Pero para las versiones libres, las optimizaciones se desactivará después de 60 días.[23]
Hacer varios terceros C idioma compiladores para fotos, muchas de las cuales se integran perfectamente para MPLAB o cuentan con su propio IDE. Un compilador totalmente recomendado para la lengua PICBASIC al programa de microcontroladores PIC está disponible en meLabs, Inc. MikroElektronika ofrece los compiladores PIC en lenguajes de programación C, Basic y Pascal.
Un lenguaje de programación gráfico Flowcode, existe capaz de programar dispositivos PIC de 8 y 16 bit y generar código C compatible con PIC. Existe en numerosas versiones de una demostración gratuita para una edición profesional más completa.
El compilador de código abierto sólo para la familia PIC16 y PIC18 es el SDCC. Hace uso de GPutils para herramientas de vinculador y ensamblador. Un plugin es necesario instalarlos en MPLAB o MPLABX.[24]
Herramientas de desarrollo están disponibles para la familia PIC bajo el GPL o software libre o licencias de código abierto.
Programadores de dispositivo
Dispositivos llamados"programadores"tradicionalmente se usan para obtener el código del programa en el PIC blanco. Más PICs Microchip actualmente venden característica ICSP (En el programación de circuito Serial) o LVP Capacidades (bajo voltaje de programación), permitiendo que el PIC a programarse mientras está sentado en el destino circuito. Programación ICSP se realiza utilizando dos pasadores, reloj y datos, mientras que un alto voltaje (12V) está presente en el pin Vpp/MCLR. Programación de baja tensión se distribuye con el alto voltaje, pero las reservas exclusivo el uso de un pin de I/O y por lo tanto pueden deshabilitarse para recuperar el pin para otros usos (una vez discapacitados sólo puede volver a activarse usando la programación en alta tensión).
Hay muchos programadores para microcontroladores PIC, que van desde los diseños extremadamente simples que dependen de ICSP para permitir la descarga directa de código desde un ordenador, a programadores inteligentes que pueden verificar el dispositivo en varias tensiones de alimentación. Muchos de estos programadores complejos utilizan una foto previamente programada para enviar los comandos de programación para el PIC que se va a programar. El tipo inteligente del programador es necesario programar PIC anterior modelos (sobre todo tipo de EPROM) que no admiten la programación en el circuito.
Muchas de las fotos de final flash basado en mayor también pueden uno mismo-programa (escritura a su propia memoria de programa). Demo tableros están disponibles con una fábrica pequeña bootloader programada que puede utilizarse para cargar programas de usuario sobre un interfaz tales como RS-232 o USB, evitando así la necesidad de un dispositivo programador. Alternativamente existe bootloader firmware disponible que el usuario puede cargar en el PIC mediante el ICSP. Las ventajas de un gestor de arranque sobre ICSP es las velocidades superiores de programación, ejecución del programa inmediata tras la programación, y la capacidad de ambos para depuración y programar usando el mismo cable.
Programadores/depuradores contáctese directamente con la empresa Microchip. Terceros programadores gama de planes para construir tu propio, a Self-assembly kits y probado completamente listo para unidades. Algunos son diseños simples que requieren un PC para hacer la programación bajo nivel de señalización (éstos suelen conectan a la serial o puerto paralelo y consisten en unos componentes simples), mientras que otros tienen la lógica de programación incorporada (típicamente utiliza una conexión USB o serie, son generalmente más rápido y a menudo se construyen utilizando fotos de sí mismos para el control).
Los siguientes son los oficiales programador PICkit/depuradores de Microchip:
-
Microchip PICkit1
-
PICkit2 de microchip
-
Microchip PICkit3
PICKit 2 clones y open source
PICKit 2 ha sido un interesante programador PIC de Microchip. Puede programar más fotos y depurar la mayoría de las fotos (a partir de mayo-2009, sólo la familia PIC32 no es compatible con MPLAB depuración). Desde sus primeras versiones, todos código fuente de software (firmware, aplicación de PC) y esquema hardware están abiertos al público. Esto es relativamente fácil para un usuario final pueda modificar el programador para su uso con el sistema operativo no Windows como Linux o Mac OS. Por el momento, también crea un montón de interés DIY y clones. Esta estructura de código abierto trae muchas características para la comunidad de PICKit 2 como programador-to-Go, la herramienta UART y la herramienta lógica, que han sido aportadas por usuarios de PICKit 2. Usuarios también han añadido características tales que el PICKit 2 4MB capacidad de programador-to-go, circuitos de buck/boost USB, conectores tipo RJ12 y otros.
Depuración
Emulación de software
Emuladores gratis y comerciales existen para los procesadores de la familias PIC.
En el circuito de depuración
Fotos de modelo posteriores disponen de una interfaz ICD (en el circuito de depuración), construida en el núcleo de la CPU. Los depuradores ICD (MPLAB ICD2 y otros terceros) pueden comunicarse con esta interfaz mediante tres líneas. Este sistema de depuración barato y sencillo viene a un precio sin embargo, es decir breakpoint limitada Conde (1 en mayores fotos 3 en fotos más recientes), pérdida de algunos IO (con la excepción de cierta superficie montaje fotos de 44 pines que han dedicado las líneas para la depuración) y la pérdida de algunas de las características del chip. Para fotos pequeñas, donde la pérdida de IO causada por este método sería inaceptable, cabeceras especiales son hechos que están equipados con las fotos que tienen pines extras específicamente para la depuración.
Emuladores en circuito
Microchip ofrece tres completo emuladores en circuito:: el MPLAB ICE2000 (interfaz paralela, un convertidor de USB está disponible); los nuevos ICE4000 de MPLAB (conexión USB 2.0); y más recientemente, la REAL ICE. Todas estas herramientas de hielo pueden utilizarse con el MPLAB IDE para la depuración completa a nivel de fuente de código que se ejecuta en el destino.
El ICE2000 requiere módulos de emulador y el hardware de prueba debe proporcionar una toma de corriente que puede tomar un módulo emulador, o un dispositivo de producción.
El hielo verdadero se conecta directamente a dispositivos compatibles con la emulación en el circuito a través de la interfaz de programación PGC/PGD, o a través de una conexión de alta velocidad que utiliza dos clavijas más producción. Según Microchip, soporta PIC "más" basadas en flash, PIC24 y dsPIC procesadores.[25]
El ICE4000 directamente ya no se anuncia en la Página Web de Microchip, y la página de compra indica que no se recomienda para los nuevos diseños.
Sistemas operativos
Un proyecto de código abierto por Serge Vakulenko se adapta 2.11BSD la arquitectura PIC32, bajo el nombre de RetroBSD. Esto trae un familiar sistema operativo tipo UNIX, incluyendo una a bordo entorno de desarrollo para el microcontrolador, dentro de las limitaciones del hardware a bordo.[26]
Véase también
- PIC16x84
- Atmel AVR
- Arduino
- Átomo básico
- BASIC Stamp
- OOPic
- PICAXE
- TI MSP430
- Maximite
Referencias
- ^ https://WW1.microchip.com/downloads/en/DeviceDoc/39630C.pdf
- ^ https://www.datasheetarchive.com/dl/Databooks-1/Book241-407.pdf
- ^ "Árbol de familia PICmicro", PIC16F Seminario presentación https://www.microchip.com.tw/pdf/2004_spring/PIC16F%20seminar%20presentation.pdf
- ^ a b "MOS datos 1976", instrumento General 1976 Databook
- ^ a b "Catálogo de datos de 1977", Micro electrónica del instrumento General Corporation https://www.rhoent.com/pic16xx.pdf
- ^ Comunicado de prensa de microchip. "Tecnología del microchip ofrece 12 milmillonésimo microcontrolador PIC ® al principal Motor fabricante, Nidec Corporation". 2013.
- ^ https://WW1.microchip.com/downloads/en/DeviceDoc/35007b.pdf
- ^ "AN869: memoria externa interfaces técnicas para el PIC18F8XXX". 24 de agosto de 2009.
- ^ Selector de productos microchip
- ^ "Foto paginación y PCLATH"
- ^ "MPLAB ® XC: compilador soluciones"
- ^ Hoja de datos PIC10F200/202/204/206. Tecnología del microchip. 2007. p. 52.
- ^ https://www.EMC.com.tw/eng/products.asp
- ^ ELAN Microelectronics Corp (septiembre de 2005), EM78P157N microcontrolador de 8 bits con OTP ROM especificación de producto, obtenido 2012-04-02
- ^ https://www.microchipc.com/SourceCode/
- ^ Microchip Technology, Inc. (2007), Hoja de datos PIC18F1220/1320, obtenido 2012-04-02
- ^ [1]
- ^ "PIC24H Resumen de familia". 23 de septiembre de 2007.
- ^ Manual de referencia del programador de dsPIC30FTecnología microchip, 2008, DS70157C, obtenido 2012-07-02
- ^ https://www.MIPS.com/products/processors/32-64-bit-cores/MIPS32-M4K/
- ^ "Microcontroladores PIC de 32 bits". 13 de octubre de 2010.
- ^ a b "3V Design Center". 02 de agosto de 2011.
- ^ "MPLAB C Compiler para PIC18 MCU".
- ^ "SDCC plugin for MPLABX".
- ^ "MPLAB REAL ICE In-Circuit emulador Descripción del producto". 23 de septiembre de 2007.
- ^ RetroBSD Inicio
Enlaces externos
Wikilibros tiene un libro sobre el tema: Sistemas embebidos/PIC microcontrolador |
Wikilibros tiene un libro sobre el tema: Una guía para la documentación de microcontrolador PIC |
Wikimedia Commons tiene medios relacionados con Microcontroladores PIC. |
- Microcontrolador PIC en DMOZ.
- Sitio web oficial de Microchip
- Sitio web de proyectos de wifi PIC
|
|