Manual  de Programacion  en codigo assembler  

Instrucciones para el PIC16C/F84 por Luis Frino

ADDWF f,d Sumar w y f
ANDWF f,d AND entre W y f
CLEARF Limpiar f
CLRW Limpiar w
CONF f,d Complementar f
CLEARF f,d Decrementar f
DECFSZ f,d Decrementar f,saltar si es cero
INCF f,d Incrementar f
INCFSZ f,d Incrementar f,saltar si es cero
ICRWF f,d CR entre W y f
MOVF f,d Mover f
MOVWF f,w Mover W a f
NOP No operación
RLF f,d Rotar a la izquierda a través del carry
RRF f,d Rotar a la derecha a través del carry
SUBWF f,d Restar w de f
SWAPF f,d Intercambiar nibbles de f
XORWF f,d OR exclusiva entre W y f
RCF f,b Limpiar bit b de f
BSF f,b Activar bit b de f
BTFSC f,b Probar bit b de f, saltar si es cero
BTFSS f,b Probar bit b de f,saltar si es uno
ADDLW k Sumar literal k a W
ANDLW k AND entre k y W
CALL k Llamar subrutina
CLRWDT Limpiar WDT
GOTO k Salta a dirección k
IORLW k OR entre k y W
MOVLW k Cargar a W con literal k
RETFIE Retornar de interrupción
RETLW k Retornar y cargar a W con k
RETURN Retornar de subrutina
SLEEP Ir al modo de bajo consumo
SUBLW k Restarle k a W
XORLW k OR exclusiva entre k y W
TRIS sirve para configurar los puertos,si un pin trabaja como entrada o como salida.
OPTION es para programar funciones especiales dentro del registro OPTION.


Serie antigua  de Microchips
en Castellano
 

Un microcontrolador es un circuito integrado que contiene toda la estructura (arquitectura) de un microcomputador, o sea CPU, RAM, ROM y circuitos de entrada y salida. Los resultados de tipo práctico, que pueden lograrse a partir de éstos elementos, son sorprendentes. Algunos microcontroladores más especializados poseen además convertidores análogo digital, temporizadores, contadores y un sistema para permitir la comunicación serial. Los PIC16C5X de Microchip Technology, son una familia de microcontroladores CMOS de 8 bits, alta velocidad, de bajo costo y excelente rendimiento. Características · Operan desde DC hasta 20 MH · Bajo consumo de potencia: 50mW a 32 Khz. y 6 mW en reposo, disipación máxima menor a 800 mw. · Utiliza memorias EPROM y PROM internas · Circuito de vigilancia (Watchdog) para recuperación por fallas de programa. · Hasta 20 líneas de entrada y salida que permiten el manejo de corrientes considerables (25mA en "sumidero" y 20 mA en "fuente") · Modo de operación para ahorro de potencia "sleep" · Fusible para protección de código · Convertidores análogo digital · Temporizadores programables · El conjunto de instrucciones está formado por 33 palabras · 512-2k x 12 de memoria EPROM de programa · 25-72 x 8 registros de propósito general (SRAM) · Direccionamientos en modos directo, indirecto y relativo para datos e instrucciones.

 

MicroControladores PIC16CXX

 

Introducción

En 1980 aproximadamente, los fabricantes de circuitos integrados iniciaron la difusión de un nuevo circuito para control, medición e instrumentación al que llamaron microcomputador en un sólo chip o de manera más exacta MICROCONTROLADOR.

Un microcontrolador es un circuito integrado que contiene toda la estructura (arquitectura) de un microcomputador, o sea CPU, RAM, ROM y circuitos de entrada y salida. Los resultados de tipo práctico, que pueden lograrse a partir de éstos elementos, son sorprendentes.

Algunos microcontroladores más especializados poseen además convertidores análogo digital, temporizadores, contadores y un sistema para permitir la comunicación serial.

Los PIC16C5X de Microchip Technology, son una familia de microcontroladores CMOS de 8 bits, alta velocidad, de bajo costo y excelente rendimiento.

  

Características

Dispositivos de la serie PIC16CXX

PIC EPROM RAM PUERTOS I/O

16C54 512x12 32x8 13

16C55 512x12 32x8 21

16C56 1Kx12 32x8 13

16C57 2kX12 80x8 21

Arquitectura

