Sie sind auf Seite 1von 16

Microcontroladores

UNAM FES Aragón

Laboratorio de Microprocesadores y

Práctica 2. Comparación de registros

En esta práctica se presentará al alumno una de las aplicaciones más


significativas de los saltos condicionales mediante la comparación del
contenido de dos registros para saber si su contenido es igual, mayor
o menor que un valor dado. Durante el desarrollo del proyecto se
aplicarán conocimientos y habilidades adquiridas en el desarrollo de
la práctica 1.

Universidad Nacional Autónoma de México


Facultad de Estudios Superiores Aragón
Laboratorio de Microprocesadores y
Microcontroladores
Práctica 2
Contenido
Descripción .................................................................................................................................... 3
Objetivos ....................................................................................................................................... 3
Objetivos Específicos ................................................................................................................. 4
Introducción .................................................................................................................................. 4
Bancos de la memoria RAM………………………………………………………………………………………………….5

Registro estatus…………………………………………………………………………………………………………………...6

Trabajo en casa ............................................................................................................................. 7


Material y equipo de laboratorio .................................................................................................. 7
Trabajo en el laboratorio............................................................................................................... 8
Problema de diseño .................................................................................................................. 8
Análisis y diseño ........................................................................................................................ 8
Desarrollo. Captura y compilación ............................................................................................ 9
Desarrollo. Validación mediante simulación........................................................................... 10
Desarrollo. Armado del circuito .............................................................................................. 10
Implementación ...................................................................................................................... 11
Resultados ............................................................................................................................... 11
Referencias .................................................................................................................................. 11
Bibliografía .............................................................................................................................. 11
Mesografía .............................................................................................................................. 12
Anexo 1........................................................................................................................................ 13
Código fuente .......................................................................................................................... 13
Anexo 2........................................................................................................................................ 15
Circuito práctica 2 ................................................................................................................... 15
Anexo 3........................................................................................................................................ 16
Fuente de 5V ........................................................................................................................... 16

2
Práctica 2. Comparación de Registros
Descripción
En esta práctica se presentará al alumno una de las aplicaciones más
significativas de los saltos condicionales mediante la comparación del
contenido de dos registros para saber si su contenido es igual, mayor o
menor que un valor dado. Durante el desarrollo del proyecto se aplicarán
conocimientos y habilidades adquiridas en el desarrollo de la práctica 1.

El proyecto a realizar consiste en una solución basada en un


microcontrolador PIC16F887 que realiza la comparación entre el valor
ingresado por el puerto B y una constante definida en el código fuente.

Para indicar la relación que existe entre el valor ingresado en el puerto B y


la constante definida en código se prenderá una combinación de leds
conectada al puerto D según se muestra en la tabla 1.

Figura 1. Ejemplo de circuito con microcontrolador PIC16F887 armado.

Objetivos
En esta práctica se presentará al alumno una de las aplicaciones más
significativas de los saltos condicionales mediante la comparación del
contenido de dos registros para saber si su contenido es igual, mayor o
menor que un valor dado

3
Objetivos Específicos
Presentar al alumno las instrucciones del lenguaje ensamblador para
realizar saltos condicionales en la ejecución del programa a fin de
poder realizar comparación entre el contenido de dos registros.

Analizar y utilizar las instrucciones de resta que afecten los bits C


(Carry) y Z (Zero) del registro STATUS, para la comparación de
registros.

Analizar y programar saltos condicionales que involucren fragmentos


de código que se repitan un número finito o infinito de veces (bucles).

Introducción
Como sabes el PIC16F887 tiene tres tipos de memoria: ROM, RAM y EEPROM. Para esta
práctica nos enfocaremos en la memoria RAM.
La memoria RAM es la tercera y la más compleja parte de la memoria del microcontrolador y
consiste en dos partes: los registros de propósito general y los registros de funciones
especiales (SFR), cabe mencionar que para el PIC16F887 estos registros se dividen en cuatro
bancos de memoria.

