Entorno de desarrollo para programación de microcontroladores PIC –Para PIC 16F84– Versión educativa Manual de usuario
2
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Auto Autori rida dade des s Presidente de la Nación
Néstor C. Kirchner Ministro de Educación, Educac ión, Ciencia y Tecnología
Daniel Filmus Directora Ejecutiva Ejecuti va del Instituto Nacional de Educación Educaci ón Tecnológica Tecnológica
María Rosa Almandoz Director Nacional del Centro Centr o Nacional de Educación Tecnológica Tecnológica
Juan Manuel Kirschenbaum
Especialista de contenido:
• Jorge Cano
Ministerio de Educación, Ciencia y Tecnología Instituto Nacional de Educación Tecnológica Saavedra 789. C1229ACE Ciudad Autónoma de Buenos Aires República Argentina
3
Índice1 La interfaz del entorno
Entornos Crear un nuevo entorno Seleccionar el entorno actual de trabajo Borrar un entorno Bloques Interpretar bloques: Seleccionar bloques o vínculos Mover un bloque Estirar un bloque Borrar bloques Editar bloques Duplicar bloques Habilitar y deshabilitar bloques Vínculos (flechas) Crear un vínculo Cambiar el estilo de un vínculo Borrar vínculos Ingreso de datos Controlar ingreso de nombres de registros Controlar ingreso de valores literales Modos de trabajo “nivel de usuario”
9 10 10 10 11 11 14 14 15 15 15 16 17 19 19 20 20 21 21 21 22
Programando
Crear un nuevo proyecto. Declarar registros Borrar un registro Declarar bits Borrar un bit de usuario Cambiar el nombre a un bit de usuario Insertar bloques Descripción de las funciones
1. Instrucciones 1.1. Instrucciones orientadas a registros ADDWF ADDWF ANDWF ANDWF CLRF CLRW COMF DECF DECFSZ INCF 1
25 27 29 30 31 32 33 35 35 35 35 36 36 36 37 37 37 38
El nombre comercial de este equipo es Niple®, registrado por Jorge Eduardo Cano y Silvio Ernesto Galán en la Dirección Nacional de Derecho de Autor, número de expediente 244692. www.niplesoft.net. En el material material de capacitación del que este Manual Manual es parte, nos referimos referimos sólo a algunas de sus funciones. funciones.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
4
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
INFCSZ IORWF MOVF MOVWF R LF RR F SUBWF SWAPF XO R W F 1.2. Instrucciones orientadas a bits BCF BSF BTFSC BTFSS 1.3. Instrucciones orientadas a literales ADDLW ADDLW ANDL ANDLW W IORLW MOVLW SUBLW XORLW 1.4. Instrucciones orientadas a control CLRWDT NOP SLEEP 2. Rutinas básicas
Iniciar programa Asignar valor a un bit Asignar valor a un registro registro Configurar el puerto A Configurar el puerto B Leer puerto Escribir puerto Leer EEPROM Grabar EEPRPM Comparar un bit Comparar un registro Adición a 8 bits Sustracción a 8 bits División a 8 bits Multiplicación a 8 bits Conversión de registros (8 bits) a bcd Escalar RS232 – Enviar RS232 – Recibir Tablas Crear una nueva tabla Consultar una tabla Tiempos por bucles Multiplexado Multiplexado (4511) Teclado matricial
38 38 39 39 39 40 40 40 41 41 41 41 42 42 42 42 43 43 43 44 44 44 44 45 45 46
46 46 47 49 50 51 51 52 53 53 54 55 56 57 57 58 59 59 60 61 61 63 63 64 69 73
5
3. Interrupciones
75
Configurar una interrupción. Finalizar la interrupción
75 75
4. Rutinas de usuario
75
Menús
Archivo. Exportar una rutina de usuario Archivo. Importar una rutina de usuario Archivo. Exportar una imagen
79 81 82
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
7
LA INTERFAZ DEL ENTORNO
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
9
Entornos Elementos de la pantalla:
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
En general, un programa para PIC está organizado en distintas “secciones” con el fin de facilitar la compresión y, al mismo tiempo, optimizar el código por medio de su reutilización. El objetivo de cada una de estas “secciones” es resolve r un problema en particular. Cada sección recibe distintos nombres, según la función que cumplen o el conte xto en el cual se ejecutan (Programa Principal, Principa l, Subrrutinas o Interrupciones). Aquí, llamamos “entorno” a cada una de estas “secciones” que conforman un programa. Cada entorno debe estar perfectamente delimitado del imitado por un bloque de “Inicio” y otro de “Fin”, con la excepción del entorno del “Programa Principal”. Éste contiene un bloque de inicio pero no tiene un bloque de final; se realiza un bucle para ejecutar otro “ciclo” del programa. Cada proyecto puede contener varios entornos: • Entorno del “Programa principal” : este entorno se crea de manera automática y es el encargado de “coordinar” la ejecución de todo el programa (incluyendo el resto de los entornos). En E n un proyecto sólo puede haber un entorno llamado “Programa Principal” y no puede ser borrado. • Entornos de subrutinas (rutinas de usuario) : Son funciones o procedimientos generados por el usuario. Debe asignarles un nombre único dentro del proyecto. No tiene un límite máximo en la cantidad de entornos de subrutina que puede incluir en un proyecto. Las subrutinas pueden devolver o no un resultado (funciones y procedimientos, respectivamente). Para ejecutar una subrutina debe ser “llamada” o invocada. • Entornos de interrupciones: Son funciones o procedimientos que se ejecutan al producirse un llamado a interrupción. Cada interrupción tiene un nombre predeterminado que no puede ser cambiado por el usuario. La cantidad máxi-
10
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
ma de “Interrupción” corresponde al número de interrupciones de incluye cada modelo de microcontrolador. En tiempo de ejecución, se accede al entorno de una interrupción de manera automática, al generarse un llamado a interrupción; o sea que no se puede “predecir” el momento exacto en que se producirá una interrupción. Esto afecta al sistema de chequeo de errores. Crear un nuevo entorno Un entorno se genera de manera automática, al insertar interrupciones o rutinas de usuario en el proyecto. Cuando inserta una interrupción en el proyecto, se coloca de manera mane ra automática el bloque inicio de entorno con el texto correspondiente y un bloque de inhabilitación del GIE (Habilitador general de interrupciones) para que ninguna otra interrupción suspenda la ejecución de la actual interrupción. Si usted está utilizando otra interrupción de mayor prioridad, simplemente borre o inhabilite este bloque. Cuando declara una rutina de usuario, se genera un nuevo entorno entor no con el nombre que usted asignó a la rutina y le coloca el prefijo “usr_” (abreviación de la palabra usuario). Inserta de manera automática el bloque de “Inicio de entorno”. Seleccionar el entorno actual de trabajo Para conmutar entre los distintos entornos, sólo seleccione el nombre del entorno en el “Explorador de proyecto”. En la esquina superior izquierda del área de trabajo se muestra el nombre del entorno actual. Borrar un entorno Para borrar un entorno, seleccione el nombre del entorno a borrar y presione la tecla “Suprimir”.
11
Bloques Un bloque es un símbolo que representa una parte del proceso. Cada bloque presenta información según su forma, su color y el texto que contiene, e identifica una función en particular. Interpretar los bloques Cada forma de bloque está directamente asociada a un tipo de función; esto le facilita la interpretación del programa con sólo echarle un vistazo general. gene ral. Tipo de función, según la forma del bloque:
Inicio-Fin. Se utiliza como inicio o fin de un entorno.
Instrucción. Cualquiera de las 35 3 5 instrucciones en código assember.
Configuración de un puerto.
Ingreso de datos. Leer el valor de un puerto (en paralelo), modo captura, modo comparación.
Salida de datos. Escribir un valor en un puerto (en (e n paralelo, no serial).
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
12
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
Asignación. Este bloque representa la asignación de un valor a un registro o un bit.
Leer un dato de la memoria EEPROM.
Almacenar un dato en la memoria EEPROM.
T E N I
Condición. Evalúa una condición y deriva la ejecucion del programa en función del resultado de la evaluación.
Configuración. Este bloque corresponde a configuración de interrupción y módulos periféricos.
Activar-Desactivar interrupciones.
Cálculo matemático.
Conversión decimal a BCD o BCD a decimal.
13
Consultar tabla.
Comunicaciones seriales RS232. Envío y recepción de un dato por RS232.
Comunicaciones seriales RS232. Envío y recepción de un conjunto de datos por RS232 mediante protocolo de usuario diseñado.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Temporización por bucle. Calcula y genera los bucles necesarios para esperar un tiempo determinado.
Visualizar valores en display de 7 segmentos por el método del multiplexado.
Registro de desplazamiento. Ingresar un valor y rotar.
Llamada a subrutina (call).
14
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Seleccionar bloques o vínculos Al seleccionar un bloque se presenta una serie de 9 nodos (8 alrededor y 1 en el centro). En el caso de los vínculos, se presenta un nodo en la mitad de la flecha. Puede seleccionar uno o más bloques o vínculos de varias maneras: • Haga un clic sobre el bloque o sobre el vínculo. • Mantenga presionada la tecla “ALT” o la tecla “CRTL”; puede ir incorporando más bloques o vínculos a la selección actual. Puede seleccionar varios bloques y vínculos de la siguiente manera: • Marque un punto en el área de trabajo (no sobre un bloque). • Presione el botón izquierdo del mouse y arrastre sin soltar el botón; se mostrará un rectángulo en línea de trazos. • Al soltar el botón del mouse, se seleccionarán todos los bloques y vínculos que son incluidos en el área seleccionada. Mover un bloque Seleccione el bloque que desea desplazar, sin soltar el botón izquierdo del mouse, y arrastre hasta ubicar el bloque en la nueva posición. Puede mover varios bloques simultáneamente. Note que todos los bloques que dependen del bloque seleccionado se mueven en conjunto de manera rígida. Esto se debe a que el modo “Arrastrar bloques” se encuentra activado. Si conmuta a modo “Arrastrar bloques” desactivado, sólo se desplaza el bloque seleccionado. Para conmutar entre el modo “Arrastrar bloques” activado y desactivado, ingrese al menú “Opciones/Diagramas de Flujo/Activar Arrastre”.
A) Posición original B) Modo “Arrastrar bloques” activado C) Modo “Arrastrar bloques” desactivado
15
Utilice el comando “Edición/Deshacer” para restablecer la posición anterior del bloque. Estirar un bloque Al seleccionar un bloque se muestran 9 nodos (8 alrededor y 1 en el centro del símbolo seleccionado). Para modificar el tamaño del bloque, haga un clic en uno de los 8 nodos periféricos y, sin soltar el botón izquierdo del mouse, arrastre hasta alcanzar el tamaño deseado.
A) Tamaño del bloque original B) Bloque estirado
Utilice el comando “Edición/Deshacer” para restablecer el tamaño anterior del bloque. Borrar bloques Tiene dos formas de eliminar un o varios bloques: • Seleccione el bloque que desea eliminar y presione la tecla “Suprimir”. • Seleccione el bloque que desea eliminar y presione el botón derecho del mouse. Se desplegará un “menú contextual”; presione la opción “Borrar símbolo” (o la opción “Borrar”, si ha seleccionado varios bloques o vínculos).
Utilice el comando “Edición/Deshacer” para recuperar los bloques borrados. Editar bloques Muchas veces, es necesario cambiar el valor de algún parámetro u opción a un bloque ya insertado dentro del diagrama de flujo. Para esto, tiene dos opciones: • Puede borrar el bloque e insertarlo nuevamente, seleccionado los parámetros deseados. Si elige esta opción, deberá realizar los vínculos de manera manual. • Puede editar el bloque y asignarle nuevos valores a los parámetros solicitados. Para esto no necesita borrar el bloque ni realizar los vínculos nuevamente.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
16
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Para editar un bloque, selecciónelo y luego haga un clic con el botón derecho del mouse para que se presente el menú contextual. Elija la opción “Editar”. Importante: Para que el menú contextual presente la opción “Editar”, sólo debe estar seleccionado el bloque a ser editado. Si selecciona más de un elemento, ya sean bloques o vínculos, el menú no presentará la opción “Editar” ya que el sistema no puede determinar cuál es el bloque que desea editar. Se presentará la pantalla correspondiente al bloque seleccionado. La pantalla será cargada con todos los parámetros seleccionados. Proceda a cambiar los valores o las opciones, y presione el botón “Ingresar”. Con respecto al chequeo de errores, es importante tener en cuenta que rige el mismo criterio que para la inserción de bloques. O sea que, si el bloque a editar está vinculado a otro bloque, se realizará el chequeo de errores “en línea”. Mientras que si el bloque no se encuentra vinculado, el chequeo no se realizará. Duplicar bloques Al duplicar un bloque, se realiza una copia exacta del bloque seleccionado. Muchas veces, la opción “Duplicar” un bloque, en combinación con la “Edición” de bloques, puede ayudarle a ahorrar tiempo de diseño, ya que es común realizar operaciones similares en distintas partes de proyecto, donde sólo cambian algunos parámetros. Usted puede realizar una copia de la “estructura lógica” del programa y, luego, editar los bloques necesarios. Esto le resultara más cómodo que insertar todos los bloques nuevamente. Para duplicar un bloque, selecciónelo y, luego, haga un clic con el botón derecho del mouse para que se presente el menú contextual. Elija la opción “Duplicar”.
Además, puede duplicar uno o más bloques a la vez.
17
Habilitar y deshabilitar bloques En la fase de diseño del proyecto, es habitual que durante las pruebas, usted necesite anular una parte del proceso para que no sea ejecutada. Por medio de las opciones “Habilitar bloque” y “Deshabilitar bloque”, puede anular la ejecución de uno o más bloques sin necesidad de borrarlos o de alterar la lógica del programa. Para deshabilitar un bloque, selecciónelo y, luego, haga un clic con el botón derecho del mouse para que se presente el menú contextual. Elija la opción “Deshabilitar”.
Importante: Un bloque deshabilitado no es considerado en el momento del chequeo de errores “en línea” y tampoco genera el código assembler . No puede deshabilitar el bloque correspondiente a una “Decisión” (símbolo “Rombo”), dado que este tipo de bloques tiene 2 salidas. Para habilitar un bloque, selecciónelo y luego haga un clic con el botón derecho del mouse para que se presente el menú contextual. Elija la opción “Habilitar”.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
18
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
19
Vínculos (Flechas) Un vínculo está representado por una flecha que une a dos o más bloques, y determina el flujo del proceso. Los vínculos determinan la secuencia y el orden de ejecución del programa. Esto significa que es muy importante tener en cuenta el sentido en que se genera el vínculo (bloques de origen y de destino). El bloque desde donde parte el vínculo de denomina “Bloque de origen” y el bloque al cual llega “Bloque de destino”. Puede identificarlos visualmente, porque el vínculo presenta una “Punta de flecha” en el extremo correspondiente al bloque de destino.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
La secuencia de ejecución del programa es: primero se ejecuta el “Bloque de origen” y, a continuación, el “Bloque de destino”. Existe un criterio a tener en cuenta a la hora de realizar vínculos entre bloques, que este programa supervisa de manera automática: • Cada bloque debe tener sólo un vínculo de salida. A excepción de los bloques de decisión (rombo) que, necesariamente, deben tener 2 salidas (si la condición se cumple y si la condición no se cumple). • Los bloques “Inicio de entorno” (elipses amarillas) no pueden utilizarse como “Bloques de destino”. O sea que no pueden tener flechas que “ingresen” a ellos. • Los bloques “Fin de entorno” (elipses amarillas) no pueden utilizarse como “Bloques de origen”. O sea que, no pueden tener flechas que “salgan” desde estos bloques. Antes de codificar un programa a código assembler, el programa supervisa que todos los bloques se encuentren correctamente vinculados. En el caso de existir un error de vínculos, lo informa y suspende la codificación del assembler . Crear un vínculo Para crear un vinculo entre 2 bloques, siga los siguientes pasos: • Seleccione el “Bloque de origen”. • Haga un clic en el nodo (punto negro) que se encuentra en el centro del bloque.
20
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
• Sin soltar el botón mouse, arrastre hasta el “Bloque de destino” y suelte el botón del mouse.
Un vínculo puede adoptar distintas formas, de acuerdo a la disposición de los bloques de origen y destino. A estas formas se las llama “Estilo del vínculo”. Cambiar el estilo de un vínculo Para cambiar el estilo de un vínculo: • Seleccione el vínculo y presione el botón derecho del mouse. • Se mostrará un menú contextual con los distintos estilos que puede adoptar un vínculo. • Seleccione el estilo deseado.
Borrar vínculos Para eliminar un vínculo: • Seleccione el vínculo y presione el botón derecho del mouse. • Se mostrará un menú contextual. • Seleccione la opción “Borrar flecha”. También puede borrar un vínculo, seleccionándolo y presionando la tecla “Suprimir”.
21
Ingreso de datos El programa controla de manera automática cada dato ingresado al sistema, ya sean nombres de registro, valores literales u opciones (generalmente, numéricas). De esta manera se controlan los errores de tipeo. Controlar ingreso de nombres de registros Cuando necesite ingresar el nombre de un registro como parámetro para una función, se presenta una lista con todos los registros declarados, donde usted debe seleccionar el nombre del registro deseado. Esto garantiza que el registro a utilizar haya sido previamente declarado y, además, previene los posibles errores de tipeo por parte del usuario, al ingresar el nombre del registro. Importante: Si necesita seleccionar como parámetro, el nombre de un registro “Predefinido” y no aparece en lista, consulte el tema “Conceptos básicos / Modo de usuario”. En general, junto a la “lista de registros”, se presenta el botón “Nuevo”. Este botón carga la pantalla de declaración de registros. De esta manera, si necesita ingresar como parámetro el nombre de un registro que aún no ha sido declarado, tiene la posibilidad de declararlo y seleccionarlo, sin necesidad de cancelar la pantalla actual. Al cargar la pantalla “Declaración de registros”, puede declarar más de un registro nuevo antes de volver a la función actual. Pero, al retornar, el programa seleccionará de manera automática, en la lista, el nombre del registro seleccionado al momento de cerrar la pantalla. Controlar ingreso de valores literales El programa le ofrece distintos formatos de ingreso de valores literales; éstos son: formato decimal, hexadecimal o binario. En general, cuando necesite ingresar un literal, primero debe seleccionar el «formato» en el cual desea ingresar el valor. De esta manera, el programa supervisa de manera automática el ingreso de datos y admite sólo los valores permitidos para el formato seleccionado. Si ingresa un valor no permitido, se le muestra de color rojo y no se permite continuar con el proceso actual,hasta no corregir el valor ingresado. Importante: Cuando ingresa un número en formato binario, el programa lo acepta como válido sólo cuando se han ingresado los 8 dígitos que conforman el número. Esto garantiza la correcta interpretación del valor ingresado.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
22
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Modos de trabajo “Nivel de usuario” Dado que el programa está especialmente diseñado para quienes se inician en la programación de microcontroladores PIC, el sistema ofrece dos modos de trabajo, según el nivel de experiencia o conocimiento técnico del usuario: • Modo de usuario inicial: Sólo se permite el acceso y visualización de los registros y bits declarados por el usuario, y no se tiene acceso a los registros predefinidos. Los únicos bits predefinidos a los que se tiene acceso son los correspondientes a los puertos (RA0-4; RB0-7) y los bits C y Z, dado que estos bits son de uso frecuente. De esta manera, se pretende evitar errores al modificar registros de configuración y control del sistema (ya sea por desconocimiento o de manera accidental). • Modo de usuario experto: Se permite el acceso a todos los registros y bits del sistema sin ninguna restricción. El programa supone que el usuario tiene pleno conocimiento de las acciones que se están realizando, y no advierte sobre de los riesgos de modificar el valor de los registros de configuración o control. Por defecto, se inicia la sesión de trabajo en modo “Usuario inicial”. Para conmutar entre modo de usuario inicial a experto, ingrese al menú “Opciones/ Nivel de Usuario”.
23
PROGRAMANDO
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
25
Crear un nuevo proyecto Para crear un nuevo proyecto, ingrese al menú Archivo\Nuevo Proyecto... Se presentará la pantalla de “Nuevo proyecto” donde se le solicita que ingrese los siguientes datos:
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Los datos del proyecto son: • Nombre del proyecto: Nombre descriptivo del proyecto (No es el nombre del archivo). • Descripción del proyecto: Ingrese una descripción para identificar el proyecto. • Fecha: Por defecto, se presenta la fecha actual del sistema. • Nombre del autor: Se asigna el nombre del titular de la licencia como autor del proyecto. Este nombre no puede ser modificado. Si bien los datos del proyecto son opcionales, se recomienda ingresar estos datos para la correcta identificación del proyecto en el futuro. Los datos del archivo son: • Nombre del archivo: El programa utiliza la extensión .NPL para los archivos de proyecto. Seleccione la unidad y la carpeta donde guardar el nuevo proyecto. Al seleccionar la carpeta, se muestran todos los proyectos existentes en ella. No puede repetir el nombre de un archivo de proyecto. Una vez ingresados todos los datos necesarios, presione el botón “Crear”. Al crear un nuevo proyecto, se cargan todas las características del modelo de PIC seleccionado. Además, se genera de manera automática el entorno del programa principal y se inserta el bloque de “Inicio” del programa.
26
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Todos los proyectos deben tener un entorno de “Programa principal”. Este entorno no puede ser borrado. Y cada entorno de programa principal debe tener un bloque de “Inicio” de programa.
27
Declarar registros La declaración de registros se realiza de manera visual trabajando directamente sobre el mapa de memoria. Para ingresar a la pantalla de declaración de registros, seleccione el menú “Declaración\Registros” o hágalo por medio de la combinación de teclas CTRL+R. En esta pantalla se presenta el mapa de memoria. Cada registro está identificado con una “dirección de registro”, la cual está expresada en formato hexadecimal.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
El mapa de memoria de datos presenta los distintos los tipos de registros con diferentes colores. • Registros predefinidos por el PIC (color naranja): Corresponde a registros de configuración y control del sistema. Estos registros se declaran de manera automática en el momento de crear el proyecto y no pueden ser borrados. Cada uno de estos registros cumple con una función predeterminada. • Registros de usuario (color verde): Corresponde a la memoria disponible para que el usuario declare sus propios registros. • Registros deshabilitados (color gris): Corresponde a la memoria no disponible. Estas direcciones de memoria no pueden ser utilizadas. Para declarar un registro de usuario, debe hacer un clic en una posición de memoria libre correspondiente a los registros de tipos “Usuario” (color verde). Al hacer clic, se le solicita que ingrese el nombre del registro a declarar. Se controla la validez del nombre del registro que se está declarando; esto es:
28
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
• Que no esté siendo ya utilizado por otro registro o bit. • No se permiten nombres de registros como “A”, ó “B” que pueden llegar a confundirse con un nombre de puerto. • Que no contenga caracteres no válidos. • Que el nombre no contenga más de 20 caracteres de largo. • Que el nombre no corresponda a una instrucción o comando.
29
Borrar un registro Seleccione el registro a borrar y presione la tecla “Suprimir”. Sólo puede borrar los registros de usuario. Importante: Dado que se puede declarar bits dentro de un registro de usuario, se chequea si el registro de usuario que se intenta borrar contiene bits declarados. Si se detecta que el registro a borrar contiene bits declarados, se le advierte que junto con el registro serán borrados todos los bits que éste contenga y se le pregunta si desea continuar con la operación de borrado del registro. Tiene la posibilidad de cancelar la operación de borrado respondiendo “No” a la pregunta. Y, si responde afirmativamente, se borrará el registro junto con la totalidad de los bits asociados.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
30
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
Declarar bits La declaración de bits se realiza de manera totalmente visual, trabajando directamente sobre el mapa de memoria. Puede ingresar a la pantalla de declaración de bits a través del menú “Declaración\Bits” o a través de la combinación de teclas CTRL+B.
T E N I
La memoria de datos se encuentra organizada en 4 bancos o páginas, las cuales son presentadas una en cada “solapa” de la pantalla de declaración de Bits El mapa de memoria de datos presenta los distintos tipos de registros con diferentes colores. A la vez, se muestra un “detalle” de los bits que conforman cada registro: • Registros predefinidos por el PIC (color naranja): Corresponde a registros de configuración y control del sistema. Estos registros se declaran de manera automática en el momento de crear el proyecto y no pueden ser borrados. Cada uno de estos registros cumple con una función predeterminada. • Registros de usuario (color verde): Corresponde a la memoria disponible para que el usuario declare sus propios registros. • Registros deshabilitados (color gris): Corresponde a la memoria no disponible. Estas direcciones de memoria no pueden ser utilizadas. Haciendo un clic sobre el nombre de un bit, se muestra en la parte inferior de la pantalla toda información correspondiente al bit seleccionado. Antes de declarar un BIT de usuario debe haber declarado el registro de usuario al cual pertenece el bit que desea declararse. Una vez declarado el registro de usuario, ingrese a la pantalla de declaración de bits y seleccione el número de bit que desea declarar. Esto se hace haciendo un clic sobre la posición de bit correspondiente dentro registro de usuario y respondiendo afirmativamente cuando le pregunta si desea declara un nuevo bit. Luego, le solicita que ingrese el nombre y la descripción del nuevo bit.
31
El programa controla la validez del nombre del bit que se está declarando, esto es: • Que no esté siendo ya utilizado por un registro o bit. • No se permiten nombres de bits como «A», ó «B» que pueden llegar a confundirse con un nombre de puerto. • Que no contenga caracteres no válidos. • Que el nombre no contenga más de 20 caracteres de largo. • Que el nombre no corresponda a una instrucción o comando.
Borrar un bit de usuario Seleccione el bit a borrar y presione la tecla “Suprimir”. Sólo puede borrar los bits de usuario.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
32
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Cambiar el nombre a un bit de usuario Le brinda la posibilidad de renombrar un bit o de modificar su descripción. Para esto, seleccione el bit que desea renombrar y presione la tecla “Enter” . A continuación, pregunta si desea cambiar el nombre del bit actualmente seleccionado. Si responde afirmativamente, se muestra la pantalla “Renombrar un bit” donde se presentan el nombre y la descripción del bit actualmente seleccionado. Ingrese el nuevo nombre del registro y la nueva descripción, y a continuación presione el botón “Renombrar”. Al cambiar el nombre de un bit, todos los bloques de los diagramas de flujo que hacen referencia al bit anteriormente renombrado quedan desactualizados, o sea, hacen referencia a un bit que ya no existe. Para solucionar esto, se le brinda la posibilidad de actualizar de manera automática todos los bloques que hacen referencia al bit renombrado. Se le pregunta si desea que actualice de manera automática los diagramas de flujo con el nuevo nombre de bit. Si responde afirmativamente, se actualizan todos los bloques de todo el proyecto, de manera automática. Importante: Además de renombrar los bits de usuario, se le ofrece la posibilidad de cambiar el nombre de los bits correspondientes a los puertos. De esta manera, puede identificar más fácilmente los pines del microcontrolador, indicando directamente el nuevo nombre asignado. Por ejemplo: puede renombrar el bit RA0 por Rele1 y, a partir de entonces, sólo se refiere a éste como Rele1.
33
Insertar bloques Tenga en cuenta que cada bloque debe estar unido a otro bloque por medio de un vínculo (flecha). Esta flecha indica el sentido de ejecución del programa. De esta manera, se establece la secuencia y el orden en que va a ser ejecutado el programa. El vínculo puede realizarse de forma manual o de forma automática. Para que el vínculo se realice de forma automática, debe seleccionar el bloque previo antes de insertar el nuevo bloque. Se supervisa de manera automática los errores lógicos, sólo cuando los vínculos se realizan de manera automática, o sea, cuando se inserta una nuevo bloque habiendo seleccionado previamente el bloque precedente. Cuando el vínculo se realiza de manera manual, no hay chequeo automático de errores. En este caso, se le advierte a través del siguiente mensaje.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Si elige la opción “No”, se cancela la operación de inserción de bloque. Si elige la opción “Si”, se le permitirá insertar un bloque, pero no se realizará el chequeo de errores en línea, dado que no es posible determinar el contexto en el cual será insertado el nuevo bloque. Además, el nuevo bloque será insertado en la esquina superior derecha del diagrama de flujo y el vínculo deberá ser realizado manualmente. Para insertar un bloque siga los siguientes pasos: 1. Seleccione el bloque al cual vincular el nuevo bloque a ser insertado (para que el sistema realice el vínculo de manera automática y el chequeo de errores). 2. Haga doble clic para desplegar el “Árbol de herramientas” y localice la función que necesite, desplegando y recorriendo el árbol de herramientas. 3. Una vez localizada la función que quiere insertar, haga doble clic en su nombre para cargar la pantalla con las opciones y parámetros de la función. Una vez seleccionadas las opciones e ingresados los parámetros, presione el botón “Ingresar”. 4. De esta manera, se insertará el bloque y será vinculado de manera automática.
34
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
35
Descripción de las funciones Los bloques se encuentran agrupados en distintos niveles, organizados por categoría para facilitar la búsqueda de un bloque en particular. En el primer nivel se organizan por tipo de función, encontrándose: 1. 2. 3. 4.
Instrucciones Rutinas básicas Interrupciones Rutinas de usuario
1. Instrucciones Esta categoría incluye todas instrucciones en assembler. A su vez, se organizan por tipo de instrucción. El objetivo es utilizar lo menos posible los bloques de instrucciones, ya que estos bloques equivalen a programar en código assembler.
1.1. Instrucciones orientadas a registros ADDWF
Suma el valor de W y un registro
Registro F: Nombre registro que se quiere sumar a W. Destino (d): Indica dónde será guardado el resultado de la operación.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
36
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
ANDWF
Realiza una operación lógica AND entre W y un registro.
Registro F: Nombre de registro a combinar con W. Destino (d): Indica dónde será guardado el resultado de la operación.
CLRF
Borra el contenido del registro seleccionado (Registro F).
T E N I
Registro F: Nombre de registro a combinar con W.
CLRW
Borra el contenido del registro W.
Esta instrucción no contiene parámetros.
37
COMF
Devuelve el complemento de un registro.
Registro F: Nombre de registro del que se quiere obtener el complemento. Destino (d): Indica dónde será guardado el resultado de la operación.
DECF
Decrementa el valor de un registro en 1.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Registro F: Nombre de registro a decrementar. Destino (d): Indica en donde será guardado el resultado de la operación.
DECFSZ
Decrementa un registro. Si el valor del registro decrementado es 0, entonces la siguiente instrucción es obviada y ejecuta la instrucción ubicada dos líneas más abajo.
Registro F: Nombre de registro a decrementar. Destino (d): Indica dónde será guardado el resultado de la operación.
38
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
INCF
Incrementa el valor de un registro en 1.
Registro F: Nombre de registro a incrementar. Destino (d): Indica dónde será guardado el resultado de la operación.
INFCSZ
Incrementa un registro. Si el valor del registro incrementado es 0, entonces la siguiente instrucción es obviada y ejecuta la instrucción ubicada dos pasos más abajo.
T E N I
Registro F: Nombre de registro a incrementar. Destino (d): Indica dónde será guardado el resultado de la operación.
IORWF
Realiza una operación lógica OR Inclusive entre W y un registro.
Registro F: Nombre de registro a utilizar en la operación. Destino (d): Indica dónde será guardado el resultado de la operación.
39
MOVF
Mueve el contenido del registro.
Registro F: Nombre de registro a utilizar en la operación. Destino (d): Indica dónde será guardado el registro.
MOVWF
Mueve el contenido del registro W a otro registro.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Registro F: Nombre de registro destino.
RLF
Rota un bit el contenido del registro hacía la izquierda, incorporando el Carry al registro.
Registro F: Nombre de registro a rotar. Destino (d): Indica dónde será guardado el resultado de la rotación.
40
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
RRF
Rota un bit el contenido del registro hacía la derecha, incorporando el Carry al registro.
Registro F: Nombre de registro a rotar. Destino (d): Indica dónde será guardado el resultado de la rotación.
SUBWF
Resta el valor de un registro (F) al valor de W.
T E N I
Registro F: Nombre de registro a restar. Destino (d): Indica dónde será guardado el resultado de la operación.
SWAPF
Intercambia los nibbles bajo y alto de registro.
Registro F: Nombre de registro a modificar. Destino (d): Indica dónde será guardado.
41
XORWF
Realiza una operación lógica OR exclusiva entre el registro y W.
Registro F: Nombre de registro a utilizar en la operación. Destino (d): Indica dónde será guardado el resultado de la operación.
1.2. Instrucciones orientadas a bits BCF
Limpia un bit; o sea, lo pone a 0.
Registro F: Nombre de registro en donde se encuentra el bit. Nombre del bit : Indica el nombre del bit a modificar. BSF
Setea un bit; o sea, lo pone a 1.
Registro F: Nombre de registro en donde se encuentra el bit. Nombre del bit : Indica el nombre del bit a modificar.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
42
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
BTFSC
Consulta el valor del bit. Si es 0, se descarta una instrucción y ejecuta la siguiente.
Registro F: Nombre de registro en donde se encuentra el bit. Nombre del bit : Indica el nombre del bit a consultar. BTFSS
Consulta el valor del bit. Si es 1, se descarta una instrucción y ejecuta la siguiente.
T E N I
Registro F: Nombre de registro en donde se encuentra el bit. Nombre del bit : Indica el nombre del bit a consultar.
1.3. Instrucciones orientadas a literales ADDLW
Suma un literal con W.
43
Literal K : Valor hexadecimal, decimal o binario a sumar.
ANDLW
Realiza una operación lógica entre el literal (K) y W.
Literal K : Valor hexadecimal, decimal o binario a utilizar en la operación.
IORLW
Realiza una operación lógica OR inclusiva entre el literal (K) y W.
Literal K : Valor hexadecimal, decimal o binario a utilizar en la operación.
MOVLW
Asigna el valor del literal (K) a W.
Literal K : Valor hexadecimal, decimal o binario a mover.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
44
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
SUBLW
Resta a W el valor del literal (K).
Literal K : Valor hexadecimal, decimal o binario a mover.
XORLW
Realiza una operación lógica OR exclusiva entre W y el valor del literal (K).
T E N I
Literal K : Valor hexadecimal, decimal o binario a utilizar en la operación.
1.4. Instrucciones orientadas a control CLRWDT
Borra el contenido del registro Watchdog y su pre-escalador.
45
NOP
Instrucción que se utiliza para consumir un ciclo de reloj.
Repetir : Se refiere al número de NOP a introducir.
SLEEP
El procesador es puesto en modo Standby con el oscilador detenido.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
46
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
2. Rutinas básicas Las rutinas básicas son módulos prediseñados y se encargan de resolver un proceso en particular (una configuración, una comparación, un cálculo, etc.). Pueden formar estructuras lógicas muy complejas de manera rápida y sencilla a partir de la combinación de rutinas básicas. Utilice las rutinas básicas para programar dentro de cualquier “Entorno”. Las rutinas básicas están organizadas por tipo de rutina.
Iniciar programa
Este bloque corresponde al inicio del programa en assembler . Debe estar presente en el entorno del “Programa principal” y debe ser ingresado obligatoriamente. Por esto, se inserta de manera automática.
T E N I
Al bloque de “Iniciar” no puede ingresar ningún vínculo. Sólo acepta un vínculo de salida.
Asignar valor a un bit
Esta función permite asignarle un valor a un bit. Dado que un bit representa un valor binario, sólo se le puede asignar un valor de 0 ó 1.
En el campo “Nombre del bit”, se selecciona el nombre del bit al cual se asignará el valor. Al seleccionar el Bit, se presentan 2 renglones con información referida al bit seleccionado: • En la primera línea se muestra el número de bit y el registro al que pertenece. • En la segunda se muestra la descripción o comentario correspondiente al bit.
47
Una vez seleccionado el bit, se muestra una lista de valores de asignación (0 y 1). Seleccione el valor deseado. Por último, puede ingresar un comentario adicional a la función.
Filtrar los bits por registro
Puede filtrar la lista de nombres de bit para que sólo muestre los bits declarados en un registro determinado. Esto resulta muy práctico cuando está trabajando en “Modo de usuario experto” (se muestran todos los bits del sistema), o cuando ha declarado muchos bits de usuario. Si desea filtrar la lista de bits, active la casilla de verificación “Por registro” y seleccione el nombre del registro. De manera automática se mostrarán todos los bits declarados en el registro seleccionado.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Representación gráfica:
Sintaxis Destino = Origen Esto se interpreta como: “al Bit ‘destino’ se le asigna valor de ‘Origen’”. Ejemplos :
Al bit RA0 se le asigna el valor 1.
Al Bit RA0 se le asigna el valor 0.
Asignar valor a un registro
Esta función permite asignarle un valor constante o variable a un registro.
48
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
En el campo “Registro”, seleccione el registro al cual le asignará un valor; en la sintaxis corresponde al “Destino”. Si desea asignarle un valor a un registro que aún no ha sido declarado, mediante el botón “Nuevo” puede declarar el registro sin necesidad de cancelar la operación actual. Una vez especificado el registro al cual asignar el valor, debe seleccionar qué tipo de valor desea asignar. En la sintaxis corresponde al “Origen”. Las opciones disponibles son: • Un valor literal. Esto es, un valor constante. Se controla de manera automática el ingreso de literales. Para obtener mayor información consulte el tema “Conceptos básicos / Ingreso de datos”. • El valor de otro registro. Esta opción es equivalente a «copiar» el contenido de un registro. Si, en tiempo de ejecución, se modifica el contenido del registro, estamos frente a una asignación de tipo variable. • Al igual que con el campo registro, el botón “Nuevo”, le permite declarar un nuevo registro sin necesidad de cancelar la operación. Por último, puede ingresar un comentario. Representación gráfica:
Sintaxis Destino = Origen Esto se interpreta como: “al registro ‘Destino’ se le asigna el valor de ‘Origen’”. Ejemplos: Al registro “Dato” se le asigna el valor Decimal 00. Al registro “Dato” se le asigna el valor Binario 11011101.
49
Al registro “Dato” se le asigna el valor que contiene el registro “Dato1”.
Configurar el puerto A
La configuración de los puertos se realiza de manera totalmente visual, trabajando directamente sobre una imagen del PIC. El puerto A está conformado sólo por 5 bits (RA0 – RA4).
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
En la pantalla de configuración del puerto A, se presenta una imagen del PIC con las descripciones de todos los pines. En cada pin correspondiente al puerto A se muestra una casilla de verificación, a través de la cual el pin es configurado como entrada o salida. Una vez seleccionada la configuración correcta, presione el botón “Ingresar”. Representación gráfica:
Sintaxis Puerto = Valor_Configuración Esto se interpreta como: “el puerto ‘A’ es configurado como ‘Valor_Configuración’”. Donde: El parámetro ‘Valor_Configuración’ puede contener alguno de los siguientes códigos: S = Salida digital E = Entrada digital Ejemplos :
50
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
Configurar el puerto B
La configuración de los puertos se realiza de manera totalmente visual, trabajando directamente sobre una imagen del PIC.
T E N I
En la pantalla de configuración del Puerto B, se presenta una imagen del PIC con las descripciones de todos los pines. En cada pin correspondiente al puerto B se muestra una casilla de verificación, a través de la cual el pin es configurado como entrada o salida. Una vez seleccionada la configuración deseada, presione el botón “Ingresar”. Representación gráfica:
Sintaxis:
Puerto = Valor_Configuración Esto se interpreta como: “el puerto B es configurado como ‘Valor_Configuración’”. Donde: El parámetro ‘Valor_Configuración’ puede contener alguno de los siguientes códigos: S = Salida digital E = Entrada digital Ejemplos:
51
Leer puerto
Permite obtener el valor actual de un puerto y guardar el resultado en un registro. Esto significa que se obtiene el estado de cada pin correspondiente al puerto seleccionado.
En el campo “Puerto” seleccione el puerto que desea leer. El programa supervisa la configuración del puerto seleccionado de manera automática y advierte si el puerto no está completamente como entrada. Si bien el hecho de leer el estado de un pin configurado como salida no es considerado un error, igualmente se le advierte, para asegurarse que usted tiene pleno conocimiento de la actual configuración.
Escribir puerto
Permite escribir un valor en un puerto. Este valor puede ser un valor literal (constante) o el valor de un registro (variable).
Lo primero que debe seleccionar es el tipo de dato que desea escribir en el puerto. Seleccione el tipo de dato y el valor a escribir en el puerto. Se supervisa la configuración del puerto seleccionado de manera automática y se le advierte si el puerto no está completamente como salida.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
52
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Si bien el hecho de escribir un pin configurado como entrada no es considerado un error, igualmente se le advierte, para asegurarse que usted tiene pleno conocimiento de la actual configuración. Una vez ingresados los datos solicitados, presione el botón Ingresar. Representación gráfica:
Sintaxis:
Puerto = Valor Esto se interpreta como: “en el puerto ‘Puerto’, escribir el valor: ‘Valor’”. Donde: El parámetro ‘Puerto’ muestra el nombre del puerto: A = Puerto A B = Puerto B El parámetro ‘Valor’ corresponde a un registro (valor variable) o a un literal (valor constante). Ejemplos:
Escribir el valor que contiene el registro contador en el puerto B.
Escribir el valor constante B’10001111’ en el puerto B.
Leer EEPROM
Lee los datos de la memoria EEPROM del micro y los guarda en un registro.
1. Seleccione entre las opciones de dirección fija o variable. 2. Si elige la opción variable, seleccione de la lista el registro en donde está contenida la dirección.
53
3. En la lista Registro donde guardar el dato, seleccione el registro destino. 4. Haga clic en Ingresar. La opción de dirección Variable está incorporada para que usted tenga la posibilidad de tener un puntero que pueda incrementar y, de esta manera, leer o grabar un vector de memoria o incluso la totalidad. Si el registro en el que desea guardar los datos no existe, haga clic en Nue vo.
Grabar EEPROM
Graba un literal o un registro en la memoria EEPROM del micro.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
1. En posición de memoria a escribir, seleccione entre las opciones de dirección Fija o Variable. 2. Si elige la opción variable, seleccione de la lista el registro en donde está contenida la dirección. 3. En Valor a grabar, seleccione entre las opciones un literal o un registro. 4. Si seleccionó la opción un registro, seleccione de la lista el registro que desea guardar en la EEPROM 5. Haga clic en Ingresar. La opción de dirección Variable está incorporada para que usted tenga la posibilidad de tener un puntero el cual pueda incrementar y de esta manera grabar o leer un vector de memoria o incluso la totalidad. Si el registro en el que desea guardar los datos no existe, haga clic en Nue vo.
Comparar un bit
Este bloque evalúa si el valor del bit seleccionado es 0 o 1 y deriva el flujo del proceso en función del resultado de la evaluación.
54
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
En el campo “Bit a evaluar”, seleccione el nombre bit del que desea comparar el valor y a continuación seleccione el valor con el cual comparar el bit. Un bit sólo puede contener los valores 0 y 1. Puede filtrar todos los bits correspondientes a un registro determinado. Para esto, seleccione la casilla de verificación “Por registro” y, a continuación, seleccione de la lista el nombre del registro del cual se quieren filtrar todos los bits declarados en él. Para verificar que realmente se ha seleccionado el bit deseado, se le ofrece información acerca de éste. La información presentada es: número de bit, nombre del registro al cual pertenece y comentario asociado al bit. Por último, si lo desea, puede ingresar un comentario al bloque. Una vez seleccionados todos los datos, presione el botón Ingresar. Este bloque debe ser vinculado a 2 bloques de salida: • El primer bloque de salida insertado corresponde a la salida “SI”; es decir que, en tiempo de ejecución, el proceso “tomará” este camino si el resultado de la evaluación es verdadero. • El segundo bloque de salida insertado corresponde a la salida “NO”; es decir que, en tiempo de ejecución, el proceso «tomará» este camino si el resultado de la evaluación es falso.
Comparar un registro
Evalúa el valor de un registro, utilizando como valor de comparación un literal o el valor de otro registro.
55
En la lista “Registro a evaluar”, seleccione el registro que desea comparar. A continuación, seleccione el operador de comparación. Un registro puede ser comparado con un valor literal (constante) o con el valor de otro registro (variable). Seleccione el tipo de valor de comparación, marcando en la casilla de opción correspondiente Si selecciona la opción “un Registro”, opte de la lista el registro que contiene el valor de comparación; de lo contrario, ingrese el valor literal de comparación. Por último, puede ingresar un comentario al bloque. Una vez ingresados todos los datos solicitados, presione el botón “Ingresar”. Los operadores de comparación posibles pueden ser =, <, >, <=, >= o <> (distinto de). Cada vez que debe seleccionar el nombre de un registro y ha olvidado declararlo previamente, se le ofrece la posibilidad de declararlo sin necesidad de cancelar la pantalla actual. Para esto, presione el botón “Nuevo” que se encuentra a la derecha de la lista de registros correspondiente. Este bloque debe ser vinculado a 2 bloques de salida: • El primer bloque de salida insertado corresponde a la salida “SI”; es decir que, en tiempo de ejecución, el proceso “tomará” este camino si el resultado de la evaluación es verdadero. • El segundo bloque de salida insertado corresponde a la salida “No”; es decir que, en tiempo de ejecución, el proceso “tomará” este camino si el resultado de la evaluación es falso.
Adición a 8 bits
Realiza una operación matemática de adición, utilizando como sumandos un valor literal o un registro. El resultado puede ser guardado en W o en otro registro.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
56
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
1. En Sumando1 seleccione entre las opciones un literal o el valor de un Registro. 2. Si seleccionó la opción el valor de un Registro, seleccione de la lista el registro a utilizar como Sumando1. 3. Repita la operación anterior en Sumando2. 4. En Resultado, seleccione entre las opciones en el registro W o en otro registro. 5. Si seleccionó la opción en otro registro, seleccione de la lista el registro en donde quiere guardar el resultado de la operación. 6. Haga clic en Ingresar. Si algunos de los registros que desea no existen, haga clic en Nuevo.
Sustracción a 8 bits
Realiza una operación matemática de sustracción, utilizando como minuendo y sustraendo un valor literal o un registro. El resultado puede ser guardado en W o en otro registro.
1. En minuendo, seleccione entre las opciones un literal o el valor de un Registro. 2. Si seleccionó la opción el valor de un Registro, seleccione de la lista el registro a utilizar como minuendo.
57
3. Repita la operación anterior en sustraendo. 4. En Resultado, seleccione entre las opciones en el registro W o en otro registro. 5. Si seleccionó la opción en otro registro, seleccione de la lista el registro en donde quiere guardar el resultado de la operación. 6. Haga clic en Ingresar. Si algunos de los registros que desea no existen, haga clic en Nuevo.
División a 8 bits
Realiza una operación matemática de división, utilizando como divisor, un valor literal o el valor de un registro. El resultado puede ser guardado en W o en otro registro.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
1. En Dividendo, seleccione entre las opciones un literal o el valor de un Registro. 2. Si seleccionó la opción el valor de un Registro, seleccione de la lista el registro a utilizar como Dividendo. 3. Repita la operación anterior en Divisor. 4. En Resultado, seleccione entre las opciones en el registro W o en otro registro. 5. Si seleccionó la opción en otro registro, seleccione de la lista el registro en donde quiere guardar el resultado de la operación. 6. Haga clic en Ingresar. Si algunos de los registros que desea no existen, haga clic en Nuevo.
Multiplicación a 8 bits
Realiza una operación matemática de multiplicación con registros o valores a 8 bits, utilizando como multiplicador, un valor literal o el valor de un registro. El resultado puede ser guardado en W o en otro registro.
58
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
1. En Multiplicando seleccione entre las opciones un literal o el valor de un Registro. 2. Si seleccionó la opción el valor de un Registro, seleccione de la lista el registro a utilizar como Multiplicando. 3. Repita la operación anterior en Multiplicador. 4. En Resultado, seleccione entre las opciones en el registro W o en otro registro. 5. Si seleccionó la opción en otro registro, seleccione de la lista el registro en donde quiere guardar el resultado de la operación. 6. Haga clic en Ingresar. Si algunos de los registros que desea no existen, haga clic en Nuevo.
Conversión de registros (8 bits) a BCD
Realiza el cálculo de conversión de un número a BCD; es decir, descompone el valor contenido en un registro a unidad, decena y centena.
1. Seleccione el registro que contiene el valor a descomponer. 2. Seleccione los registros donde desea almacenar el resultado de la descomposición a U, D y C. 3. Haga clic en Ingresar. Si algunos de los registros que desea no existen, haga clic en el botón Nuevo.
59
Escalar
La función “Escalar” permite, a partir de un valor dentro de un rango “origen”, calcular el valor proporcional correspondiente a un rango “destino”. Por ejemplo: Los registros “Dato1” y “Dato2” contienen el resultado de una conversión A/D, es decir, un valor a 10 bits entre 0 y 1023. Ahora, suponga que desea controlar el ancho de pulso del PWM a 5000 Hz. El ancho de pulso es controlado por medio de un valor a 10 bits contenido en los registros “AnchoPulso1” y “AnchoPulso2”. A 5000, Hz el rango válido para el control del ancho de pulso está comprendido entre 0 y 200. Partiendo de esto, usted necesita escalar el valor contenido en los registros “Dato1” y “Dato2” de un rango comprendido entre 0 y 1023, al valor proporcional comprendido entre 0 y 200; para, luego, asignarlo a los registros “AnchoPulso1” y “AnchoPulso2”. De esta manera, se obtiene un valor proporcional; es decir, el mismo porcentaje o relación entre el rango de destino con respecto al rango de origen.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
RS232 – Enviar
El protocolo RS232 es utilizado para comunicación con el puerto serial de las computadoras (puertos com). Este módulo le permite enviar datos mediante el protocolo de comunicación RS232, ya sea a otros microcontroladores o a una PC.
60
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Lo primero que debe seleccionar es el dato que desea transmitir. Puede enviar un valor literal o el valor que contiene un registro. Luego, seleccione el pin por el cual desea realizar la transmisión. Por último, seleccione la velocidad de comunicación.
RS232 – Recibir
El protocolo RS232 es utilizado, generalmente, para comunicación con el puerto serial de las computadoras (puertos com). Este módulo le permite recibir datos mediante el protocolo de comunicación RS232 ya sea desde otros microcontroladores o desde una PC.
Seleccione el pin de recepción de los datos, el cual debe estar configurado como entrada. A continuación, debe seleccionar el registro donde guardar el valor dato recibido.
61
Por último, seleccione la velocidad de comunicación.
Tablas
Una tabla consiste en una metodología de programación a través de la cual se pueden realizar consultas, obteniendo un valor de resultado en función de un valor de entrada (índice). Por ejemplo: La siguiente tabla devuelve el código ASCII correspondiente al valor ingresado como índice. Índice 0 1 2 3 4 5 6 7 8 9
Valor Resultado D’48’ D’49’ D’50’ D’51 D’52’ D’53’ D’54’ D’55 D’56’ D’57’
El procedimiento consiste en sumar al registro contador de programa (registro PCL) el valor correspondiente al índice. Esto produce que la ejecución del programa “salte” la cantidad de posiciones correspondiente al valor del índice. Para que la tabla devuelva un valor para cada ítem, la tabla debe estar formada por instrucciones “RETLW” (retorno de subrrutina con un valor en W) y debe ser llamada mediante una instrucción “CALL”. En el siguiente ejemplo en código assembler se describe el principio de funcionamiento de una consulta por tabla.
Crear una nueva tabla
Se incluye un generador de tablas en el cual usted declara la tabla y, luego, la graba como un archivo con extensión TBL. De esta manera, usted puede crear su propia librería de tablas.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
62
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
Para crear una tabla, ingrese al menú Declaración / Generador de tablas / Tabla estándar. Se le muestra la pantalla de “declaración de tablas” y se le solicita que ingrese el nombre de la tabla. Cada tabla debe tener su correspondiente nombre. Una vez ingresado el nombre, debe proceder a ingresar los valores de los distintos “elementos” que componen la tabla. Los valores de los índices se incrementan de manera automática, ya que no debe “saltearse” ninguno de ellos. Para ingresar nuevos elementos a la tabla, presione el botón “Agregar un valor”.
T E N I
Importante: Si detecta que ha cometido un error al ingresar alguno de los valores de la tabla, puede editarlo haciendo doble clic sobre el elemento a corregir. Una vez ingresados todos los valores que conforman la tabla, presione el botón “Ingresar”.
63
Al presionar el botón “Ingresar”, se guarda la tabla actual en un archivo con extensión TBL A continuación, se le solicita que ingrese el nombre del archivo de tabla. De esta manera, podrá utilizar la tabla recién creada en distintos proyectos, sin necesidad de volver a declararla cada vez que la necesite. Consultar una tabla
Carga una tabla, la cual debe haber sido previamente definida.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
1. 2. 3. 4.
Haga clic en Cargar Tabla. Seleccione el archivo de tabla que desea consultar, haga clic en Abrir. Aparecerá una pantalla con el detalle de los datos de la tabla. En Valor a buscar, seleccione el registro que contiene el valor del puntero de la tabla. 5. En Resultado, elija el registro en donde desea guardar el dato devuelto por la tabla. 6. Haga clic en Ingresar.
Tiempos por bucles
Realiza temporizaciones por ciclos desde 10 microsegundos hasta 99 segundos.
1. En Tiempo de espera, escriba el valor de tiempo que desea. 2. Seleccione la unidad de tiempo que desee de la lista. 3. Haga clic en Ingresar.
64
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
Multiplexado
Este módulo permite visualizar valores en displays de 7 segmentos mediante conexión a 7 bits; es decir, sin la utilización de un codificador para generar la combinación binaria correspondiente a cada valor. Le permite utilizar hasta 8 displays conectados en paralelo. El primer paso es seleccionar el tipo de muestra a realizar, el cual puede ser:
1. Valor de un registro: En este caso, le solicita que seleccione el registro a
visualizar y realiza de manera automátca la conversión a BCD1. Además, selecciona de manera automática los valores que serán mostrados en cada display, ubicando las unidades, decenas y las centenas en el orden correspondiente. También le solicita que seleccione el nombre del registro a visualizar. 2. Valores individuales por display: Al seleccionar es tipo de muestra, no realiza de manera automática el cálculo de conversión a BCD 1, sino que debe realizarlo el usuario en un paso previo al bloque de visualización. Mediante esta opción, debe indicar los valores a visualizar en cada uno de los displays. Mediante esta opción, puede visualizar valores a 16 bits, ya que puede realizar la conversión a BCD previamente y, luego, seleccionar los valores correspondientes al resultado de la conversión.
T E N I
Una vez seleccionado el tipo de muestra a realizar, le solicita que seleccione el tipo de display a utilizar, esto es: Ánodo común o Cátodo común.
1
La conversión a BCD consiste en un cálculo matemático para «descomponer» un valor en unidad decena y centena. Es proceso es necesario para poder visualizar un valor en displays de 7 segmentos.
65
Una vez seleccionado el tipo de display a utilizar, le presenta información acerca del estado de los puertos. Esta información es importante a la hora de seleccionar los pines de conexión de los displays. Si algún puerto aún no ha sido configurado, le ofrece la oportunidad de configurarlo. Pero, lo recomendable es cancelar el cuadro de visualización en displays, configurar el puerto en el inicio del programa y volver cargar el módulo de visualización por displays. Luego, le solicita que seleccione la cantidad de displays a utilizar; esto es, entre 2 y 8.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
A continuación, debe seleccionar los valores a visualizar en cada display. En cada display se puede visualizar el valor de un registro o un valor literal. Este paso depende del tipo de muestra que haya seleccionado: 1. Si, previamente, usted ha seleccionado como tipo de muestra la opción “el valor de un registro”, asigna de manera automática los valores correspondientes a cada display, ordenando de derecha a izquierda los valores de unidad, decena y centena. 2. Si, previamente, usted ha seleccionado como tipo de muestra la opción “valores individuales por display”, no asigna los valores correspondientes a cada display. Para esto, debe hacer un doble clic en cada imagen de display.
66
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Al hacer doble clic en la imagen de un display, se presenta la pantalla de “Mostrar un valor en un display”. En un display puede visualizar 2 tipos de valores: 1. Puede visualizar el valor que contiene un registro: Se trata de un valor que puede ser variable. Al seleccionar este tipo de dato a visualizar, le ofrece la posibilidad de codificar el valor mediante una tabla. Si el dato a visualizar requiere codificación mediante tabla, seleccione la tabla.
2. O puede visualizar un valor constante (un valor literal): En este caso, se muestra siempre el mismo valor. Al seleccionar la opción “un valor constante”, presenta una imagen del display en el cual debe hacer un clic en cada barra que quiere visualizar iluminada. De esta forma, puede generar el número o símbolo que desea visualizar. Genera el código binario correspondiente de manera automática. Este código binario varía si se trata de un display tipo ánodo común o cátodo común; controla el código generado según el tipo de display.
67
Una vez ingresados los valores que desea visualizar en cada display, debe seleccionar los pines correspondientes al multiplexado; es decir, los pines a través de los cuales se habilita y se deshabilita cada display en el proceso de multiple xado. Debajo de cada display se encuentra una lista desplegable. En cada una de estas listas seleccione el pin al cual se conecta el común de cada display. Se presentan como opciones válidas sólo los pines de los puertos que se encuentra configurados como salida.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
Una vez seleccionados los pines de habilitación de cada display, le solicita que seleccione los pines correspondientes al bus de datos. En este caso, se trata de 7 pines, uno por cada barra de los display. El criterio de selección de los pines del bus de datos es el mismo que para los pines de habilitación de los displays.
68
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
Una vez seleccionados los pines correspondientes al bus de datos. solicita que ingrese el tiempo de muestreo, es decir, el tiempo que permanece encendido cada display en el proceso de multiplexado. Por defecto, se asigna el valor de 200 uS. En general, no es necesario cambiar este valor. Importante: Cuando seleccione los pines, tanto de habilitación de los displays como los pines del bus de datos, el programa controla que no se repitan los pines seleccionados, dado que esto produciría un error en el proceso de multiplexado. Al repetir alguno de los pines solicitados, se los presenta en color rojo y se deshabilita el botón “Ingresar”.
T E N I
Una vez ingresados todos los parámetros necesarios, puede consultar el esquema de conexionado que se muestra en la solapa “esquema”.
Puede realizar una impresión del esquema de conexionado, haciendo un clic en el botó “Imprimir”. Por último, presione el botón “Ingresar”.
69
Multiplexado (4511)
Este módulo permite visualizar valores en displays de 7 segmentos mediante un codificador CD4511, para generar la combinación binaria correspondiente a cada valor. Una de las ventajas de este tipo de visualización es que sólo se requieren 4 bits para el bus de datos, a diferencia de los 7 bits requeridos para la visualización sin codificador. Le permite utilizar hasta 8 displays conectados en paralelo. El primer paso es seleccionar el tipo de muestra a realizar, el cual puede ser:
1. El valor de un registro: En este caso, le solicita que seleccione el registro a
visualizar y realiza de manera automática la conversión a BCD2. Además, selecciona de manera automática los valores que serán mostrados en cada display, ubicando las unidades, decenas y las centenas en el orden correspondiente. También le solicita que seleccione el nombre del registro a visualizar. 2. Valores individuales por display: Al seleccionar es tipo de muestra, no realiza de manera automática el cálculo de conversión a BCD 2, sino que debe realizarlo el usuario en un paso previo al bloque de visualización. Mediante esta opción, debe indicar los valores a visualizar en cada uno de los displays. Mediante esta opción puede visualizar valores a 16 bits, ya que puede realizar la conversión a BCD previamente y luego seleccionar los valores correspondientes al resultado de la conversión. Una vez seleccionado el tipo de muestra a realizar, le solicita que seleccione el tipo de display a utilizar. En este caso, sólo se pueden utilizar displays tipo cátodo común. Esto se debe a que el codificador CD4511 genera códigos compatibles con este tipo de display.
2
La conversión a BCD consiste en un cálculo matemático para «descomponer» un valor en unidad, decena y centena. Es proceso es necesario para poder visualizar un valor en los displays de 7 segmentos.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
70
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
Una vez seleccionado el tipo de display a utilizar, le presenta información acerca del estado de los puertos. Esta información es importante a la hora de seleccionar los pines de conexión de los displays. Si algún puerto aún no ha sido configurado, le ofrece la oportunidad de configurarlo. Pero, lo recomendable es cancelar el cuadro de visualización en displays, configurar el puerto en el inicio del programa y volver a cargar el módulo de visualización por displays. Luego, le solicita que seleccione la cantidad de displays a utilizar; esto es, entre 2 y 8.
T E N I
A continuación, debe seleccionar los valores a visualizar en cada display. En cada display se puede visualizar el valor de un registro o un valor literal. Este paso depende del tipo de muestra que haya seleccionado: 1. Si, previamente, usted ha seleccionado como tipo de muestra la opción “el valor de un registro”, se asigna de manera automática los valores correspondientes a cada display, ordenando de derecha a izquierda los valores de unidad, decena y centena. 2. Si, previamente, usted ha seleccionado como tipo de muestra la opción “valores individuales por display”, no asigna los valores correspondientes a cada display. Para esto, debe hacer un doble clic en cada imagen de display.
71
Al hacer doble clic en la imagen de un display. se presenta la pantalla de “Mostrar un valor en un display”. Mediante la utilización del codificador CD4511 sólo puede visualizar valores numéricos. Es decir que no puede crear sus propios símbolos, ya que el codificador CD4511 no reconoce dichos códigos. Por esto, sólo puede visualizar el valor que contiene un registro: Este valor puede ser variable y no requiere la codificación mediante tabla, ya que esta tarea la realiza el CD4511. Se le informa acerca de esto en la pantalla.
Una vez ingresados los valores que desea visualizar en cada display, debe seleccionar los pines correspondientes al multiplexado –es decir, los pines a través de los cuales se habilita y se deshabilita cada display en el proceso de multiplexado–. Debajo de cada display se encuentra una lista desplegable. En cada una de estas listas, seleccione el pin al cual se conecta el común de cada display. Se presentan sólo como opciones válidas, los pines de los puertos que se encuentran configurados como salida.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
72
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E /
Una vez seleccionados los pines de habilitación de cada display, le solicita que seleccione los pines correspondientes al bus de datos. En este caso, se trata de 4 pines que son conectados al CD4511. El criterio de selección de los pines del bus de datos es el mismo que para los pines de habilitación de los displays.
T E N I
Una vez seleccionados los pines correspondientes al bus de datos, se solicita que ingrese el tiempo de muestreo, es decir, el tiempo que permanece encendido cada display en el proceso de multiplexado. Por defecto, se asigna el valor de 200 uS. En general, no es necesario cambiar este valor. Importante: Cuando seleccione los pines, tanto de habilitación de los displays como los pines del bus de datos, se controla que no se repitan los pines seleccionados, dado que esto produciría un error en el proceso de multiplexado. Al repetir alguno de los pines solicitados, se los presenta en color rojo y se deshabilita el botón “Ingresar”.
73
Una vez ingresados todos los parámetros necesarios, puede consultar el esquema de conexionado que se muestra en la solapa “esquema”.
Puede realizar una impresión del esquema de conexionado, haciendo un clic en el boto “Imprimir”. Por último, presione el botón “Ingresar”.
Teclado matricial
El módulo de teclado matricial permite capturar el valor de la tecla presionada en un teclado matricial de 3x4 o de 4x4, y lo guarda en un registro. Para ello, utiliza interrupciones por cambio de estado en RB4 a RB7. Se verifica que la interrupción por RB4-7 se encuentre activada. Si la interrupción no se encuentra activada, no se permite en ingreso del módulo. Dado que se utiliza la interrupción por RB4-7, se requiere que los pines correspondientes a las columnas del teclado matricial sean conectados a los pones RB4-7, mientras que se le permite seleccionar libremente la conexión de los pines correspondientes a las filas. Al ingresar a la pantalla de teclado matricial, se le solicita que seleccione el registro donde guardar el valor de la tecla presionada. Luego, se le solicita que seleccione el tipo de teclado matricial que desea conectar. Y, por último, que seleccione los pines correspondientes a las filas del teclado matricial.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
74
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
75
3. Interrupciones En esta categoría se encuentran todas las funciones de configuración y manejo de las interrupciones. La pantalla presenta las interrupciones disponibles, de acuerdo con el modelo de PIC que se está utilizando. Configurar una interrupción
Permite configurar todas las opciones posibles para las interrupciones RB0, TMR0 y Watchdog. En el primer caso, el usuario podrá seleccionar si la interrupción se activa mientras transcurre el flanco descendente o el ascendente; mientras que, para las restantes, podrá seleccionar la tasa de división para el escalado de los tiempos.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
1. Seleccione la interrupción a configurar. Para esto, haga clic sobre las casillas de verificación disponibles para cada caso. 2. Si usted ha seleccionado la opción “Interrup. por RB0”, haga clic en lo botones de opción correspondientes a Interrup. por flanco ascendente o Interrup. por flanco descendente. 3. Si usted ha seleccionado la opción Interrup. por TMR0, seleccione de la lista la Tasa de división y el Origen de la señal de reloj. Haga clic en Ingresar. Finalizar la interrupción
Inserta en el diagrama el símbolo correspondiente a fin de interrupción. Este sólo se podrá insertar en el entorno de interrupción. Si intenta insertarlo en otro entorno, se mostrará un mensaje de error y no se llevará a cabo la inserción del símbolo. Para cargar el símbolo, haga doble clic sobre el menú Fin de interrupción. 4. Rutinas de usuario Usted puede diseñar sus propias funciones o procedimientos para solucionar un problema en particular (siempre combinando distintas rutinas básicas) y, luego, llamarlos desde distintas partes del programa (subrrutinas). Esto le permite, por un lado, la creación de funciones o procedimientos personalizados y, por otro lado, la optimización del código assembler generado, ya que las rutinas de usuario sólo se escriben una vez y, luego, se insertan “llamadas” a ellas. Esta categoría incluye las funciones de declaración e inserción de llamadas a rutinas de usuario.
76
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
77
MENÚS
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
78
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
79
Archivo. Exportar una rutina de usuario Una vez creada una rutina de usuario, se le ofrece la posibilidad de guardarla en un archivo con extensión .RUT, para luego poder utilizarla en otros proyectos. De esta manera, puede crear una librería de rutinas de usuario. Se genera un archivo para cada rutina. Para exportar una rutina de usuario, realice los siguientes pasos: 1. Seleccione el entorno de la rutina de desea. 2. Seleccione el bloque de inicio del entorno (bloque con forma de elipse de color amarillo). 3. Presione el botón derecho del mouse para mostrar el menú contextual y seleccione la opción “Exportar rutina”. 4. Se le solicita el nombre del archivo donde guardar la rutina de usuario. Por defecto se le sugiere el nombre de la rutina de usuario.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
80
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I
81
Archivo. Importar una rutina de usuario Se le permite guardar sus rutinas de usuario en archivos externos para, luego, ser utilizadas en otros proyectos. De esta manera, usted puede generar su propia librería de rutinas o, incluso, intercambiar rutinas con otros usuarios. Para importar una rutina de usuario que se encuentra guardada en un archivo, ingrese al menú “Archivo/Rutina de Usuario” y seleccione el archivo de rutina (*.RUT). Se ingresará la rutina al proyecto actual. Si el modelo de PIC con el cual fue creada la rutina no es el mismo que el modelo actualmente utilizado, se muestra un mensaje de advertencia, ya que, al generar el código assembler , pueden ocurrir errores si la rutina utiliza algún módulo que no existe en el modelo de microcontrolador actualmente utilizado. Por ejemplo, si la rutina fue generada con una versión para 16F87x y realiza una lectura de un canal A/D y, luego, la importa a un proyecto para 16F84, se advierte del posible error.
C I P s e r o d a l o r t n o c o r c i m e d n ó i c a m a r g o r p a r a p o l l o r r a s e d e d o n r o t n E / T E N I