Sistemas con Microprocesadores I 1 El PIC16F84 Conjunto de instrucciones Cuarto Ejemplo: Ejercicio 4 El display de 7 segmentos Técnica Polling Solución al Ejercicio 4 Comparaciones entre registros Quinto Ejemplo: Ejercicio 5 SUBLW y SUBWF Rebotes en los pulsadores 2 Modos de direccionamiento Clasificación 3 El PIC16F84 Clasificación de las instrucciones Tipos de Direccionamiento 4 Laminillas complementarias Solución Ejercicio 4 Solución Ejercicio 5 Mauricio López V. (Ingenierı́a) Microcontroladores PIC Junio, 2016 1 / 66 El PIC16F84 Conjunto de instrucciones Formato general para instrucciones Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 2 / 66 El PIC16F84 Conjunto de instrucciones Conjunto de instrucciones Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 3 / 66 El PIC16F84 Cuarto Ejemplo: Ejercicio 4 Cuarto Ejemplo Problema: Se desea visualizar en un display de 7 segmentos, conectado al puerto B de un microcontrolador PIC16F84, la cantidad leı́da por las 4 terminales menos significativas del puerto A. Por ejemplo, si en el puerto A se lee “0101”, en el display se visualiza el valor “5”. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 4 / 66 El PIC16F84 Cuarto Ejemplo: Ejercicio 4 Cuarto Ejemplo Para ello: Realizar un programa que lea las 4 terminales menos significativas del puerto A, mediante la técnica de P olling. Utilizar un arreglo de datos tipo tabla para realizar la decodificación binaria a la asignación de segmentos en el display de 7 segmentos. Mostrar el dato decodificado en el display de 7 segmentos. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 5 / 66 El PIC16F84 Cuarto Ejemplo: Ejercicio 4 Cuarto Ejemplo Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 6 / 66 El PIC16F84 Cuarto Ejemplo: Ejercicio 4 Cuarto Ejemplo En este cuarto ejercicio, también se aprenderá: El uso de un display de 7 segmentos. Los tipos de configuración en las terminales de un display de 7 segmentos. La técnica P olling. Por lo que antes de dar solución al problema, primero se analizan los temas: El uso de un display de 7 segmentos. Asignación de las terminales del puerto de salida del microcontrolador con los segmentos del display de 7 segmentos. Construcción de un arreglo de datos tipo tabla para el control del display de 7 segmentos. Técnica P olling. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 7 / 66 El PIC16F84 El display de 7 segmentos El display de 7 segmentos Los datos obtenidos por un microcontrolador por lo general deben presentarse al usuario. La presentación de datos numéricos puede realizarse mediante el uso de display de 7 segmentos. Cada display consta de 7 segmentos y un punto decimal (todos son diodos LED y su activación es igual que el encendido de los diodos LED). Los segmentos son marcados con la letra de la a a la g, más dp. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 8 / 66 El PIC16F84 El display de 7 segmentos El display de 7 segmentos Cada LED debe contar con su resistencia limitadora de corriente. Existen dos configuraciones de display de 7 segmentos, según las terminales que tengan unidos: los de ánodo común y los de cátodo común. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 9 / 66 El PIC16F84 El display de 7 segmentos El display de 7 segmentos Secuencia de salida: a f g b e c d Mauricio López V. (Ingenierı́a) a f g b e c d a f g b e c d a f g b e c a f g b e d Microcontrolador PIC16F84 c d a f g b e c d Junio, 2016 10 / 66 El PIC16F84 El display de 7 segmentos Display de 7 segmentos con asignación de terminales del puerto. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 11 / 66 El PIC16F84 El display de 7 segmentos Display de 7 segmentos con asignación de terminales del puerto. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 12 / 66 El PIC16F84 El display de 7 segmentos Display de 7 segmentos con asignación de terminales del puerto. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 13 / 66 El PIC16F84 El display de 7 segmentos Display de 7 segmentos con asignación de terminales del puerto. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 14 / 66 El PIC16F84 El display de 7 segmentos Display de 7 segmentos usando tablas Mediante el uso de tablas es posible gobernar la información que aparece en un dispaly de 7 segmentos. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 15 / 66 El PIC16F84 Técnica Polling Técnica Polling En la mayorı́a de los proyecto se requiere leer alguna entrada de tipo digital (switch, interruptores, sensores digitales o similares). La técnica de comprobar de manera cı́clica el estado de una entrada se le llama Polling, por sondeo o por encuesta. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 16 / 66 El PIC16F84 Solución al Ejercicio 4 Solución al Ejercicio 4 Para dar solución al problema se lleva a cabo la siguiente metodologı́a: 1. Armar el circuito. 2. Establecer el pseudocódigo del programa principal. 3. Realizar el diagrama de flujo (programa principal). 4. Escribir el programa tomando como base los diagramas de flujo. 5. Grabar el programa en el microcontrolador. 6. Energizar el microcontrolador y verificar la funcionalidad del algoritmo implementado. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 17 / 66 El PIC16F84 Solución al Ejercicio 4 Solución al Ejercicio 4: Pseudocódigo 1 Configuración del microcontrolador. Puerto A como entrada. Puerto B como salida. 2 Lectura del puerto A. 3 Decodificación del dato leı́do. 4 Despliegue del dato decodificado en el display de 7 segmentos. 5 Regreso al paso [2] de lectura del puerto A, generando un proceso cı́clico. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 18 / 66 El PIC16F84 Solución al Ejercicio 4 Diagrama de flujo Diagrama de flujo diagrama Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 19 / 66 El PIC16F84 Solución al Ejercicio 4 Configuración de lı́neas de los puertos inicio BSF MOVLW MOVWF MOVLW MOVWF STATUS, RP0 0x00 TRISB 0x0F TRISA inicio BSF CLRF MOVLW MOVWF STATUS, RP0 TRISB B'00001111' TRISA inicio banco1 CLRF MOVLW MOVWF Mauricio López V. (Ingenierı́a) TRISB B'00001111' TRISA Microcontrolador PIC16F84 Junio, 2016 20 / 66 El PIC16F84 Solución al Ejercicio 4 Tabla para decodificar el dato leı́do ;------------------------------------------------------------------------------; Tabla de la secuencia a desplegar. ; Subrutina: tabla ;------------------------------------------------------------------------------tabla ADDWF PCL, F ; PCL <-- W + PCL RETLW B'00111111' ; '3F', correspondiente a "0" RETLW B'00000110' ; '06', correspondiente a "1" RETLW B'01011011' ; '5B', correspondiente a "2" RETLW B'01001111' ; '4F', correspondiente a "3" RETLW B'01100110' ; '66', correspondiente a "4" RETLW B'01101101' ; '6D', correspondiente a "5" RETLW B'01111101' ; '7D', correspondiente a "6" RETLW B'00000111' ; '07', correspondiente a 7" RETLW B'01111111' ; '7F', correspondiente a "8" RETLW B'01101111' ; '6F', correspondiente a "9" RETLW B'01110111' ; '77', correspondiente a "A" RETLW B'01111100' ; '7C', correspondiente a "b" RETLW B'00111001' ; '39', correspondiente a "C" RETLW B'01011110' ; '5E', correspondiente a "d" RETLW B'01111001' ; '79', correspondiente a "E" RETLW B'01110001' ; '71', correspondiente a "F" Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 21 / 66 El PIC16F84 Solución al Ejercicio 4 Código para complementar la salida CALL MOVWF COMF MOVWF tbla_num temp temp, W PORTB Mauricio López V. (Ingenierı́a) ; Tabla decodificadora. ; Salva valor de tabla en registro temporal. ; Complementa el registro. ; Manda dato a display de 7 segmentos. Microcontrolador PIC16F84 Junio, 2016 22 / 66 El PIC16F84 Comparaciones entre registros Comparando que un registro sea mayor o menor que otro Este proceso se lleva a cabo al realizar una resta de los registros a comparar. Siendo A y B dos registros cualesquiera y haciendo la operación (A − B) se tiene: Operación (A-B) A>B A<B A=B Mauricio López V. (Ingenierı́a) Resultado Positivo Negativo Cero Bits de Carry y Zero C=1 y Z=0 C=0 y Z=0 C=1 y Z=1 Microcontrolador PIC16F84 Junio, 2016 23 / 66 El PIC16F84 Quinto Ejemplo: Ejercicio 5 Quinto Ejemplo Problema: Establezca un valor como referencia y úselo para comparar éste con la entrada proporcionada por los cuatro bit menos significativos del puerto A, el resultado de la comparación muéstrelo en un display de 7 segmentos con los siguientes criterios: Si el dato de entrada es mayor a su referencia sigua la siguiente secuencia en el display de 7 segmentos: a f g b e c a f g b e d a f g b e c d a f g b e c d c a f g b e c d d Si el dato de entrada es menor a su referencia sigua la siguiente secuencia en el display de 7 segmentos: a f g b e c a f g b e d a f g b e c d a f g b e c d c a f g b e c d d Si el dato de entrada es igual a su referencia sigua la siguiente secuencia en el display de 7 segmentos: a f g b e c d a f g b e c d Mauricio López V. (Ingenierı́a) a f g b e c d a f g b e c d a f g b e c d a f g b e c d Microcontrolador PIC16F84 a f g b e c d a f g b e c d a f g b e c d Junio, 2016 24 / 66 El PIC16F84 Quinto Ejemplo: Ejercicio 5 Ejemplo 5: Diagrama de conexiones Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 25 / 66 El PIC16F84 Quinto Ejemplo: Ejercicio 5 Solución al Ejercicio 5: Pseudocódigo 1 Configuración del microcontrolador. Puerto A como entrada. Puerto B como salida. 2 Se establece el valor de referencia. 3 Lectura del puerto A. 4 Compara la lectura del dato del puerto A con el valor de referencia. 4 Si dato mayor a la referencia genera la secuencia correspondiente. 5 Si dato menor a la referencia genera la secuencia correspondiente. 6 Si dato igual a la referencia genera la secuencia correspondiente. 7 Regreso al paso [3] de lectura del puerto A, generando un proceso cı́clico. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 26 / 66 El PIC16F84 Quinto Ejemplo: Ejercicio 5 Solución al Ejercicio 5: Diagramas de flujo Diagrama de flujo diagrama Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 27 / 66 El PIC16F84 SUBLW y SUBWF Instrucción SUBLW Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 28 / 66 El PIC16F84 SUBLW y SUBWF Instrucción SUBLW Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 29 / 66 El PIC16F84 SUBLW y SUBWF Instrucción SUBLW Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 30 / 66 El PIC16F84 SUBLW y SUBWF Instrucción SUBWF Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 31 / 66 El PIC16F84 SUBLW y SUBWF Instrucción SUBWF Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 32 / 66 El PIC16F84 SUBLW y SUBWF Instrucción SUBWF Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 33 / 66 El PIC16F84 Rebotes en los pulsadores Rebotes en los pulsadores El comportamiento de los microcontroladores dependen a menudo de la actuación de sus entradas. Entre los dispositivo más usuales que generan una entrada binaria se encuentran los interruptores (switches), pulsadores (push-buttons) y los teclados matriciales de tecla. Los pulsadores se pueden encuadrar en dos grupos - Los normalmente abiertos (NA), que producen el cierre de los contactos cuando se presionan, y - Los normalmente cerrado (NC), que abren los contactos al presionarse. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 34 / 66 El PIC16F84 Rebotes en los pulsadores Rebotes en los pulsadores Señal producida por el pulsador: Cuando no se actúa sobre le pulsador la tensión en el punto de salida es + 5V. Cuando el pulsador es presionado los contactos se cierran y la tensión en el punto de salida es 0V. Ejemplo de pulsador normalmente abierto Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 35 / 66 El PIC16F84 Rebotes en los pulsadores Rebotes en los pulsadores Un problema común con interruptores mecánicos es que la forma de onda de la señal de salida aparece con una serie de rebotes (unos cuantos micro − o milisegundos). De manera que cuando el pulsador se presiona, el circuito responderá como si fuesen aplicadas señales múltiples. Estos rebotes se pueden eliminar utilizando circuitos o añadiendo un pequeño retardo en el programa cada vez que se detecta un cambio de posición en el pulsador. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 36 / 66 El PIC16F84 Rebotes en los pulsadores Rebotes en los pulsadores El problema de rebotes se puede solucionar fácilmente conectando un circuito RC para suprimir los cambios rápidos de voltaje. Ya que el intervalo de los rebotes no está definido, los valores de las componentes no se pueden determinar con precisión. En la mayorı́a de los casos se recomienda usar los valores mostrados Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 37 / 66 El PIC16F84 Rebotes en los pulsadores Rebotes en los pulsadores Si se desea una completa estabilidad se puede incluir un circuito flip-flop RS, éste cambiara su estado lógico solo después de detectar al primer pulso. Esta solución es más cara, pero el problema es definitivamente solucionado. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 38 / 66 El PIC16F84 Rebotes en los pulsadores Rebotes en los pulsadores Además de estas soluciones de hardware, hay también una solución de software. Cuando un programa encuesta el estado de algún pin de entrada y detecta algún cambio, la verificación se deberı́a llevar a cabo después de un cierto tiempo. Si el programa confirma el cambio, esto significa que un switch/push-button ha cambiado su posición. Las ventajas de este tipo de solución es que no hay que invertir en hardware. Ejemplo: #DEFINE pulsador PORTA, 4 espera BTFSC GOTO CALL BTFSC GOTO Mauricio López V. (Ingenierı́a) pulsador espera ret_20ms pulsador espera Microcontrolador PIC16F84 Junio, 2016 39 / 66 Modos de direccionamiento Clasificación Modos de direccionamiento Las operaciones deben de obtener sus operandos, ya sea de los registros o de la memoria. Para acceder a estos operandos se precisa especificar un modo de obtenerlos. Los procesadores permiten especificar la posición de un operando de múltiples maneras. Definición: Modo de Direccionamiento: Dado uno o varios campos de la instrucción, calcula la dirección efectiva (EA) de un operando. La Dirección Efectiva no tiene por qué ser una dirección en memoria. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 40 / 66 Modos de direccionamiento Clasificación Modos de direccionamiento Un modo de direccionamiento especifica la forma de calcular la dirección de memoria de datos de un operando mediante el uso de la información contenida en registros y/o constantes, contenida dentro de una instrucción. Cada procesador implementa un subconjunto de formas posibles. Por lo que se tienen muchas variaciones en cuanto al número de modos de direccionamiento que ofrecen desde el hardware. La mayorı́a de las arquitecturas RISC disponen de apenas cinco modos de direccionamiento simple. Por lo general estos modos de direccionamiento van codificados directamente dentro de la propia instrucción. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 41 / 66 Modos de direccionamiento Clasificación Tipos de Direccionamiento Inmediato Es aquella en que el dato manipulado por la instrucción se codifica junto con ella. Una instrucción de modo inmediato tiene un campo de operando en vez de un campo de dirección. El campo del operando contiene el operando actual que se debe utilizar en conjunto con la operación especificada en la instrucción. Las instrucciones de modo inmediato son útiles para inicializar los registros en un valor constante. Ejemplo: MOVLW K K es cualquier valor de 8 bits. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 42 / 66 Modos de direccionamiento Clasificación Tipos de Direccionamiento Directo Consiste en codificar el nombre del registro en cuestión directamente en la instrucción. Ejemplo: MOVWF f , desplaza el contenido de W al registro f . El registro f se referencia mediante su número codificado en 7 bits. Este ≪número≫ es en realidad la dirección del byte de la RAM correspondiente. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 43 / 66 Modos de direccionamiento Clasificación Tipos de Direccionamiento Indirecto El campo de operando contiene una dirección de memoria, en la que se encuentra la dirección del operando. La idea del direccionamiento indirecto es que la dirección de memoria del registro al que se quiere acceder se introduce en otro registro. El direccionamiento indirecto permite crear rutinas generales que no usen registros especı́ficos. La dirección de dichos registros se asignarán antes de entrar en la rutina. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 44 / 66 El PIC16F84 Clasificación de las instrucciones Clasificación de instrucciones Instrucciones aritméticas Instrucciones lógicas ADDWF f, d ANDWF f, d SUBWF f, d IORWF f, d INCF f, d XOR f, d COMF f, d ANDLW f, d RLF f, d IORLW f, d RRF f, d XORLW f, d Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 45 / 66 El PIC16F84 Clasificación de las instrucciones Clasificación de instrucciones Instrucciones de salto Instrucciones para la manipulación de bits CALL k RETLW k BCF f, d GOTO k BSF f, d DECFSZ f, d BTFSC f, d INCFZ f, d BTFSS f, d Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 46 / 66 El PIC16F84 Clasificación de las instrucciones Clasificación de instrucciones Instrucciones de puesta a cero Instrucciones especiales CLRF NOP CLRW SLEPP CLRWDT Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 47 / 66 El PIC16F84 Tipos de Direccionamiento Tipos de Direccionamiento Las instrucciones del microcontrolador de la familia 16 pueden especificar los datos u operandos mediante cinco modos de direccionamiento: Direccionamiento Inmediato. El valor del dato inmediato (su valor literal ) lo contienen el mismo código de operación que, en la ejecución de la instrucción, se carga en le registro W para su posterior procesamiento. Ejemplos: - MOVLW <valor constante> - IORLW <valor constante> Direccionamiento Directo. La dirección de la memoria RAM se encuentra en el mismo código de operación. Ejemplos: - MOVWF TMR0 - ADDWF <variable (Nombre de un registro de usuario)> Es el método más utilizado (acceso a la memoria de datos SRAM). Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 48 / 66 El PIC16F84 Tipos de Direccionamiento Direccionamiento directo Para seleccionar el banco al que se desea acceder en la RAM se emplean los bits 6 y 5, del Registro de Estados, STATUS<6:5>, denominados RP1 y RP0, respectivamente. Ası́, la dirección dentro del banco la determinan los 7 bits menos significativos procedentes de la instrucción (que es la dirección del byte de la RAM correspondiente). Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 49 / 66 El PIC16F84 Tipos de Direccionamiento Tipos de Direccionamiento Direccionamiento de Bit. Procesa datos de un bit. La dirección del dato es un bit. Ejemplo: - BCF STATUS, RP0 Direccionamiento Indexado. Utilizado para el manejo de tablas mediante la instrucción: ADDWF PLC, F Direccionamiento Indirecto. La dirección del dato se encuentra contenida en el registro INDF. Cada vez que se hace referencia a éste, se utiliza el contenido del registro FSR (File Select register ) para direccionar al operando. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 50 / 66 El PIC16F84 Tipos de Direccionamiento Direccionamiento indirecto Emplea los registros INDF (posición 00h de la memoria de datos) y el registro FSR (File Select Register ; posición 04h de la memoria de datos) o registro de selección de registro, en el que se introduce el número de registro direccionado. La dirección de la memoria del registro al que se quiere acceder se introduce en el registro FSR. Es decir, el registro FSR sirve como puntero para el direccionamiento indirecto. Los 7 bits menos significativos de FSR seleccionan la posición y el bit más significativo, junto con el bit IRP (Register Bank Select) del registro STATUS<7> selecciona el banco. Este tipo de direccionamiento permite acceder a 128 direcciones. El direccionamiento indirecto es el más potente. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 51 / 66 El PIC16F84 Tipos de Direccionamiento Direccionamiento indirecto Los 7 bits menos significativos de FSR seleccionan la posición y el bit más significativo, junto con el bit IRP selecciona el banco. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 52 / 66 El PIC16F84 Tipos de Direccionamiento Direccionamiento indirecto Cuando se quiere operar sobre el registro cuya dirección de memoria está almacenada en FSR, se usará el registro INDF (ejemplo, MOVWF INDF). INDF no está implementado fı́sicamente, en realidad se estará operando con la dirección a la que apunte el contenido de FSR. El direccionamiento indirecto permite al programador crear rutinas generales que no usen registros especı́ficos. Las direcciones de dichos registros se asignarán antes de entrar a la rutina. La notación MOVWF INDF, desplaza el contenido del registro de trabajo W al registro apuntado por FSR. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 53 / 66 El PIC16F84 Tipos de Direccionamiento Direccionamiento indirecto. Ejemplo: Si el FSR contiene el valor de 23h una instrucción que opere sobre INDF, opera en realidad sobre la dirección 23h. Se puede decir, que la posición 23h de memoria fue direccionada en forma indirecta a través del puntero FSR. Si FSR = 23h, la instrucción MOVWF INDF carga el contenido del registro W en la dirección 23h de la RAM. si FSR = 23h, la instrucción MOVF INDF, W carga el contenido de la dirección 23h de la RAM en el registro de trabajo W. El direccionamiento indirecto es muy útil para el procesamiento de posiciones consecutiva de memoria RAM de datos. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 54 / 66 El PIC16F84 Tipos de Direccionamiento Direccionamiento indirecto. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 55 / 66 El PIC16F84 Tipos de Direccionamiento Direccionamiento indirecto: Limpiando sección de memoria de datos El direccionamiento indirecto es muy útil para el procesamiento de posiciones consecutiva de memoria RAM de datos. Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 56 / 66 El PIC16F84 Tipos de Direccionamiento Direccionamiento de datos Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 57 / 66 El PIC16F84 Tipos de Direccionamiento Direccionamiento de datos Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 58 / 66 Laminillas complementarias Laminillas complementarias Laminillas complementarias Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 59 / 66 Laminillas complementarias Solución Ejercicio 4 Solución al Ejercicio 4: Diagrama de flujo INICIO Inicialización Configuración del microcontrolador. Puerto B como de salida y puerto A como de entrada. Configuración del PIC (puertos) W <-- PORTA .AND. H'0F' tbl_num PORTB <-- W Lectura del dato presente en el puerto A. Decodificación del dato leído. Despliegue del dato decodificado en el display de 7 segmentos. código Mauricio López V. (Ingenierı́a) return Microcontrolador PIC16F84 Junio, 2016 60 / 66 Laminillas complementarias Solución Ejercicio 4 Solución al Ejercicio 4: Diagrama de flujo con código INICIO Inicialización #include<P16f84a.inc> ; Definicion de los SFR y sus bits. #include<macros.asm> ; Declaracion de macros. BCF ESTADO, RP0 ; banco 0. CLRF PORTB; Limpia puerto B. CLRF PORTA; Limpia puerto A. BSF ESTADO, RP0 ; banco 1. CLRF TRISB ; Todas salida. MOVLW H'0F' MOVWF TRISA ; Todas entrada. BCF ESTADO, RP0 ; banco 0. Configuración del PIC (puertos) W <-- PORTA .AND. H'0F' tbl_num PORTB <-- W MOVF ANDLW PORTA, W H'0F' ; Lectura del puerto A. ; Mascara detecta numero. CALL tbl_num ; Tabla decodificadora. MOVWF GOTO PORTB desply1 ; Manda dato a PORTB. ; Se repite la secuencia. return Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 61 / 66 Laminillas complementarias Solución Ejercicio 5 Solución al Ejercicio 5: Diagrama de flujo val_ref INICIO Configuración del PIC (puertos) Inicialización EQU D'10' ; Valor de referencia. #include<P16f84a.inc> ; Definicion de los SFR y sus bits. #include<macros.asm> ; Declaracion de macros. BCF ESTADO, RP0 ; banco 0. CLRF PORTB; Limpia puerto B. CLRF PORTA; Limpia puerto A. BSF ESTADO, RP0 ; banco 1. CLRF TRISB ; Todas salida. MOVLW H'0F' MOVWF TRISA ; Todas entrada. BCF ESTADO, RP0 ; banco 0. 1 W <-- PORTB .AND. H'0F' desply1 MOVF ANDLW PORTA, W H'0F' ; Lectura del puerto A. ; Mascara detecta numero. val_ref STATUS, C res_neg . . ; Resta W de referncia. ; C = 1, positivo o iguales. ; C = 0, negativo. sec_neg desply1 ; Lo leido mayor a referen. STATUS, Z res_pos . . ; Si Z = 1, iguales. ; Z = 0, positivo. res_pos CALL GOTO sec_pos desply1 ; Lo leido mayor a referen. CALL GOTO sec_igu desply1 ; Lo leido igual a referencia. SUBLW BTFSS GOTO sec_neg SI val_ref < W res_neg CALL GOTO NO 1 BTFSS GOTO sec_pos SI val_ref > W NO 1 sec_igu 1 Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 62 / 66 Laminillas complementarias Solución Ejercicio 5 Solución al Ejercicio 5: Diagrama de flujo sec_neg 2 cuenta <-- H'04' MOVLW MOVWF 0x04 cuenta offset <-- H'00' CLRF offset offset <-- offset + 1 INCF offset, F DECFSZ GOTO cuenta, F loop1 cuenta <-- cuenta - 1 3 W <-- offset MOVF offset, W 3 tbl_up PORTB <-- W ret60ms CALL tbl_up MOVWF COMF MOVWF tem temp, W PORTB CALL ret60ms NO cuenta = 0 SI Fin RETURN 2 Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 63 / 66 Laminillas complementarias Solución Ejercicio 5 Solución al Ejercicio 5: Diagrama de flujo sec_pos 4 cuenta <-- H'04' MOVLW MOVWF 0x04 cuenta offset <-- H'00' CLRF offset offset <-- offset + 1 INCF offset, F DECFSZ GOTO cuenta, F loop2 cuenta <-- cuenta - 1 5 W <-- offset MOVF offset, W 5 tbl_down PORTB <-- W ret60ms CALL tbl_down MOVWF COMF MOVWF tem temp, W PORTB CALL ret60ms NO cuenta = 0 SI Fin RETURN 4 Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 64 / 66 Laminillas complementarias Solución Ejercicio 5 Solución al Ejercicio 5: Diagrama de flujo sec_igu 6 cuenta <-- H'08' MOVLW MOVWF 0x08 cuenta offset <-- H'00' CLRF offset offset <-- offset + 1 INCF offset, F DECFSZ GOTO cuenta, F loop3 cuenta <-- cuenta - 1 7 W <-- offset MOVF offset, W 7 tbl_igual PORTB <-- W ret60ms CALL tbl_igual MOVWF COMF MOVWF tem temp, W PORTB CALL ret60ms NO cuenta = 0 SI Fin RETURN 6 Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 65 / 66 Laminillas complementarias Solución Ejercicio 5 Solución al Ejercicio 5: tablas tbl_down ADDWFPCL, F RETLW b'00000100' RETLW b'00001000' RETLW b'00010000' RETLW b'01000000' ; PCL <-- w + PCL ; Prende LED: c. ; Prende LED: d. ; Prende LED: e. ; Prende LED: g. tbl_up ADDWFPCL, F RETLW b'00000001' RETLW b'00000010' RETLW b'01000000' RETLW b'00100000' ; PCL <-- w + PCL ; Prende LED: a. ; Prende LED: b. ; Prende LED: g. ; Prende LED: f. tbl_igual ADDWFPCL, F RETLW b'00000001' RETLW b'00000010' RETLW b'01000000' RETLW b'00010000' RETLW b'00001000' RETLW b'00000100' RETLW b'01000000' RETLW b'00100000' ; PCL <-- w + PCL ; Prende LED: a. ; Prende LED: b. ; Prende LED: g. ; Prende LED: e. ; Prende LED: d. ; Prende LED: c. ; Prende LED: g. ; Prende LED: f. return Mauricio López V. (Ingenierı́a) Microcontrolador PIC16F84 Junio, 2016 66 / 66