La estructura interna de los PIC 16C5XX se basa en registros con memoria y buses separados para las instrucciones y los datos, llamada arquitectura Harvard. La memoria y el bus de datos (RAM) son de 8 bits de ancho, mientras que la memoria EPROM y su bus tienen 12 bits.

Esta estructura emplea 2 espacios de memoria diferentes, uno para datos y otro para programas y además se utilizan 2 buses distintos: uno para el tráfico entre la CPU y los datos y otro para la comunicación entre la memoria de programa y la CPU. Esto permite que, mientras una instrucción se ejecuta utilizando el bus de datos (8 bits). La siguiente se está leyendo desde la memoria de programa y cargándose en el registro de instrucción utilizando el bus de instrucciones de 12 bits.

Diagrama en bloques del microcontrolador PIC

Dispositivos de la serie PIC16CXX

PIC EPROM RAM PUERTOS I/O

16C54 512x12 32x8 13

16C55 512x12 32x8 21

16C56 1Kx12 32x8 13

16C57 2kX12 80x8 21

Arquitectura

La estructura interna de los PIC 16C5XX se basa en registros con memoria y buses separados para las instrucciones y los datos, llamada arquitectura Harvard. La memoria y el bus de datos (RAM) son de 8 bits de ancho, mientras que la memoria EPROM y su bus tienen 12 bits.

Esta estructura emplea 2 espacios de memoria diferentes, uno para datos y otro para programas y además se utilizan 2 buses distintos: uno para el tráfico entre la CPU y los datos y otro para la comunicación entre la memoria de programa y la CPU. Esto permite que, mientras una instrucción se ejecuta utilizando el bus de datos (8 bits). La siguiente se está leyendo desde la memoria de programa y cargándose en el registro de instrucción utilizando el bus de instrucciones de 12 bits.

Diagrama en bloques del microcontrolador PIC


Ilustración 2. Arquitectura interna del microcontrolador PIC

Disposición de pines del microcontrolador

Descripción de pines del PIC166c55/57

1. RTCC RELOJ DE TIEMPO REAL

15. PUERTO B, BIT 5

2. FUENTE DE ALIMENTACION

16. PUERTO B, BIT 6

3. NO CONECTADO

17. PUERTO B, BIT 7

4. TIERRA (GND)

18. PUERTO C, BIT 0

5. NC

19. PUERTO C, BIT 1

6. PUERTO A, BIT 0

20. PUERTO C, BIT 2

7. PUERTO A, BIT 1

21. PUERTO C, BIT 3

8. PUERTO A, BIT 2

22. PUERTO C, BIT 4

9. PUERTO A, BIT 3

23. PUERTO C, BIT 5

10. PUERTO B, BIT 0

24. PUERTO C, BIT 6

11. PUERTO B, BIT 1

25. PUERTO C, BIT 7

12. PUERTO B, BIT 2

26. OSC2/CLKOUT SALIDA RELOJ

13. PUERTO B, BIT 3

27. OSC1 ENTRADA OSCILADOR

14. PUERTO B, BIT 4

28. MCLR (RESET)

 


Disposición de pines del microcontrolador

Descripción de pines del PIC166c55/57

1. RTCC RELOJ DE TIEMPO REAL

15. PUERTO B, BIT 5

2. FUENTE DE ALIMENTACION

16. PUERTO B, BIT 6

3. NO CONECTADO

17. PUERTO B, BIT 7

4. TIERRA (GND)

18. PUERTO C, BIT 0

5. NC

19. PUERTO C, BIT 1

6. PUERTO A, BIT 0

20. PUERTO C, BIT 2

7. PUERTO A, BIT 1

21. PUERTO C, BIT 3

8. PUERTO A, BIT 2

22. PUERTO C, BIT 4

9. PUERTO A, BIT 3

23. PUERTO C, BIT 5

10. PUERTO B, BIT 0

24. PUERTO C, BIT 6

11. PUERTO B, BIT 1

25. PUERTO C, BIT 7

12. PUERTO B, BIT 2

26. OSC2/CLKOUT SALIDA RELOJ

13. PUERTO B, BIT 3

27. OSC1 ENTRADA OSCILADOR

14. PUERTO B, BIT 4

28. MCLR (RESET)

 

 

Registros operacionales

Direccionamiento indirecto de datos

Es un registro que no está disponible en forma física, se utiliza el contenido del registro f4 (selector o FSR), para seleccionar de manera indirecta uno de los 32 registros disponibles como registro de datos o registro puntero, según el tipo de instrucción que llame a f0.

