Sistemas con Microprocesadores I

Anuncio
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
Descargar