REGISTROS DE PROPÓSITO GENERAL


Los registros de propósito general se utilizan para almacenar los datos temporales y los
resultados creados durante el funcionamiento. Por ejemplo, si el programa realiza el conteo
(de los productos en una cadena de montaje), es necesario tener un registro que represente la
“suma”. Para esto es necesario especificar la dirección de un registro de propósito general y
asignarle esa función. Se debe crear un programa simple para incrementar el valor de este
registro por 1, después de que cada producto haya pasado por el sensor.
Ahora el microcontrolador puede ejecutar el programa ya que sabe qué es y dónde está la
suma que se va a incrementar. De manera similar, a cada variable de programa se le debe pre-
asignar alguno de los registros de propósito general.

REGISTROS DE FUNCIONES ESPECIALES (SFR)


Los registros de funciones especiales son también parte de la memoria RAM. A diferencia de
los registros de propósito general, su propósito es predeterminado durante el proceso de
fabricación y no se pueden cambiar. Como los bits están conectados a los circuitos particulares
en el chip (convertidor A/D, módulo de comunicación serial, etc.), cualquier cambio de su
contenido afecta directamente al funcionamiento del microcontrolador o de alguno de los
circuitos.
Por ejemplo, el registro ADCON0 controla el funcionamiento del convertidor A/D. Al cambiar
los bits se determina qué pin del puerto se configurará como la entrada del convertidor, el
momento del inicio de la conversión así como la velocidad de la conversión.
Otra característica de estas localidades de memoria es que tienen nombres (tanto los registros
como sus bits), lo que simplifica considerablemente el proceso de escribir un programa.

4
BANCOS DE LA MEMORIA RAM
Como comentamos al principio, la memoria RAM está dividida en cuatro bancos. Antes de
acceder a un registro al escribir un programa (para leer o cambiar su contenido), es necesario
seleccionar el banco que contiene ese registro. Para simplificar el funcionamiento, los SFR
(Registros de Funciones Especiales o de propósito específico) utilizados con más frecuencia
tienen la misma dirección en todos los bancos, lo que permite accederlos con facilidad.

5
Registro STATUS

Entre los principales registros de función especial tenemos el registro STATUS, los bits del
registro controlan los diferentes circuitos dentro del chip, así que no es posible clasificarlos en
grupos especiales. Por esta razón, se describen junto con los procesos que controlan.

El registro STATUS contiene: el estado aritmético de datos en el registro W, el estado RESET,


los bits para seleccionar el banco para los datos de la memoria.

Veamos uno a uno los bits del registro STATUS

 IRP - Registro de selección de Banco (usado para direccionamiento indirecto)


o 1 - Bancos 0 y 1 son activos (localidades de memoria 00h-FFh)
o 0 - Bancos 2 y 3 son activos (localidades de memoria 100h-1FFh)
 RP1,RP0 - Registro de selección de banco (usado para direccionamiento directo).

RP1 RP0 BANCO ACTIVO

0 0 Banco 0

0 1 Banco 1

1 0 Banco 2

1 1 Banco 3

 TO - Time-out bit (bit de salida del temporizador perro guardián)


o 1 - Después de encender el microcontrolador, después de ejecutarse la instrucción CLRWDT que reinicia al WDT
(temporizador perro guardián) o después de ejecutarse la instrucción SLEEP que pone al microcontrolador en el
modo de bajo consumo.
o 0 - Después de acabarse el tiempo del WDT.

 PD - Power-down bit (bit de apagado)


o 1 - Después de encender el microcontrolador, después de ejecutar la instrucción CLRWDT que reinicia al WDT.
o 0 - Después de ejecutarse la instrucción SLEEP que pone al microcontrolador en el modo de bajo consumo.

 Z - Zero bit (bit cero)


o 1 - El resultado de una operación lógica o aritmética es 0.
o 0 - El resultado de una operación lógica o aritmética es distinto de 0.

 DC - Digit carry/borrow bit (bit de acarreo/préstamo de dígito) cambia al sumar o al restar si