Contador y reloj del tiempo real (RTCC)

 

En este registro se puede leer o escribir como en cualquiera de los otros registros. Este registro puede ser incrementado por una señal externa aplicada al pin RTCC o por el reloj interno de instrucciones. Las aplicaciones más obvias de este registro son el conteo de eventos y la medición de tiempos. El incremento del registro RTCC se puede determinar por medio de un prescalador interno programable.

Un divisor de frecuencia, "PRESCALER" puede ser programado al RTCC, asignando el estado apropiado a los bits RTS, RTE, PS1, PS2, PS0 del registro option que se desccribe más adelante. El bit RTS, determina si el RTCC es incrementado externa o internamente.

Todo incremento en f1 es retardado 2 ciclos de instrucción independiente de la fuente del pulso. Válido también para instrucciones que modifican el RTCC.

El bit RTE determina si el flanco de la señal externa es de subida (RTE=0) o de bajada (RTE=1) siempre y cuando haya sido programado su incremento con señal externa.

Los bits PS2, PS1, PS0 determinan la rata de división del prescaler.

contador de programa

Se utiliza para direccionar las palabras de 12 bits del programa del usuario, almacenadas en la memoria ROM según el tipo de microcontrolador que se utilice. El número de bits de este registro y de la pila (STACK), es de 9 para los PIC 16C54 y 55, de 10 bits para el PIC 16C56 y 11 en el PIC 16C57, que permite direccionar hasta 2048 palabras.

Después la condición de reset el contador de programa se inicia con todos sus bits en "UNO" con cada instrucción, a menos que cambie como resultado de algunas instrucciones especiales (GOTO, CALL, RETLW, etc.)

La instrucción GOTO permite saltar a cualquier posición de programa. La instrucción CALL cambia directamente los 8 bits bajos del contador de programa (bits del PC o A 7) mientras que el noveno (bit 8 del PC) se pone en "Cero", por esta razón, todas las entradas a las subrutinas o saltos calculados están limitados a las primeras 256 posiciones de cualquier página de memoria de programa. El valor actual del PC incrementando en uno, se carga en la pila. La instrucción RETLW carga el contador de programa con el contenido de la parte alta de la pila. Si el PC es el destino de cualquier instrucción, el resultado calculado se cargará en los 8 bits bajos del contador de programa. El direccionamiento relativo se logra sumando el contenido del registro de trabajo W al contador de programa; este es ampliamente utilizado para elaborar tablas de saltos y datos.

La serie 16C5XX permite solo 2 niveles de Hardware para la pila, lo que implica que sólo se puede hacer un anidamiento de subrutinas.

Registro de estados

Este registro contiene el estado de la ALU, del reset y la selección de páginas para programas mayores de 512 palabras (56/57). Se recomienda, utilizar solamente las instrucciones BCF, BSF y MOVWF para modificar sus bits, puestos que éstas instrucciones no afectan ningún bit de estado.

Este registro está conformado por los siguientes bits:

00: Página 0 (000-1FF)

01: Página 1 (200-3FF)

10: Página 2 (400-5FF)

 11: Página 3 (600-7FF)

Mapa de memoria del microcontrolador

FSR: File Select Register (Registro Selector de Archivos).

En el PIC 16C54/55/56 los bits 0-4 seleccionan uno de los 32 registros en el modo de direccionamiento indirecto, los bits 0-4 pueden ser utilizados como los de un registro de propósito general de 5 bits.

En el PIC 16C57 los bits 5 y 6 de FSR, seleccionan la página correspondiente de la memoria de datos.

El contenido del registro seleccionado por el FSR puede ser accedido a través del registro FO.

Registros de propósito general

La distribución de los registros de propósito general son diferentes según el tipo de microcontrolador.

PIC 16C54/55/56: F08 - F1F: Son registros de propósito general.

PIC 16C57: Registros de propósito general y pueden ser accedidos independientemente del banco seleccionado, o sea con las condiciones F20-F2F, F40-F4F, FA6-F6F.

F10-F1F: Registros de propósito general del banco 0

  F30-F3F: Registros de propósito general del banco 1

F50-F5F: Registros de propósito general del banco 2

F70-F7F: Registros de propósito general del banco 3

Mapa de memoria de los registros del microcontrolador

 

