Libro Microchip
Libro Microchip
Libro Microchip
net/publication/325404486
dsPIC de Microchip
CITATIONS READS
0 1,825
3 authors, including:
SEE PROFILE
All content following this page was uploaded by Carlos Gerardo Hernández Capacho on 28 May 2018.
carlos.hernandez@upb.edu.co
ISBN: 978-958-8506-12-8
INTRODUCCIÓN
En los dsPIC existen los dsPIC30F y los dsPIC33F, para esta obra se tendrán en cuenta
solo los primeros, ya que son los que tienen mayor trayectoria y poseen unas bondades
tradicionales en niveles de voltajes, encapsulados y número de pines.
La obra está divida en dos partes fundamentales; una teórica que comprende los capítu-
los 1 al 6 y una de ejemplos de aplicación que corresponde al capítulo 7. En la primera
parte se presenta y explica la terminología que el fabricante ha asignado a esta podero-
sa máquina que es todo un sistema microprocesado, el cual integra un microcontrolador
con utilidades de DSP. La segunda parte son ejemplos de aplicación diseñados, desa-
rrollados y aplicados por docente, monitores y grupos de laboratorios de la asignatura
Arquitectura de Computadores I en la Universidad Pontificia Bolivariana, Seccional Bu-
caramanga, resueltos en lenguaje de programación “ensamblador”.
CONTENIDO
dsPIC de Microchip
3. dsPIC30F2010
4. dsPIC30F3014
5.1 Interrupciones
5.2 Puertos I/O
5.3 Timers
5.4 Conversor Analógico-Digital
5.5 Memoria Flash Y Memoria EEPROM
3 5
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
6. HERRAMIENTAS DE DISEÑO
7. EJEMPLOS DE APLICACIÓN
8. BIBLIOGRAFÍA
6 4
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Un dsPIC, controlador de señal digital fabricado por la empresa Microchip, es un dispositivo que
combina el alto rendimiento de un microcontrolador de 16 bits con el cálculo de alta velocidad de
un procesador de señales digitales (DSP). El dispositivo dsPIC se diseñó con el fin de integrar las
características que debe tener un DSP y un Microcontrolador (MCU), de forma que las secciones
de los dos trabajan de forma conjunta, compartiendo la carga de instrucciones y la lógica de
decodificación.
Microchip tiene en el mercado los dsPIC30F, los cuales poseen una arquitectura moderna para
facilidad de direccionamiento ó Harvard modificada, porque además de contar con la Memoria de
Programa, tiene dos Memorias de Datos, Memoria X y Memoria Y. En cuanto a la arquitectura de la
CPU, es una arquitectura de Set Reducido de Instrucciones (RISC) modificada, de alto
desempeño.
Algunos de los recursos que poseen son: arreglo de 16 registros de trabajo, un multiplicador de 16
x 16 bits, una barra de corrimiento y un soporte para operaciones de división. Todas las
operaciones pueden ser interrumpidas, también poseen registros shadow o de sombra, que son
localidades de memoria ocultas que permiten mantener datos de ciertos registros en algunas
ocasiones especiales como las subrutinas.
Los dispositivos dsPIC30F se dividen en 3 Familias con ciertas características que las hacen
adecuadas para una aplicación determinada. Las Familias son:
5 7
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
8 6
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
7 9
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
El diagrama de los dsPIC30F se observa en la Figura 1.1. El dispositivo posee una Unidad Lógica
Aritmética (ALU), donde se realizan las operaciones cuando se trabaja como microcontrolador y
una máquina DSP cuando se trabaja como DSP.
La Memoria de Programa maneja 24 bits donde se almacenan instrucciones y datos. Para acceder
a los datos se utilizan métodos como el PSV (Espacio de programa Visible desde la Memoria de
Datos) y las instrucciones Table que permiten tomar los datos que se encuentren en la Memoria de
Programa y almacenarlos en la Memoria de Datos.
La Memoria de Datos trabaja con direcciones de 16 bits y se divide en dos Espacios de Memoria:
Memoria de Datos X y Memoria de Datos Y, cada una con sus respectivas Unidades de
Generación de Direcciones (AGU) que permiten acceder a las direcciones efectivas de la Memoria
a través de sus buses de datos.
Los dispositivos cuentan hasta con 5 timers de 16 bits, un contador "Watchdog", protección de bajo
voltaje de programación, diferentes tipos de osciladores y la posibilidad de utilizar PLL (lazo de
enganche por fase) para aumentar la frecuencia de algunos osciladores, con el fin de aumentar la
velocidad de procesamiento. También se tienen convertidores A/D de muestreo simultáneo de
alta velocidad de 10 bits y convertidores A/D de 12 bits.
10 8
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
BUS DE DATOS Y 16
BUS DE DATOS X
16 16 16 16
Controlador
de DATO LATCH DATO LATCH
interrupciones
8 16 MEMORIA DE MEMORIA DE
DATOS DATOS
Acceso a la RAM Y RAM X
Memoria de Datos
24 con PSV y Table DIREC. LATCH DIREC. LATCH
24 Bus de 16 16
direcciones
PCU PCH PCL Y 16 X RAGU
Contador de Programa X WAGU 16
16
DEDODIF. Arreglo de Registros de
DE INSTRUC
Y CONTROL
Trabajo W 16 x 16
16
POWER-UP
TIMER 16 16
Generación de OSC START-
Contador Máquina Soporte de
UP TIMER DSP División
OSC1/CLK1
POR/BOR
RESET
WATCHDOG
MCLR ALU , 16 bits
TIMER
LOW VOLT
16 16
VDD, VSS
AVDD, AVSS DE PROG.
9 11
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
1.5 Oscilador
Un ciclo de máquina necesita 4 ciclos de reloj, lo que se conoce como TCY, el cual depende del tipo
de oscilador que se escoja. El sistema de reloj puede provenir de varias fuentes como son el
Oscilador Primario, Oscilador Secundario, Oscilador FRC (oscilador interno rápido RC) ó el
Oscilador LPRC (oscilador de bajo poder RC).
La fuente del oscilador que permitirá la ejecución de las instrucciones se debe configurar en el
momento de programar el dispositivo, los valores para la respectiva configuración se almacenan en
el registro FOSC que se encuentra en la memoria no volátil. Se utilizan los bits FOS<1:0> del
registro FOSC que determinan si la fuente es primaria, secundaria, FRC ó LPRC. Los bits
FPR<3:0> del registro FOSC, determinan el modo del oscilador primario.
bit 23 bit 26
bit 15 bit 8
bit 7 bit 0
Bit 23-16: Sin implementar: Se lee como cero.
Bit 15-14: FCKSM<1:0>:Bit selector del modo del cambio de reloj y el FSCM.
1x: Deshabilitar cambio de reloj, deshabilitar FSCM.
01: Habilitar cambio de reloj, deshabilitar FSCM.
00: Habilitar cambio de reloj, habilitar FSCM.
12 10
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Bit 3-0: FPR<3:0>: Bits selectores del modo del Oscilador Primario.
1111: Reloj externo EC w/PLL, habilitado 16xPLL. Pin OSC2 es I/0.
1110: Reloj externo EC w/PLL, habilitado 8xPLL. Pin OSC2 es I/0.
1101: Reloj externo EC w/PLL, habilitado 4xPLL. Pin OSC2 es I/0.
1100: Reloj externo ECIO. Pin OSC2 es I/0.
1011: Reloj externo EC. Pin OSC2 es salida de reloj (FOSC/4).
1010: No se usa.
1001: Oscilador RC externo, ERC. Pin OSC2 es salida de reloj(FOSC/4).
1000: Oscilador RC externo, ERCIO. Pin OSC2 es I/0.
0111: Oscilador con cristal XT, habilitado 16xPLL (4MHz-7.5MHz).
0110: Oscilador con cristal XT, habilitado 8xPLL (4MHz-10MHz).
0101: Oscilador con cristal XT, habilitado 4xPLL (4MHz-7.5MHz).
0100: Oscilador con cristal XT, (4MHz-10MHz).
001x: Oscilador con cristal HS, (10MHz-25MHz).
000x: Oscilador con cristal XTL, (200KHz-4MHz).
PLL (lazo de enganche por fase). El PLL multiplica la frecuencia del reloj generado por
algunas de las fuentes del oscilador primario. En la tabla 1.4 se muestran los rangos de entrada, el
factor posible de la multiplicación y los correspondientes rangos de salida.
Oscilador Primario
El oscilador primario está destinado para que trabajen los pines OSC1 y OSC2. Este oscilador
tiene 13 modos de operación, los cuales se explican en la Tabla 1.5.
Cuando se trabaja con osciladores XT, XTL y HS se utiliza un oscilador de cristal en los pines
OSC1 y OSC2, la diferencia entre las tres formas es el rango de frecuencias en que trabajan. El XT
es el único oscilador que soporta PLL, esto quiere decir que su frecuencia puede ser multiplicada
por los factores de 4, 8 y 16.
11 13
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Los modos del oscilador primario ERC y ERCIO utilizan el oscilador interno RC, y realizando la
conexión respectiva de un condensador y resistencias externos en el pin OSC1, se puede obtener
un reloj. La diferencia de estos modos, radica en que el pin OSC2, puede utilizarse como un reloj
con una frecuencia de trabajo de FOSC/4 cuando se trabaja en el modo ERC, mientras que al
trabajar con el modo ERCIO el pin OSC2 se utiliza como un pin configurado para entrada o salida.
Los modos EC y ECIO consisten en entradas de reloj externo. El pin OSC1 puede ser manejado
por drivers CMOS, convirtiéndose este pin en alta impedancia y el pin OSC2 en el modo EC puede
configurarse como reloj FOSC/4 y cuando se trabaja con el modo ECIO el pin OSC2 se utiliza como
un pin de entrada o salida digital.
Oscilador Secundario. El oscilador Secundario es el LP, low Power, como su nombre lo indica,
se utiliza para operaciones de baja potencia y trabaja con un cristal de 32 KHz, el cual debe ser
conectado en los pines OSC1 y OSC2 del dispositivo; cuando estos pines se usan como oscilador
no pueden ser empleados en otras funciones. Cuando se configura el oscilador secundario en el
momento de programar se coloca en cero los bits FOS del registro FOSC.
Oscilador Rápido Interno, FRC. Trabaja con frecuencia de 8 MHz. Permite ser utilizado
cuando se necesitan velocidades altas sin necesidad de un cristal externo, o una red RC. Cuando
se programa este oscilador los bits FOS<1:0> se colocan en 01.
14 12
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
En la Figura 2.1 se observan algunos de estos registros con sus respectivos bits y su función
específica. Se tienen los registros PC (contador de programa) y los registros TBLPAG, PSVPAG,
los cuales permiten acceder a datos que se encuentren almacenados en la Memoria de Programa.
2.1 Registros de Trabajo (W0, W1, W2, W3, W4, W5, W6, W7, W8, W9, W10, W11,
W12, W13, W14, W15). Los dsPIC30F contienen 16 registros de trabajo W, los cuales permiten
almacenar datos así como direcciones, de forma que se puede acceder al dato que se encuentre
en una determinada dirección utilizando el direccionamiento indirecto. Las instrucciones que se
utilizan para acceder a los registros de trabajo, se dividen en dos tipos:
Para almacenar una dirección en un registro de trabajo W, de forma que funcione como un
registro puntero. Ejemplo:
13 15
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
W0(WREG)
W1
W2
W3
Operandos para W4
Instrucciones
W5
DSP
W6 Registros
W7 de Trabajo
Almacenan
Direcciones para W8
Instrucciones W9
DSP W10
W11
W12
W13
W14
Registros Shadow. Puntero de la pila, W15
Utilizan PUSH.s y POP.s
SPLIM
7 0
‘ Almacena la dirección de la página del
TBLPAG programa para instrucciones TABLE
7 0 Almacena la dirección de la página
PSVPAG del programa para el método PSV
Almacena la página del programa para
15 0
instucciones Table
RCOUNT Contador del lazo REPEAT
15 0 Almacena la página del programa
DCOUNT
para instucciones
Contador del lazoTable
DO
22 0
Dirección en que comienza
DOSTART 0
el lazo REPEAT
22 0
Dirección en que comienza
DOEND 0 el lazo DO
SRH SRL
OA OB SA SB OAB SAB DA DC IPL<2:0> RA N OV SZ C Registro
Status, SR
15 0
0 Registro de Control
CORCON
Cuando se utilizan instrucciones que contienen el registro entre el símbolo [ ], se hace referencia al
valor que se encuentra guardado en la dirección que almacena ese registro, y es lo que se conoce
como direccionamiento indirecto.
16 14
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Ejemplo:
2.2 Registro W15 y SPLIM. El registro de trabajo W15 también sirve como un puntero para la
pila (stack), de forma que en W15 se almacena una dirección de la memoria de datos disponible, y
a partir de esa dirección, se guardan los valores de registros que no se desean perder cuando
ocurre una interrupción o una subrutina, utilizando las instrucciones PUSH y POP. En la figura 2.2
se puede ver un ejemplo acerca del funcionamiento de la pila.
El rango de direcciones en que puede trabajar la pila depende del puntero, registro W15 (donde se
almacena la dirección inicial para trabajar la pila) y del registro SPLIM (donde se almacena la
dirección final de la pila). Cuando se ejecuta una instrucción PUSH el registro W15 se incrementa
en dos, es decir apunta a la siguiente dirección, y constantemente se compara con la dirección que
contiene SPLIM, cuando la dirección de W15 exceda este valor se genera un error trampa que
indica que no es posible acceder a la pila, porque ha salido del rango de direcciones configurado
para la misma. El siguiente es un ejemplo de la rutina que se coloca en un programa para el
dsPIC30F2010.
Ejemplo:
__reset:
15 17
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
0x0000
0x0000
0x0956
0x0956
. PUSH W2 ; el valor de W2 se almacena
MOV #0x0850,W15 ; donde apuntaba W15 y este
MOV #0xFE45,W2 ; se incrementa en 2
MOV #0x6785,W3
0x0000 0x0000
0x0956 0x0956
2.3 Registro Status, (SR). Los dsPIC30F tienen un Registro Status SR de 16 bits, donde el
Byte menos significativo se conoce como SRL y el byte más significativo como SRH. SRL contiene
banderas de estado para las operaciones de la ALU, los bits de prioridad de las interrupciones de
CPU y el bit que indica que se está realizando un lazo de repetición utilizando la instrucción
REPEAT. SRH contiene los bits que se utilizan para las instrucciones DSP, además el bit que
indica que se está realizando un lazo DO, y el indicador de un Carry Digital.
18 16
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Registro SR
SRH
OA OB SA SB OAB SAB DA DC
bit 15 bit 8
SRL
IPL<2:0> RA N OV Z C
bit 7 bit 0
17 19
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Bit 7-5: IPL<2:0>: Indicadores del nivel de prioridad de las interrupciones CPU.
111: El nivel de prioridad de interrupción CPU es 7 (15).
110: El nivel de prioridad de interrupción CPU es 6 (14).
101: El nivel de prioridad de interrupción CPU es 5 (13).
100: El nivel de prioridad de interrupción CPU es 4 (12).
011 :El nivel de prioridad de interrupción CPU es 3 (11).
010: El nivel de prioridad de interrupción CPU es 2 (10).
001: El nivel de prioridad de interrupción CPU es 1 (9).
000: El nivel de prioridad de interrupción CPU es 0 (8).
Los bits IPL<2:0> se concatenan con el bit IPL<3> del registro CORCON,
formando el nivel de prioridad de interrupciones de la CPU.
El Registro CORCON contiene los bits para controlar las operaciones realizadas en la máquina
DSP, así como el control de las operaciones cuando se realiza un lazo DO. También tiene el bit
que permite habilitar el método PSV, el cual se utiliza para acceder a los datos que se encuentran
en la memoria de programa.
20 18
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Registro CORCON
bit 15 bit 8
bit 7 bit 0
Bit 15-12: Sin implementar: Se lee como cero.
Bit 11: EDT: Bit de control de la terminación temprana del lazo DO.
1: Se desea terminar el lazo DO, antes que todos los ciclos hayan sido
ejecutados.
0: El lazo DO se termina hasta que se completen todos los ciclos.
Bit 10-8: DL<2:0>: Bit que indica cuántos lazos DO son ejecutados.
111: Están activos 7 lazos DO.
110: Están activos 6 lazos DO.
101: Están activos 5 lazos DO.
100: Están activos 4 lazos DO.
011: Están activos 3 lazos DO.
010: Están activos 2 lazos DO.
001: Están activos 1 lazos DO.
000: Están activos 0 lazos DO.
Bit 3: IPL3: Bit para indicar nivel de prioridad de las interrupciones CPU.
1: El nivel de prioridad de las interrupciones CPU es mayor que 7.
0: El nivel de prioridad de las interrupciones CPU es menor o igual que 7.
El IPL3 se concatena con los bits IPL<2:0> del registro SR.
19 21
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
2.5 Registro RCOUNT. La instrucción REPEAT es una de las dos formas que utilizan los
dsPIC30F para construir acciones repetitivas. REPEAT permite repetir una misma instrucción un
número de veces específico, el cual se indica con un valor literal +1, o un número guardado en un
registro Wn+1.
Ejemplo:
REPEAT #2
ADD #3,W1 ; esta instrucción se ejecuta tres veces
MOV #4,W2
REPEAT W2
ADD #3,W1 ; esta instrucción se ejecuta cinco veces
El registro DCOUNT almacena el valor de las iteraciones y cada vez que se realiza un ciclo va
decrementando en 1. El registro DOSTART almacena la dirección de la primera instrucción del
ciclo y en el registro DOEND se almacena la dirección de la última instrucción del ciclo, de esta
manera se saben las instrucciones que se deben ejecutar. En el siguiente ejemplo se puede ver
cómo funcionan los registros.
Ejemplo:
DO #6,loop_End
INC W2,W2; DOSTART=000136, siendo esta la dirección que ocupa en la
; Memoria de Programa, esta instrucción, la cual es la última que
; se ejecuta en el lazo DO
DEC W1,W1
loop_End:
ADD W2,W1,W3 ; DOEND=00013A, siendo esta la dirección que ocupa en la
; Memoria de Programa esta instrucción, la cual es la última que se ejecuta
; en el lazo DO
22 20
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
En el ejemplo anterior se ejecutan 6+1 veces las instrucciones INC y DEC, porque éstas anteceden
a la etiqueta que indica el lazo DO. La instrucción ADD también hace parte del lazo, siendo ésta la
instrucción que indica que termina el lazo porque va después de la etiqueta.
2.7 Registros Shadow. Los registros shadow o registros sombra, se encuentran ocultos y no se
pueden acceder directamente. Su función es guardar temporalmente el contenido de los registros
que se encuentran asociados a ellos en el instante en que ocurra un evento como una subrutina o
una interrupción. En la Figura 2.1 se pueden ver los registros que se encuentran asociados con los
registros shadow.
Los registros que permiten guardar su valor en los registros shadow cuando se utilizan las
instrucciones PUSH.s y POP.s son los siguientes:
W0......W3.
TBLPAG.
PSVPAG.
SR (solamente almacena los valores de los bits N, OV, Z y C).
Los valores que almacenan los siguientes registros se guardan en los registros shadow cuando la
instrucción DO es ejecutada.
DOSTART
DOEND
DCOUNT
De esta forma es posible ejecutar dentro de un lazo DO, otro lazo DO, porque los registros shadow
se encargan de almacenar temporalmente los valores del primer lazo, mientras se ejecuta el otro
lazo. Es posible tener hasta siete lazos DO. En los bits DL<2:0> del registro CORCON, se indica
cuántos lazos están activos.
En el siguiente ejemplo se puede ver cómo un lazo DO se puede realizar dentro de otro lazo DO,
ya que los valores de los registros del primer lazo se almacenan en los registros shadow de forma
que en el siguiente lazo se puedan almacenar nuevos valores y cuando se termine este lazo los
valores de los registros shadow vuelven al destino original que controla el primer lazo.
Ejemplo:
MOV #0x0004,W0
MOV #0x0002,W1
DO W1,_rutina ; se realiza 2 + 1 veces la etiqueta _rutina, DCOUNT=2,
; DOSTART=000132, DOEND=00013A
DO W0,_osea ; los valores de los registros anteriores se almacenan en los registros
; shadow y ahora se realiza se realiza 4+ 1 veces la etiqueta _osea,
; DCOUNT=2, DOSTART=000136, DOEND=00013A
ADD W0,W1,W2
_osea:
NOP ; es la última instrucción de la etiqueta _osea
_rutina ; al terminar el anterior lazo los registros DCOUNT, DOSTART,
; DOEND, quedan almacenados con sus primeros valores
NOP ; es la ultima instrucción de la etiqueta _rutina
21 23
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
3. dsPIC30F2010
MCLR 1 28 AVDD
EMUD3/AN0/VREF+/CN2/RBO 2 27 AVSS
EMUC3/AN1/VREF-/CN3/RB1 3 26 PWM1L/RE0
AN2/SS1/CN4/RB2 4 25 PWM1H/RE1
AN3/INDX/CN5/RB3 5 24 PWM2L/RE2
AN4/QEA/IC7/CN6/RB4 6 23 PWM2H/RE3
AN5/QEB/IC8/CN7/RB5 7 22 PWM3L/RE4
VSS 8 21 PWM3H/RE5
OSC1/CLKI 9 20 VDD
OSC2/CLK0/RC15 10 19 VSS
EMUD1/SOSC2/T2CK/U1ATX/CN1/RC13 11 18 PGC/EMUC/U1RX/SDI1/SDA/RF2
EMUC1/SOSC1/T1CK/U1ARX/CN0/RC14 12 17 PGD/EMUD/U1TX/SDO1/SCL/RF3
VDD 13 16 FLTA/INT0/SCK1/OCFA/RE8
EMUD2/OC2/IC2/INT2/RD1 14 15 EMUC2/OC1/IC1/INT1/RD0
24 22
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
En la Memoria de Datos se encuentra el espacio para los registros de funciones especiales que se
encuentran desde la dirección 0x0000 hasta la dirección 0x07FF. La Memoria RAM comienza en la
dirección 0x0800, la cual se divide en dos bloques: Memoria X y Memoria Y, para acceder a estas
memorias se utiliza el direccionamiento indirecto. El rango de direcciones de las memorias
dependen del dispositivo. En la figura 3.1 se puede ver la Memoria de Datos para el
dsPIC30F2010, donde el espacio de la Memoria X es de 256 bytes comprendido entre 0x0800
hasta 0x08FF, y el espacio de la Memoria Y es de 256 bytes comprendido entre 0x0900 hasta
0x09FF.
Hay un espacio de la memoria que se denomina Memoria de Datos Cercana, donde es posible
acceder directamente a las localidades de la memoria utilizando las instrucciones file registro. El
rango de esta memoria también depende del dispositivo que se utilice, para el dsPIC30F2010 la
memoria está conformada por el espacio de los registros de función especial, la Memoria X y la
Memoria Y implementada.
23 25
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
16-bits
MSByte LSByte
0x0001 0x0000
Espacio de Registros de
Función Especial
0x07FF 0x07FE
0x0801 0x0800
Memoria de Datos
RAM X
Memoria 0x08FF 0x08FE
de Datos 0x0901 0x0900
Cercana
Memoria de Datos
RAM Y
0x09FF 0x09FE
0x0A01 0x0A00
Espacio de
Programa
Visible en el
Espacio de
Datos
Memoria de Datos
RAM X sin implementar
0xFFFF 0xFFFE
En la figura 3.2 se observa el mapa de los registros de función especial, donde se muestra la
localidad de memoria de los registros del dsPIC30F2010.
26 24
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Indirecto con un literal offset: Se accede a la dirección efectiva que conforma la suma
del registro Wn más el valor de un literal. Ejemplo:
MOV [W3+6],W2 ; en el registro W2 se almacena el valor que contiene la
; dirección que conforma el valor del registro W3 más la
; constante 6
25 27
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
28 26
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Las instrucciones de los programas se ubican en la Memoria de Programa Flash, esto quiere decir
que el código del programa comienza en la dirección 000100. El rango de memoria para almacenar
las instrucciones depende del dispositivo que se utiliza, para el dsPIC30F2010 la memoria para el
programa va hasta 1FFE, teniendo así un espacio de 4K para ejecutar el programa.
27 29
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
TABLA DE
VECTORES DE
Tabla de Vector de INTERRUPCIÓN
Interrupciones
Reservado
Tabla del Vector 000084 TABLA DE VECTORES
ESPACIO Alternativo ALTERNATIVOS
000FE DE INTERRUPCIÓN
DE Programa de Memoria 000100
FLASH
PROGRAMA 4K instrucciones
001FFE
Reservado 002000
Se lee como 0
7FFBFE
7FFC00
Memoria de Datos
EEPROM
(1Kbyte)
7FFFFE
800000
Reservado
8005BE
ESPACIO Reservado 8005C0
8005FE
DE 800600
Reservado
CONFIGURACIÓN F7FFFE
Registros de configuración F80000
de dispositivos
F8000E
F80010
Reservado
FEFFFE
Reservado FF0000
FFFFFE
30 28
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
4. dsPIC3014
AVDD
MCLR 1 40
AN0/VREF+
REF+/CN2/RB0 2 39 AVss
AN1/VREF+
REF-/CN3/RB1
3 38 AN9 /RB9
AN2/SS1/LVDIN/CN4/RB2 4 37 AN10 /RB10
29 31
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
En la Memoria de Datos se encuentra el espacio para los registros de funciones especiales que se
encuentran desde la dirección 0x0000 hasta la dirección 0x07FF. La Memoria RAM comienza en la
dirección 0x0800, la cual se divide en dos bloques: Memoria X y Memoria Y, para acceder a estas
memorias se utiliza el direccionamiento indirecto. El rango de direcciones de las memorias
dependen del dispositivo. En la figura 4.1 se puede ver la Memoria de Datos para el
dsPIC30F3014, donde el espacio de la Memoria X es de 1024 bytes comprendido entre 0x0800
hasta 0x0BFF, y el espacio de la Memoria Y es de 1024 bytes comprendido entre 0x0C00 hasta
0x0FFF.
Hay un espacio de la memoria que se denomina Memoria de Datos Cercana, donde es posible
acceder directamente a las localidades de la memoria utilizando las instrucciones file registro. El
rango de la Memoria de Datos Cercana depende del dispositivo que se utilice, para el
dsPIC30F3014 esta memoria está conformada por el espacio de los registros de función especial,
la Memoria X y la Memoria Y implementada.
En la figura 4.2 se observa el mapa de los registros de función especial, donde se muestra la
localidad de memoria de los registros del dsPIC30F3014.
32 30
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Las instrucciones de los programas se ubican en la Memoria de Programa Flash, esto quiere decir
que el código del programa comienza en la dirección 000100. El rango de memoria para almacenar
las instrucciones depende del dispositivo que se utiliza, para el dsPIC30F3014 la memoria para el
programa va hasta 3FFE, teniendo así un espacio de 8K para ejecutar el programa.
MSByte LSByte
0x0001 0x0000
Espacio de Registros de
Función Especial
0x07FF 0x07FE
0x0801 0x0800
Memoria de Datos
RAM X
Memoria 0x0BFF 0x0BFE
de Datos 0x0C01 0x0C00
Cercana
Memoria de Datos
RAM Y
0x0FFF 0x0FFE
0x1001 0x1000
Espacio de
Programa
Visible en el
Espacio de Memoria de Datos
Datos RAM X sin implementar
0xFFFF 0xFFFE
31 33
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
34 32
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
TABLA DE
VECTORES DE
Tabla de Vector de INTERRUPCIÓN
Interrupciones
Reservado
Tabla del Vector 000084 TABLA DE VECTORES
ESPACIO Alternativo ALTERNATIVOS
0000FE DE INTERRUPCIÓN
DE Programa de Memoria 000100
FLASH
PROGRAMA 8K instrucciones
003FFE
Reservado 004000
Se lee como 0
7FFBFE
7FFC00
Memoria de Datos
EEPROM
(1Kbyte)
7FFFFE
800000
Reservado
8005BE
ESPACIO Reservado 8005C0
(32 instrucciones) 8005FE
DE 800600
Reservado
CONFIGURACIÓN F7FFFE
Registros de configuración F80000
de dispositivos
F8000E
F80010
Reservado FEFFFE
Reservado FF0000
FFFFFE
33 35
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
5.1 Interrupciones
Los dsPIC30F permiten que en determinados eventos se interrumpa la ejecución del programa, al
saltar a una rutina con una función determinada a la que se denomina ISR, rutina de servicio de
interrupción. Las interrupciones pueden ser originadas por diferentes fuentes: interrupciones por
trampas, interrupción por los periféricos o interrupciones externas.
Para las interrupciones se utiliza una tabla de vectores de interrupción, la cual se encuentra en la
memoria de programa desde la dirección 0x000004 hasta 0x00007E como se muestra en la Figura
5.1. La tabla de vectores (IVT), contiene 62 vectores que consisten en 8 vectores trampa, y 54
fuentes de interrupción, de forma que cada fuente que origina una interrupción tenga su propio
vector llamado vector por defecto. El ancho de la dirección del vector es de 24 bits.
Cada fuente de interrupción tiene designada una dirección para su vector por defecto, las
direcciones se pueden observar en la tabla 5.1, en esta localidad de memoria se almacena la
dirección de la rutina que se debe ejecutar llamada, ISR. Las etiquetas tienen que tener el mismo
nombre del vector de interrupción, el cual se encuentra en las librerías del dispositivo con el que se
trabaja. En la tabla 5.1 se observan también las etiquetas para los vectores alternativos (AIVT).
Cuando se ejecuta una fuente de interrupción, se origina una petición de interrupción (IRQ), que se
demuestra colocándose un alto en las banderas de los registros IFSx, siempre y cuando estén
habilitados los bits de los registros IECx. Cuando la CPU responde a una interrupción, se accede al
vector por defecto de la fuente de interrupción, el cual corresponde a la dirección de programa
donde se encuentra la etiqueta correspondiente a la Rutina de Servicio de Interrupción (ISR). Para
salir de la interrupción se utiliza la instrucción RETFIE.
Las interrupciones se habilitan o deshabilitan en el bit NSTDIS del registro INTCON1, si este bit se
encuentra en bajo las interrupciones están habilitadas y si se encuentra en alto están
deshabilitadas.
36 34
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
35 37
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
38 36
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Ejemplo :
DISI #100
; A partir de esta instrucción todas las interrupciones son
; deshabilitadas. En el registro DISICNT se almacena el valor decimal de
; 100
; que significa 100 ciclos de instrucción en los cuales el programa no puede
; ser interrumpido
MOV #0XFFFF,W0
REPEAT W0 ; mientras se realiza el lazo de repetición pueden ocurrir
MOV #1,W2 ; interrupciones por alguna fuente, sin embargo éstas no
; tienen efecto, después de los100 ciclos, el programa sale
; del lazo de
; repetición y se va a la rutina de las interrupciones que no
; pudieron ser ejecutadas
Registro INTCON1: En este registro se habilitan las interrupciones y se tienen bits para
indicar si han ocurrido las diferentes trampas.
Registro INTCON2: En este registro se tienen los bits para determinar en qué flanco
trabajan cada una de las interrupciones externas, un bit para indicar si la instrucción DISI
está habilitada y un bit para habilitar la tabla de vectores alternativos.
Registros para el nivel de prioridad de la CPU: En los bits IPL<2:0> del registro SR
concatenados con el bit IPL3 del registro CORCON, se indica el nivel de prioridad en la
CPU. Cada vez que ocurre una interrupción, en estos bits se coloca el nivel de prioridad de
la fuente de interrupción, y al salirse de la rutina ISR se vuelve a almacenar en estos bits
el nivel de prioridad que se tenía antes de la interrupción.
37 39
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
bit 7 bit 0
Bit 15: NSTDIS: Bit habilitador de las interrupciones mientras se está en una ISR.
1: Interrupciones deshabilitadas.
0: Interrupciones habilitadas.
Bit 10: OVATE: Bit habiltador de una trampa por overflow en el acumulador A.
1: Ha ocurrido una trampa por overflow en el Acumulador A.
0: No ha ocurrido trampa.
Bit 3: ADDRERR: Bit indicador de una trampa por errores en las direcciones.
1: Ha ocurrido una trampa por errores en las direcciones.
0: No ha ocurrido trampa por errores en las direcciones.
40 38
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
bit 7 bit 0
Bit 15: ALTIVT: Bit habilitador de la tabla de vectores alternativo de interrupciones.
1: Se utiliza la tabla de vectores alternativos.
0: Se utiliza la tabla de vectores por defecto.
Bit 4: INT4EP: Bit selector del flanco que se detecta en la interrupción externa 4.
1: Interrupción en un flanco negativo.
0: Interrupción en un flanco positivo.
Bit 3: INT3EP: Bit selector del flanco que se detecta en la interrupción externa 3.
1: Interrupción en un flanco negativo.
0: Interrupción en un flanco positivo.
Bit 2: INT2EP: Bit selector del flanco que se detecta en la interrupción externa 2.
1: Interrupción en un flanco negativo.
0: Interrupción en un flanco positivo.
Bit 1: INT1EP: Bit selector del flanco que se detecta en la interrupción externa 1.
1: Interrupción en un flanco negativo.
0: Interrupción en un flanco positivo.
Bit 0: INT0EP: Bit selector del flanco que se detecta en la interrupción externa 0.
1: Interrupción en un flanco negativo.
0: Interrupción en un flanco positivo.
39 41
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
T3IF T2IF OC2IF IC2IF T1IF OC1IF IC1IF INT0IF
bit 7 bit 0
Bit 15: CNIF: Bit que indica el estado de la bandera en una notificación de cambio de
entrada.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 14: BCLIF: Bit que indica el estado de la bandera de colisión del Bus I2C.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 13: I2CIF: Bit que indica el estado de la interrupción de una transferencia
completa en el bus I2C.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 12: NVMIF: Bit que indica el estado de la interrupción cuando se realiza la
escritura completa en memoria no volátil.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 11: ADIF: Bit que indica el estado de la interrupción cuando se lleva a
cabo una conversión análogo-digital.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 10: U1TXIF: Bit que indica el estado de la interrupción por transmisión
UART1.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
42 40
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Bit 4: IC2IF: Bit que indica el estado de la interrupción por input capture
en el canal 2.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 1: IC1IF: Bit que indica el estado de la interrupción por input capture
en el canal 1.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
41 43
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
INT2IF T5IF T4IF OC4IF OC3IF IC8IF IC7IF INT1IF
bit 7 bit 0
Bit 15: IC6IF: Bit que indica el estado de la interrupción por input capture
en el canal 6.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 14: IC5IF: Bit que indica el estado de la interrupción por input capture
en el canal 5.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 13: IC4IF: Bit que indica el estado de la interrupción por input capture
en el canal 4.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 12: IC3IF: Bit que indica el estado de la interrupción por input capture
en el canal 3.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 11: C1IF: Bit que indica el estado de la interrupción por CAN1.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 10: SPI2IF: Bit que indica el estado de la interrupción por SPI2.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
44 42
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Bit 2: IC8IF: Bit que indica el estado de la interrupción por input capture
en el canal 8.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 1: IC7IF: Bit que indica el estado de la interrupción por input capture
en el canal 7.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
43 45
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
PWMIF C2IF INT4IF INT3IF OC8IF OC7IF OC6IF OC5IF
bit 7 bit 0
Bit 12: FLTBIF: Bit que indica el estado de la interrupción por FAULT B.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 11: FLTAIF: Bit que indica el estado de la interrupción por FAULT A.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 10: LVDIF: Bit que indica el estado de la interrupción por detección de
bajo voltaje de programación.
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 9: DCIIF: Bit que indica el estado de la interrupción por DCI (Interface
por convertidor de datos) .
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
Bit 8: QEIIF: Bit que indica el estado de la interrupción por QEI (Interface
por convertidor de datos).
1: Ha ocurrido interrupción.
0: No ha ocurrido interrupción.
46 44
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
T3IE T2IE OC2IE IC2IE T1IE OC1IE IC1IE INT0IE
bit 7 bit 0
Bit 15: CNIE: Bit que indica el estado de la interrupción por notificación de cambio en la
entrada.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 14: BCLIE: Bit que indica el estado de la interrupción por colisión del Bus I2C.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 13: I2CIE: Bit que indica el estado de la interrupción de una transferencia
completa en el bus I2C.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
45 47
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Bit 12: NVMIE: Bit que indica el estado de la interrupción cuando se realiza
la escritura completa en memoria no volátil.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 11: ADIE: Bit que indica el estado de la interrupción cuando se lleva a
cabo una conversión análogo-digital.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 10: U1TXIE: Bit que indica el estado de la interrupción por transmisión
UART1.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 4: IC2IE: Bit que indica el estado de la interrupción por input capture
en el canal 2.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
48 46
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Bit 1: IC1IE: Bit que indica el estado de la interrupción por input capture
en el canal 1.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
bit 15 bit 8
bit 7 bit 0
Bit 15: IC6IE: Bit que indica el estado de la interrupción por input capture
en el canal 6.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 14: IC5IE: Bit que indica el estado de la interrupción por input capture
en el canal 5.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 13: IC4IE: Bit que indica el estado de la interrupción por input capture
en el canal 4.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 12: IC3IE: Bit que indica el estado de la interrupción por input capture
en el canal 3.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 11: C1IE: Bit que indica el estado de la interrupción por CAN1.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
47 49
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Bit 10: SPI2IE: Bit que indica el estado de la interrupción por SPI2.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 2: IC8IE: Bit que indica el estado de la interrupción por input capture
en el canal 8.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 1: IC7IE: Bit que indica el estado de la interrupción por input capture
en el canal 7.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
50 48
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
bit 7 bit 0
Bit 12: FLTBIE: Bit que indica el estado de la interrupción por FAULT B.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 11: FLTAIE: Bit que indica el estado de la interrupción por FAULT A.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 10: LVDIE: Bit que indica el estado de la interrupción por detección de
bajo voltaje de programación.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 9: DCIIE: Bit que indica el estado de la interrupción por DCI (Interface
por convertidor de datos) .
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 8: QEIIF: Bit que indica el estado de la interrupción por QEI (contador de posición).
1: Habilitar interrupción.
0: Deshabilitar interrupción.
Bit 7: PWMIE: Bit que indica el estado de la interrupción por PWM, módulo
de control de ancho de pulso.
1: Habilitar interrupción.
0: Deshabilitar interrupción.
49 51
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Los puertos de los dsPIC30F se utilizan para el control de periféricos o para un propósito en
general. El número de puertos y sus correspondientes pines, al igual que los periféricos que
controlan dependen del dispositivo que se trabaje. Los pines de cada puerto se configuran como
entradas o salidas según la función que van a cumplir, por esta razón se llaman puertos I/O
(puertos de entrada o salida).
Los puertos I/O tienen asociados tres registros: TRISx, PORTx, LATx. Donde x corresponde al
nombre del puerto.
Registros TRISx: En este registro se configuran los pines de los puertos como entradas
o salidas. Si se coloca un alto en el bit que le corresponde a un pin, es porque recibirá una
entrada, pero si de coloca un bajo es porque el pin se toma como salida.
Registros LATx: En este registro sólo se encuentran los valores de los pines que
trabajan como salidas en el puerto, es decir en este registro no se leen los valores que
reciben los pines del puerto configurados como entrada.
Manejo de periféricos con Puertos I/O. Cuando los pines I/O se utilizan para una función
específica de los periféricos, no es posible trabajarlos para un propósito general, de forma que los
pines de salida y entrada son controlados por el módulo del periférico que se esté manejando.
52 50
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Cada pin tiene asociado varios periféricos, donde la denominación del pin es: PERA/PERB/PIO,
los dos primeros corresponden a periféricos y el tercero para propósito general; si todos los
periféricos que controla un pin se habilitan al mismo tiempo, sólo se ejecuta las acciones
correspondientes al periférico de mayor prioridad, el cual corresponde al primero que se coloca en
la designación del pin, esto quiere decir PERA.
Ejemplo: Se tiene un pin AN3/IC5/RB3, primero se da prioridad a la entrada análoga, luego a una
input capture en el canal 5 y la última prioridad la tiene el pin para propósito general.
5.3 Timers
Los dispositivos dsPIC30F pueden tener hasta 5 timers que trabajan con 16 bits, el número de
timers depende del dispositivo. Cada timer tiene asociado los siguientes registros de 16 bits:
x designa qué timer se está utilizando y puede ser: timer 1, timer 2, timer 3, timer 4 y timer 5.
Los timers pueden ocasionar interrupciones y los bits de los registros de interrupciones asociados
con el timer son:
Estos bits se encuentran en los registros de interrupción según el timer que se utiliza.
Los timers se pueden clasificar en tres tipos: Timers tipo A, timers tipo B y timers tipo C.
Timer Tipo A
Timer Tipo B
El timer 2 y el timer 4 son timers tipo B, este tipo de timer tiene la siguiente característica:
Un timer tipo B puede ser concatenado con un timer tipo C con el fin de formar un
timer de 32 bits.
Timer Tipo C
El timer 3 y el timer 5 son timers tipo C, este tipo de timer tiene las siguientes
características:
51 53
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Un Timer tipo C puede ser concatenado con un timer tipo B para formar un timer
de 32 bits.
Tiene la habilidad de trabajar como trigger para una conversión análogo-digital, es
decir cuando ocurre un desbordamiento en este timer, finaliza el proceso de
muestreo y empieza la conversión.
Cada timer debe configurar el registro de control TxCON. Los bits de este registro varían de
acuerdo a las características del tipo de timer.
bit 15 bit 8
bit 7 bit 0
Bit 13 : TSIDL: Bit para seleccionar la forma de trabajar el timer en modo IDLE.
1: El timer deja de trabajar cuando se entra al modo IDLE.
0: El timer continua trabajando en modo IDLE.
Bit 2: TSYNC: Bit selector de la sincronización del reloj externo del timer.
Cuando TCS=1
1: La entrada del reloj externa está sincronizada.
54 52
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
bit 7 bit 0
Bit 13 : TSIDL: Bit para seleccionar la forma de trabajar el timer en modo IDLE.
1: El timer deja de trabajar cuando se entra al modo IDLE.
0: El timer continúa trabajando en modo IDLE.
53 55
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
bit 7 bit 0
Bit 13 : TSIDL: Bit para seleccionar la forma de trabajar el timer en modo IDLE.
1: El timer deja de trabajar cuando se entra al modo IDLE.
0: El timer continua trabajando en modo IDLE.
56 54
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Cuando se utiliza la entrada del reloj interna, FOSC/4, ó un reloj externo, se tiene la posibilidad de
determinar un prescaler de 1:1, 1:8, 1:64 o 1:256, el cual determina cuántos ciclos de máquina se
necesitan para que el timer se incremente. El prescaler se configura con los bits TCKPS del
registro TxCON.
Timer síncrono: En este modo el reloj del timer es el reloj interno del dispositivo, de
forma que el timer se incrementa cada determinado número de ciclos de instrucción, según
el prescaler. Para trabajar en este modo se dispone el valor lógico bajo en el bit TCS del
registro TxCON.
Modo síncrono con entrada de reloj externo: Cuando el bit TCS del registro
TxCON se disponen en alto, la fuente del reloj del timer es un reloj externo, de forma que el
timer se incrementa cada vez que haya un flanco de subida en la entrada del reloj externo,
la cual corresponde al pin TxCK.
Modo asíncrono con entrada de reloj externo: En el timer tipo A se puede trabajar
en modo asíncrono cuando se utiliza el reloj externo, esto quiere decir que el timer
incrementa su valor de forma asíncrona, comparado con el reloj interno del dispositivo.
Para trabajar en este modo se dispone en bajo el bit TSYNC del registro TxCON. Cuando
el dispositivo trabaja en modo SLEEP el modo asíncrono es el más adecuado, ya que el
reloj del sistema está deshabilitado.
Interrupción por timer. Cuando el timer realiza su correspondiente conteo se puede originar
una interrupción, la cual se habilita con el bit TxIE, entonces el bit TxIF pasa a alto. Esto ocurre
cuando el TMRx tenga el mismo valor configurado en el registro del periodo PRx, lo que se
considera como periodo match; si no se configura el valor en el registro PRx, en este registro se
almacena el máximo valor que puede tener su timer asociado, el cual es 0xFFFF.
En el siguiente ejemplo se puede ver cómo se debe configurar un timer, en este caso de tipo B,
timer 2, para generar una interrupción cuando el valor del timer sea igual al almacenado en su
correspondiente registro de periodo PR2.
55 57
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Ejemplo:
Configuración de un timer con 32 bits. Se puede tener un timer que trabaje con 32 bits
combinando un timer tipo B con un timer tipo C, donde el valor del timer tipo C corresponde a la
palabra más significativa, mientras que el valor del timer tipo B es la palabra menos significativa.
La configuración para trabajar con un timer de 32 bits se realiza en el registro de control TxCON del
timer tipo B y para configurar las interrupciones se utiliza el timer tipo C.
En el siguiente ejemplo se puede ver cómo se configura un timer tipo B, timer 2, y un tipo C, timer
3, para trabajar con un timer de 32 bits.
Ejemplo:
Cuando los dos registros, TMR2 y TMR3 se incrementan y los valores que ellos tienen coinciden
con los valores almacenados en PR2 y PR3, se origina una interrupción por el timer 3, que es el
timer tipo C, inmediatamente los registros TMR2 y TMR3 son reiniciados en 0.
58 56
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
bit 7 bit 0
Bit 13 : ADSIDL: Bit para seleccionar la forma de trabajar el conversor A/D en modo
IDLE.
1: El conversor A/D deja de trabajar cuando se entra al modo IDLE.
0: El conversor A/D continúa trabajando en modo IDLE.
Bit 9-8: FORM<1:0>: Bits selectores del formato del dato del resultado de la conversión.
11: Fraccional con signo (Dato de salida = sddd dddd dd00 0000).
10: Fraccional sin signo (Dato de salida = dddd dddd dd00 0000).
01: Enteros con signo (Dato de salida = ssss sssd dddd dddd).
00: Enteros sin signo (Dato de salida = 0000 00dd dddd dddd).
57 59
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
bit 7 bit 0
60 58
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Bit 10: CSCNA: Bit habilitador del scan para las entradas del CH0 usando el multiplexor A.
1: Se realiza scan para las entradas.
0: No se realiza scan para las entradas.
Bit 7 : BUFS: Bit que indica cómo se almacena en los buffers (solamente tiene efecto
cuando BUFM=1).
1: Se acceden a los datos del los buffers ADCBUF(7...0) .
0: Se acceden a los datos del los buffers ADCBUF(15...8) .
Bit 5-2: SMPI<3:0>: Bits selectores de número de conversiones antes de originar una
Interrupción.
1111: Se interrumpe cuando se toman 16 muestras y se realiza la conversión.
1110: Se interrumpe cuando se toman 15 muestras y se realiza la conversión.
1101: Se interrumpe cuando se toman 14 muestras y se realiza la conversión.
.................................................................................................................... .......
0001: Se interrumpe cuando se toman 2 muestras y se realiza la conversión.
0000: Se interrumpe cuando se toma 1 muestra y se realiza la conversión.
59 61
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
bit 7 bit 0
Bit 12-8: SAMC<4:0>: Bits selectores del tiempo de muestreo (cuando se realiza auto
muestreo).
11111: 31 TAD.
11110: 30 TAD.
-----------------------------------------------------------------------------------------------
00001: 1 TAD.
00000: 0 TAD (solamente es posible cuando se utiliza más de un canal).
Bit 5-0: ADCS<5:0>: Bits selectores del reloj para la conversión (no se tiene en cuenta
para el reloj RC).
111111: TCY/2 • (ADCS<5:0> + 1) = 32 *TCY.
011111: 16 *TCY.
001111: 8 *TCY.
000111: 4*TCY.
000011: 2*TCY.
000001: TCY.
000000: TCY/2.
62 60
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
bit 7 bit 0
Bit 12: CH0NB: Bit selector de la entrada negativa para el Canal 0 en el Multiplexor B.
1: La entrada negativa al Canal 0 es AN1.
0: La entrada negativa al Canal 0 es el VREF-.
Bit 11-80: CH0SB <3:0>: Bit selector de la entrada positiva para el Canal 0 en el Multiplexor B.
1111: Se ingresa la entrada AN15 al Canal 15.
1110: Se ingresa la entrada AN15 al Canal 14.
----------------------------------------------------------------------------------------
0001: Se ingresa la entrada AN15 al Canal 1.
0000: Se ingresa la entrada AN15 al Canal 0.
61 63
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Bit 3-0: CH0SA<3:0>: Bit selector de la entrada positiva para el Canal 0 en el Multiplexor A.
1111: Se ingresa la entrada AN15 al Canal 15.
1110: Se ingresa la entrada AN14 al Canal 14.
----------------------------------------------------------------------------------------
0001: Se ingresa la entrada AN1 al Canal 1.
0000: Se ingresa la entrada AN0 al Canal 0.
bit 15 bit 8
bit 7 bit 0
Bit 15-0: PCFG<15:0>: Configuración de los pines como entradas analógicas o digitales.
1: Se configura la entrada como modo digital.
0: Se configura la entrada como modo analógica.
64 62
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
bit 7 bit 0
Bit 15-0: CSSL<15:0>: Bits selectores para las entradas a las que se les hará scan.
1: Se selecciona ANx para realizar scan (donde x corresponde a la posición del bit).
0: No se realiza scan.
Para habilitar el módulo del conversor Analógico-Digital, se coloca en 1 el bit ADON del registro
ADCON1. Cuando se está llevando a cabo una conversión el bit DONE del registro ADCON1 se
encuentra en 0, cuando éste se coloca en 1 indica que se ha acabado el proceso de conversión.
Para realizar una conversión se requieren 12 periodos de reloj, donde cada periodo de reloj se
llama TAD, de forma que se requieren 12 TAD. Las conversiones tienen la posibilidad de trabajar con
el reloj interno del dispositivo RC o con el sistema de reloj que se haya escogido. El reloj interno se
recomienda cuando se desea realizar conversión encontrándose el dispositivo en modo SLEEP,
para configurar el reloj interno se coloca un 1 en el bit ADRC del registro ACON2. En el caso que
se escoja el sistema de reloj colocando un 0 en este bit, es posible variar el valor del T AD con el fin
de obtener una mayor o menor frecuencia de muestreo, para esto se utilizan los bits ADCS<5:0>
del registro ADCON3; estos bits no tienen efecto cuando se utiliza RC porque la frecuencia de
muestreo es siempre la misma, casi siempre se cuenta con TAD=300ns.
Cuando se utilizan los bits ADCS, el TAD se calcula dependiendo del valor binario que tengan estos
bits, para esto se utiliza la siguiente fórmula:
TAD= (TCY(ADCS+1))/2
63 65
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Ejemplo: Si los bits ADCS tienen el valor binario de 7, entonces TAD= (TCY(7+1))/2, = 4TCY, donde el
TCY corresponde al tiempo que dura un ciclo de máquina.
T= TSMP + TAD
Muestreo automático: Si el bit ASAM del registro ADCON1 se coloca en 1, cada muestreo de
los datos de la señal analógica se realiza al finalizar cada conversión.
La conversión se lleva a cabo de varias formas: automática, manual o la ocasionada por algún
evento en especial.
Conversión manual: Cuando los bits SSRC<2:0> del registro ADCON1 se colocan en 000 se
finaliza el muestreo y comienza la conversión cuando se coloca en 0 el bit SAMP del registro
ADCON1<1>.
Conversión automática: Cuando los bits SSRC<2:0> del registro ADCON1 se colocan en 111,
en este modo la conversión comienza cuando el muestreo finaliza.
Conversión por algún evento: Es posible que el muestreo se finalice para comenzar una
conversión en algún evento al detectar un flanco de bajada o subida en el pin INT0, o cuando
ocurre un periodo match en el timer 3, si se trabaja como un timer de 32 bits, trabajando en
conjunto con el timer 2, otro evento también sucede cuando se trabaja el módulo PWM. La
configuración para estos eventos también se realiza en los bits SSRC<2:0>.
En la figura 5.3 se observa un ejemplo de cómo se realiza el muestreo manual, y el inicio de una
conversión en forma automática. Se puede ver que cuando se quiere muestrear una señal se debe
colocar en 1 el bit SAMP, cuando se termina el muestreo automáticamente este bit se coloca en 0,
después comienza la conversión y en el momento de terminar el bit DONE del registro ADCON1 se
coloca en 1 y el resultado de la conversión se almacena en algún buffer.
El fabricante recomienda que el tiempo de muestreo total de la señal sea mayor a 167 ns, porque
este es el tiempo mínimo con que trabajan correctamente los dispositivos dsPIC30F.
66 64
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
ADCLK
SAMP
DONE
BSF ADCON1,SAMP
El resultado se
almacena en un BUFFER
Entradas analógicas. Los dispositivos dsPIC30F tienen la opción de trabajar hasta con 16
entradas analógicas, el número de entradas depende del dispositivo que se utiliza.
En los dsPIC30F las entradas analógicas se manejan en el puerto B, siendo necesario configurar si
los pines del puerto se van a trabajar como entradas análogas o entradas/salidas digitales. En el
registro ADPCFG<n> donde n depende del número de la entrada analógica, se coloca un 0 si se va
trabajar con entradas analógicas y 1 para entradas/salidas digitales.
Canales del conversor. Para el conversor A/D de 10 bits, las entradas analógicas se conectan
a través de multiplexores a cuatro amplificadores, que corresponden a los canales del conversor
CH0-CH3, de esta forma se puede ingresar señales a cada canal y se tiene la posibilidad de
muestrear las señales al mismo tiempo.
Para el Conversor A/D de 12 bits, sólo se tiene el canal CH0, es decir las señales ingresan a un
solo amplificador. En el registro ADCHS de este conversor, sólo se configura la entrada análoga
que va ir al CH0.
El canal 0 es el único en el que se pueden ingresar todas las entradas análogas-digitales; en los
bits CH0SA<3:0> se escoge cuál entrada analógica positiva va a ser muestreada en el canal 0, que
puede ser desde AN0 hasta AN15. El bit CHONA del registro ADCHS, selecciona a VREF- o el pin
AN1 como la entrada negativa del canal 0. Si se quiere tener en cuenta sólo la entrada positiva, la
entrada negativa se lleva a tierra.
65 67
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
El bit ALTS del registro ADCON, permite seleccionar si sólo se trabaja con el multiplexor A, o con
los multiplexores A y B de forma alternativa. La configuración de las entradas negativas y positivas
para los canales de cada uno de los multiplexores también se configura en el registro ADCHS.
Cuando se trabajan varios canales es importante tener en cuenta los tiempos de muestreo y de
conversión de cada uno. Los canales se pueden muestrear al mismo tiempo o uno por uno,
dependiendo de la configuración del bit SIMSAM del registro ADCON1. En los bits CHPS<1:0> del
registro ADCON2 se selecciona si se quiere muestrear al mismo tiempo, sólo el CH0 ó el CH1, o si
se quieren muestrear los cuatro canales.
Solamente el Canal 0 tiene la posibilidad de realizar un scan a varias entradas, esto quiere decir
realizar alternativamente la conversión de señales provenientes de diferentes entradas análogas.
El scan se habilita en el bit CSCNA del registro ADCON2, las entradas análogas que realizarán
scan se configuran en el registro ADCSSL.
Buffer para la conversión analógica a digital. Cuando se realiza el muestreo de los canales
y la respectiva conversión, los resultados de la conversión A/D se almacenan en los registros
BUFFER. Son 16 buffers ADCBUF(15...0), los cuales se utilizan dependiendo de la configuración
de los canales y los multiplexores.
Formato entero sin signo: El resultado se almacena en los bits más significativos, es decir
para el convertidor de 10 bits el resultado se almacena desde el bit 15 hasta el bit 6 y para el
convertidor de 12 bits el resultado se almacena desde el bit15 hasta el bit 4, sin signo, es decir no
se niega el bit más significativo. Para configurarlo se emplea 00 en los bits FORM.
Formato entero con signo: El resultado se almacena en los bits más significativos, es decir
para el convertidor de 10 bits el resultado se almacena desde el bit 15 hasta el bit 6 y para el
convertidor de 12 bits el resultado se almacena desde el bit 15 hasta el bit 4. Al trabajar con signo
quiere decir que el bit más significativo es el bit negado, en este caso es el bit 15. Para configurarlo
se coloca 01 en los bits FORM.
68 66
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
El dato de salida para el convertidor de 12 bits se representa: sddd dddd dddd 0000.
El rango para el convertidor de 12 bits: -32768 a 32752.
Formato fraccional sin signo: El resultado se almacena en los bits menos significativos, es
decir para el convertidor de 10 bits el resultado se almacena desde el bit 9 hasta el bit 0 y para el
convertidor de 12 bits el resultado se almacena desde el bit 11 hasta el bit 0, sin signo. Para
configurarlo se coloca 10 en los bits FORM.
El dato de salida para el convertidor de 10 bits se representa: 0000 00dd dddd dddd.
El rango para el convertidor de 10 bits: -0.0019 a –1 y 1 a 0.998046875.
El dato de salida para el convertidor de 12 bits se representa: 0000 dddd dddd dddd.
El rango para el convertidor de 12 bits: -0.00048 a –1 y 1 a 0.999511718.
Formato fraccional con signo: El resultado se almacena en los bits menos significativos, es
decir para el conversor de 10 bits el resultado se almacena desde el bit 9 hasta el bit 0 y para el
convertidor de 12 bits el resultado se almacena desde el bit 11 hasta el bit 0. Al trabajar con signo,
quiere decir que el bit más significativo es el bit negado. Para configurarlo se coloca 11 en los bits
FORM.
El dato de salida para el convertidor de 10 bits se representa: ssss sssd dddd dddd.
El rango para el convertidor de 10 bits: -1 a 0.998046875.
El dato de salida para el convertidor de 12 bits se representa: ssss sddd dddd dddd.
El rango para el convertidor de 12 bits: -1 a 0.999511718.
En la Memoria Flash y en la Memoria EEPROM, se pueden leer y escribir datos utilizando las
instrucciones table.
Cada panel tiene latches que permiten escribir los 4 datos para ser programados aunque no se
puedan ver en la Memoria de Programa, para escribir se utiliza la instrucción table y se realiza
antes de la operación de programación. Como se van a escribir datos de 24 bits se utilizan las
instrucciones TBLWTL y TBLWTH, entonces teniendo un registro de trabajo que servirá como
puntero se almacena primero la palabra menos significativa que apunta a esa dirección, e
incrementando esa dirección en dos se apunta a donde se encuentra la palabra más significativa.
67 69
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Para programar, primero se debe realizar el proceso de borrado. Para empezar alguno de estos
dos procesos se coloca en alto el bit WR del registro NVMCON, y se tiene que esperar a la
terminación del proceso al ponerse en bajo este bit ó que se presente una interrupción. Para
habilitar una interrupción se coloca 1 en el bit NVMIE del registro IEC0 y cuando ocurre la
interrupción se coloca en alto la bandera NVMIF del registro IIFS0.
Registro NVMCON.
Registro NVMADR.
Registro NVMKEY.
Registro NVMCON
Es el registro que controla las operaciones de programar y borrar la Memoria Flash y la Memoria
EEPROM. En la Tabla 5.2 se encuentra el valor que se debe configurar en el registro NVMCON
según el proceso que se quiere realizar.
70 68
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
PROGOP<7:0>
bit 7 bit 0
Bit 15: WR: Bit de Control para la escritura (sea para programar o Borrar).
1: Empezar el proceso de programación o borrado de la Memoria Flash o
la Memoria EEPROM.
0: Ciclo de escritura para programar o borrar ha terminado (No se puede
clarear por software).
Bit 14: WREN: Bit para habilitar la escritura (sea para programar o para Borrar).
1: Habilitar el proceso de programación o borrado de la Memoria Flash o
la Memoria EEPROM.
0: No es posible programar ni borrar.
Bit 13: WRERR: Bandera indicadora 4de un Error al trabajar con la Memoria FLASH
1: Ha terminado la operación de escritura sin haberse completado, lo cual
puede ocurrir por un reset ocasionado por MCLR o por el contador
Watchdog-Timer.
0: La operación ha finalizado satisfactoriamente.
Bit 7-0: PROGOP<7:0>: Bits para la configuración de la operación que se desea realizar.
Proceso de Borrar
0x41: Borra 1 fila (32 instrucciones) de la Memoria de Programa FLASH.
0x44: Borra 1 palabra de la Memoria de Datos EEPROM.
0x45: Borra 1 fila (conformada por 32 palabras) de la Memoria EEPROM.
Proceso de Programación
0x01: Programa 4 instrucciones de una fila de la Memoria de Programa FLASH.
0x04: Programa 1 palabra de la Memoria de Datos EEPROM.
0x05: Programa 1 fila (conformada por 32 palabras) de la Memoria EEPROM.
0x08: Programa 1 palabra en los registros de configuración para programar.
Registro NVMADR.
En este registro se almacena la dirección efectiva <15:0> que se accede con instrucciones Table.
Los restantes 8 bits más significativos se acceden utilizando el registro de página TBLPAG,
formando así la dirección donde se va a borrar o a programar un dato sea en la Memoria Flash o
69 71
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
en la Memoria EEPROM. En la figura 5.4 se observa cómo se concatenan los registros para
conformar la dirección a la que se va acceder.
Registro W, almacena EA
8 bits 16 bits
TBLPAG<7>, selecciona si se
usa Espacio de Programa
o espacio de configuración
NVMADR <15:8>
bit 15 bit 8
NVMADR <7:0>
bit 7 bit 0
Bit 15-0: NVMADR<15:0>: Almacena los 16 bits menos significativos de dirección efectiva de la
memoria no volátil, sea Memoria de Programa o Memoria de datos, a la que se quiere acceder.
Registro NVMKEY.
Este registro se utiliza para prevenir problemas cuando se borra o se escribe en la Memoria Flash
o en la Memoria EEPROM. Antes de comenzar a programar o borrar se escriben los siguientes
valores en el registro NVMKEY:
72 70
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
bit 15 bit 8
NVMKEY <7:0>
bit 7 bit 0
Bit 15-8: Sin implementar: Se lee como cero.
Bit 7-0: NVMKEY<7:0>: Bits para escribir claves que permitan realizar un proceso de borrado
y programación correctamente.
71 73
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
NOP
NOP
POP SR ; se habilitan las interrupciones
; se realiza la escritura de las 4 instrucciones que se quieren
; programar
MOV #0X4001,W0
MOV W0,NVMCON ; se configura el registro para programar 4 instrucciones
MOV #tblpage(fib_data),W0
MOV w0,TBLPAG
MOV #tbloffset(fib_data),W0
MOV #0X080A,W1 ; se almacena la palabra menos significativa que se
; conforma la instrucción que se quiere programar
MOV #0X0822,W2 ; se almacena la 8 bits menos significativos que conforman la
; instrucción que se quiere programar
TBLWTL W1,[W0]
TBLWTH W2,[W0++]
; esta misma rutina se realiza para almacenar las otras 3
; instrucciones
PUSH SR
MOV #0X00E0,W0 ; también se deshabilitan interrupciones
IOR SR
MOV #0X55,W0
MOV #0XAA,W1
MOV W0,NVMKEY
MOV W1,NVMKEY ;
NOP
BSET NVMCON,#WR ; comienza el proceso de programar colocando un 1 en
; el bit WR
conti_:
BTSC NVMCON,#WR ;se pregunta si terminó de programar las 4 instrucciones
goto conti_
POP SR
74 72
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
73 75
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
6. HERRAMIENTAS DE DISEÑO
El MPLAB ASM30 es una herramienta de software utilizada para los dispositivos dsPIC30F, la cual
permite convertir el conjunto de instrucciones del lenguaje ensamblador (código fuente), a un
conjunto de instrucciones que el procesador interpreta como código máquina. El MPLAB ASM30 es
un lenguaje usado en el software MPLAB IDE.
Los archivos de entrada diseñados en MPLAB ASM30 son llamados archivos fuente y consisten en
el conjunto de instrucciones, directivas y comentarios que conforman el programa de un dsPIC30F,
los cuales deben tener la extensión .s
El código fuente del ensamblador está conformado por declaraciones y espacios en blanco. Cada
declaración tiene el siguiente formato:
Etiquetas: Son nombres opcionales que deben comenzar con alguna letra o guión y pueden tener
letras, dígitos y guiones, los cuales son utilizados como símbolos para referirse a direcciones de
memorias y registros.
Comandos: Pueden ser mnemónicos de los códigos de operación (opcode) o directivas del
ensamblador.
Mnemónicos: Está conformado por el conjunto de instrucciones del dsPIC por ejemplo
MOV, SUB, MAC, las cuales se traducen directamente a lenguaje de máquina.
Literales
Son valores que tienen que ser precedidos del símbolo #, estos valores pueden ser
hexadecimal, octal, binario o formato decimal. Ejemplo:
#5, valor decimal.
#0x0678, valor hexadecimal.
Registros File
Se distinguen de los valores literales porque no van precedidos del símbolo #, permiten
acceder o modificar los datos de una dirección directamente utilizando WREG. Ejemplo:
76 74
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Mov 0x1456,WREG
Mov 14,WREG
Comentarios: Son espacios opcionales que deben ser precedidos por „;‟ y se consideran también
comentarios las líneas en blanco por eso no se consideran líneas de programa.
Formato decimal: Para un valor decimal después del signo # se coloca el valor decimal.
Ejemplo:
MOV #1234,W2
Para almacenar en la memoria de programa la directiva que se utiliza es .byte o .word y se escribe
el valor decimal. Ejemplo:
fib_data:
.byte 5,6,15,2,254,36
fib_data:
.word 56578,23456,12345,5678
Formato binario: Para un dato binario se escribe „0b‟ ó „0B‟ seguido del valor en binario. Cuando
se utiliza como valores literales para un instrucción van precedidos de la símbolo #. Ejemplo:
MOV #0B10000111111110,W2
Para almacenar en la memoria de programa la directiva que se utiliza es .byte o .word y se escribe
el valor en binario antecedido por 0b. Ejemplo:
fib_data:
.byte 0b01001010
fib_data:
.word 0b0100101011000100
Formato hexadecimal: Para un valor hexadecimal después del signo # se coloca „0x‟ ó „0X‟
seguido por el valor en hexadecimal que permite tener los siguientes dígitos
„0123456789abcdefABCDEF‟. Ejemplo :
MOV #0x5678,W3
Para almacenar en la memoria de programa la directiva que se utiliza es .byte o .word y se escribe
el valor en hexadecimal antecedido por 0x. Ejemplo:
fib_data:
.byte 0x8B, 0x5A
fib_data:
.word 0x2C3F, 0x15DA
75 77
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Formato de punto fijo: El número de punto fijo se representa en el formato Q-15, lo que
significa que 15 bits son usados para representar la parte fraccional de un número, donde el bit
más significativo es el bit de signo, el punto y la magnitud de 15 bits.
El número más pequeño de este formato es -1 y se representa con 0x8000 (1.000 0000 0000
0000), y el número mas grande es cercano a 1 ( siendo exactamente 0.99996948) y se representa
por 0x7FFF (0.111 1111 1111 1111).
Para almacenar en la memoria de programa la directiva que se utiliza es .fixed y se escribe el valor
con punto decimal, puede ser negativo o positivo.
fib_data:
.fixed -1,0.5,0789,09999
En la siguiente tabla se muestra el significado de cada una de las variables que se utilizan en las
instrucciones:
Símbolo Descripción
# Antecede un literal, puede ser hexadecimal, decimal o binario
Acc Se llama así a alguno de los dos acumuladores A ó B
AWB Se llama así al acumulador Write Back
bit4 Se llama a alguno de los bits que van desde el bit 0 hasta el bit 15
Expr Se le llama a una etiqueta
F Es un registro File ó un registro de función especial
lit1 Es un valor literal que se representa en el rango 0:1
lit4 Es un valor literal que se representa en el rango 0:15
lit5 Es un valor literal que se representa en el rango 0:31
lit8 Es un valor literal que se representa en el rango 0:255
lit10 Es un valor literal que se representa en el rango 0:1023
lit14 Es un valor literal que se representa en el rango 0:16383
lit16 Es un valor literal que se representa en el rango 0:65535
lit23 Es un valor literal que se representa en el rango 0:8388607
Slit4 Es un valor literal con signo que se representa en el rango -8:7
Slit6 Es un valor literal con signo que se representa en el rango -16:16
Slit10 Es un valor literal con signo que se representa en el rango -512:511
Slit16 Es un valor literal con signo que se representa en el rango -32768:32767
Wb Es un registro de trabajo base, es decir las operaciones modifican el valor almacenado
en este registro
Wd Es un registro de trabajo destino, donde se almacenan los resultados de las
operaciones, puede trabajarse como direccionamiento directo o indirecto
Wm,Wn Son registros de trabajo donde Wm representa el dividendo y Wn el divisor
Wm*Wm Multiplicación entre dos registros de trabajo provenientes de la misma fuente
Wm*Wn Multiplicación entre dos registros de trabajo provenientes de d fuentes
Wn Registro de trabajo que funciona como fuente o como destino, con direccionamiento
directo
Wnd Registro de trabajo que funciona como destino, con direccionamiento directo
Wns Registro de trabajo que funciona como fuente, con direccionamiento directo
WREG Registro de trabajo W0
Ws Registro de trabajo que funciona como fuente en direccionamiento directo o indirecto
78 76
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Wx Registro de trabajo fuente que sirve como puntero para direcciones en la Memoria de
datos X en el bus pre-fetch
Wxd Registro de trabajo destino donde se almacena el valor que apunta Wx
Wy Registro de trabajo fuente que sirve como puntero para direcciones en la Memoria de
datos Y en el bus pre-fetch
Wyd Registro de trabajo destino donde se almacena el valor que apunta Wy
Instrucciones mov
Sintaxis Descripción
EXCH Wns,Wnd Se realiza swap (intercambio de bits) a Wns y Wnd
MOV F,WREG Se mueve el valor almacenado en un registro F a WREG
MOV WREG,F Se mueve el valor almacenado en WREG a un registro F
MOV F,Wnd Se mueve el valor almacenado en un registro F a Wnd
MOV Wns,F Se mueve el valor almacenado en Wns a un registro F
MOV.b #lit8,Wnd Se mueve un literal de 8 bits a Wnd
MOV #lit16,Wnd Se mueve un literal de 16 bits a Wnd
MOV Wns, [wd+Slit10] Se mueve el valor que almacena la dirección que apunta el
registro Ws más un literal de 10-bits con signo a Wnd
MOV [ws+Slit10],Wnd Se mueve el valor almacenado en Wns a la dirección que
apunta el registro Ws más un literal de 10-bits con signo
MOV Ws,Wd Se mueve el valor almacenado en Ws a Wd
MOV.D Ws,Wnd Se mueve el valor almacenado en Ws a Wnd:Wnd+1, porque
se está almacenando valores de 32 bits
MOV.D Wns,Wd Se mueve el valor almacenado en Wns:Wns+1 a Wd: porque
se está almacenando valores de 32 bits
SWAP Wn Se realiza un swap a un registro Wn
TBLRDH Ws,Wd Permite leer los 8 bits más significativos de un dato de 24 bits
(conformado por TBLPAG y Ws) y almacena en Wd
TBLRDL Ws,Wd Permite leer los 16 bit menos significativos de un dato de 24
bits (conformado por TBLPAG y Ws) y almacena en Wd
TBLWTH Ws,Wd Permite escribir en Wd los 8 bits más significativos de un dato
de 24 bits (conformado por TBLPAG y Ws)
TBLWTL Ws,Wd Permite escribir en Wd los 16 bits menos significativos de un
dato de 24 bits (conformado por TBLPAG y Ws)
Instrucciones math
Sintaxis Descripción
ADD F,WREG WREG=F+WREG
ADD #lit10,Wn Wn=lit10+Wn
ADD Wb,#lit5,Wd Wd=Wb+lit5
ADD Wb,Ws,Wd Wd=Wb+Ws
ADDC F,WREG WREG=F+WREG+ Carry
ADDC #10,Wn Wn=lit10+Wn+ Carry
ADDC Wb,#lit5,Wd Wd=Wb+lit5+ Carry
ADDC Wb,Ws,Wd Wd=Wb+Ws + Carry
DAW.B Wn Se realiza un redondeo decimal el byte menos significativo de una palabra
DEC F,WREG WREG=F-1
DEC Ws,Wd Wd=Ws-1
DEC2 F,WREG WREG=F-2
77 79
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Instrucciones lógicas
Sintaxis Descripción
AND F,WREG WREG=F AND WREG
AND #lit10,Wn Wn=lit10 AND Wn
AND Wb,#lit5,Wd Wd=Wb AND lit5
AND Wb,Ws,Wd Wd=Wb AND Ws
CLR F F=0x0000
CLR WREG WREG=0x0000
CLR Wd Wd=0x0000
COM F,WREG WREG=F negado, donde los 1 se convierten en 0 y viceversa
80 78
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Sintaxis Descripción
ASR F,WREG WREG=F con corrimiento aritmético a la derecha de un bit
ASR Ws,Wd Wd=Ws con corrimiento aritmético a la derecha de un bit
ASR Wb,#lit4,Wnd Wnd=Wb con corrimiento aritmético a la derecha de bits igual al valor de lit4
ASR Wb,Wns,Wnd Wnd=Wb con corrimiento aritmético a la derecha de bits igual al valor de Ws
LSR F,WREG WREG=F con corrimiento lógico a la derecha de un bit
LSR Ws,Wd Wd=Ws con corrimiento lógico a la derecha de un bit
LSR Wb,#lit4,Wnd Wnd=Wb con corrimiento lógico a la derecha de bits igual al valor de lit4
LSR Wb,Wns,Wnd Wnd=Wb con corrimiento lógico a la derecha de bits igual al valor de Ws
RLC F,WREG WREG=F con rotación a la izquierda teniendo en cuenta el Carry
RLC Ws,Wd Wd=Ws con rotación a la izquierda teniendo en cuenta el Carry
RLNC F,WREG WREG=F con rotación a la izquierda sin tener en cuenta el Carry
RLNC Ws,Wd Wd=Ws con rotación a la izquierda sin tener en cuenta el Carry
RRC F,WREG WREG=F con rotación a la derecha teniendo en cuenta el Carry
RRC Ws,Wd Wd=Ws con rotación a la derecha teniendo en cuenta el Carry
RRNC F,WREG WREG=F con rotación a la derecha sin tener en cuenta el Carry
RRNC Ws,Wd Wd=Ws con rotación a la derecha sin tener en cuenta el Carry
SL F,WREG WREG=F con corrimiento a la izquierda de un bit
SL Ws,Wd Wd=Ws con corrimiento a la izquierda de un bit
SL Wb,#lit4,Wnd Wnd=Wb con corrimiento a la izquierda de bits igual al valor de lit4
SL Wb,Wns,Wnd Wnd=Wb con corrimiento a la izquierda de bits igual al valor de Ws
Instrucciones bit
Sintaxis Descripción
BCLR F,#bit4 Se coloca en 0 algún bit del registro F
BCLR Ws,#bit4 Se coloca en 0 algún bit del registro Ws
BSET F,#bit4 Se coloca en 1 algún bit del registro F
BSET Ws,#bit4 Se coloca en 1 algún bit del registro Ws
BSW.C Ws,Wb El valor del bit Carry (RegistroSR<0>) se almacena en el bit, que
corresponda al valor de Wb , del registro Ws
BSW.Z Ws,Wb El valor del bit Z (RegistroSR<1>) se almacena en el bit, que
corresponda al valor de Wb , del registro Ws
BTG F,#bit4 Se genera un toggle (si esta en 1 se coloca en 0, o si esta en 0 se
79 81
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Sintaxis Descripción
BTSC F,#bit4 Si un bit de F es 0, se salta la siguiente instrucción
BTSC Ws,#bit4 Si un bit de Ws es 0, se salta la siguiente instrucción
BTSS F,#bit4 Si un bit de F es 1, se salta la siguiente instrucción
BTSS Ws,#bit4 Si un bit de Ws es 1, se salta la siguiente instrucción
CP F Compara F-WREG
CP Wb,#lit5 Compara Wb-lit5
CP Wb,Ws Compara Wb-Ws
CP0 F Compara F-0x0000
CP0 Ws Compara Ws-0x0000
CPB F Compara con Borrow (F-WREG-C)
CPB Wb,#lit5 Compara con Borrow (Wb-lit5-C)
CPB Wb,Ws Compara con Borrow (Wb-Ws-C)
CPSEQ Wb,Wn Compara Wb con Wn, teniendo en cuenta el signo, y salta a la
siguiente instrucción si los dos son iguales
CPSGT Wb,Wn Compara Wb con Wn, teniendo en cuenta el signo, y salta a la
siguiente instrucción si Wb es mayor que Wn
CPSLT Wb,Wn Compara Wb con Wn, teniendo en cuenta el signo, y salta a la
siguiente instrucción si Wb es menor que Wn
CPSNE Wb,Wn Compara Wb con Wn, teniendo en cuenta el signo, y salta a la
siguiente instrucción si Wb no es igual a Wn
82 80
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Sintaxis Descripción
BRA Expr Se va a lo que indique Expr (rutina, dirección sin ninguna) condición
BRA Wn Salta un número de instrucciones según el valor de Wn
BRA C, Expr Se va a lo que indique Expr si hay Carry en el resultado de la operación
anterior
BRA GE, Expr Se va a lo que indique Expr si en una comparación anterior es mayor o igual
BRA GEU, Expr Se va a lo que indique Expr si en una comparación anterior es mayor o igual
sin tener en cuenta el signo de los datos
BRA GT, Expr Se va a lo que indique Expr si en una comparación anterior es mayor
BRA GTU, Expr Se va a lo que indique Expr si en una comparación anterior es mayor sin tener
en cuenta el signo de los datos
BRA LE, Expr Se va a lo que indique Expr si en una comparación anterior es menor o igual
BRA LEU, Expr Se va a lo que indique Expr si en una comparación anterior es menor o igual
sin tener en cuenta el signo de los datos
BRA LT, Expr Se va a lo que indique Expr si en una comparación anterior es menor
BRA LTU, Expr Se va a lo que indique Expr si en una comparación anterior es menor sin tener
en cuenta el signo de los datos
BRA N, Expr Se va a lo que indique Expr si hay resultado negativo en la operación anterior
BRA NC, Expr Se va a lo que indique Expr si no hay Carry en el resultado de la operación
anterior
BRA NN, Expr Se va a lo que indique Expr si no hay un resultado negativo en la operación
anterior
BRA NOV, Expr Se va a lo que indique Expr si no ocurrió overflow en resultado de la
operación anterior
BRA NZ, Expr Se va a lo que indique Expr si el resultado de la operación anterior no es igual
a0
BRA OA, Expr Se va a lo que indique Expr si ocurrió overflow en el acumulador A por la
operación anterior
BRA OB, Expr Se va a lo que indique Expr si ocurrió overflow en el acumulador B por la
operación anterior
BRA OV, Expr Se va a lo que indique Expr si ocurrió overflow en resultado de la operación
anterior
BRA SA, Expr Se va a lo que indique Expr si el acumulador A se satura por la operación
anterior
BRA SB, Expr Se va a lo que indique Expr si el acumulador B se satura por la operación
anterior
BRA Z, Expr Se va a lo que indique Expr si el resultado de la operación anterior es igual a 0
CALL Expr Realiza el llamado a una subrutina
CALL Wn Realiza un llamado indirecto a una subrutna, de forma que se accede a una
dirección igual a la dirección actual más el valor almacenado en Wn
DO #lit14,Expr Se realiza el lazo DO de una rutina el número representado por lit14 + 1
DO Wn,Expr Se realiza el lazo DO de una rutina el número almacenado en Wn + 1
GOTO Expr Se va a lo que indique Expr, una dirección o una rutina
GOTO Wn Se va indirectamente a una dirección
RCALL Expr Realiza el llamado relativo a una subrutina donde sólo se toma en cuenta 32 k
de programa
RCALL Wn Realiza un llamado relativo indirecto a una subrutna
REPEAT #lit14 Se realiza un lazo repeat el número de veces presentado por lit14 + 1
REPEAT Wn Se realiza un lazo repeat el número de veces presentado por W + 1
RETFIE Se retorna desde una interrupción
81 83
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
Sintaxis Descripción
POP F Se vuelve a almacenar el valor que tenía el registro F antes de un PUSH
POP Wd Se vuelve a almacenar el valor que tenía el registro Wd antes de un PUSH
POP.D Wnd Se vuelve almacenar el valor que tenía los registros Wnd: Wnd+1 antes de un
PUSH
POP.S Los valores almacenados en los registros shadow se almacenan de donde
fueron accedidos (W0-W3, TBLPAG, PSVPAG, y los bits N, OV, Z, C, DC
del registro SR)
PUSH F Se almacena en la pila según la dirección del puntero W15 el valor almacenado
en el registro F
PUSH Ws Se almacena en la pila según la dirección del puntero W15 el valor almacenado
en el registro Ws
PUSH.D Wns Se almacena en la pila según la dirección del puntero W15 el valor almacenado
en los registros Wns:Wns+1
PUSH.S Se almacena los valores de ciertos registros (W0-W3, TBLPAG, PSVPAG, y
los bits N, OV, Z, C, DC del registro SR) en registros shadow
Instrucciones de control
Sintaxis Descripción
CLRWDT Se coloca en 0 el Watchdog Timer
DISI #lit14 Deshabilitar interrupción por el número (lit14+1) de ciclos de
instrucción
NOP No se realiza ninguna operación
NOPR No se realiza ninguna operación
PWRSAV Coloca al dispositivo en modo SLEEP o modo IDLE
RESET Ocurre un Reset, el programa comienza desde el inicio
Instrucciones DSP
Sintaxis Descripción
ADD Acc Sumar acumuladores
ADD Ws,#slit4,Acc Adiciona 16 bits con signo, a Acc
CLR Acc,Wx,Wxd,Wy,Wyd,AWB Coloca en 0 el Acumulador, y almacena el valor
que apunta la dirección almacenada en Wx al
registro Wxd, almacena el valor que apunta la
dirección almacenada en Wy al registro Wyd, y
se almacena el valor del acumulador que no se
está utilizando a AWB (el cual es W13)
ED Wm*Wm,Acc,,Wx, ,Wy,Wxd Se realiza la resta entre dos valores, se eleva al
cuadrado y se almacena en el acumulador
EDAC Wm*Wm,Acc,,Wx, ,Wy,Wxd Se realiza la resta entre dos valores, se eleva al
cuadrado y se suma al valor que se encuentre en
el acumulador
LAC Ws,#slit4,Acc Se carga el valor del registro Ws en el
acumulador con corrimiento si es negativo slit4
84 82
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
83 85
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
86 84
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
7. EJEMPLOS DE APLICACIÓN
EJEMPLO 7.1
4 Mhz
P0
MCLR L0
RB2 RF0
RB0 L1
P1
RC13 L2
d
RB3 s L3
P RD0 L4
P2 I RF1 L5
RF2
C
RB4 3 L6
P3 0 RF3 L7
RF4
F L8
RB5 3 RF5
0 RB1 L9
P4 1
RC14 4 RD1 L10
RB0
85 87
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
ROTA UN LED ENCENDIDO (LOS DEMAS APAGADOS), DESDE L0 HASTA L9 CON DELAY 1
SI
¿RC14=0?
SI
¿RC14=1?
USANDO
PARA
MANTIENE TODOS LOS LEDS
LLO ENCENDIDOS POR DELAY 5.
DELAY 1.
ENCIENDE Y APAGA SIMULTANEAMENTE L0 Y L10 (ESTO ES
UNA ACCION) DIEZ VECES USANDO DELAY 1.
SI
¿RC14=0?
USANDO
PARA NO
LLO
DELAY 1.
¿RB2=RB3?
SI .
88 86
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
87 89
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
90 88
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
BCLR PORTF,#00
BCLR PORTD,#01
CALL DELAY1
BSET PORTF,#00
BSET PORTD,#01
CALL DELAY1
BCLR PORTF,#00
BCLR PORTD,#01
CALL DELAY1
BSET PORTD,#01
BSET PORTF,#00
CALL DELAY1
BCLR PORTF,#00
BCLR PORTD,#01
CALL DELAY1
BSET PORTF,#00
BSET PORTD,#01
CALL DELAY1
BCLR PORTF,#00
BCLR PORTD,#01
CALL DELAY1
BSET PORTF,#00
BSET PORTD,#01
CALL DELAY1
BCLR PORTF,#00
BCLR PORTD,#01
CALL DELAY1
ULTIMA: BTSC PORTC,#14
GOTO COMP15
GOTO PASO1
.END
89 91
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.2
4 Mhz
P0
MCLR L0
RC13 RC14
L1
P1 d RD1
s RF3 L2
RD0 P
L3
I RF4
P2 C RF5 L4
3 RB0 L5
RF0 0 L6
P3 F RB1
L7
3 RB2
RF1 0 RB3 L8
1 RF2 L9
4
RB0
92 90
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
PRENDE Y APAGA TODOS LOS LEDS DIEZ VECES CON DELAY 1 (DIEZ
VECES APAGADO Y DIEZ VECES ENCENDIDO)
SI MANTIENE L4 Y L5 ENCENDIDOS
¿RC13=0?
POR DELAY 2.
SI NO
¿RD0=RF0?
¿TERMINÓ DELAY 3?
SI
ENCIENDE DESDE L5 HASTA L9 TODO ¿RD0=1?
EL GRUPO POR DELAY 4.
TOMA LOS LEDS DESDE L0 HASTA L4 PARA REALIZAR UN INCREMENTO BINARIO DESDE 00000
HASTA 11111 CON DELAY 1 ENTRE CADA INCREMENTO, SIENDO L0 EL BIT MENOS SIGNIFICATIVO.
SI
¿RD0=1?
.
91 93
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
94 92
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
93 95
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
96 94
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.3
4 Mhz
P1 P8
MCLR
RB0 RB1
P2 P7
d
RB2 s RB3
P3 P
I P6
RC13
C RF0
L1 3 L8
RB4 RC14
L2 0 L7
RF1 RF4
L3 F
RB5 3 RD0 L6
P5 0
1
RD1 4
P4 RF3 RF5 RF2
L4 L5
Para el proceso 2:
Para el proceso 3:
95 97
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
/MCLR L1/ P1 L2/ (P2 P3) L3/ P3 L1/ P1 L2/ (P2 P3)
MCLR P1 P2 P3 P1
0 1 2 3 4 5
( P2 V P3)
P3 L1 / P2 L3/ P1
P2 L3/ P2 L2/ P3
P3 P2 P1
9 8 7 6
MCLR DELAY 1 P5 P4 P5
0 1 2 3 5
4
/ P5
DELAY 1 P4
DELAY 1 P5
DELAY 1 P4
10 9 8 7
/MCLR
(L6 L7)/ DELAY 3 L8/ DELAY 3 (L8 L6)/ DELAY 3 (L8 L7)/ DELAY 3 (L8 L7 L6)/ (DELAY 3 P6)
*L7/ P7
1 MCLR DELAY 3 DELAY 3 DELAY 3 DELAY 3
1 2 3 4 5 P6
DELAY 3 DELAY 3 P7
9 8 7
F= (DELAY3 P8)
98 96
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
97 99
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
100 98
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
99 101
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
BRA Z,T2_3_P3
GOTO SCAN1 E6_P3: BTSS PORTB,#03
GOTO T6_7_P3
T2_3_P3: CLR TMR2 GOTO PREG7
BSET PORTD,#00
BCLR RIEP3,#2 T6_7_P3: CLR TMR2
NOP BCLR PORTF,#04
BSET RIEP3,#3 BCLR RIEP3,#6
GOTO SCAN1 NOP
BSET RIEP3,#7
E3_P3: MOV #39062,W0 GOTO SCAN1
CP TMR2
BRA Z,T3_4_P3 PREG7: MOV #23438,W0
GOTO SCAN1 CP TMR3
BRA Z,PREG8
T3_4_P3: CLR TMR2 GOTO SCAN1
BCLR PORTD,#00
BSET PORTF,#04 PREG8: CLR TMR3
BCLR RIEP3,#3 BTSC PORTF,#04
NOP GOTO CLAREARL7
BSET RIEP3,#4 BSET PORTF,#04
GOTO SCAN1 GOTO SCAN1
102 100
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
.END
101 103
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.4
4 Mhz
P1 P8
MCLR
RB0 RD1
P2 d P7
RB1 s RD0
P
P3 I P6
RB2 C RC14
L1 3 L8
RB3 0 RC13
L2 RB4 L7
F RF5
L3
RB5 3 L6
RF4
0
P5 1
RF1 4
L4 L5
Para el proceso 1:
104 102
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
/MCLR *L1/ (P1V P2) *L2/ (P3 V P1) *L3/ P2 **( L1 L2)/ P3 **(L1 L3)/ P1
MCLR P1 P2 P3 P1 P2 P3
0 1 2 3 4 5
P2
7 6
/MCLR L4/ (DELAY 2 P4) L5/ (DELAY 2 P5) L4/ (DELAY 3 P4)
L4/ (DELAY 1 P4) L5/ (P5 DELAY 1)
DELAY 5 V P4
L5/ (DELAY 5 P4) L4/ (DELAY 5 P4) L5/ (DELAY 4 P5) L4/ (DELAY 4 P4)
6
DELAY 4 V P4 DELAY 3 V P5
DELAY 5 V P4 DELAY 4 V P5
10 9 8 7
1 MCLR P6 P7 P8 P6 V P7
1 2 3 4 5
P6 P8
P7
P6 P8 P7
8 7 6
103 105
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
106 104
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
105 107
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
108 106
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
107 109
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
110 108
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.5
4 Mhz
P1
RF0 MCLR
RBO
d RB1
s RB2
P2 P RB3
RF1 I RB4
C
RB5
3
0 RB6
F RB7
3 RS E R/ W
0
RC13
1
4 RC14
RF2
L1
109 111
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
112 110
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
111 113
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
BRA Z,CONTMI2
PAUSA: BTSC PORTF,#00 MOV W3,W0
GOTO PROS CALL TABLA
BTSC RIEP1,#0 CALL ASCII
GOTO SCAN2 RETURN
CALL CONTEO
BSET RIEP1,#2 CONTMI2: CLR TMR2
NOP MOV #00,W3
BCLR RIEP1,#3 MOV #0X0088,W0
NOP CALL COMANDO
BSET RIEP1,#4 MOV W3,W0
GOTO SCAN2 CALL TABLA
CALL ASCII
CONTEO: MOV #4000,W0 MOV #0X0087,W0
CP TMR2 CALL COMANDO
BRA NN,CONTSE1 INC W4,W4
RETURN MOV #06,W0
CP W4,W0
CONTSE1: CLR TMR2 BRA Z,CONTHO1
MOV #0X008B,W0 MOV W4,W0
CALL COMANDO CALL TABLA
INC W1,W1 CALL ASCII
MOV #10,W0 RETURN
CP W1,W0
BRA Z,CONTSE2 CONTHO1: CLR TMR2
MOV W1,W0 MOV #00,W4
CALL TABLA MOV #0X87,W0
CALL ASCII CALL COMANDO
RETURN MOV W4,W0
CALL TABLA
CONTSE2: CLR TMR2 CALL ASCII
MOV #00,W1 MOV #0X85,W0
MOV #0X008B,W0 CALL COMANDO
CALL COMANDO INC W5,W5
MOV W1,W0 MOV #03,W0
CALL TABLA CP W5,W0
CALL ASCII BRA Z,IGUALES
MOV #0X008A,W0 NIGUAL: MOV W5,W0
CALL COMANDO CALL TABLA
INC W2,W2 CALL ASCII
MOV #06,W0 MOV #10,W0
CP W2,W0 CP W5,W0
BRA Z,CONTMI1 BRA Z,CONTHO2
MOV W2,W0 RETURN
CALL TABLA
CALL ASCII IGUALES: MOV #01,W0
RETURN CP W6,W0
BRA NZ,NIGUAL
CONTMI1: CLR TMR2 CLR W1
MOV #00,W2 CLR W2
MOV #0X008A,W0 CLR W3
CALL COMANDO CLR W4
MOV W2,W0 CLR W5
CALL TABLA CLR W6
CALL ASCII CLR TMR2
MOV #0X0088,W0 CALL CEROS
CALL COMANDO RETURN
INC W3,W3
MOV #10,W0 CONTHO2: CLR TMR2
CP W3,W0 CLR W5
114 112
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
MOV #0X0085,W0
CALL COMANDO
MOV W5,W0
CALL TABLA
CALL ASCII
MOV #0X0084,W0
CALL COMANDO
MOV #01,W6
MOV W6,W0
CALL TABLA
CALL ASCII
RETURN
.END
113 115
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.6
4 Mhz
P1
RC13 MCLR
RB0
d RB1
s RB2
P2 P RB3
RC14 I RB4
C
RB5
3
0 RB6
L1
RF2 F RB7
L2 RS E R/ W
RF3 3
L3
RF4 0 RF0
1
RF1
4
RF5
L4
116 114
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
115 117
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
118 116
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
117 119
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
120 118
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
GOTO BOL
CLAREARW7: CLR W7
BCLR RIEP3,#1
NOP
BSET RIEP3,#2
GOTO T_1_2_P3
.END
119 121
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.7
4 Mhz
P1
RA11 MCLR
RC13
d RC14
s RF0
P RF1
I RF2
C
RF3
3
MSB 0 RF4
RB3 F
RB2 3
RB1 0 RF5
LSB 1
RB0
4
122 120
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
121 123
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
124 122
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.8
4 Mhz
P1
DISPLAY 1 DISPLAY 2
RD8 MCLR
RB0
d RB1
P2 s RB2
RD9 P RB3
I RB4
C
3 RB5
0 RB6
L1
RF6 F
3
0
RF1
1
4 RF2
123 125
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
126 124
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
TABLA2: BRA W5
RETLW #0X003F,W0
RETLW #0X0006,W0
RETLW #0X005B,W0
RETLW #0X004F,W0
RETLW #0X0066,W0
RETLW #0X006D,W0
RETLW #0X007D,W0
RETLW #0X0007,W0
RETLW #0X007F,W0
RETLW #0X0067,W0
125 127
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.9
4 Mhz
P1
RF0 MCLR
P2
RF1 d
s
P3 P RF3 M1
RF2 I
C
3
0
MSB
RB0 F
3 RF4 M2
RB1 0
RB2 1
LSB
4
128 126
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
127 129
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
130 128
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.10
4 Mhz
P1
MCLR
RF0
d
s
P2 P RB0 M1
RF1 I
C
3
0
F
3 RB1 M2
0
1
4
129 131
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
132 130
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
.END
131 133
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.11
4 Mhz
MCLR
RD8 d RB0
MAX s RB1
232 P RB2
RD3 I RB3
C RB4
3 RB5
0 RB6
MSB RB7
RF2 F
3 RD1 E RS R/ W
RF1 0 RD0
RF0 1
LSB 4
RD9
134 132
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
133 135
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
CLR W4
CLR W5 DATO1A: BTSC PORTD,#8
CLR W6 GOTO DATO1A
CLR W7 CALL RX
CLR W8 MOV W6,W1
CLR W9 DATO2A: BTSC PORTD,#8
CLR W10 GOTO DATO2A
CLR W11 CALL RX
CLR W12 MOV W6,W2
CLR W13 DATO3A: BTSC PORTD,#8
CLR W14 GOTO DATO3A
CLR BANDERA CALL RX
MOV #0X0001,W0 MOV W6,W3
CALL COMANDO DATO4A: BTSC PORTD,#8
MOV #0X0003,W0 GOTO DATO4A
CALL COMANDO CALL RX
MOV #0X0006,W0 MOV W6,W4
CALL COMANDO DATO5A: BTSC PORTD,#8
MOV #0X000C,W0 GOTO DATO5A
CALL COMANDO CALL RX
MOV #0X001F,W0 MOV #'1',W0
CALL COMANDO CP W6,W0
MOV #0X003B,W0 BRA NZ,INICIA
CALL COMANDO INC W1,W1
MOV #0X0001,W0 INC W2,W2
CALL COMANDO INC W3,W3
MOV #0X00C1,W0 INC W4,W4
CALL COMANDO MOV #0X0086,W0
BSET PORTD,#03 CALL COMANDO
BSET PORTD,#02 MOV W1,W0
MOV #01,W14 CALL ASCII
MOV #01,W10 MOV W2,W0
BSET PORTD,#03 CALL ASCII
INICIA: BTSS PORTD,#8 MOV W3,W0
GOTO ENVIAN1 CALL ASCII
BTSS PORTD,#02 MOV W4,W0
GOTO REBOTE CALL ASCII
CLR W5 GOTO INICIA
SIGUER: MOV BANDERA,W1
CP W1,#01 DATO1B: BTSC PORTD,#8
BRA Z,CONTEO GOTO DATO1B
GOTO INICIA CALL RX
MOV W6,W1
REBOTE: MOV #1,W0 DATO2B: BTSC PORTD,#8
CP W0,W5 GOTO DATO2B
BRA Z,SIGUER CALL RX
MOV #1,W5 MOV W6,W2
GOTO ENVIA DATO3B: BTSC PORTD,#8
GOTO DATO3B
ENVIAN1: CALL RX CALL RX
MOV #'1',W0 MOV W6,W3
CP W6,W0 DATO4B: BTSC PORTD,#8
BRA Z,DATO1A GOTO DATO4B
MOV #'2',W0 CALL RX
CP W6,W0 MOV W6,W4
BRA Z,DATO1B DATO5B: BTSC PORTD,#8
MOV #'3',W0 GOTO DATO5B
CP W6,W0 CALL RX
BRA Z,DATO1C MOV #'2',W0
GOTO INICIA CP W6,W0
136 134
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
135 137
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
CONTEO: CP W11,#0
BRA Z,CEROX
CP W11,#1
BRA Z,UNOX
CP W11,#2
BRA Z,DOSX
CP W11,#3
BRA Z,TRESX
CP W11,#4
BRA Z,CUATROX
CP W11,#5
BRA Z,CINCOX
CP W11,#6
BRA Z,SEISX
GOTO SIETEX
.END
138 136
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.12
4 Mhz
P1
RA11 MCLR
RB0
P1 d RB1
RD9 s RB2
P RB3
I RB4
C
RB5
3
MSB 0 RB6
RF2 F
RF6 3
RF3 0 RB7
LSB 1
RB8
4
RB9
RB10
Los display muestran un contador ascendente cíclico desde 00:00 hasta 99:99,
con incremento cada segundo.
Los LEDS presentan un conteo binario descendente cíclico que inicia en 111, con
decremento cada 1.5 segundos. Esta temporización está diseñada por bucles
usando W1, W2 y W3.
Un flanco descendente en RA11 (por interrupción) hace visualizar en los display el
mensaje UPB durante 4.5 segundos al final de los cuales se continua el conteo
que se tenia antes en los cuatro display. El conteo binario en los tres LEDS debe
continuar normalmente durante estos 4.5 segundos que se visualizó el mensaje.
Un flanco ascendente en RD9 (por interrupción) hace visualizar en los display el
mensaje BGA durante 4.5 segundos al final de los cuales se continuará con el
conteo que se tenía antes de la interrupción. El conteo binario en los tres LEDS
debe continuar normalmente durante este período de tiempo.
137 139
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
140 138
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
139 141
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.13
4 Mhz
P1
RD8 MCLR
RB0
P1 d RB1
RD9 s RB2
P RB3
I RB4
C
RB5
3
MSB 0 RB6
RF0 F
RF1 3
RF2 0 RB7
LSB 1
RB8
4
RB9
RB10
142 140
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
141 143
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
RETLW #0X023F,W0
RETLW #0X0206,W0 INICIO: MOV #0XFFFF,W0
RETLW #0X025B,W0 MOV W0,ADPCFG
RETLW #0X024F,W0 MOV W0,TRISD
RETLW #0X0266,W0 CLR TRISB
RETLW #0X026D,W0 CLR TRISF
RETLW #0X027D,W0 MOV #0X8020,W0
RETLW #0X0207,W0 MOV W0,T1CON
RETLW #0X027F,W0 MOV W0,T2CON
MOV #15625,W0
RETLW #0X0267,W0 MOV W0,PR1
RETLW #0X0238,W0 MOV #15,W0
MOV W0,PR2
DISPLAY2: BRA W6 BCLR INTCON2,#INT1EP
RETLW #0X013F,W0 BCLR INTCON2,#INT2EP
RETLW #0X0106,W0 BSET SR,#IPL0
RETLW #0X015B,W0 BSET SR,#IPL1
RETLW #0X014F,W0 BCLR SR,#IPL2
RETLW #0X0166,W0 BCLR CORCON,#IPL3
RETLW #0X016D,W0 BCLR IEC0,#T1IE
RETLW #0X017D,W0 BSET IEC0,#T2IE
RETLW #0X0107,W0 BSET IEC1,#INT1IE
RETLW #0X017F,W0 BSET IEC1,#INT2IE
RETLW #0X0167,W0 BCLR IFS1,#INT1IF
RETLW #0X013F,W0 BCLR IFS1,#INT2IF
BCLR IFS0,#T1IF
DISPLAY3: BRA W7 BCLR IFS0,#T2IF
RETLW #0X00BF,W0 CLR PORTB
RETLW #0X0086,W0 CLR PORTF
RETLW #0X00DB,W0 CLR TMR1
RETLW #0X00CF,W0 CLR TMR2
RETLW #0X00E6,W0 CLR TMR3
RETLW #0X00ED,W0 MOV #10,W0
RETLW #0X00FD,W0 MOV W0,W4
RETLW #0X0087,W0 MOV W0,W5
RETLW #0X00FF,W0 MOV W0,W6
RETLW #0X00E7,W0 MOV W0,W7
RETLW #0X00F6,W0 CLR W13
CLR W14
__INT1Interrupt: PUSH.S BSET W13,#00
MOV #02,W4 INICIAR: MOV #07,W14
MOV #01,W5 MOV W14,PORTF
MOV #07,W6 OTRA: MOV W14,PORTF
MOV #00,W7 CALL BUCLE
BSET IEC0,#T1IE MOV #00,W0
BCLR IFS0,#T1IF CP W14,W0
BCLR IFS1,#INT1IF BRA Z,INICIAR
POP.S DEC W14,W14
RETFIE GOTO OTRA
144 142
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.14
4 Mhz
MCLR
RA11 RB0
d RB1
s RB2
P RB3
I RB4
C
RB5
3
0 RB6
RD3 F RB7
3 RF0 RS E
R/W
0 RF1
1
4 RD8
RD9
RC14 RC13
0 0 0 0 FORMATO DE
D4 D3 D2 D1 CONTADOR
143 145
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
146 144
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
145 147
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
148 146
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
EJEMPLO 7.15
4 Mhz
MCLR
S1 RC14 RB0
d RB1
s RB2
P RB3
I RB4
C
RB5
S2 RC13 3 RB6
0
F RB7
3 RF2 RS E
R/W
0 RF3 MSB
1
RD9 RD8
4
RA11 RD3
RF0 RF1
LSB
147 149
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA, Viviana; dsPIC de Microchip
150 148
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA Viviana dsPIC de Microchip
149 151
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA Viviana dsPIC de Microchip
152 150
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA Viviana dsPIC de Microchip
BSET PORTF,#01
ENC_LEDS2: BTSS W3,#01
GOTO APG_LEDS2
BSET PORTD,#03
ENC_LEDS3: BTSS W3,#02
GOTO APG_LEDS3
BSET PORTD,#8
GOTO PROGRAMA
CLR_W3: CLR W3
GOTO ENC_LEDS1
.END
151 153
HERNÁNDEZ CAPACHO, Carlos Gerardo; MAESTRE CARRILLO, Laura Clarena; AFANADOR PEÑA Viviana dsPIC de Microchip
8. BIBLIOGRAFÍA
[6] dsPIC30F Data Sheet General Purpose and Sensor Families. Microchip. Estados Unidos. 2003.
[8] dsPIC30F Data Sheet Motor Control and Power Conversion Family. Microchip. Estados Unidos.
2003.
[9] MPLAB® ASM30, MPLAB® LINK30 AND UTILITIES USER‟S GUIDE. Microchip. Estados
Unidos. 2003.
154 152