ocurre un "desbordamiento" o un "préstamo" en el resultado.
o 1 - Hubo acarreo del cuarto bit de orden bajo (nibble bajo) en el resultado.
o 0 - No hubo acarreo del cuarto bit de orden bajo (nibble bajo) en el resultado.

6
 C - Carry/Borrow bit (bit de acarreo/préstamo) cambia al sumar o al restar si ocurre un
"desbordamiento" o un "préstamo" en el resultado, o sea si el resultado es mayor de 255 o
menor de 0.
o 1 - Ocurrió acarreo en el bit más significativo (MSB) del resultado.
o 0 - No ocurrió acarreo en el bit más significativo (MSB) del resultado.

Para el manejo del PIC16F887 en esta y las siguientes prácticas es necesario que investigues
como utilizar los registros SFR (Registros de Funciones Especiales o de propósito específico) y
cómo seleccionar el banco que contiene el registro que queremos usar, así como el significado
de los bits de cada registro, para esto te recomendamos revisar el Data Sheet (hoja de datos)
del PIC16F887.

Trabajo en casa
El cuestionario se encuentra en línea en la página www.proyectolati.org –aula virtual-

Material y equipo de laboratorio

 Equipo de cómputo con el siguiente software y características


 MPLAB IDE de Micropchip 8.6 o superior
 Acceso a internet
 Memoria USB
 Fuente de 5 volts
 Programa practica2.asm
 Protoboard
 PIC16f887
 8 resistencias de 1K
 8 resistencias de 330 ohms
 Dipswitch de 8 interruptores
 8 LEDs o una barra de LEDs
 Cable calibre 22 o 24 colores rojo, azul, naranja y amarillo

Figura 2. Material para la práctica 2.

7
Trabajo en el laboratorio

Problema de diseño
Se pretende diseñar el control de nivel de un conjunto de 4 tanques de
almacenamiento. Los tanques se encuentran interconectados entre sí,
por lo que forman un solo tanque de gran volumen. El sistema de
detección de nivel envía un valor a través de un bus de 8 bits, por lo
que el nivel mayor tiene un valor de 255, el inferior 0 y por tanto, el
valor central está dado por 127.

Para controlar el nivel del tanque se hace uso de 8 válvulas de llenado,


2 para cada tanque.

 Cuando el tanque se encuentra vacío, todas las válvulas se


abren para permitir su rápido llenado.
 Cuando el tanque se encuentra justo a la mitad cierra una de
las válvulas que tiene cada tanque.
 Cuando el tanque sobrepasa la mitad de su capacidad cierra
todas las válvulas por seguridad.

Diseña un programa en lenguaje ensamblador para un


microcontrolador PIC16F887 que lea 8 bits a través del puerto B y
controle a través del puerto D la apertura y cierre de las 8 válvulas de
llenado según los criterios mencionados. Posteriormente, prueba tu
programa en el simulador VSM de Proteus e implementa tu circuito
físicamente para su validación.

Análisis y diseño
1. Definición del funcionamiento y de las características.
Comenta con tus compañeros qué periféricos del PIC deberás
configurar.
 Puertos digitales de entrada
 Puertos digitales de salida
 Otros periféricos
2. Diseño del esquemático. Plantea un circuito esquemático en
Isis de Proteus donde indiques las terminales que usarás,
conexiones a VSS y VDD, y los elementos que formarán tu
circuito.

8
3. Planteamiento del programa. Comenta con tus compañeros el
procedimiento para realizar comparación entre el contenido
de dos registros en lenguaje ensamblador. Toma en cuenta:
 ¿En qué registro se encuentran las banderas C y Z?
 ¿Cuál es el estado de la bandera C después de ejecutar
una instrucción SUBWF?
 ¿Cuál es el estado de la bandera Z después de ejecutar
una instrucción SUBWF?
 ¿Cómo funcionan las instrucciones BTFSS y BTFSC?