Registro de opciones

Este registro define el valor de asignación para el divisor de frecuencia (prescaler) y la fuente de señal para el RTCC. Es un registro de 6 bits que se puede cargar con el contenido del registro W, ejecutando la instrucción "option". La condición reset pone sus bits en "unos".

 

Programación y descripción de puertos

Registros de entrada y salida (PUERTOS)

En los registros de entrada - salida se puede escribir o leer, bajo un programa de control del mismo modo que en otro registro del archivo de registros, sin embargo una instrucción de lectura lee siempre el estado del PIN entrada - salida sin importar que el pin esté definido como entrada o como salida. Sobre una condición de reset todos los puertos entrada - salida son definidos como entradas (= a alta impedancia) mientras los registros de control de entrada - salida (TRIS A, TRIS B, TRIS C) son todos puestos en "1".

La ejecución de TRIS F" con los correspondientes ceros, en el registro W, es necesario para definir cualquiera de los pines de entrada - salida como salidas.

Puerto A: Registro de entrada/salida de 4 bits (RA0-RA3). Los bits 4-7 no están implementados y son leídos como "ceros".

Puerto B: Registro de entrada/salida de 8 bits.

Puerto C: Registro de entrada/salida de 8 bits para el PIC 16C57. Es un registro de propósito general para el PIC 16C54/56.

Registros de configuración de puertos (TRIS)

 

Estos registros sólo pueden ser escritos y son cargados con el contenido del registro W, ejecutando la instrucción TRIS f. Un "1" el contenido del registro de control de entrada/salida, coloca el correspondiente pin del puerto en el modo de alta impedancia, o sea de entrada.

Un "0" en el contenido del registro de control, pone el correspondiente bit como salida, con lo cual el contenido que tenía el puerto controlado es fijado en los pines del PIC 16C5XX.

La condición de reset pone todos los bits de los registros TRIS f. En "1" pero no afecta el contenido de los puertos. Los microcontroladores de la serie 16C5XX son completamente estáticos, lo que quiere decir que el contenido de los registros solamente es alterado por acción del programa o de señales externas para el caso de los puertos que estén configurados de entradas. Esto explica porque el contenido de los puertos no es alterado con la condición de reset.

Debe tenerse especial cuidado con el empleo de las instrucciones BCF y BSF, puesto que éstas instrucciones leen todo el puerto, realizan la operación sobre el bit y luego reescriben el resultado fijándolo al puerto. Esto ocasiona problemas cuando un bit definido como entrada durante este tiempo es luego cambiado al modo de salida (bi-direccional) porque el contenido del "LATCH" del puerto en tal caso puede ser desconocido.

Como la escritura sobre un puerto ocurre al finalizar el ciclo de instrucción, mientras que la lectura del puerto ocurre al empezar el ciclo de instrucción, para altas frecuencias este hecho presentaría problemas. Por lo tanto se recomienda utilizar instrucciones "NOP" para separar éstas dos instrucciones en caso de requerirse una seguida de la otra. Lo mismo es aplicable si se desea poner un bit de salida de un puerto a "UNO" e inmediatamente a "CERO". Es recomendable redefinir todos los pines de entrada/salida a intervalos regulares de tiempo.

Prescaler

Un contador de 8 bits está disponible como prescaler (divisor de frecuencia con contador de escala) para el RTCC o como POST-SCALER para el WATCHDOC. Estas asignaciones son mutuamente excluyentes, esto significa que sólo se puede asignar este contador a uno de ellos (RTCC o WDT).

Watchdog timer (wdt)

Es realizado por un oscilador RC, que oscila libre e internamente y no requiere de componentes externos.

Lo anterior significa que si el reloj en los pines OSC1/OSC2 se detiene por una instrucción sleep, el WDT continua operando. La salida de WDT origina una señal de reset.

El WDT puede estar permanentemente deshabilitado programando un "CERO" en un fusible de la memoria EPROM. El período nominal del WDT es de 18 mSeg. (sin Post-scaler), este período puede variar con la temperatura y el VDD. el mayor tiempo se obtiene con un post-scaler 1:128 es de 2.5 mSeg.

 

MicroControladores PIC16CXX

 

Condición de reset

El reset puede ser causado por:

Aplicación al chip, de potencia (POWER UP)
Colocando un nivel bajo en la entrada de MCLR
Por un rebosamiento del temporizador del "WATCHDOG"

