Sistemas con Microprocesadores I

Anuncio
Sistemas con Microprocesadores I
1
2
El PIC16F84
Registros relacionados con los puertos
Segundo Ejemplo: Ejercicio 2
Grabando el primer Programa
Instrucción: CLRF, BCF y BSF
Directivas: END, EQU y ORG
Directivas: INCLUDE y CONFIG
Directiva: IF y ENDIF
Registro de Estados
Macros
Contador de Programa
Arquitectura interna del PIC16F84
Tablas
Instrucción: RETLW
Tercer Ejemplo: Ejercicio 3
Instrucción: RETLW
Formas de distribuir el código del programa
Constantes numéricas y alfanuméricas
Subrutinas anidadas
Pila
Laminillas complementarias
Mauricio López V. (Ingenierı́a)
Microcontroladores PIC
Mayo, 2015
1 / 84
El PIC16F84
Registros relacionados con los puertos
Puertos
Un puerto permite que el microcontrolador se comunique con los periféricos.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
2 / 84
El PIC16F84
Registros relacionados con los puertos
Registros relacionados con los puertos
PORTA (en el Banco 0). Puerto de entrada/salida de 5 bits (RA4:RA0). El
puerto A puede leerse o escribirse como se tratara de un registro cualquiera. El
registro que controla el sentido (entrada o salida) de sus pines se llama TRISA
(en el Banco 1).
PORTB (en el Banco 0). Puerto de entrada/salida de 8 bits (RB7:RB0). El
puerto B puede leerse o escribirse como se tratara de un registro cualquiera. El
registro que controla el sentido (entrada o salida) de sus pines se llama TRISB
(en el Banco 1).
TRISA (en el Banco 1). Registro de configuración de las lı́neas del Puerto A.
Registro de control para el Puerto A. Un “0” en el bit correspondiente al pin lo
configura como salida, mientras que un “1” lo hace como entrada.
TRISB (en el Banco 1). Registro de configuración de las lı́neas del Puerto B.
Registro de control para el Puerto B. Un “0” en el bit correspondiente al pin lo
configura como salida, mientras que un “1” lo hace como entrada.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
3 / 84
El PIC16F84
Registros relacionados con los puertos
Ubicación
return
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
4 / 84
El PIC16F84
Registros relacionados con los puertos
Función del TRIS y del PORT
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
5 / 84
El PIC16F84
Segundo Ejemplo: Ejercicio 2
Segundo Ejemplo
Ejercicio 2 : Utilizar un microcontrolador PIC16F84 para desplegar secuencias de
luces en un arreglo de ocho LED, para simular luces intermitentes.
Para ello:
En las 8 terminales del puerto B del microcontrolador conectar los LED.
Realizar un programa que muestre, en los LED del puerto B, la siguiente
secuencia de luces.
RB7RB6RB5RB4RB3RB2RB1RB0
1
0
1
0
1
0
1
0
0
1
0
1
0
1
0
1
Esperar 2 segundos entre cambio de desplegado de luces.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
6 / 84
El PIC16F84
Segundo Ejemplo: Ejercicio 2
Diagrama de conexión con un PIC16F84 (8 luces)
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
7 / 84
El PIC16F84
Segundo Ejemplo: Ejercicio 2
Diagrama de fuente de alimentación
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
8 / 84
El PIC16F84
Segundo Ejemplo: Ejercicio 2
Segundo Ejemplo
En este segundo ejercicio, también se aprenderá:
El conjunto de instrucciones del lenguaje ensamblador utilizados en la solución
del ejercicio.
MOVLW
MOVWF
CLRF
DECFSZ
BSF
BCF
GOTO
CALL
RETURN
TRISB
PORTB
El uso de Directivas (EN D, EQU , ORG, IN CLU DE, CON F IG, IF y
EN DIF ) y configuración de los fusibles.
El uso de Macros.
El uso y configuración de los puertos (TRIS y PORT).
El uso de rutinas de retardo.
Identificar las banderas del Registro de Estados (STATUS).
Cómo grabar un programa.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
9 / 84
El PIC16F84
Segundo Ejemplo: Ejercicio 2
Solución al Ejercicio 2
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. Establecer el pseudocódigo de la(s) rutina(s) de retardo.
4. Realizar los diagramas de flujo (programa principal y de retardo).
5. Escribir el programa tomando como base los diagramas de flujo.
6. Comprobar el funcionamiento del algoritmo utilizando las herramientas de
simulación.
7. Grabar el programa en el microcontrolador.
8. Energizar el microcontrolador y verificar la funcionalidad del algoritmo
implementado.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
10 / 84
El PIC16F84
Segundo Ejemplo: Ejercicio 2
Solución al Ejercicio 2: Pseudocódigo del programa principal
1. Configurar el PIC
2. Mostrar la primera secuencia de luces en el puerto B (’10101010’).
3. Esperar a que el usuario visualice la secuencia. Retado de tiempo de 2 seg.
4. Mostrar la segunda secuencia de luces en el puerto B (’01010101’).
5. Esperar a que el usuario visualice la secuencia. Retado de tiempo de 2 seg.
6. Regresar al punto 2
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
11 / 84
El PIC16F84
Segundo Ejemplo: Ejercicio 2
Solución al Ejercicio 2: Pseudocódigo del retardo de 2 seg.
1. Inicializar el registro contador de retardo, que controla la repetición del bucle
(con valor 100).
2. Esperar un tiempo de 20 mseg.
3. Decrementar el contador de retardo, que controla la repetición del bucle.
4. Si el contador de retardo es cero
Entonces
Ha terminado el tiempo de retardo y salir de la subrutina.
Otro caso
Regresar al punto 2.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
12 / 84
El PIC16F84
Segundo Ejemplo: Ejercicio 2
Solución al Ejercicio 2: Pseudocódigo del retardo de 20 mseg.
1. Inicializar el registro contador de retardo, que controla la repetición del bucle no
anidado (con valor 40).
2. Inicializar el registro contador de retardo, que controla la repetición del bucle
anidado (con valor 100).
3. Esperar dos ciclos de instrucción. Estos dos ciclos de instrucción se repiten 100
veces en el bucle anidado.
4. Decrementar el contador de retardo que controla la repetición del bucle anidado.
5. Si el contador que controla la repetición del bucle anidado es cero
Entonces
Otro caso
Pasar al punto 6
Regresar al punto 3
6. Decrementar el contador de retardo que controla la repetición del bucle no
anidado.
7. Si el contador que controla la repetición del bucle no anidado es cero
Entonces
Otro caso
Ha terminado el tiempo de retardo y salir de la subrutina.
Regresar al punto 2.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
13 / 84
El PIC16F84
Segundo Ejemplo: Ejercicio 2
Diagrama de flujo del programa principal
INICIO
Configuración del
PIC (puertos)
PORTB <-- B'10101010'
rt2seg
PORTB <-- B'01010101'
rt2seg
Configuración del microcontrolador.
Las terminales del Puerto B configurados como de salida.
Manda al puerto B el dato B'10101010'.
Se mantiene ocioso un tiempo aproximado de 2 segundos, para
permitir al usuario que visualice el desplegado en los LED.
Manda al puerto B el dato B'01010101'.
Se mantiene ocioso un tiempo aproximado de 2 segundos, para
permitir al usuario que visualice el desplegado en los LED.
código
Mauricio López V. (Ingenierı́a)
banck
Microcontrolador PIC16F84
Mayo, 2015
14 / 84
El PIC16F84
Segundo Ejemplo: Ejercicio 2
Diagrama de flujo de retardo de 20 milisegundos
ret20ms
V1_20ms
V2_20ms
EQU
EQU
D'100' ; Valor del Loop interior.
D'40' ; Valor del Loop exterior.
RLe20ms <-- V2_20ms
Inicializa el primer registro contador de retardo.
RLi20ms <-- V1_20ms
Inicializa el segundo registro contador de retardo.
2 NOP
RLi20ms <-- RLi20ms - 1
NO
RLi20ms
= 00?
Ejecuta dos instrucciones.
Decrementa segundo contador de retardo.
¿ Terminó este lazo ?
| NO. Ejecuta una nuevo ciclo de este lazo.
SI
RLe20ms <-- RLe20ms - 1
NO
RLe20ms
= 00?
Decrementa primer contador de retardo.
¿ Terminó este lazo ?
| NO. Ejecuta una nuevo ciclo de este lazo.
SI
SALIR
Mauricio López V. (Ingenierı́a)
Fin de la subrutina.
Microcontrolador PIC16F84
código
Mayo, 2015
15 / 84
El PIC16F84
Segundo Ejemplo: Ejercicio 2
Listado de la rutina de retardo de 20 milisegundos
;------------------------------------------------------------------; Procedimiento que genera un retardo de aproximadamente 20mseg.
; Ejemplo de diseño
; Delay_time = [([([(Vl1_20ms*5)-1]+5)*Vl2_20ms]-1)+2+2+2]*Cycle_time
;
; i.e. (4MHz crystal) con Vl1_4ms = D'100' y Vl2_4ms = D'40'.
; Delay_time = ([([(100 * 5) - 1] + 5) * 40] - 1 + 2 + 2 + 2) * 1useg
;
= ([(499 + 5) * 40] + 5 ) * 1useg
;
= 20,165useg = 20.165mseg
; Subrutina: ret20ms.
;------------------------------------------------------------------; Retardo de 20mseg.
rt20ms MOVLW
V2_20ms
; Inicialización del contador que controla el
MOVWF
RLe20ms
; anidamiento externo para el conteo de 20 mseg.
loplon2 MOVLW
V1_20ms
; Inicialización del contador que controla el
MOVWF
RLi20ms
; anidamiento interno para el conteo de 20 mseg.
lopshr2 NOP
; Invierte un ciclo de máquina.
NOP
; Invierte un ciclo de máquina.
DECFSZ
RLi20ms, F
; ¿ Ya terminó el conteo del anidamiento interno ?
GOTO
lopshr2
; No. Continúa el conteo.
DECFSZ
RLe20ms, F ; ¿ Ya terminó de contar el intervalo de tiempo de 20 milisegundos ?
GOTO
loplon2
; No. Continúa el conteo.
RETURN
; Termina la rutina de retardo de 20 mseg.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
16 / 84
El PIC16F84
Segundo Ejemplo: Ejercicio 2
Diagrama de flujo de retardo de 2 segundos
rt2sec
R_2seg <-- Vr2seg
Vr2seg
EQU
D'100' ; Valor para generar retardo de 2seg.
Decrementa contador de retardo.
ret20ms
Llama a la rutina que espera 20,165 ciclos.
R_2seg <-- R_2seg - 1
Decrementa segundo contador de retardo.
NO
R_2seg
= 00?
¿ Terminó de ejecutar el lazo ?
| NO. Ejecuta una nuevo ciclo de este lazo.
SI
SALIR
Fin de la subrutina.
código
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
17 / 84
El PIC16F84
Segundo Ejemplo: Ejercicio 2
Listado de la rutina de retardo de 2 segundos
;---------------------------------------------------; Procedimiento que genera un retardo de aproximadamente 2 seg.
; Ejemplo de diseño
; Delay_time = [(Vr2seg * 20,168) - 1 + 2 + 2 + 2] * Cycle_time
;
; i.e. (4MHz crystal) con Val20ms = D'100'.
; Delay_time = [(100 * 20,168) + 5] * 1useg
;
= 2.016,805 seg
; Subrutina: rt2seg.
;------------------------------------------------------------------; Retardo de 2 seg.
rt2seg MOVLW
Vr2seg
; Inicialización del contador que
MOVWF
R_2seg
; controla el tiempo de retardo de 2 seg.
lp2sec CALL
rt20ms
; Llama a la rutina de retardo de 20 mseg.
DECFSZ
R_2seg, F
; ¿ Ya terminó de contar el intervalo de tiempo de 2 segundos ?
GOTO
lp2sec
; No. Continúa el conteo.
RETURN
; Termina la rutina de retardo de 2 seg.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
18 / 84
El PIC16F84
Grabando el primer Programa
Grabando el primer Programa
Uso del MPLAB IDE para simular y grabar el programa.
Generar un proyecto.
Seleccionar dispositivo PIC16F84.
Visualizar registros de funciones especiales y de usuario.
Visualizar el Reloj de paro (StopWatch).
Compilar el Programa.
Grabar el PIC y probar su funcionalidad en una tarjeta de experimentación.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
19 / 84
El PIC16F84
Grabando el primer Programa
Proceso de grabación
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
20 / 84
El PIC16F84
Grabando el primer Programa
Proceso de grabación
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
21 / 84
El PIC16F84
Grabando el primer Programa
Proceso de grabación
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
22 / 84
El PIC16F84
Grabando el primer Programa
Proceso de grabación
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
23 / 84
El PIC16F84
Grabando el primer Programa
Proceso de grabación
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
24 / 84
El PIC16F84
Grabando el primer Programa
Proceso de grabación
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
25 / 84
El PIC16F84
Instrucción: CLRF, BCF y BSF
Instrucción: CLRF
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
26 / 84
El PIC16F84
Instrucción: CLRF, BCF y BSF
Instrucción: BCF
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
27 / 84
El PIC16F84
Instrucción: CLRF, BCF y BSF
Instrucción: BSF
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
28 / 84
El PIC16F84
Directivas: END, EQU y ORG
Directivas
Son comandos insertados en el programa.
Son usados para controlar el proceso de ensamblado.
No son parte del repertorio de instrucciones.
Suelen escribirse en la segunda columna y en mayúsculas.
Se tienen más de 50 directivas. Se explican en el menú help y son
proporcionados por Microchip en su página Web.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
29 / 84
El PIC16F84
Directivas: END, EQU y ORG
Directivas EN D
Indica fin de programa.
Es una directiva obligatoria.
Todas las lı́neas posteriores a la lı́nea en la que se encuentra esta directiva son
ignorados y no se ensamblan.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
30 / 84
El PIC16F84
Directivas: END, EQU y ORG
Directivas EQU
Es una directiva de asignación.
Sintaxis:
<label>
EQU
<expr>
− El valor de <expr> es asignado a la etiqueta <label>
Usualmente las asignaciones con EQU van al principio del programa.
Siempre que el nombre aparece el programa es sustituido por el valor numérico
de la expresión que se le haya asignado.
Se utiliza para definir constantes y direcciones de memoria.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
31 / 84
El PIC16F84
Directivas: END, EQU y ORG
Directivas ORG (SetP rogramOrigin)
Indica al programa ensamblador la dirección de memoria de programa a partir
de la cual deben ensamblarse las instrucciones del código fuente.
Sintaxis:
[<label>]
ORG
<expr>
− <expr> fija la dirección de la memoria de programa donde se almacenan las
instrucciones.
Si un programa comienza a escribirse sin indicar ORG, el ensamblador toma por
defecto ORG 0x00.
Cuando distintas secuencias de programa se colocan en diferentes áreas de
memoria se usa una directiva ORG.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
32 / 84
El PIC16F84
Directivas: INCLUDE y CONFIG
Directiva: IN CLU DE
Formato:
#IN CLU DE
<include file>
El fichero especificado por <include file> es leı́do como un fichero fuente.
El efecto es el miso que si el texto entero del <include file> hubiera sido
insertado dentro del fichero origen.
Este fichero <include file> no debe finalizar con la directiva END.
Cuando se incluye: #INCLUDE <P16f84a.inc> en los programas, se añade al
programa la definición de los SFR y de sus bits.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
33 / 84
El PIC16F84
Directivas: INCLUDE y CONFIG
Directiva: CON F IG
Indica la configuración elegida para el proceso de grabación del
microcontrolador.
Formato para configurar los fusibles:
#INCLUDE
<P16f84a.inc>
CONFIG XT OSC & WDT OFF & PWRTE ON & CP OFF
En este caso:
− Se utiliza el oscilador por cristal de cuarzo ( XT OSC).
− No se habilita el Watchdog ( WDT OFF).
− Se habilita el reset mediante Power−Up Timer ( PWRTE ON).
− No hay protección de código ( CP OFF).
Es importante resaltar que
Mauricio López V. (Ingenierı́a)
CONFIG se inicia con dos subrayados (guión bajo).
Microcontrolador PIC16F84
Mayo, 2015
34 / 84
El PIC16F84
Directivas: INCLUDE y CONFIG
Constantes de configuración
;=========================================================
; Configuration Bits
;=========================================================
CP ON
EQU
H’000F’
CP OFF
EQU
H’3FFF’
PWRTE ON
EQU
H’3FF7’
PWRTE OFF
EQU
H’3FFF’
WDT ON
EQU
H’3FFF’
WDT OFF
EQU
H’3FFB’
LP OSC
EQU
H’3FFC’
XT OSC
EQU
H’3FFD’
HS OSC
EQU
H’3FFE’
RC OSC
EQU
H’3FFF’
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
35 / 84
El PIC16F84
Directiva: IF y ENDIF
Directiva: IF y EN DIF
Limitan el principio y el fin de un bloque condicional de ensamblado.
IF y ENDIF actúan solamente durante el tiempo de ensamblado y no pueden
utilizarse como instrucciones condicionales que deba ejecutar el
microcontrolador.
Sintaxis:
IF <expr>
...
<código>
...
ELSE
...
<código>
...
ENDIF
− Si <expr> es verdadera, el código inmediato al IF se ensamblá.
− En caso contrario, las instrucciones siguientes se saltan hasta encontrar una
directiva ELSE o una directiva ENDIF.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
36 / 84
El PIC16F84
Directiva: IF y ENDIF
Ejemplo de directiva: IF − EN DIF
;——————————————————————; Definiciones
;——————————————————————#DEFINE Simula 1
; Configura a Simulacion.
#DEFINE NSimula 0
; Configura a No Simulacion.
#DEFINE CSML Simula ; Condicion de la simulacion.
;——————————————————————; Una sección del programa.
; Ejemplo de uso de la directiva IF.
;——————————————————————IF(CSML == NSimula)
CALL rt2sec
; Llama a la rutina de retardo de 2 segundos.
ENDIF
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
37 / 84
El PIC16F84
Registro de Estados
Registro STATUS
Sus bits indican:
El estado de la última operación aritmética o lógica realiza.
La causa de reset y los bits de selección de banco para la memoria de datos.
Sus bits suelen denominarse banderas (flags).
IRP1 (Register Bank Select bit). Usado para direccionamiento indirecto. No
utilizado en el PIC16F84.
RP1 (Register Bank Select bit). Usado para direccionamiento directo. No
utilizado en el PIC16F84.
RP0 (Register Bank Select bit). Selección del banco para el direccionamiento
directo. Señala el banco de memoria de datos seleccionado.
RP0=0. Selecciona el Banco 0.
RP0=1. Selecciona el Banco 1.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
38 / 84
El PIC16F84
Registro de Estados
Registro STATUS
TO (Timer Out). Bit o bandera indicador de fin de temporización del
Watchdog. Bit de sólo lectura. Se activa en “0” cuando el circuito de vigilancia
Watchdog finaliza la temporización. Sirve para detectar si una condición de reset
fue producida por el Watchdog Timer.
TO =0. Al desbordar el temporizador del Watchdog.
TO =1. Tras conectar VDD (funcionamiento normal) o al ejecutar las instrucciones
CLRWDT o SLEEP.
PD (Power Down). Bit o bandera de bajo consumo. Bit de sólo lectura. Sirve
para detectar el modo de bajo consumo.
PD =0. Al ejecutar la instrucción SLEEP y entrar en reposo.
PD =1. Tras conectar la alimentación VDD o al ejecutar clrwdt.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
39 / 84
El PIC16F84
Registro de Estados
Registro STATUS
Z (Zero). Bit o bandera de cero. Se activa a “1” cuando el resultado de una
operación aritmética o lógica es cero.
Z=0. El resultado de la última operación ha sido distinto de cero.
Z=1. El resultado de la última operación ha sido cero.
DC (Digital bit). Bit o bandera de acarreo en el 4o bit de menos peso. En
operaciones aritmética se activa cando hay un acarreo entre el bit 3 y 4, es decir,
acarreo entre los nibbles de menor y de mayor peso.
C (Carry bit). Bit o bandera de acarreo. En instrucciones de suma aritmética se
activa cuando se presenta acarreo, es decir, el resultado de la operación ha
superado el valor 111111112 (25510 ):
C=0. En la suma significa que no ha habido acarreo y en la resta que el resultado
ha sido negativo.
C=1. En la suma significa que ha habido acarreo y en la resta que el resultado ha
sido positivo.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
40 / 84
El PIC16F84
Macros
Macros
Es una serie de instrucciones y directivas.
Se comportan como una única instrucción cuando es invocada.
Se utiliza para automatizar la utilización de grupos de instrucciones usadas con
frecuencia.
Acepta argumentos.
Antes de ser invocada en una lı́nea de programa debe estar definida.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
41 / 84
El PIC16F84
Macros
Macros
Sintaxis:
<macro name> MACRO
...
<algoritmo de la Macro>
...
ENDM
[<arg>, <arg>, . . ., <arg>]
− <macro name> es la etiqueta que define a la macro.
− <arg> es cualquier número de argumentos opcionales que se le proporciona a la
macro.
− Los valores asignados a estos argumentos, cuando se invoca la macro, son
sustituidos por los nombres de los argumentos que se encuentran dentro de la
macro.
Esta puede ser invocada en cualquier punto del programa, utilizando la sintaxis:
<macro name> [<arg>, <arg>, . . ., <arg>]
No ocupa código de máquina mientras no sea invocada, cuando esto ocurre la
macro se expandirá en el lugar del programa en que se encuentra.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
42 / 84
El PIC16F84
Macros
Ejemplo de MACROS
;——————————————————————; Macro que direcciona al Banco 0
; Selección del Banco 0
; Nombre: banco0
;——————————————————————banco0
MACRO
BCF
STATUS, RP0
BCF
STATUS, RP1
ENDM
;——————————————————————; Macro que direcciona al Banco 1
; Selección del Banco 1
; Nombre: banco1
;——————————————————————banco1
MACRO
BSF
STATUS, RP0
BCF
STATUS, RP1
ENDM
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
43 / 84
El PIC16F84
Macros
Ejemplo de MACROS
;——————————————————————; Macro para transferir un número a un registro
; numero ---> registro
; Nombre: MOVLF
;——————————————————————MOVLF
MACRO
numero, registro
MOVLW
numero
MOVWF
registro
ENDM
;——————————————————————; Transfiere el contenido de un registro fuente a un destino
; registro fuente ---> registro destino
; Nombre: MOVFF
;——————————————————————MOVFF
MACRO
reg fuente, reg destino
MOVF
reg fuente, W
MOVWF
reg destino
ENDM
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
44 / 84
El PIC16F84
Macros
Ejemplo de MACROS (pantalla grafica)
;---------------------------------------------------------------------------------------------------------------------; Macro que escribira un grafico en la memoria de la pantalla grafica de 128x128.
; Controla la direccion o apuntador de la tabla, la posicion de inicio donde se desea escribir
; el grafico en la pantalla grafica y el contador del numero de caracteres a escribir.
; adrs: Direccion de inicio en la pantalla grafica.
; posic: Posicion o apuntador de la tabla.
; datos: Contador del numero de datos graficos.
; Nombre: grflogo.
; Uso del Macro con sintaxis: cmnd3pl MACRO datcm, Hbyte, Lbyte.
;-----------------------------------------------------------------------------------------------------------------------grflogo MACRO
adrs, posic, datos
cmnd3pl 0X24, HIGH posic, LOW posic
; Set Address Pointer (ADP). Direcciona en que localidad de
; la memoria se escribe. Area Grafica.
; Localidad de memoria 0xAABB (AA = HIGH posic; Parte alta del
; apuntador de la tabla y BB = LOW posic; Parte baja del
; apuntador de la tabla).
MOVLFLOW datos, ContL ; Parte baja de datos a leer se transfiere a parte baja del contador.
MOVLFHIGH datos, ContH ; La parte alta del numero de datos a leer se transfiere a la parte alta del contador.
MOVLFLOW adrs, tblptrl ; En tblptrl se almacena la parte baja del apuntador de la tabla.
MOVLFHIGH adrs, tblptrh ; En tblptrh se almacena la parte alta del apuntador de la tabla.
MOVLFH'C0', dtcomnd ; Data Write Command. Escribe un dato e incrementa la direccion
; del apuntador (ADP).
CALL Llamlog
; Llama a la rutina que lee los datos y los escribe.
ENDM
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
45 / 84
El PIC16F84
Contador de Programa
Registro PCL y Contador de Programa
Es un contador de programa de 13 bits constituido por dos registros.
PCL (Program Counter Low byte). Implementado en la memoria RAM. Su
contenido corresponde con los 8 bits más bajos del contador de programa. Este
registro puede ser leı́do o escrito directamente.
PCH (Program Counter High byte). Los cinco bits de mayor peso del PC
corresponden con este registro. No puede ser leı́do o escrito directamente.
Durante la ejecución normal del programa el PCL, se incrementa con cada
instrucción, a menos que se trate de alguna instrucción de salto.
Al conectar la alimentación se inicializa a (PCL) = b’00000000’ y (PCH) = b’00000’.
En el PIC16F84 los 3 bits de mayor peso del PC no son tomados en cuenta.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
46 / 84
El PIC16F84
Arquitectura interna del PIC16F84
Arquitectura interna del PIC16F84
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
47 / 84
El PIC16F84
Tablas
Tablas
Serie de datos ordenados secuencialmente en memoria de programa que forman
una lista de constantes.
Los valores de las constantes están grabados y no se pueden alterar.
El usuario accede a un elemento de esta lista mediante la instrucción RETLW .
Sintaxis de la instrucción RETLW (Return with Literal in W ):
<Nombre de la tabla>
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
−
−
−
−
ADDW F
<dato>
<dato>
<dato>
<dato>
<dato>
<dato>
P CL, F
Funciona de forma similar que RETURN.
Produce el retorno de una subrutina pero con un valor en el registro W.
<dato> es el valor de la constante que se carga en el registro de trabajo W.
Para leer uno de ellos se le suma el valor del registro W al contador de programa
mediante la instrucción de salto indexado ADDWF PCL, F .
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
48 / 84
El PIC16F84
Instrucción: RETLW
Instrucción: RETLW (primera parte)
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
49 / 84
El PIC16F84
Instrucción: RETLW
Instrucción: RETLW (segunda parte)
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
50 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
Tercer Ejemplo
Ejercicio 3 : Se desea controlar diferentes secuencias de luces en un arreglo de ocho
LED, utilizando un microcontrolador PIC16F84.
Para ello:
En las 8 terminales del puerto B del microcontrolador conectar los LED.
Realizar un programa que muestre, en los LED del puerto B, las siguientes tres
secuencias de luces.
RB7RB6RB5RB4RB3RB2RB1RB0
0
1 1
1
1
1
1
0 0
1
1
1
1
1
0 0 0
1
1
1
1
0 0 0
0
1
1
1
0 0 0
0
0
1
1
0 0 0
0
0
0
1
0 0 0
0
0
0
0
0 0 0
0
0
0
0
1
1
1
1
1
1
1
0
RB7RB6RB5RB4RB3RB2RB1RB0
0
1 1
1
1
1
1
1
0
1
1
1
1
0
1 1
0
1
1
0
1
1 1 1
0
0
1
1
1 1 1
0
0
1
1
1 1
0
1
1
0
1
1
0
1
1
1
1
0
0
1 1
1
1
1
1
1 1 1
1
1
1
1
Secuencia 1
0
1
1
1
1
1
1
0
1
Secuencia 2
RB7RB6RB5RB4RB3RB2RB1RB0
1
0
1
0
1
0
1
0
0
1
0
1
0
1
0
1
Secuencia 3
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
51 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
Tercer Ejemplo
Para ello:
Las secuencias deben repetirse de manera cı́clica: primero la secuencia 1, después
la secuencia 2 y luego la secuencia 3, e iniciar de nuevo con la secuencia 1.
Cada secuencia debe repetirse ocho veces antes de continuar con la siguiente.
Los valores establecidos por las secuencias 1 y 2 deben obtenerse a partir de
tablas (implementadas en la memoria de programa).
Para las secuencias 1 y 2 el cambio consecutivo de desplegado debe durar
aproximadamente 60 mseg.
Para la secuencia 3 el cambio consecutivo de desplegado debe durar
aproximadamente 2 seg.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
52 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
Diagrama de conexión con un PIC16F84 (8 luces)
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
53 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
Tercer Ejemplo
En este tercer ejercicio, también se aprenderá:
El uso de Tablas, Macros y Directivas (configuración de los fusibles, el IF y
ENDIF).
El uso de la instrucción: RETLW.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
54 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
Solución al Ejercicio 3
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. Establecer el pseudocódigo de las rutinas de las secuencias.
4. Establecer el pseudocódigo de la(s) rutina(s) de retardo.
5. Realizar los diagramas de flujo (programa principal y de retardo).
6. Escribir el programa tomando como base los diagramas de flujo.
7. Comprobar el funcionamiento del algoritmo utilizando las herramientas de
simulación.
8. Grabar el programa en el microcontrolador.
9. Energizar el microcontrolador y verificar la funcionalidad del algoritmo
implementado.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
55 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
Solución al Ejercicio 3: Pseudocódigo del programa principal
a) Configurar el microcontrolador.
Puerto B como salida.
b) Invocar a la primera secuencia.
1 Inicializar el número de veces que se repite esta secuencia, variable veces.
2 Inicializar el número de datos que contiene la tabla, variable cuenta.
3 Inicializa el offset (apuntador) de la tabla, variable offset.
4 Invocar a la tabla para obtener el dato.
5 Despliegar en los LED el dato obtenido de la tabla.
6 Esperar 60 mseg.
7 Incrementar apuntador de tabla, variable offset.
8 Decrementar contador del número de datos de la tabla, cuenta
¿Terminó de leer toda la tabla?
Then Decrementar el número de veces que se repite la secuencia, veces.
¿Terminó de ejecutar todas las repeticiones?
Then Terminar la secuencia y pasar a la siguiente, punto [c].
Else
Else
Regresar al punto [2] de esta secuencia.
Regresar al punto [4] de esta secuencia.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
56 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
Solución al Ejercicio 3: Pseudocódigo del programa principal
c) Invocar a la segunda secuencia.
1 Inicializar el número de veces que se repite esta secuencia, variable veces.
2 Inicializar el número de datos que contiene la tabla, variable cuenta.
3 Inicializar el offset (apuntador) de la tabla, variable offset.
4 Invocar a la tabla para obtener el dato.
5 Despliegar en los LED el dato obtenido de la tabla.
6 Esperar 60 mseg.
7 Incrementar apuntador de tabla, variable offset.
8 Decrementar contador del número de datos de la tabla, cuenta
¿Terminó de leer toda la tabla?
Then Decrementar el número de veces que se repite la secuencia, veces.
¿Terminó de ejecutar todas las repeticiones?
Then Terminar la secuencia y pasa a la siguiente, punto [d].
Else
Else
Regresar al punto [2] de esta secuencia.
Regresar al punto [4] de esta secuencia.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
57 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
Solución al Ejercicio 3: Pseudocódigo del programa principal
d) Invocar a la tercera secuencia.
1 Inicializar el número de veces que se repite esta secuencia, variable veces.
2 Desplegar en los LED el dato B’10101010’.
3 Esperar 2 seg.
4 Desplegar en los LED el dato B’01010101’.
5 Esperar 2 seg.
6 Decrementar el número de veces que se repite la secuencia, variable veces.
¿Terminó de ejecutar todas las repeticiones?
Then Terminar la secuencia y pasa a la primera secuencia, punto [b], generando
un proceso cı́clico.
Else
Regresar al punto [2] de esta secuencia.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
58 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
Diagrama de flujo del programa principal
INICIO
Configuración del
PIC (puertos)
Inicialización de la configuración del microcontrolador.
Terminales del Puerto B configuradas como de salida.
secuc1
Ejecuta la primera secuencia.
secuc2
Ejecuta la segunda secuencia.
unosino
Ejecuta la tercera secuencia, y
repite una vez más las secuencias.
código
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
59 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
Diagrama de flujo de retardo de 60 milisegundos
ret60ms
R_2seg <-- D'3'
Vr60ms
EQU
D'3'
; Valor para generar retardo de 60 mseg.
Inicializa contador de retardo.
ret20ms
Rutina de espera de 20,165 ciclos.
R_2seg <-- R_2seg - 1
Decrementa contador de retardo.
NO
R_2seg
= 00?
¿ Terminó de ejecutar el lazo ?
| NO. Ejecuta un nuevo ciclo de este lazo.
SI
Fin
Fin de la subrutina.
código
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
60 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
Subrutina de la secuencia 1
secuc1
1
W <-- H'08'
veces <-- W
Inicializa el número de veces
que se repite la secuencia.
W <-- H'08'
cuenta <-- W
Inicializa el número de datos
que contiene la secuencia.
offset <-- offset + 1
Incremento offset para acceder al
siguiente dato de la secuencia.
2
cuenta <-- cuenta - 1
offset <-- H'00'
Inicializa el offset para acceder
a los valores de la secuencia.
3
NO
Cuenta
=00?
¿Terminó de leer toda la tabla?
| NO. Lee el siguiente dato.
SI
3
veces <-- veces - 1
W <-- offset
tabla1
PORTB <-- W
ret60ms
Actualiza W que sirve
como apuntador y obtiene
el dato de la tabla.
Despliega en los LED el
dato leído en la tabla.
2
NO
¿Terminó de repetir la secuencia?
| NO. Repite una ves más.
veces = 00?
SI
Fin
Fin de la subrutina.
Se mantiene ocioso
aproximadamente 60 mseg.
1
Mauricio López V. (Ingenierı́a)
código
Microcontrolador PIC16F84
Mayo, 2015
61 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
Subrutina de la secuencia 2
secuc2
4
W <-- H'08'
veces <-- W
Inicializa el número de veces
que se repite la secuencia.
W <-- H'09'
cuenta <-- W
Inicializa el número de datos
que contiene la secuencia.
offset <-- offset + 1
Incremento offset para acceder al
siguiente dato de la secuencia.
5
cuenta <-- cuenta - 1
offset <-- H'00'
Inicializa el offset para acceder
a los valores de la secuencia.
6
NO
Cuenta
=00?
¿Terminó de leer toda la tabla?
| NO. Lee el siguiente dato.
SI
6
veces <-- veces - 1
W <-- offset
tabla2
PORTB <-- W
ret60ms
Actualiza W que sirve
como apuntador y obtiene
el dato de la tabla.
Despliega en los LED el
dato leído en la tabla.
5
NO
¿Terminó de repetir la secuencia?
| NO. Repite una ves más.
veces = 00?
SI
Fin
Fin de la subrutina.
Se mantiene ocioso
aproximadamente 60 mseg.
4
Mauricio López V. (Ingenierı́a)
código
Microcontrolador PIC16F84
Mayo, 2015
62 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
Subrutina de la secuencia 3
Unosino
H'08' --> veces
B'10101010' --> PORTB
rt2seg
B'01010101' --> PORTB
rt2seg
Inicializa el número de veces que se repite la secuencia.
Despliega en los LED el primer valor de la secuencia.
Se mantiene ocioso aproximadamente 2 segundos.
Despliega en los LED el segundo valor de la secuencia.
Se mantiene ocioso aproximadamente 2 segundos.
veces - 1 --> veces
NO
¿Terminó de repetir la secuencia?
| NO. Repite una ves más.
veces = 00?
SI
Fin
Mauricio López V. (Ingenierı́a)
Fin de la subrutina.
Microcontrolador PIC16F84
código
Mayo, 2015
63 / 84
El PIC16F84
Tercer Ejemplo: Ejercicio 3
tabla 1
;----------------------------------------------------------------------; Tabla de la primera secuencia a desplegar.
; Subrutina: tabla1
;----------------------------------------------------------------------tabla1
ADDWF PCL, F
; PCL <-- W + PCL
RETLW
B'01111111'
RETLW
B'00111111'
RETLW
B'00011111'
RETLW
B'00001111'
RETLW
B'00000111'
RETLW
B'00000011'
RETLW
B'00000001'
RETLW
B'00000000'
RB7RB6RB5RB4RB3RB2RB1RB0
0
1 1
1
1
1
1
0 0
1
1
1
1
1
0 0 0
1
1
1
1
0 0 0
0
1
1
1
0 0 0
0
0
1
1
0 0 0
0
0
0
1
0 0 0
0
0
0
0
0 0 0
0
0
0
0
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
1
1
1
1
1
1
1
0
Mayo, 2015
64 / 84
El PIC16F84
Instrucción: RETLW
Instrucción: RETLW (primera parte)
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
65 / 84
El PIC16F84
Instrucción: RETLW
Instrucción: RETLW (segunda parte)
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
66 / 84
El PIC16F84
Formas de distribuir el código del programa
Formas de distribuir el código del programa
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
67 / 84
El PIC16F84
Formas de distribuir el código del programa
Formas de distribuir el código del programa
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
68 / 84
El PIC16F84
Formas de distribuir el código del programa
Formas de distribuir el código del programa
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
69 / 84
El PIC16F84
Constantes numéricas y alfanuméricas
Constantes numéricas y alfanuméricas
El ensamblador MPASM soporta los sistemas de numeración decimal,
hexadecimal, octal, binario y el código alfanumérico ASCCI.
TIPO
Decimal
Hexadecimal
Octal
Binario
ASCCI
String o Cadena de caracteres
Mauricio López V. (Ingenierı́a)
SINTAXIS
D’<cantidad>’
d’<cantidad>’
.’<cantidad>’
H’<cantidad>’
h’<cantidad>’
0x<cantidad>
<cantidad>H
<cantidad>h
O’<cantidad>’
o’<cantidad>’
B’<cantidad>’
b’<cantidad>’
A’<cantidad>’
a’<cantidad>’
’<cantidad>’
“ <string> ”
Microcontrolador PIC16F84
EJEMPLO
MOVLW D’109’
MOVLW d’109’
MOVLW .’109’
MOVLW H’6D’
MOVLW h’6D’
MOVLW 0x6D
MOVLW 6DH
MOVLW 6Dh
MOVLW O’155’
MOVLW o’155’
MOVLW B’01101101’
MOVLW b’01101101’
MOVLW A’M’
MOVLW a’M’
MOVLW ’M’
DT “Estudia SDII”
Mayo, 2015
70 / 84
El PIC16F84
Subrutinas anidadas
Mecanismo de funcionamiento de una subrutina
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
71 / 84
El PIC16F84
Subrutinas anidadas
Subrutinas anidadas
Cuando una subrutina llama a otra subrutina se produce lo que se conoce como
anidamiento de subrutinas.
Cada instrucción call sucesivo sin que intervenga un return crea un nivel de
anidamiento adicional.
El nivel de anidamiento está limitado, para el PIC16F84 es de 8 niveles.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
72 / 84
El PIC16F84
Pila
Pila (Stack)
Es una zona de memoria que se encuentra separada de la memoria de programa
y de la de datos.
Su estructura es de tipo LIFO (Last In First Out), último dato que se guarda es
el primero que sale.
Se dispone de una pila de ocho niveles de longitud y cada nivel constituido de 13
bits cada uno.
Se carga la pila con el contenido del contador de programan (PC) cuando hay un
llamado a una subrutina o cuando ocurre una interrupción.
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
73 / 84
El PIC16F84
Pila
Pila (Stack)
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
74 / 84
El PIC16F84
Pila
Estructura de la pila y memoria de programa
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
75 / 84
Laminillas complementarias
Laminillas complementarias
Laminillas
complementarias
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
76 / 84
Laminillas complementarias
Diagrama de flujo del programa principal
INICIO
Inicialización
Configuración del
PIC (puertos)
PORTB <-- B'10101010'
rt2seg
PORTB <-- B'01010101'
rt2seg
TRISB
PORTB
ESTADO
W
F
RP0
EQU
EQU
EQU
EQU
EQU
EQU
BSF
CLRF
BCF
0x06 ; Localidad de memoria.
0x06 ; Localidad de memoria.
0x03 ; Localidad de memoria.
0
; Variable W (acumulador).
1
; Variable F (registro).
5
; Variable RP0 (bit 5 STATUS).
ESTADO, RP0 ; banco 1.
TRISB
; Puerto B (Salida).
ESTADO, RP0 ; banco 0.
MOVLW
MOVWF
B'10101010'
PORTB
; PORTB <-- B'10101010'.
CALL
rt2seg
; Llama a la rutina de retardo.
MOVLW
MOVWF
B'01010101'
PORTB
; PORTB <-- B'01010101'.
CALL
GOTO
rt2seg
desply1
; Llama a la rutina de retardo.
; Se repite la secuencia.
return
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
77 / 84
Laminillas complementarias
Diagrama de flujo de retardo de 20 milisegundos
ret20ms
V1_20ms
V2_20ms
EQU
EQU
D'100' ; Valor del Loop interior.
D'40' ; Valor del Loop exterior.
RLe20ms <-- V2_20ms
MOVLW
MOVWF
V2_20ms
RLe20ms
; +1
; +2
1 ciclo
1 ciclo
RLi20ms <-- V1_20ms
MOVLW
MOVWF
V1_20ms
RLi20ms
; +3
; +4
1 ciclo
1 ciclo
; +5
; +6
1 ciclo
1 ciclo
2 NOP
NOP
NOP
RLi20ms <-- RLi20ms - 1
NO
RLi20ms
= 00?
DECFSZ
GOTO
RLi20ms, F
lopshr2
; paso 1
; paso 2
1 ciclo
2 ciclos
DECFSZ
GOTO
RLe20ms, F
loplon2
; paso 1
; paso 2
1 ciclo
2 ciclos
; +7
2 ciclos
SI
RLe20ms <-- RLe20ms - 1
NO
RLe20ms
= 00?
SI
SALIR
RETURN
return
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
78 / 84
Laminillas complementarias
Diagrama de flujo de retardo de 2 segundos
rt2seg
R_2seg <-- Vr2seg
ret20ms
Vr2seg
MOVLW
MOVWF
EQU
D'100' ; Valor para generar retardo de 2seg.
Vr2seg
R_2seg
; +1
; +2
1 ciclo
1 ciclo
CALL ret20ms
; 20,165 ciclos
DECFSZ
GOTO
; paso 1
; paso 2
1 ciclo
2 ciclos
; +7
2 ciclos
R_2seg <-- R_2seg - 1
NO
R_2seg
= 00?
R_2seg, F
lp2seg
SI
SALIR
RETURN
return
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
79 / 84
Laminillas complementarias
Diagrama de flujo del programa principal
INICIO
Inicialización
Configuración del
PIC (puertos)
#include
<P16f84a.inc> ; Definicion de los registros
; SFR y sus bits.
#include
<macros.asm> ; Declaracion de macros.
banco1
CLRF TRISB
banco0
; Pasa al banco 1.
; Puerto B (Salida).
; Pasa al banco 0.
secuc1
CALL
secuc1 ; Llama a la rutina de la secuencia 1.
secuc2
CALL
secuc2 ; Llama a la rutina de la secuencia 2.
unosino
CALL
GOTO
unosino; Llama a la rutina de la secuencia.
desply1; Se repite la secuencia de salida.
return
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
80 / 84
Laminillas complementarias
Diagrama de flujo de retardo de 60 milisegundos
ret60ms
R_2sec <-- D'3'
ret20ms
Vr60ms
MOVLW
MOVWF
EQU
D'3'
; Valor para generar retardo de 60 mSec.
Vr60ms
R_2sec
; +1
; +2
1 ciclo
1 ciclo
CALL ret20ms
; 20,165 ciclos
DECFSZ
GOTO
; paso 1
; paso 2
1 ciclo
2 ciclos
; +7
2 ciclos
R_2sec <-- R_2sec - 1
NO
R_2sec
= 00?
R_2sec, F
lp60ms
SI
Fin
RETURN
return
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
81 / 84
Laminillas complementarias
Subrutina de la secuencia 1
secuc1
1
W <-- H'08'
veces <-- W
MOVLW
MOVWF
0x08
veces
offset <-- offset + 1
2
W <-- H'08'
cuenta <-- W
offset <-- H'00'
MOVLW
MOVWF
0x08
cuenta
CLRF
offset
INCF
offset, F
DECFSZ
GOTO
cuenta, F
proce1
DECFSZ
GOTO
veces, F
cuent1
cuenta <-- cuenta - 1
3
NO
cuenta = 0
3
W <-- offset
MOVF
SI
offset, W
veces <-- veces - 1
tabla1
CALL
tabla1
2
PORTB <-- W
MOVWF
PORTB
CALL
ret60ms
NO
veces = 0
SI
ret60ms
Fin
RETURN
1
return
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
82 / 84
Laminillas complementarias
Subrutina de la secuencia 2
secuc2
4
W <-- H'08'
veces <-- W
MOVLW
MOVWF
0x08
veces
offset <-- offset + 1
5
W <-- H'09'
cuenta <-- W
offset <-- H'00'
MOVLW
MOVWF
0x09
cuenta
CLRF
offset
INCF
offset, F
DECFSZ
GOTO
cuenta, F
proce2
DECFSZ
GOTO
veces, F
cuent2
cuenta <-- cuenta - 1
6
NO
cuenta = 0
6
W <-- offset
MOVF
SI
offset, W
veces <-- veces - 1
tabla2
CALL
tabla2
5
PORTB <-- W
MOVWF
PORTB
CALL
ret60ms
NO
veces = 0
SI
ret60ms
Fin
RETURN
4
return
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
83 / 84
Laminillas complementarias
Subrutina de la secuencia 3
Unosino
H'08' --> veces
MOVLW
MOVWF
0x08 ; Veces se repite la secuencia de salida.
veces
B'10101010' --> PORTB
MOVLW
MOVWF
B'10101010'
PORTB
CALL
rt2sec ; Llama a retardo de 2 segundos.
MOVLW
MOVWF
B'01010101'
PORTB
CALL
rt2sec ; Llama a retardo de 2 segundos.
DECFSZ
GOTO
veces, F
despla1
rt2sec
B'01010101' --> PORTB
rt2sec
; PORTB <-- B'10101010'.
; PORTB <-- B'01010101'.
veces - 1 --> veces
NO
; Veces que se repite la secuencia.
; No se ha terminado.
veces = 00?
SI
Fin
RETURN
return
Mauricio López V. (Ingenierı́a)
Microcontrolador PIC16F84
Mayo, 2015
84 / 84
Descargar