Describe más detalladamente el siguiente diagrama de flujo.


Toma en consideración la configuración de puertos, el proceso
de comparación, asó como la entrada y salida de datos.

Figura 4. Diagrama de flujo de mayor nivel de abstracción.

Desarrollo. Captura y compilación


1. Crea una carpeta llamada <practicas microcontroladores> en la
unidad C y dentro de ella cree una carpeta llamada <practica 02>.
2. Crea un proyecto en MPLAB IDE llamado practica 02 dentro de la
ruta <c:\practicas microcontroladores\practica 02> usando el
asistente de proyectos (Project Wizard).
3. Crea y agrega al proyecto un nuevo archivo de código fuente
llamado <main.asm> y captura el código fuente de la práctica 2
descrito en el anexo 1 y guarda tu archivo.
4. Compila el proyecto presionando F10. Si existen errores revisa el
código fuente y corrige los errores hasta que el programa sea
compilado con éxito.

9
Desarrollo. Validación mediante simulación
1. Activa el simulador MPLAB SIM en el menú <Debugger → Select
tool → MPLAB SIM>.
2. Abre la ventana watch desde el menú <View → watch> y agrega los
registros en la lista de símbolos:
a. STATUS
b. PORTB
c. TRISB
d. PORTD
e. TRISD
f. WREG
g. ANSELH
3. Crea una nueva ventana del generador de estímulos asíncronos
desde el menú <Debugger → Stimuls → New Work Book> y agrega
los pines desde RB0 hasta RB1 con la acción <Set High> y
nuevamente los mismos pines con la acción <Set Low>.
4. Realiza la simulación paso a paso del programa presionando F8
mientras visualiza el código fuente y la ventana watch. Analiza el
contenido de cada símbolo de la ventana watch y comenta cual es
el estado o configuración del microcontrolador.
5. Realiza la simulación de entradas digitales a través del puerto B
presionando en el botón correspondiente en el generador de
estímulos asíncronos mientras sigue simulando paso a paso con F8.
6. Valida que el programa de la práctica 1 lea 8 bits del puerto B y
refleje la lectura en el puerto D.

Desarrollo. Armado del circuito


1. Arma el circuito de que se muestra en el anexo 2.
2. Programa tu microcontrolador con el código de ejecutable
3. Alimenta tu circuito con 5V cuidando la correcta polarización.
Puedes armar una fuente de 5V tomando como base el diagrama
del anexo 3.
4. Valida la correcta operación del circuito. Si tu circuito no funciona
correctamente comprueba la alimentación con un multímetro, de
persistir la falla comprueba la directiva __config para que ésta
tenga configurado el oscilador interno y deshabilitados el botón de
reinicio (NOMCLR), el perro guardián (NOWDT) y bajo voltaje de
programación (NLPV) particularmente, compila y programa
nuevamente.

10
Implementación
1. Modifixa el programa de la práctica 2 para que calcule el
complemento a dos del dato leído en el puerto B y el resultado lo
entregue en el puerto D.
2. Realiza la simulación del nuevo programa.
3. Programa tu microcontrolador con la nueva versión del programa.

Resultados
1. Captura dos pantallas de la simulación donde se muestre el
funcionamiento del programa y guárdalas en una memoria USB. Las
capturas deberán mostrar la ventana watch con los valores
calculados del complemento a dos.
2. Toma una fotografía de la operación del circuito.
3. Realiza un documento escrito que contenga los siguientes
elementos:
a. Carátula: Deberá incluir
i. Institución
ii. Número de práctica
iii. Nombre de la práctica
iv. Nombre del alumno
v. Horario
vi. Fecha de entrega
b. Objetivos: Particular y específicos
c. Descripción de la práctica: Trabajo realizado en clase
d. Resultados obtenidos:
i. Parciales o totales obtenidos de la realización de la
práctica
ii. Problemas circunstanciales del desarrollo de la
práctica
e. Conclusiones

Referencias