El microcontrolador estará en condición de "reset", mientras el temporizador de arranque (OST) esté activo, o el pin MCLR permanezca recibiendo un "CERO".

Durante la condición de reset el estado de los microcontroladores de la serie PIC 16C5XX es definido de la siguiente manera:

El oscilador está en operación o arranca en caso de ser recién energizado el chip o regresar de un estado de sleep.

Todos los puertos son configurados de entrada (TRIS CON FFH)

El contador de programa es puesto en 1FFH (54/55), 3 FFH (56) o en 7FF (57).

El registro "OPTION" es cargado con FFH y el WATCHDOG es borrado.

El WDT y el prescaler son puestos a "0".

MicroControladores PIC16CXX

 

 

Circuitos de osciladores

La serie PIC16C5XX está disponible con 4 opciones diferentes de osciladores.

En los dispositivos con ventanas la configuración (option) es seleccionada por programación, en la memoria EPROM. En los dispositivos OTP el oscilador viene programado de fábrica. Recordemos que OTP significa que sólo se pueden programar una vez.

Los PIC16C5XX XT-HS o LP necesitan un cristal o resonador cerámico conectado a los pines OSC1 y OSC2 para establecer su oscilación. Estos dispositivos pueden recibir la oscilación de un dispositivo externo.

El sufijo XT, HS o LP significa:

Para aplicaciones en las cuales la temporización no es muy crítica, el uso de osciladores RC ofrece una disminución de costos.


Modo de baja potencia (POWER DOWN)

Este modo de bajo consumo de potencia se logra una vez se haya ejecutado la instrucción SLEEP.

Si este modo está habilitado, el WDT es borrado, el bit TO es puesto en "1", el bit PD es puesto a "CERO" y el oscilador se detiene, los puertos mantienen su estado previo.

Para un menor consumo de corriente todos los pines de los puertos de entrada/salida, incluyendo el pin RTCC deben estar conectados a través de resistencias a VSS o a VDO y sin circuitería externa que requiera corriente del pin.

 

 

Instrucciones orientadas a los bytes

Instruccion
Parámetros
Descripción
Ciclos
Registros afectados

ADDWF

f, d

Add W and f

1

C,DC,Z

ANDWF

f, d

AND W with f

1

Z

CLRF

f

Clear f

1

Z

CLRW

-

Clear W

1

Z

COMF

f, d

Complement f

1

Z

DECF

f, d

Decrement f

1

Z

DECFSZ

f, d

Decrement f, Skip if 0

1(2)

Ninguno

INCF

f, d

Increment f

1

Z

INCFSZ

f, d

Increment f, Skip if 0

1(2)

Ninguno

IORWF

f, d

Inclusive OR W with f

1

Z

MOVF

f, d

Move f

1

Z

MOVWF

f

Move W to f

1

Ninguno

NOP

-

No Operation

1

Ninguno

RLF

f, d

Rotate left f through carry

1

C

RRF

f, d

Rotate right f through carry

1

C

SUBWF

f, d

Subtract W from f

1

C,DC,Z

SWAPF

f, d

Swap nibbles in f

1

Ninguno

XORWF

f, d

Exclusive OR W with f

1

Z


Instrucciones orientadas a los bits

Instruccion
Parámetros
Descripción
Ciclos
Registros afectados

BCF

f, b

Bit Clear f

1

Ninguno

BSF

f, b

Bit Set f

1

Ninguno

BTFSC

f, b

Bit Test f, Skip if Clear

1 (2)

Ninguno

BTFSS

f, b

Bit Test f, Skip if Set

1 (2)

Ninguno


Operaciones con literales y de control

Instruccion
Parámetros
Descripción
NroCic.
Registros afectados

ADDLW

k

Add literal and W

1

C,DC,Z

ANDLW

k

AND literal with W

1

Z

CALL

k

Call subroutine

2

 

CLRWDT

-

Clear Watchdog Timer

1

TO,PD

GOTO

k

Go to address

2

Ninguna

IORLW

k

Inclusive OR literal with W

1

Z

MOVLW

k

Move literal to W

1

Ninguna

RETLW

k

Return with literal in W

2

Ninguna

SLEEP

-

Go into standby mode

1

TO,PD

SUBLW

k

Subtract W from literal

1

C,DC,Z

XORLW

k

Exclusive OR literal with W

1

Z

 

Estadisticas