Bibliografía
 ANGULO J. (2000). Microcontroladores PIC. España. Paraninfo.
 GONZALEZ J. (1992).Introducción a los Microcontroladores. España.
Graw-Hill.
 MYKE P. (2001). Programming and Customizing the PIC
Microcontroller. McGraw-Hill. México.
 PALACIOS E. (2006). Microcontrolador PIC16F84, Desarrollo de
proyectos México: Alfaomega Ra-Ma.
 TAFANERA A. (2000). Teoría y diseño con Microcontroladores PIC.
México. Autores Editores.

11
 TORRES P. (1994). Microprocesadores y Microcontroladores Aplicados
a la Industria. Madrid. Paraninfo.

Mesografía
Microchip (2011) http://microchip.com

12
Anexo 1

Código fuente

; * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * *
; * Universidad Nacional Autonoma de Mexico *
; * Facultad de Estudios Superiores Aragon *
; * *
; * Laboratorio de *
; * Microprocesadores y Microcontroladores *
; * *
; * Práctica 2 Ver 2.0 (c) 2007 *
; * Revisión 1 (c) 2011 *
; * Manejo de tablas *
; * *
; * M en I Arcelia Bernal Díaz *
; * Ing Ignacio Mendoza Nucameni *
; * *
; * TEMAS: *
; * Comparación entre registros *
; * saltos en función de un bit *
; * Saltos en función de un registro *
; * *
; * Microcontrolador: PIC16F887 *
; * Oscilador: 8 MHz interno *
; * *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Este programa compara el dato del puerto de entrada PORTB con un
"Numero"*
; * Si PORTB = NUMERO se encienden los led de la forma 0XAA *
; * Si PORTB > NUMERO se encienden los led de la forma 0XF0 *
; * Si PORTB < NUMERO se encienden los led de la forma 0X0F *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * ****

__CONFIG _CONFIG1, _INTOSCIO & _MCLRE_OFF & _WDT_OFF & _LVP_OFF &
_CPD_OFF & _CP_OFF & _BOR_OFF & _PWRTE_ON & _FCMEN_OFF & _IESO_OFF

LIST P=16F887
#INCLUDE <P16F887.INC>

#define NUMERO .32

ORG 00h ; Inicio del programa


Init
BCF STATUS, RP1 ; Cambio al banco 1
BSF STATUS, RP0
MOVLW b'11111111' ; Configurar puerto B como entrada

13
MOVWF TRISB
MOVLW b'00000000' ; Configurar puerto D como salida
MOVWF TRISD
BSF STATUS, RP1 ; Cambio al banco 3
BSF STATUS, RP0
CLRF ANSELH ; Puerto B configurado como digital
BCF STATUS, RP1 ; Cambio al Banco 0
BCF STATUS, RP0

CLRF PORTD ; Borra el Registro del Puerto D

Principal
MOVLW NUMERO
SUBWF PORTB,W
BTFSC STATUS, Z ; SI PORTB = NUMERO ENTONCES
GOTO EsIgual ; salta a EsIguales
BTFSC STATUS, C ; SINO SI PORTB > NUMERO ENTONCES
GOTO EsMayor ; salta a EsMayor
GOTO EsMenor ; SINO salta a EsMenor
EsIgual
MOVLW 0xAA
MOVWF PORTD ; Actulizar salida en PUERTOD
GOTO Principal
EsMayor
MOVLW 0xF0
MOVWF PORTD ; Actulizar salida en PUERTOD
GOTO Principal
EsMenor
MOVLW 0x0F
MOVWF PORTD ; Actulizar salida en PUERTOD
GOTO Principal
END

14
Anexo 2

Circuito práctica 2

15
Anexo 3

Fuente de 5V

Material

 Batería 9V o eliminador 12V


 1 Resistencia de 470Ω
 1 LED rojo
 1 Capacitor de 100uF
 2 Capacitores de 0.1uF
 1 Regulador de Voltaje 7805

16

Das könnte Ihnen auch gefallen