Está en la página 1de 54

Tabla de contenido

PREFACIO.........................................................................................................................3
PRÁCTICA # 1.- INTRODUCCIÓN AL MPLAB..................................................................4
PRÁCTICA # 2.- USO DEL PROGRAMADOR DE MICROCONTROLADORES............11
PRÁCTICA # 3.- MANEJO DE PUERTOS DIGITALES...................................................16
PRÁCTICA # 4.- CONVERTIDOR ANALÓGICO DIGITAL..............................................21
PRÁCTICA # 5.- COMUNICACIÓN SERIE ASÍNCRONA...............................................25
PRÁCTICA # 6.- MANEJO DE TEMPORIZADORES......................................................32
PRÁCTICA # 7.- MANEJO DE MÓDULOS CAPTURE/COMPARE/PWM......................36
PRÁCTICA # 8.- MANEJO DE INTERRUPCIONES........................................................43
PRÁCTICA # 9.- PROGRAMACIÓN DE MEMORIA EEPROM.......................................48
PREFACIO

El presente manual de prácticas está diseñado con el propósito de que el estudiante


aprenda a emplear las herramientas de Codificación, Depuración, Ensamble,
Simulación y Programación de Algoritmos en Lenguaje Ensamblador para
Microcontroladores de la compañía Microchip, de la familia PIC16F87x, con
actualizaciones para trabajar con circuitos de la familia PIC16F88x, el cual además de
las características de la familia PIC16F87x cuenta con un oscilador interno. Aunque las
mismas prácticas pueden ser adaptadas para cualquier otro microcontrolador de la
misma familia que cuente con características de hardware similares.

El presente manual se divide en un total de 9 prácticas donde el alumno llevará a cabo


una comparación entre los conocimientos adquiridos en el aula con la práctica.

Las primeras dos prácticas de laboratorio se centran en el manejo de herramientas de


software y hardware, que le permitirán al alumno codificar, depurar, ensamblar y simular
los algoritmos que diseñe (programa MPLAB IDE) además de programar esos
algoritmos en un circuito Microcontrolador (Programadores Universales).

La tercera práctica es sobre manejo de los Sistemas Periféricos o Puertos del


microcontrolador, con los cuales el alumno llevará a cabo aplicaciones sencillas de
lectura de datos digitales o control de salidas digitales.

En la cuarta práctica, el alumno se familiarizará con el uso del sistema de Conversión


Analógica Digital, empleado en aplicaciones de lecturas de señales analógicas
continuas como es medición de parámetros como temperatura, humedad, flujo, nivel,
etc.

En la quinta práctica, el alumno empleará el sistema USART (Sistema de comunicación


serial RS-232), para establecer comunicación con dispositivos periféricos externos que
empleen este mecanismo para comunicarse, por ejemplo una Computadora.

En las tres prácticas que siguen, en alumno se familiarizará con los Sistemas que
basan su funcionalidad en el uso del sistema de Reloj del Microcontrolador, que son
Temporizadores, Contadores, Entradas por Captura, Salidas por Comparación, PWM,
así como el sistema de Interrupciones.

En la última práctica, el alumno aprenderá a leer y escribir datos en la memoria


EEPROM interna que se mantendrán almacenados permanentemente aún cuando se
quite la alimentación al circuito Microcontrolador.

M.I. Jesús Alfonso Márquez Borbón


Profesor Investigador de Carrera Asociado
Instituto Tecnológico Superior de Cajeme
Enero de 2015
PRÁCTICA # 1.- INTRODUCCIÓN AL MPLAB

OBJETIVOS:

 El alumno aprenderá a manejar la herramienta computacional MPLAB para codificar,


ensamblar, ligar y simular el funcionamiento de programas escritos en Lenguaje
ensamblador para microcontroladores de la compañía Microchip.

INTRODUCCIÓN:

El MPLAB es un entorno de desarrollo integrado que le permite escribir y codificar los


microcontroladores PIC de Microchip para ejecutarlos. El MPLAB incluye un editor de
texto, funciones para el manejo de proyectos, un simulador interno y una variedad de
herramientas que lo ayudarán a mantener y ejecutar su aplicación. También provee una
interface de usuario para todos los productos con lenguaje Microchip, programadores
de dispositivos, sistemas emuladores y herramientas de tercer orden.

El MPLAB está diseñado para ser ejecutado bajo Windows 3.11, y puede operar con
Windows 95 y 98. Asume que el usuario ya conoce el entorno de Windows y sabe
manejarlo.

MATERIAL Y EQUIPO EMPLEADO

 Laboratorio equipado con computadoras.


 Programa MPLAB instalado.

DESARROLLO

1. Para iniciar MPLAB IDE, dar doble clic al icono instalado en el Escritorio o
seleccionar Inicio>Programas>Microchip>MPLAB IDE vx.xx>MPLAB IDE.
a. Desplegándose la ventana de trabajo de MPLAB. (Figura 1).

2. Para seleccionar el dispositivo Microcontrolador con el que se trabajará, seleccione


el menú Configure>Select Device. Esto abre un cuadro de diálogo donde deberá
seleccionar el PIC16F877A o el PIC16F887 (o en su defecto el microcontrolador con
el que desees trabajar) si es que no se encuentra seleccionado. Se puede observar
un conjunto de indicadores de color que muestran el soporte que tiene la compañía
para el dispositivo seleccionado.
a. Indicador verde.- soporte completo
b. Indicador amarillo.- soporte preliminar.
c. Indicador rojo.- no existe soporte para este dispositivo.
Figura 1. Ventana de Trabajo de MPLAB

3. El siguiente paso es crear un proyecto. Un proyecto es la forma en que los archivos


están organizados para ser compilados y ensamblados. Seleccionar Project>Project
Wizard. De la ventana de bienvenida dar clic al botón Next>, la ventana siguiente les
pide seleccionar el dispositivo, asegurarse que esta seleccionado el PIC16F877A o
el PIC16F887, de no ser así, seleccionarlo en la lista desplegable, después dar clic
en Next>.

4. La siguiente ventana les pide que seleccionen el lenguaje de programación del


Microcontrolador, estos valores los dejaremos por omisión, dándole clic al botón
Next>.

5. A continuación debemos asignarle un nombre a nuestro proyecto y una ubicación en


el disco duro (una carpeta de trabajo). Le pondremos “PRACT01” y usando el botón
Browse ubicaremos al proyecto en la carpeta C:\MICROS\PRACTICAS\ (si no
existe la carpeta, hay que crearla), después dar clic en Next>.

6. En el paso siguiente se les pide que agreguen al proyecto los archivos codificados
en ensamblador (si es que ya cuentan con ellos), aquí daremos clic en Next>.
Mostrándose un resumen de la configuración del Asistente, donde daremos clic en
Finalizar>

7. Se abrirá el área de trabajo, con el administrador de proyectos (una ventana con un


directorio como el navegador de archivos de Windows).
8. Abriremos un archivo para escribir el código de nuestro programa, del menú
Archivo>New, escribiremos el siguiente programa en la ventana, guardando el
archivo en el directorio de trabajo con el nombre PRACT01.ASM

9. Si usamos el PIC16F877A, escribiremos:


LIST P=16F877A
#INCLUDE <P16F877A.INC>

__CONFIG 0x3F39

REG1 EQU 0x2C


REG2 EQU 0x2D
REG3 EQU 0x2E
GRUESO EQU 0x40
MEDIO EQU 0x40
FINO EQU 0x50

RESET ORG H'0000'


GOTO INICIO

INICIO ORG 0x05

CLRW
MOVWF PORTB

BSF STATUS, RP0


BCF STATUS, RP1

CLRF TRISB

BCF STATUS, RP0


BCF STATUS, RP1

PPAL MOVLW 0x01


MOVWF PORTB

CALL RETARDO

MOVLW 0x00
MOVWF PORTB

CALL RETARDO

GOTO PPAL

RETARDO MOVLW GRUESO


MOVWF REG1

DEM3 MOVLW MEDIO


MOVWF REG2

DEM2 MOVLW FINO


MOVWF REG3

DEM1 DECFSZ REG3, F


GOTO DEM1

DECFSZ REG2, F
GOTO DEM2

DECFSZ REG1, F
GOTO DEM3

RETLW 0

END
10. Si usamos el PIC16F887A, escribiremos:
LIST P=16F887
#INCLUDE <P16F887.INC>

__CONFIG _CONFIG1, 0x20D5


__CONFIG _CONFIG2, 0x3FFF

REG1 EQU 0x2C


REG2 EQU 0x2D
REG3 EQU 0x2E
GRUESO EQU 0x40
MEDIO EQU 0x40
FINO EQU 0x50

RESET ORG H'0000'


GOTO INICIO

INICIO ORG 0x05

CLRW
MOVWF PORTB

BSF STATUS, RP0


BSF STATUS, RP1
CLRF ANSEL
CLRF ANSELH

BSF STATUS, RP0


BCF STATUS, RP1

CLRF TRISB

BCF STATUS, RP0


BCF STATUS, RP1

PPAL MOVLW 0x01


MOVWF PORTB

CALL RETARDO

MOVLW 0x00
MOVWF PORTB

CALL RETARDO

GOTO PPAL

RETARDO MOVLW GRUESO


MOVWF REG1

DEM3 MOVLW MEDIO


MOVWF REG2

DEM2 MOVLW FINO


MOVWF REG3

DEM1 DECFSZ REG3, F


GOTO DEM1

DECFSZ REG2, F
GOTO DEM2

DECFSZ REG1, F
GOTO DEM3

RETLW 0

END
11. Se agrega el archivo del código del programa (PRACT01.ASM) al administrador de
proyectos, posicionando el cursor en la carpeta SORCE FILES, se da clic al botón
derecho y del menú emergente seleccionamos ADD FILES. Buscando el código del
programa que acabamos de crear.

12. Se guarda el archivo y el proyecto.

13. Del menú Project, podemos ensamblar y ligar los archivos del proyecto. Todavía no
tiene código propio en ellos, pero con esto se asegura de que el proyecto esté
configurado correctamente. Para construir el proyecto se debe seleccionar:
a. Project>Build All
b. Dar clic al botón derecho del ratón y seleccionar Build All en la ventana
emergente.
c. Dar clic en el botón Build All en la barra de herramientas de Proyectos.

14. La ventana de salida muestra los resultados del proceso de construcción. Donde no
debería presentarse ningún error. De presentarse algún error, se abre un archivo de
bitácora, indicando la línea donde se presenta el error y una breve descripción del
error que se presento. Se debe corregir y volver a ensamblar hasta que no se
presenten mensajes de ERROR o de WARNING.

15. Observar la carpeta donde se creó el proyecto. Observe los archivos que se han
creado. Abra y analice los archivos con extensión *.LST y *.HEX

SIMULACIÓN

1. Seleccionar la herramienta de Depuración, del menú Debugger>Select Tool. Y de la


ventana desplegable seleccionar MPLAB SIM, visualizando los siguientes cambios:
1) En la barra de estado inferior de la ventana de MPLAB IDE debe cambiar a
“MPLAB SIM”
2) Deben aparecer nuevas opciones en el menú “Debugger”
3) Se activan iconos nuevos en la barra de herramientas, apareciendo como
herramientas de depuración.
4) Se agrega la pestaña MPLAB SIM a la ventana de Salida (Output)
Figura 2. Activación de opciones de Simulación

2. En seguida se debe seleccionar Debugger>Reset>Processor Reset y debe


aparecer una flecha verde donde inicia el programa.

3. Para ejecutar una instrucción del programa se selecciona Debugger>Step Into. Esto
ejecuta la línea de código actual y mueve la flecha a la siguiente línea de código a
ser ejecutada. Para seguir ejecutando el código del programa se sigue
seleccionando la función Step Into.

4. Para regresar a una instrucción que ya ha sido ejecutada seleccionar


Debugger>Step Out. Cuando se manda llamar a una función y se desea observar
cómo se ejecuta instrucción por instrucción se selecciona Debugger>Step Into, pero
si lo que se desea es ejecutar la función como si fuera una instrucción seleccionar
Debugger>Step Over.

5. Existen una serie de opciones rápidas para las funciones de las herramientas de
depuración:

6. Para poder observar si el código está operando adecuadamente sobre el PORTB.


Seleccionar View>Watch para abrir una ventana de visualización. Aquí se presentan
dos opciones de listas desplegables; la de la izquierda etiquetada como “Add SFR”
se usa para agregar Registros con Funciones Especiales, como los puertos.
Seleccionar PORTB de la lista y después darle clic al botón “Add SFR” para
agregarlo a la ventana. Agregar los registros PORTB, TRISB, STATUS, WREG y
PCL.

7. La opción desplegable de la derecha permite agregar símbolos definidos en el


programa. Use esta lista para agregar la variable “reg1” a la ventana de
visualización. Seleccione “reg1” de la lista y después de clic en “Add Symbol” para
agregarla. Agregar las variables reg2 y reg3.

8. La ventana de visualización debe mostrar la dirección, valor y nombre de los


Registros agregados.

Figura 3. Ventana Watch, para verificar los valores de los Registros y variables.

9. Ejecute el programa paso a paso presionando la tecla F7, verificando los valores
arrojados en cada variable en la ventana de visualización al ejecutarse cada
instrucción. Los registros y variables que son modificadas con la ejecución de cada
instrucción, se ven de color rojo). Si presiona la tecla F8 las subrutinas se ejecutan
como si fueran instrucciones simples.
PRÁCTICA # 2.- USO DEL PROGRAMADOR DE
MICROCONTROLADORES

OBJETIVOS:

 El alumno aprenderá a manejar las herramientas de hardware y software para


grabar en un Microcontrolador programas escritos en Lenguaje ensamblador de la
compañía Microchip.

INTRODUCCIÓN:

Un programador universal es un dispositivo electrónico que a través del puerto paralelo


o USB de un equipo de cómputo, permite programar, leer, copiar o comprobar cualquier
dispositivo Dual In Line (Circuitos integrados con doble fila de terminales) de hasta 48
terminales. Existe una lista de adaptadores para diferente tipo de encapsulados.

MATERIAL Y EQUIPO EMPLEADO

 Laboratorio equipado con computadoras.


 Programador Universal o hardware de programación de PIC’s.
 Software del Programador de Microcontroladores empleado (Chipmax, SuperPro,
ICPROG).

DESARROLLO

1. Para esta práctica es necesario contar con un programa funcional, que se encuentre
ya Ensamblado y Ligado, y de preferencia haber hecho una simulación de la
funcionalidad del mismo (el archivo PRAC01.HEX de la práctica anterior).
2. Conectar el Programador Universal al puerto serie, paralelo o USB, según sea el
caso.
3. Ejecutar el Software con el que opera el Programador Universal empleado:

PROGRAMADOR CHIPMAX

a) Ir al botón Inicio seleccionar Todos los Programas, seleccionar la opción


EETools, y ejecutar el programa Max Loader. Debe aparecer una ventana como
la que se presenta en la figura 4.
Figura 4. Ventana de trabajo Max Loader- ChipMax

b) Abrir el receptáculo del Programador y colocar el circuito integrado a programar,


en nuestro caso es el PIC16F877A / PIC16F887. Tener cuidado al colocar el
circuito en la base, y después cerrar el receptáculo. El circuito no debe tener
movimiento alguno.
c) El siguiente paso es Seleccionar el dispositivo en el programa. Para esto
seleccione del menú Device la opción Select (Ctrl+F7), lo que abre una ventana
para seleccionar el dispositivo.
d) En el recuadro de búsqueda escriba PIC16F877A / PIC16F887, o buscar el
componente en la lista por fabricante y por componentes. Seleccione el
componente deseado y dar clic en el botón OK.
e) En seguida debemos cargar el programa a grabar en el dispositivo; para esto del
menú File seleccionamos la opción Load (F3), abriendo un navegador de
archivos.
f) Buscamos el archivo binario del programa a grabar con extensión *.HEX y
damos clic en el botón OK. Esto carga el programa en un Buffer de memoria.
g) Si deseas analizar o revisar los datos de tu programa lo puedes hacer en el
menú Buffer seleccionando la opción Edit Buffer (F6), donde se abre una
ventana de edición donde podemos ya sea visualizar o Editar la información del
buffer.
h) Si no configuramos la palabra de control del dispositivo, del menú Device
seleccionamos la opción Option (Ctrl+O), donde podemos configurar diferentes
opciones del microcontrolador, por el momento solo seleccionaremos la opción
HS-High Speed Crystal del oscilador, dando clic en OK para cerrar esa ventana.
i) Para programar el dispositivo debemos seguir los siguientes pasos:
 Borrar el Dispositivo (Device>Erase ó Ctrl+E)
 Checar que el dispositivo este borrado (Device>Blank check ó Ctrl+B)
 Programar el Dispositivo (Device>Program ó Ctrl+P) y
 Verificar que el dispositivo este programado (Device>Verify ó Ctrl+V)
j) También puede programar el dispositivo de manera automática seleccionando
del menú Device la opción Auto (Ctrl+A), que básicamente realiza los pasos que
sigues en el punto anterior.
k) Si deseas leer un dispositivo ya programado (siempre y cuando no esté activado
el bit de protección), selecciona del menú Device la opción Read, lo que hace
una copia de la memoria del circuito al buffer del equipo de cómputo.
l) El siguiente paso es abrir la palanca del hardware para liberar el circuito y
quitarlo de la base.
m) Montar el circuito programado en un circuito de prueba, y verificar la operación y
funcionalidad del programa grabado.
n) Para salir del programa seleccionar la opción Exit del menú File (Alt+X)

PROGRAMADOR SUPERPRO, ICPROG.

a) Los pasos para cualquier programador universal o de algún microcontrolador


específico son los mismos que ya se mencionaron, aunque la presentación
gráfica, nombres de funciones u opciones de programación sean diferentes.
b) Para ejecutar el programador universal SUPERPRO. Ir al botón Inicio
seleccionar Todos los Programas, seleccionar la opción SUPERPRO LX. Debe
aparecer una ventana como la que se presenta en la figura 5.

Figura 5. Ventana de trabajo SUPERPRO LX


c) Para ejecutar el programador de PIC ICPROG. Abrir una ventana de navegación
de archivos, buscar la carpeta ICPROG y ejecutar el archivo ICPORG.EXE. Debe
aparecer una ventana como la que se presenta en la figura 6.

Figura 6. Ventana de Trabajo ICPROG


Actividad Complementaria:

Graba en un circuito el programa “PRACT01A” que se simulo en la práctica anterior,


diseñar un circuito para probar el funcionamiento de este programa. Si usan el PIC
16F887 omitir el oscilador conectado a OSC1 y OSC2.

VC C

U 1

2
M C LR 1 R A0 3
O SC 1 13 M C L R /V P P R A1 4
O S C 1 /C L K R A2 5
11 R A3 6
32 VD D R A 4 /T 0 C L K 7
VD D R A 5 /S S 33
R B 0 /IN T 34
R B1 35
R B2 36
R B3 37 R 3
R B4 38 470
R B5 39
R B6 40
R B7 15
R C 0 /T 1 O S I/T 1 C L K 16
R C 1 /T 1 O S O 17
R C 2 /C C P 1 18 D 1
R C 3 /S C K /S C L 23
R C 4 /S D I/S D A 24 LED
R C 5 /S D O 25
R C 6 26
R C 7 19
R D 0 /P S P 0 20
R D 1 /P S P 1 21
R D 2 /P S P 2 22
R D 3 /P S P 3 27
R D 4 /P S P 4 28
R D 5 /P S P 5 29
R D 6 /P S P 6 30
R D 7 /P S P 7 8
R E 0 /R D 9
R E 1 /W R 10
R E 2 /C S
G N D
G N D

14 O SC 2
O S C 2 /C L K O U T

P IC 1 6 F 8 7 7
12
31

VC C

C 1
O SC 1
R 2
47k
22pF Y 1
SW 1
C 2 8 MH z M C LR
O SC 2
S W P U S H B U TTO N

22pF

Figura 7. Diagrama esquemático práctica 2.


Nota: Las conexiones del Cristal (Y1) solo se harán para el PIC16F877 o si configuras
el PIC16F887 para conectar un Oscilador Externo.
PRÁCTICA # 3.- MANEJO DE PUERTOS DIGITALES

OBJETIVOS:

 El alumno aprenderá a diseñar algoritmos escritos en Lenguaje ensamblador, que le


permitan configurar y aprovechar los periféricos de Entrada y Salida de un circuito
Microcontrolador.

INTRODUCCIÓN:

Una unidad de entrada-salida, llamada también puerto, es un dispositivo empleado por


la computadora para recibir o enviar datos al mundo exterior. Algunos de estos
dispositivos son: teclado, ratón, interruptores, impresora, monitor, discos magnéticos,
tarjetas de comunicación, etc. Estos dispositivos al igual que las localidades de
memoria tienen direcciones únicas por medio de las cuales el procesador interactúa con
ellos. Estas direcciones se expresan generalmente en hexadecimal.

El PIC16F877 contiene 5 puertos que pueden ser configurados como entrada o salida
digitales (A, B, C, D, E). El puerto A contiene 6 bits (RA0-5). El puerto B (RB0-7), el
puerto C (RC0-7) y el puerto D (RD0-7) tienen cada uno 8 líneas. El puerto E solo
cuenta con 3 líneas (RE0-2)

La operación de configuración de los puertos en general implica la siguiente secuencia:


 Ingresar al banco 1
 Configurar los puertos (registros TRISA, TRISB, TRISC, TRISD y TRISE)
 Regresar al banco 0
 Escribir o leer datos desde los puertos. (registros PORTA, PORTB, PORTC,
PORTD y PORTE )

MATERIAL Y EQUIPO EMPLEADO

 Laboratorio equipado con computadoras.


 Programador Universal
 Software del Programador de Microcontroladores empleado (Chipmax, SuperPro,
ICPROG).
 Fuente de Alimentación.
 Osciloscopio
 Circuito de prueba armado en protoboard (ver diagramas esquemáticos).

DESARROLLO

1. Abrir el programa MPLAB y copiar la siguiente secuencia de código la cual se


guardará con el nombre de “PRAC03.ASM”.
LIST P=16F877A
INCLUDE "P16F877A.INC" LIST P=16F887
__CONFIG 0x3F39 INCLUDE "P16F887.INC"
__CONFIG _CONFIG1, 0x20D5
CONF_ADCON1 EQU b'00000110' ; __CONFIG _CONFIG2, 0x3FFF
ORG 0x000 ;
NOP ; ORG 0x000 ;
NOP ; NOP ;
BSF STATUS, RP0 ; NOP ;
BCF STATUS, RP1 BSF STATUS, RP0 ;
MOVLW CONF_ADCON1 ; BSF STATUS, RP1
MOVWF ADCON1 CLRF ANSEL
MOVLW B'00111111' ; CLRF ANSELH
MOVWF TRISA BCF STATUS, RP1
CLRF TRISB ; MOVLW B'00111111' ;
BCF STATUS, RP0 ; MOVWF TRISA
BCF STATUS, RP1 CLRF TRISB ;
BUCLE: BCF STATUS, RP0 ;
MOVF PORTA, W ; BCF STATUS, RP1
MOVWF PORTB ; BUCLE:
GOTO BUCLE ; MOVF PORTA, W ;
END ; MOVWF PORTB ;
GOTO BUCLE ;
END ;
2. Ensamblar, depurar y simular el funcionamiento paso a paso de este programa.

3. Analizar el programa de esta práctica y contestar las siguientes preguntas:

a. ¿Para qué sirve la instrucción list? ¿Esta instrucción se ejecuta en la


simulación paso a paso?

b. ¿Para qué sirve la instrucción include? ¿Esta instrucción se ejecuta en la


simulación paso a paso?

c. ¿Qué resultado arrojan la instrucción nop?

d. Qué función cumplen las instrucciones:


bsf STATUS,RP0
bsf STATUS,RP1

e. ¿Cuál es la razón de guardar en el registro ADCON1 el valor binario


b’00000110’?

f. ¿Para qué sirven los registros TRISA y TRISB?

g. ¿Qué valor es necesario guardar en los registros de configuración para que


los periféricos sirvan como Puertos de Entrada?

h. ¿Qué valor es necesario guardar en los registros de configuración para que


los periféricos sirvan como Puertos de Salida?
i. Qué función cumplen las instrucciones:
bcf STATUS,RP0
bcf STATUS,RP1

4. En general describir el funcionamiento del programa.

5. Grabar el programa en un Microcontrolador.

6. Armar el circuito de prueba que se muestra a continuación.


R 2 470 D 1 LED
VC C R B0
R 3 470 D 2 LED
U 1 R B1
R B0 R 2
2 R A 0 R 4 3 3 04 7 0 D 1
D 3 LED
M C LR 1 R A0 3 R A 1 R B2
O SC 1 13 M C L R /V P P R A1 4 R A 2 R B1 R 3 330 D 2
O S C 1 /C L K R A2 5 R A 3 R 5 470 D 4 LED
11 R A3 6 R A 4 R B3
32 VD D R A 4 /T 0 C L K 7 R A 5 R B2 R 4 330 D 3
VD D R A 5 /S S 3 3 R B 0 R 6 470 D 5 LED
R B 0 /IN T 3 4 R B 1 R B4
R B1 3 5 R B 2 R B3 R 5 330 D 4
R B2 3 6 R B 3 R 7 470 D 6 LED
R B3 3 7 R B 4 R B5
R B4 3 8 R B 5 R B4 R 6 330 D 5
R B5 3 9 R B 6 R 8 470 D 7 LED
R B6 4 0 R B 7 R B6
R B7 1 5 R B5 R 7 330 D 6
R C 0 /T 1 O S I/T 1 C L K 1 6 R 9 470 D 8 LED
R C 1 /T 1 O S O 1 7 R B7
R C 2 /C C P 1 R B6 R 8 330 D 7
1 8
R C 3 /S C K /S C L 2 3
R C 4 /S D I/S D A 2 4
R C 5 /S D O R B7 R 9 330 D 8
2 5
R C 6 2 6
R C 7 1 9
R D 0 /P S P 0 2 0
R D 1 /P S P 1 2 1 VC C
R D 2 /P S P 2 2 2
R D 3 /P S P 3 2 7
R D 4 /P S P 4 2 8
R D 5 /P S P 5 2 9
R D 6 /P S P 6 3 0
R D 7 /P S P 7 8 R 10 R 11 R 12 R 13 R 14 R 15
R E 0 /R D 9 47k 47k 47k 47k 47k 47k
R E 1 /W R 1 0
R E 2 /C S
G N D
G N D

1 4 O SC 2
O S C 2 /C L K O U T R A 5
R A 4
P IC 1 6 F 8 7 7 R A 3
12
31

R A 2
R A 1
R A 0
VC C
6
5
4
3
2
1
0
1
1
1
1
1
1
1
9

C 1 SW 2
O SC 1
R 1 S W D IP -8
47k
22pF Y 1
SW 1
1
2
3
4
5
6
7
8

C 2 8 M H z M C LR
O SC 2
SW P U SH B U TTO N

22pF

Figura 8. Diagrama esquemático práctica 3.


7. Probar el funcionamiento del circuito, cambiando el estado de los microswitches de
ON a OFF.

8. Después de probar el circuito, responda las siguientes preguntas:

a. ¿Cuál es el resultado observado?


b. ¿El resultado obtenido es el mismo al resultado esperado? (lo que se observa
en la práctica coincide con la simulación obtenida).

Actividad Complementaria:
 Escriba un programa en el que se configure el puerto A como entrada y el puerto B
como salida, el algoritmo debe leer el valor binario del puerto A (4 microswitch en la
parte baja del puerto) y desplegarlo en el puerto B donde se tendrá un display de 7
segmentos de Ánodo Común, si consigues un display de Cátodo Común, la terminal
común del diagrama deberá conectarse a GND. Ensamblar, depurar, simular el
programa y probar el funcionamiento en un circuito Microcontrolador.
VC C VC C

U 1
R 2 470
2 R A 0 R B0 a
M C LR 1 R A0 3 R A 1
O SC 1 13 M C L R /V P P R A1 4 R A 2 R 3 470
O S C 1 /C L K R A2 5 R A 3 R B1 b
11 R A3 6 R A 4
32 VD D R A 4 /T 0 C L K 7 R A 5 R 4 470
VD D R A 5 /S S 3 3 R B 0 R B2 c
R B 0 /IN T 3 4 R B 1
R B1 3 5 R B 2 R 5 470
R B2 3 6 R B 3 R B3 d
R B3 3 7 R B 4
R B4 3 8 R B 5 R 6 470
R B5 3 9 R B 6 R B4 e
R B6 4 0 R B 7
R B7 1 5 R 7 470
R C 0 /T 1 O S I/T 1 C L K 1 6 R B5 f
R C 1 /T1 O S O 1 7
R C 2 /C C P 1 1 8 R 8 470
R C 3 /S C K /S C L 2 3 R B6 g
R C 4 /S D I/S D A 2 4
R C 5 /S D O 2 5
R C 6 2 6
R C 7 1 9
R D 0 /P S P 0 2 0 VC C
R D 1 /P S P 1 2 1
R D 2 /P S P 2 2 2
R D 3 /P S P 3 2 7
R D 4 /P S P 4 2 8
R D 5 /P S P 5 2 9
R D 6 /P S P 6 3 0
R D 7 /P S P 7 8 R 10 R 11 R 12 R 13
R E 0 /R D 9 47k 47k 47k 47k
R E 1 /W R 1 0
R E 2 /C S
G N D
G N D

1 4 O SC 2
O S C 2 /C L K O U T

P IC 1 6 F 8 7 7 R A 3
12
31

R A 2
R A 1
R A 0
VC C
3
2
6
5
4

1
0
1
1
1
1
1
1
1
9

C 1 SW 2
O SC 1
R 1 S W D IP -8
47k
22pF Y 1
SW 1
1
2
3
4
5
6
7
8

C 2 8 M H z M C LR
O SC 2
S W PU SH B U TTO N

22pF

Figura 9. Diagrama esquemático práctica 3, actividad complementaria 1

 Escriba un programa que configure el puerto B parte baja (RB0-RB3) como entrada
y la parte alta (RB4-RB7) como salida y el puerto C como salida, en el puerto B se
tendrá conectado un teclado matricial de 4x4 y en el puerto C se tendrán conectado
un LCD de 16x2, en la parte baja (bits del 0 al 3) se tendrá conectado el bus de
datos parte alta (D4 a D7) y en la parte alta los bits de control (E y RS). El programa
checará la tecla presionada en el teclado matricial conectado al puerto B y lo
desplegara en el puerto C, haciendo un corrimiento hacia la derecha del valor
anterior, ejemplo: si se presiona la tecla ‘1’ se tiene desplegado “1_ _ _” y se
presiona la tecla “3”, se debe desplegar “1 3 _ _ ”. Ensamblar, depurar, simular el
programa y probar el funcionamiento en un circuito Microcontrolador. Omitir el
oscilador si usa un PIC 16F887.
VC C
VC C SW 2 SW 3 SW 4 SW 5

U 1 1 2 1 2 1 2 1 2
[0 ] [1 ] [2 ] [3 ]

2 [0 ] [1 ] [2 ] [3 ]
M C LR 1 R A0 3 R 10 R 11 R 12 R 13
O SC 1 13 M C L R /V P P R A1 4 47k 47k 47k 47k SW 6 SW 8
SW 7 SW 9
O S C 1 /C L K R A2 5
11 R A3 6 1 2 1 2 1 2 1 2
32 VD D R A 4 /T 0 C L K 7 [4 ] [5 ] [6 ] [7 ]
VD D R A 5 /S S 33 R B 0
R B 0 /IN T 34 R B 1 R B 0 R B 0 [4 ] [5 ] [6 ] [7 ]
R B1 R B 1
35 R B 2 R B 1 R B 2
S W 10 SW 11 SW 12 SW 13
R B2 36 R B 3 R B 2
R B3 R B 3
37 R B 4 R B 3 1 2 1 2 1 2 1 2
R B4 38 R B 5 [8 ] [9 ] [A ] [B ]
R B5 39 R B 6
R B6 40 R B 7 [8 ] [9 ] [A ] [B ]
R B7 15 R C 0 S W 14 SW 17
SW 15 SW 16
R C 0 /T 1 O S I/T 1 C L K 16 R C 1
R C 1 /T 1 O S O 17 R C 2
R C 2 /C C P 1 1 2 1 2 1 2 1 2
18 R C 3 [C ] [D ] [E ] [F ]
R C 3 /S C K /S C L 23 R C 4
R C 4 /S D I/S D A 24 R C 5 [C ] [D ] [E ] [F ]
R C 5 /S D O 25 R C 6 R B 4
R C 6 26 R C 7 R B 5
R C 7 19 R B 6 R B 4
R D 0 /P S P 0 20 R B 7 R B 5
R D 1 /P S P 1 21 R B 6
R D 2 /P S P 2 22 R B 7
VC C VC C VC C VC C
R D 3 /P S P 3 27
R D 4 /P S P 4 28 R C 4
R D 5 /P S P 5 29 R C 5 47 k
R D 6 /P S P 6 30 R C 6 3 3 3 3
R D 7 /P S P 7 8 R C 7 2 Q 1 2 Q 1 2 Q 1 2 Q 1
R E 0 /R D 9 12 N 2 2 2 2 12 N 2 2 2 2 12 N 2 2 2 2 12 N 2 2 2 2
R E 1 /W R 10
R E 2 /C S
G N D
G N D

14 O SC 2
O S C 2 /C L K O U T

VC C P IC 1 6 F 8 7 7 LC D 16x2
12
31

VC C
R 1
47k
0
1
2
3
4
5
6
1
2
3
4
5
6
7
8
9
1
1
1
1
1
1
1
SW 1
D D
EE
SS

/W

MC LR
S

0
1
2
3
4
5
6
7
R
R

D
D
D
D
D
D
D
D
V
V
V

R C 3
S W P U S H B U TTO N VC C R 2 470
R 5 R C 2
A R C 1
R 3 470 PO T
U 2 R C 0
1

R C 0 7 1 3 B
C 1 R C 1 1 1 A 1 2 R 4 470
2 B 2 R C 5
O SC 1 R C 2 2 1 1 C R C 4
R C 3 6 4 C 1 0 R 5 470
4 8 D 9 D
22pF Y 1 5 B I/R B O E 1 5 R 6 470
3 R BI F 1 4 E
C 2 8 M H z LT G R 7 470
3

O SC 2 74LS48 F
R 8 470
G
22pF

Figura 10. Diagrama esquemático práctica 3, actividad complementaria 2


PRÁCTICA # 4.- CONVERTIDOR ANALÓGICO DIGITAL

OBJETIVOS:

 El alumno aprenderá a diseñar algoritmos escritos en Lenguaje ensamblador, que le


permitan configurar y aprovechar los Convertidores Analógico-Digital de un circuito
Microcontrolador.

INTRODUCCIÓN:

Un convertidor analógico a digital tiene como entrada un nivel de voltaje (valor


analógico) y produce en su salida un número binario de n bits proporcionales al nivel de
la entrada (valor digital). Los convertidores de señal análoga a digital se abrevian como
ADC o A/D.

Uno de los parámetros que definen al A/D es la resolución definida como la mínima
variación de voltaje en la entrada que produce cambio del valor digital en la salida. Por
ejemplo: un convertidor de 10 bits tiene un total de 2 10 valores (1024 valores de 0 a
1023).

Si tenemos 10V a la entrada la resolución seria de 9,765mV; en este caso el voltaje es


de 10V a 0V pero pueden variar. Por ejemplo si tenemos de 10v a 5v la resolución será:
Resolución= (10v – 5v)/1024=4.88 mV

Una fórmula para el cálculo será:


Resolución= (Vref2-Vref1)/1024

donde las tensiones de referencia son 10V y 5V, respectivamente.

MATERIAL Y EQUIPO EMPLEADO

 Laboratorio equipado con computadoras.


 Programador Universal
 Software del Programador de Microcontroladores empleado (Chipmax, SuperPro,
ICPROG).
 Fuente de Alimentación.
 Osciloscopio
 Circuito de prueba armado en protoboard (ver diagramas esquemáticos).

DESARROLLO

1. Abrir el programa MPLAB y copiar la siguiente secuencia de código la cual se


guardará con el nombre de “PRAC04.ASM”.
LIST P=16F877A LIST P=16F887
INCLUDE "P16F877A.INC" INCLUDE "P16F887.INC"
__CONFIG 0x3F39 __CONFIG _CONFIG1, 0x20D5
__CONFIG _CONFIG2, 0x3FFF
ORG 0x00
NOP ORG 0x00
NOP NOP
_INICIO _INICIO
BCF STATUS, RP0 BANKSEL ADCON0
BCF STATUS, RP1 MOVLW B'01000001'
MOVLW B'01000001' MOVWF ADCON0
MOVWF ADCON0
BANKSEL ANSEL
BSF STATUS, RP0 BSF ANSEL, 0
BCF STATUS, RP1
MOVLW B'00000001' BANKSEL TRISA
MOVWF TRISA MOVLW B'00000001'
CLRF TRISC MOVWF TRISA
CLRF TRISC
MOVLW b'00000111' MOVLW b'00000111'
MOVWF OPTION_REG MOVWF OPTION_REG
MOVLW B'00001110' CLRF ADCON1
MOVWF ADCON1
BANKSEL PORTC
BCF STATUS, RP0 CLRF PORTC
BCF STATUS, RP1
CLRF PORTC _BUCLE
BTFSS INTCON, T0IF
_BUCLE GOTO _BUCLE
BTFSS INTCON, T0IF
GOTO _BUCLE BCF INTCON, T0IF
BSF ADCON0, GO
BCF INTCON, T0IF
BSF ADCON0, GO _ESPERA
_ESPERA BTFSC ADCON0, GO
BTFSC ADCON0, GO GOTO _ESPERA
GOTO _ESPERA
MOVF ADRESH, W
MOVF ADRESH, W MOVWF PORTC
MOVWF PORTC GOTO _BUCLE
GOTO _BUCLE
END END

2. Ensamblar, depurar y simular el funcionamiento paso a paso de este programa.

3. Analizar el programa de esta práctica y contestar las siguientes preguntas:


a. ¿Cuál es la razón de guardar en el registro ADCON0 el valor binario
b’01000001’?

b. ¿Cuál es la razón de guardar en el registro OPTION_REG el valor binario


b’00000111’?

c. ¿Qué se configura con el dato almacenado en el registro ADCON1?


d. Qué función cumplen las instrucciones:
bsf ADCON0,GO

_espera
btfsc ADCON0,GO
goto _espera

4. En general, describir el funcionamiento del programa.

5. Grabar el programa en un Microcontrolador.

6. Calcule la Resolución Teórica que usara:


Resolución= (Vref2-Vref1)/1024 =___________________=________ mV

7. Llene la tabla siguiente, realizando los cálculos esperados considerando la


resolución calculada con anterioridad.
VALORES TEORICOS
Vin Valor Bin Valor Bin Valor Dec Valor Dec
(Volts) Calculado (10 bits) (8 MSB) (10 bits) (8 MSB)
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0

8. Armar el circuito de prueba que se muestra en la figura 12.

9. Probar el funcionamiento del circuito, variando el valor del potenciómetro de entrada.

10. Colocar el potenciómetro para entregar los voltajes de entrada mostrados en la


Tabla, anotar el valor binario obtenido, calcular el valor de voltaje que representa el
valor digital observado, calcular el dato esperado en la salida en relación al voltaje
de entrada y anotar el porcentaje de error entre el valor esperado y el medido.
VALORES PRACTICOS ERROR
Vin Vin Valor Bin Valor Dec Resolución % Error
(Real) Observado (8 bits) Observado Observada
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0

11. Después de probar el circuito, responda las siguientes preguntas:

a. ¿Cuál es el resultado observado?

b. ¿El resultado obtenido es el mismo al resultado esperado? (lo que se observa


en la práctica coincide con la simulación obtenida).
VC C

U 1 R 2 470 D 1 LED
R C 0
2 R A0
M C LR 1 R A0 3 R 3 470 D 2 LED
O SC 1 13 M C L R /V P P R A1 4 R C 1
O S C 1/C L K R A2 5 R B0 R 2 330 D 1
11 R A3 6 R 4 470 D 3 LED
32 VD D R A 4 /T 0 C L K 7 R C 2R B 1
VD D R A 5 /S S R 3 330 D 2
3 3
R B 0 /IN T 3 4 R 5 470 D 4 LED
R B1 3 5 R C 3R B 2
R B2 R 4 330 D 3
3 6
R B3 3 7 R 6 470 D 5 LED
R B4 3 8 R C 4R B 3 R 5 330 D 4
R B5 3 9
R B6 4 0 R 7 470 D 6 LED
R B7 1 5 R C 0 R C 5R B 4 R 6 330 D 5
R C 0 /T 1 O S I/T 1 C L K 1 6 R C 1
R C 1 /T 1 O S O 1 7 R C 2 R 8 470 D 7 LED
R C 2 /C C P 1 1 8 R C 3 R C 6R B 5 R 7 330 D 6
R C 3 /S C K /S C L 2 3 R C 4
R C 4 /S D I/S D A 2 4 R C 5 R 9 470 D 8 LED
R C 5/S D O 2 5 R C 6 R C 7R B 6 R 8 330 D 7
R C 6 2 6 R C 7
R C 7 1 9
R D 0 /P S P 0 R B7 R 9 330 D 8
2 0
R D 1 /P S P 1 2 1
R D 2 /P S P 2 2 2
R D 3 /P S P 3 2 7
R D 4 /P S P 4 2 8
R D 5 /P S P 5 2 9 VC C
R D 6 /P S P 6 3 0
R D 7 /P S P 7 8
R E 0 /R D 9
R E 1 /W R 1 0
R E 2 /C S
G N D
G N D

1 4 O SC 2
O S C 2 /C L K O U T

3
R 17
P IC 1 6 F 8 7 7 R 16
31
12

R A0 2 10K

470

1
VC C
C 1
O SC 1

R 1
22pF Y 1 47k
C 2 8 M H z SW 1
O SC 2 M C LR

SW P U SH B U TTO N
22pF

Figura 11. Diagrama esquemático práctica 4.

 Actividad complementaria, convertir nuestro ADC en un medidor de voltaje y


desplegar el resultado en un LCD de 16x2, comparar la medición con un
voltímetro. Considere una resolución de despliegue de al menos 2 cifras
decimales. Ejemplo: Volt = 3.15 V
PRÁCTICA # 5.- COMUNICACIÓN SERIE ASÍNCRONA

OBJETIVOS:

 El alumno aprenderá a diseñar algoritmos escritos en Lenguaje ensamblador, que le


permitan configurar y aprovechar la Unidad de Comunicación Serial Asíncrona
(USART) de un circuito Microcontrolador.

INTRODUCCIÓN:

Entre las herramientas que disponen los PIC16F87x se encuentra el USART, llamado
SCI (Serial Comunications Interface), puede funcionar como un sistema de
comunicación bidireccional, adaptándose a multitud de periféricos y dispositivos que
transfieren información de forma serial, tales como una computadora. También puede
trabajar en modo unidireccional para soportar periféricos como memorias,
convertidores, etc.
El USART (Transmisor/Receptor Síncrono/Asíncrono Serie) puede trabajar de dos
formas:
o Asíncrono (Bidireccional)
o Síncrono (Unidireccional)

En el modo asíncrono, la comunicación serie del USART en los PIC16F87x esta


soportada por las líneas RC6/TX/CK y RC7/RX/DT por las que se mueven los bits a la
frecuencia interna de reloj. En el modo síncrono, los bits de información circulan en
ambos sentidos por la línea DT a la frecuencia de los impulsos que genere el maestro
por la línea CK.

En el presente módulo vamos a enfocar el estudio del modo asíncrono.

En esta forma de comunicación serie, se usa la norma RS-232-C, donde cada palabra
de información o dato se envía independientemente de los demás. Cada dato está
formado de 8 ó 9 bits y van precedidos por un bit de START (inicio) y detrás de ellos se
coloca un bit de STOP (parada), de acuerdo con las normas del formato estándar NRZ
(Non Return-to-Zero), los bits se transfieren a una frecuencia fija y normalizada. La
USART transmite y recibe primero el bit menos significativo.

La USART en modo asíncrono contiene los siguientes elementos:


o Generador de Baudios
o Circuito de Muestreo
o Transmisor Asíncrono
o Receptor Asíncrono
MATERIAL Y EQUIPO EMPLEADO

 Laboratorio equipado con computadoras.


 Programador Universal
 Software del Programador de Microcontroladores empleado (Chipmax, SuperPro,
ICPROG).
 Fuente de Alimentación.
 Osciloscopio
 Circuito de prueba armado en protoboard (ver diagramas esquemáticos).

DESARROLLO

1. Abrir el programa MPLAB y copiar la siguiente secuencia de código la cual se


guardará con el nombre de “PRAC05.ASM”. (considerar un Xtal=4MHz).

Rutina de transmisión de datos con PIC16F877


; TX DATO ADC
LIST P=16F877A BANKSEL RCSTA
INCLUDE "P16F877A.INC" BSF RCSTA, SPEN
__CONFIG 0x3F39 BANKSEL TXSTA
BCF TXSTA, TX9
CONF_ADCON1 EQU B'00001110' BSF TXSTA, TXEN
ORG 0x00
NOP _BUCLE
NOP BTFSS INTCON, T0IF
MOVLW B'01000001' GOTO _BUCLES
MOVWF ADCON0
BCF INTCON, T0IF
BANKSEL TRISA BSF ADCON0, GO
MOVLW CONF_ADCON1
MOVWF ADCON1 _ESPERA
MOVLW B'00000111' BTFSC ADCON0,GO
MOVWF OPTION_REG GOTO _ESPERA

BSF TRISA, 0 MOVF ADRESH,W


BCF TRISC, 6 MOVWF TXREG
BSF TRISC, 7
_ESPERATX
MOVLW D'25' BTFSS PIR1, TXIF
MOVWF SPBRG GOTO _ESPERATX
BCF TXSTA, BRGH
BCF TXSTA, SYNC GOTO _BUCLE
END

Rutina de Recepción de datos con el PIC16f877


; RX DATO ADC
LIST P=16F877A CONF_ADCON1 EQU B'00000110'
INCLUDE "P16F877A.INC" ORG 0x00
__CONFIG 0x3F39 NOP
NOP
BANKSEL RCSTA
BANKSEL TRISA BSF RCSTA, SPEN
MOVLW CONF_ADCON1 BCF RCSTA, RX9
MOVWF ADCON1 BSF RCSTA, CREN
CLRF TRISB
BCF TRISC, 6 _ESPERARX
BSF TRISC, 7 BTFSS PIR1, RCIF
GOTO _ESPERARX
MOVLW D'25'
MOVWF SPBRG MOVF RCREG, W
BCF TXSTA, BRGH MOVWF PORTB
BCF TXSTA, SYNC
GOTO _ESPERARX
END

El siguiente código es para implementar la Transmisión serial en un PIC16F887:

; TX DATO ADC
LIST P=16F887 CONF_TXD:
INCLUDE "P16F887.INC" BANKSEL BAUDCTL
__CONFIG _CONFIG1, 0x20D5 CLRF BAUDCTL
__CONFIG _CONFIG2, 0X3FFF BANKSEL SPBRG
MOVLW D'25'
DATO EQU 0X21 MOVWF SPBRG
CONT EQU 0X22 MOVLW B'00100100'
ORG 0x00 MOVWF TXSTA
NOP BANKSEL RCSTA
NOP BSF RCSTA, SPEN
CALL CONF_PTOS RETURN
CALL CONF_ADC ;----------------------
CALL CONF_TXD TOMA_MUESTRA:
CICLO: CALL RETARDO
CALL TOMA_MUESTRA BSF ADCON0, GO
CALL TX_DATO _ESPERA
GOTO CICLO BTFSC ADCON0,GO
;---------------------- GOTO _ESPERA
CONF_PTOS: MOVF ADRESH,W
BANKSEL ANSEL MOVWF DATO
CLRF ANSELH RETURN
CLRF ANSEL ;----------------------
BANKSEL TRISA TX_DATO:
BSF TRISA,0 MOVF DATO,W
BCF TRISC, 6 MOVWF TXREG
BSF TRISC, 7 _ESPERATX
BANKSEL PORTA BTFSS PIR1, TXIF
RETURN GOTO _ESPERATX
;---------------------- RETURN
CONF_ADC: ;----------------------
BANKSEL ANSEL RETARDO:
BSF ANSEL,0 MOVLW D'10'
BANKSEL ADCON1 MOVWF TEMP
CLRF ADCON1 CIX:
BANKSEL ADCON0 DECFSZ TEMP,F
MOVLW 0X01 GOTO CIX
MOVWF ADCON0 RETURN
RETURN ;----------------------
;---------------------- END
El siguiente código es para implementar la Recepción serial en un PIC16F887:

; TX DATO ADC BANKSEL PORTA


LIST P=16F887 RETURN
INCLUDE "P16F887.INC" ;----------------------
__CONFIG _CONFIG1, 0x20D5 CONF_RXD:
__CONFIG _CONFIG2, 0X3FFF BANKSEL BAUDCTL
CLRF BAUDCTL
DATO EQU 0X21 BANKSEL SPBRG
CONT EQU 0X22 MOVLW D'25'
ORG 0x00 MOVWF SPBRG
NOP MOVLW B'00000100'
NOP MOVWF TXSTA
CALL CONF_PTOS BANKSEL RCSTA
CALL CONF_RXD MOVLW B'10010000'
CICLO: MOVWF RCSTA
CALL RX_DATO RETURN
GOTO CICLO ;----------------------
;---------------------- RX_DATO:
CONF_PTOS: BTFSS PIR1, RCIF
BANKSEL ANSEL GOTO RX_DATO
CLRF ANSELH
CLRF ANSEL MOVF RCREG, W
BANKSEL TRISA MOVWF PORTB
CLRF TRISB RETURN
BCF TRISC, 6 ;----------------------
BSF TRISC, 7 END

2. Ensamblar, depurar y simular el funcionamiento paso a paso de este programa.

3. Analizar el programa de esta práctica y contestar las siguientes preguntas:


a. Qué función cumplen las instrucciones, explique brevemente para que sirven
y porque se asignan estos valores a los registros empleados.
BCF TRISC, 6 BCF STATUS, RP1
BSF TRISC, 7 BCF TXSTA, TX9
MOVLW D'25' BSF TXSTA, TXEN
MOVWF SPBRG
BCF TXSTA, BRGH BCF STATUS, RP0
BCF TXSTA, SYNC BCF STATUS, RP1
BCF STATUS, RP0 BCF RCSTA, RX9
BCF STATUS, RP1 BSF RCSTA, CREN
BSF RCSTA, SPEN
BSF STATUS, RP0

b. Qué función cumplen las instrucciones:


_ESPERARX
BTFSS PIR1, RCIF
GOTO _ESPERARX

c. Qué función cumplen las instrucciones:


MOVF RCREG, W
MOVWF PORTC
MOVWF TXREG
d. Qué función cumplen las instrucciones:
_ESPERATX
BTFSS PIR1, TXIF
GOTO _ESPERATX

4. En general describir el funcionamiento del programa.

5. Grabar el programa en un Microcontrolador.

6. Armar el circuito de prueba que se muestra a continuación y compruebe el


funcionamiento, compare los resultados con los obtenidos en la practica 4 del ADC.
U 1
U 1

M C LR 1 2
M C LR 1 2 M C LR R A 0 3
M C LR R A 0 3 R A0 O SC 1 13 R A 1 4
O SC 1 13 R A 1 4 O S C 1 /C L K IN R A 2 5
O S C 1 /C L K IN R A 2 5 O SC 2 14 R A 3
O SC 2 14 R A 3 O S C 2 /C L K O U T 3 3 R B 0
O S C 2 /C L K O U T 3 3 R B 0 /IN T 3 4 R B 1
R B 0 /IN T 3 4 R B 1 3 5 R B 2
R B 1 3 5 R B 2 3 6 R B 3
R B 2 3 6 VC C R B 3 3 7 R B 4
VC C R B 3 3 7 R B 4 3 8 R B 5
R B 4 3 8 11 R B 5 3 9 R B 6
11 R B 5 3 9 VD D R B 6 4 0 R B 7
VD D R B 6 4 0 12 R B 7
12 R B 7 G N D 25
G N D 25 TXD R C 6 26 R XD
R C 6 26 R C 7
R C 7

P IC 1 6 F 8 8 7 (R X )
P IC 1 6 F 8 8 7 (T X )

VC C R B0 R 2 330 D 1
C 1
O SC 1
R B1 R 3 330 D 2
3

R 11
22pF Y 1 R 10 10K
R A0 2 R B2 R 4 330 D 3
C 2 4 M H Z
O SC 2 470
R B3 R 5 330 D 4
VC C
1

22pF
R B4 R 6 330 D 5

R 12
R B5 R 7 330 D 6
SW 1 470

1 2 M C LR R B6 R 8 330 D 7

S W P U SH BU TTO N R B7 R 9 330 D 8

Figura 12. Diagrama esquemático práctica 5.


7. Desconecte la línea que conecta la salida de TX con la de RX de los circuitos, y
varié el potenciómetro. Observe el resultado de salida.

8. Conecte de nuevo la línea que desconecto y cambie de nuevo el valor de la


medición.
Actividad Complementaria: Escriba un programa que configure un solo
microcontrolador para TX y RX datos al mismo tiempo. El programa deberá tomar una
muestra del canal AN0 y enviarla por puerto serie a una velocidad de 2400 Baud, y
podrá recibir al mismo tiempo un dato en código ASCII, el cual deberá ser desplegado
en un LCD de 16x2.

Nota: El ejercicio considera que se tiene un cable de comunicación serial que será
conectado al puerto de la Computadora y a la terminal del circuito de esta práctica.
De no ser así, se recomienda checar las conexiones del puerto de comunicaciones,
para establecer una comunicación apropiada; la termina de TX (3) del equipo de
cómputo deberá conectarse con la terminal de Recepción del circuito y la terminal de
RX (2) del equipo de cómputo, deberá conectarse a la terminal de Transmisión del
circuito.
R 2 470 D 1 LED
VC C R B0
R 3 470 L C D 1D6 2x 2 LED
U 1 R B1

2 R 4 470 D 3 LED
M C LR 1 R A0 3 R B2
O SC 1 13 M C L R /V P P R A1 4
O S C 1 /C L K R A2 5 R 5 470 D 4 LED

11
12

14

16
10

13

15
VC C

1
2
3
4
5
6
7
8
9
11 R A3 6 R B3
VD D R A 4 /T0 C L K

VD D
VSS

VEE
32 7

R W
R C 3

D 0
D 1
D 2
D 3
D 4
D 5
D 6
D 7
VD D R A 5 /S S R 6 D 5

R S
33 R B 0 470 LED

E
R B 0 /IN T 34 R B 1 R B4 R C 2
R B1 35 R B 2 R C 1
R B2 36 R B 3 R 7 470 D 6 LED R C 0
R B3 37 R B 4 R B5
1

R B4 38 R B 5 VC C
R B5 R C 5
39 R B 6 R 8 470 D 7 LED
R B6 R 13 2 R C 4
40 R B 7 R B6
R B7 15
R C 0 /T 1 O S I/T 1 C L K 16
10K R 9 470 D 8 LED
R C 1 /T 1 O S O 17 R B7

3
R C 2 /C C P 1 18 R 11
R C 3 /S C K /S C L 23 R 10 10K
3

R C 4 /S D I/S D A 24
R C 5 /S D O R A0 2
25 TXD
R C 6 26 R XD
R C 7 470
19
R D 0 /P S P 0 20
R D 1 /P S P 1 21 VC C

1
R D 2 /P S P 2 22
R D 3 /P S P 3 27
R D 4 /P S P 4 28
R D 5 /P S P 5 U 3
29
16

R D 6 /P S P 6 30
R D 7 /P S P 7 M A X232
8 12 13
R E 0 /R D R 1O U T R 1 IN
VC C

9 R XD R 18 330 9 8 R 20 330 R XD B 9
R E 1 /W R 10 14 R 2O U T R 2 IN 11
R E 2 /C S T1O U T T1 IN
G N D
G N D

14 O SC 2 TXD B 9 R 19 330 7 10 R 21 330 TXD


O S C 2 /C L K O U T T2O U T T2 IN
VC C 1
P IC 1 6 F 8 7 7 C +
12
31

2 3 C 3 1uF
V+ C 1- 4
C 5 1uF 6 C 2+
V-
G N D

5 C 4 1uF
C 2-
VC C C 6
15

C 1 1uF
O SC 1

R 1
22pF Y 1 47k P1
5
C 2 8 MH z SW 1 9
O SC 2 M C LR 4
8
S W P U S H B U TTO N TXD B 9 3
22pF 7
R XD B 9 2
6
1

C O N N E C TO R D B 9

Figura 13. Diagrama esquemático práctica 5, Actividad Complementaria.


9. Para probar este circuito puede utilizar cualquier programa que permita utilizar el
puerto serial RS-232 de su equipo de cómputo. Permitiendo configurar el puerto
serial, permitir enviar datos y permitir visualizar los datos recibidos.
10. En este ejemplo, explicaremos el uso de Hypertermina. Si no tiene instalado el
programa, puede ser descargado de Internet e instálelo.

11. Para Configurar Hyper terminal, debemos realizar los pasos siguientes:

Abrir el programa hyper terminal. Ingresar a:


Inicio->Accesorios->Comunicaciones->Hyper terminal

Si el Hyper terminal no está instalado, ingrese a:


Inicio-> Configuración panel de control -> Agregar quitar programas

Elija la pestaña Instalación de Windows. Ahora seleccione Comunicaciones y habilite el


Hyper terminal.

Figura 14. Ventanas de activación de Hyper Terminal

Una vez que se abra el hyper terminal observará una ventana como la que se muestra.
Elija el ícono para crear una conexión. A continuación le aparecerá una ventana de
mensajes:
Necesita instalar un modem antes de poder hacer una conexión Desea hacerlo
ahora? Elija el botón “No”
Figura 15. Programa HyperTerminal.

Ahora elija un icono que identifique la conexión. Asigne como nombre:


“demo”
A continuación aparece una ventana para seleccionar el puerto con el que operará la
conexión. Como el ICD está conectado al COM1 elegiremos en esta ventana el
“COM2”
Presione el botón Aceptar

Figura 16. Ventana de configuración del puerto de comunicaciones de HyperTerminal.

Ahora proceda a configurar el puerto serial propiamente dicho.


 Bits por segundo : 2400
 Bits de datos : 8
 Paridad : Ninguna
 Bit de parada : 1
 Control de flujo : ninguno

Presione el botón Aceptar.


Figura 17. Parámetros de configuración puerto serial.

Si todo ha terminado sin novedad aparecerá una ventana como la que se muestra en
este momento podrá usted conectarse con algún dispositivo que tenga conectado al
COM2 y que transmita bajo parámetros establecidos (2400:8:0:1:Ninguna)

Figura 18. Ventana de trabajo de HyperTerminal

12. Probar el funcionamiento del circuito, tecleando algunos datos en la ventana de


Hyper Terminal.

13. Después de probar el circuito, responda las siguientes preguntas:

a. ¿Cuál es el resultado observado?

b. ¿El resultado obtenido es el mismo al resultado esperado? (lo que se observa


en la práctica coincide con la simulación obtenida).
PRÁCTICA # 6.- MANEJO DE TEMPORIZADORES

OBJETIVOS:

 El alumno aprenderá a diseñar algoritmos escritos en Lenguaje ensamblador, que le


permitan configurar y aprovechar los sistemas de temporización (Contadores) de un
circuito Microcontrolador.

INTRODUCCIÓN:

Un sistema temporizador está definido como “Un sistema de control de tiempo que se
utiliza para abrir o cerrar un circuito en uno o más momentos determinados, y que
conectado a un dispositivo lo pone en acción”.

El Microcontrolador PIC16F877 cuenta con tres sistemas de temporización TMR0,


TMR1 y TMR2, los cuales consisten básicamente en un registro contador el cual se
incrementa con una señal de reloj pre-escalada de la señal del oscilador externo,
cuando estos registros se desbordan en cierto tiempo se puede tomar una acción.

Algo muy importante de este sistema, es que depende directamente de la frecuencia


del oscilador externo. Por ejemplo, si se tiene un cristal de Xtal= 4 MHz, la frecuencia
de Oscilación del Microcontrolador será de una cuarta parte Fosc= 1MHz (Fosc
=Xtal/4), con lo que obtenemos el tiempo de incremento del Registro de Temporización
TMR0 (sin pre-escalación) de T= 1/Fosc = 1 µS, y si este registro tiene un tamaño de 16
bits, tardará aproximadamente 65,535 µS en desbordarse.

Figura 19. Diagrama a bloques del sistema de temporización.


MATERIAL Y EQUIPO EMPLEADO

 Laboratorio equipado con computadoras.


 Programador Universal
 Software del Programador de Microcontroladores empleado (Chipmax, SuperPro,
ICPROG).
 Fuente de Alimentación.
 Osciloscopio
 Circuito de prueba armado en protoboard (ver diagramas esquemáticos).

DESARROLLO

1. Abrir el programa MPLAB y copiar la siguiente secuencia de código la cual se


guardará con el nombre de “PRAC06.ASM”. (Xtal= 4MHz).

LIST P=16F877A GOTO _BUCLE


INCLUDE "P16F877A.INC"
__CONFIG 0x3F39 _RETARDO
MOVLW D'64'
CONTA EQU 0x20 MOVWF CONTA

ORG 0x00 _ESPERA1


NOP CLRF INTCON
NOP MOVLW D'134'
_INICIO MOVWF TMR0
BANKSEL TRISA
CLRF TRISC _ESPERA
MOVLW B'11000110' BTFSS INTCON, T0IF
MOVWF OPTION_REG GOTO _ESPERA
BANKSEL PORTA
CLRF PORTC DECFSZ CONTA, F
GOTO _ESPERA1
_BUCLE RETURN
CALL _RETARDO
INCF PORTC, F END

El código para el PIC16F887 seria:

LIST P=16F887 CICLO:


INCLUDE "P16F887.INC" CALL RETARDO
__CONFIG _CONFIG1,0x20D5 INCF PORTC,F
__CONFIG _CONFIG2,0x3FFF GOTO CICLO

CONTA EQU 0x20 CONF_PTOS:


BANKSEL ANSEL
ORG 0x00 CLR ANSEL
NOP CLAR ANSELH
_INICIO BANKSEL TRISA
CALL CONF_PTOS CLRF TRISC
CALL CONF_TMR0 BANKSEL PORTC
CLRF PORTC _ESPERA1
RETURN CLRF INTCON
MOVLW D'134'
CONF_TMR0: MOVWF TMR0
BANKSEL OPTION_REG
MOVLW B'11000110' _ESPERA
MOVWF OPTION_REG BTFSS INTCON, T0IF
BANKSEL PORTA GOTO _ESPERA
RETURN
DECFSZ CONTA, F
RETARDO: GOTO _ESPERA1
MOVLW D'64' RETURN
MOVWF CONTA
END

2. Ensamblar, depurar y simular el funcionamiento paso a paso de este programa.

3. Analizar el programa de esta práctica y contestar las siguientes preguntas:


a. ¿Cuál es la razón de guardar en el registro OPTION_REG el valor binario
B’11000110’?

b. ¿Cuánto tiempo consume la rutina de Retardo?

c. ¿Por qué se inicializa la variable CONTA a un valor inicial de D’64’?

d. Qué función cumplen las instrucciones:


CLRF INTCON ;

e. ¿Por qué se inicializa el registro TMR0 a un valor inicial de D’134’?

f. Qué función cumplen las instrucciones:


_ESPERA
BTFSS INTCON, T0IF ;
GOTO _ESPERA

4. En general describir el funcionamiento del programa.

5. Grabar el programa en un Microcontrolador.

6. Armar el circuito de prueba que se muestra a continuación.

7. Probar el funcionamiento del circuito.

8. Después de probar el circuito, responda las siguientes preguntas:


a. ¿Cuál es el resultado observado?

b. ¿El resultado obtenido es el mismo al resultado esperado? (lo que se observa


en la práctica coincide con la simulación obtenida).
c. ¿Cuál es la diferencia entre usar una rutina de retardo con instrucciones
cíclicas y usar una rutina de retardo usando el sistema de Temporización?

VC C

U 1 R 2 470 D 1 LED
R C 0
2
M C LR 1 R A0 3 R 3 470 D 2 LED
O SC 1 13 M C L R /V P P R A1 4 R C 1
O S C 1 /C L K R A2 5
11 R A3 6 R A4 R 4 470 D 3 LED
32 VD D R A 4 /T 0 C L K 7 R C 2
VD D R A 5 /S S 33 R B0
R B 0 /IN T 34 R 5 470 D 4 LED
R B1 35 R C 3
R B2 36
R B3 37 R 6 470 D 5 LED
R B4 38 R C 4
R B5 39
R B6 40 R 7 470 D 6 LED
R B7 15 R C 0 R C 5
R C 0 /T 1 O S I/T 1 C L K 16 R C 1
R C 1 /T1 O S O 17 R C 2 R 8 470 D 7 LED
R C 2 /C C P 1 18 R C 3 R C 6
R C 3 /S C K /S C L 23 R C 4
R C 4 /S D I/S D A 24 R C 5 R 9 470 D 8 LED
R C 5 /S D O 25 R C 6 R C 7
R C 6 26 R C 7
R C 7 19
R D 0 /P S P 0 20
R D 1 /P S P 1 21
R D 2 /P S P 2 22
R D 3 /P S P 3 27 VC C
R D 4 /P S P 4 28
R D 5 /P S P 5 29
R D 6 /P S P 6 30
R D 7 /P S P 7 8
R E 0 /R D 9 R 1
R E 1 /W R 10 47k
R E 2 /C S
G N D
G N D

14 O SC 2
O S C 2 /C L K O U T
SW 1
R B0
P IC 1 6 F 8 7 7
12
31

S W P U S H B U TTO N

VC C

VC C
C 1
O SC 1 R 1
47k
R 1
22pF Y 1 47k SW 1
R A4
C 2 8 M H z SW 1
O SC 2 M C LR S W P U S H B U TTO N

S W P U S H B U TTO N
22pF

Figura 20. Diagrama esquemático práctica 6.

Actividad Complementaria: Escribir probar un programa que configure 2 Timers para


generar una señal PWM para controlar un Servomotor conectado en la terminal RA0. El
servomotor deberá girar de 0 a 180 grados cada 5 segundos. Por diseño un servomotor
tiene 3 terminales: Alimentación (5V, rojo o naranja), Tierra (GND, negro o café) y
entrada de control (Señal PWM, amarillo). La señal de control PWM debe tener una
frecuencia de 50 a 60 Hz, con un Activo alto que puede variar entre fabricantes. Por
estándar 1.5mS está indicado para un giro de 90 grados. Los rangos pueden ir de 0.5 a
2.5 mS, o de 1.0 a 2.0 mS, para controlar el giro de 0 a 180 grados. Verificar el
funcionamiento del programa conectando un Servomotor y verifique con un osciloscopio
el ancho de pulso y la frecuencia de su programa.
PRÁCTICA # 7.- MANEJO DE MÓDULOS CAPTURE/COMPARE/PWM

OBJETIVOS:

 El alumno aprenderá a diseñar algoritmos escritos en Lenguaje ensamblador, que le


permitan configurar y aprovechar los Módulos de Entradas por Captura, Salidas por
Comparación y PWM de un circuito Microcontrolador.

INTRODUCCIÓN:

Algunos circuitos Microcontroladores cuentan con sistemas especiales que dependen


directamente de una señal externa o del sistema de temporización que les sirve como
evento de disparo. Los sistemas más comunes asociados son: Entradas por Captura,
Salidas por Comparación y generadores de señales PWM.

En el modo Capture, los registros CCPR1H:CCPR1L capturan el valor de 16-bits del


registro TMR1 cuando ocurre un evento en la terminal RC2/CCP1. Un evento se define
como:
 Cada filo descendente
 Cada filo ascendente
 Cada 4 filos ascendentes
 Cada 16 filos ascendentes

Figura 21. Diagrama a bloques del funcionamiento del sistema de Entradas por Captura

En el modo Compare, el valor del registro CCPR1 de 16-bits se compara


constantemente con el valor del registro TRM1. Cuando la comparación se iguala, la
terminal del RC2/CCP1:
 Cambia a un valor activo Alto
 Cambia a un valor activo Bajo
 Se mantiene sin cambio
Figura 22. Diagrama a bloques del funcionamiento del sistema de Salidas por
Comparación

En el modo de Modulación de Ancho de Pulso (PWM), la terminal CCPx produce una


salida PWM hasta con una resolución de 10-bits.

Figura 23. Diagrama a bloques del funcionamiento del sistema PWM

La salida PWM tiene una base de tiempo (periodo) y un tiempo en el que la salida se
mantiene en alto (ciclo de operación). La frecuencia de PWM es el inverso del periodo
(1/periodo).
Figura 24. Ciclo de trabajo de un periodo PWM

El periodo de PWM se especifica escribiendo en el registro PR2. El periodo de PWM


puede calcularse usando la formula siguiente:
Periodo PWM = [(PR2)+1]*4*Tosc*(Valor de pre-escalación del TMR2).

La frecuencia del PWM está definida como 1/[Periodo PWM].

MATERIAL Y EQUIPO EMPLEADO

 Laboratorio equipado con computadoras.


 Programador Universal
 Software del Programador de Microcontroladores empleado (Chipmax, SuperPro,
ICPROG).
 Fuente de Alimentación.
 Osciloscopio
 Circuito de prueba armado en protoboard (ver diagramas esquemáticos).

DESARROLLO

1. Abrir el programa MPLAB y copiar la siguiente secuencia de código la cual se


guardará con el nombre de “PRAC07.ASM”. (Xtal= 8MHz).
LIST P=16F877A
INCLUDE "P16F877A.INC"
__CONFIG 0x3F39

RB0 EQU 0X00


RB1 EQU 0X01
RB2 EQU 0X02
RB3 EQU 0X03
RB4 EQU 0X04
RB5 EQU 0X05
RB6 EQU 0X06
RB7 EQU 0X07
RC0 EQU 0X00
RC1 EQU 0X01
RC2 EQU 0X02
RC3 EQU 0X03
RC4 EQU 0X04
RC5 EQU 0X05
RC6 EQU 0X06
RC7 EQU 0X07

; *************************************************************************
ORG 0x00
REINICIO:
GOTO INICIO

; *************************************************************************
ORG 0x06
INICIO
CALL CONFIGURA_PUERTOS
CALL PWM1_15MS

CICLO:
BTFSS PORTB, RB0 ; SI EL PUERTOB<0>
GOTO GRADOS_90

BTFSS PORTB, RB1 ; SI EL PUERTOB<1>


GOTO GRADOS_00

BTFSS PORTB, RB2 ; SI EL PUERTOB<2>


GOTO GRADOS_180
GOTO CICLO

GRADOS_00:
CALL PWM1_05MS_B
GOTO CICLO

GRADOS_90:
CALL PWM1_15MS_B
GOTO CICLO

GRADOS_180:
CALL PWM1_25MS_B
GOTO CICLO

; *************************************************************************
CONFIGURA_PUERTOS:
CALL BANCO_0
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE

CALL BANCO_1
MOVLW B'10000000'
MOVWF TRISC
MOVLW B'00001111'
MOVWF TRISB
CALL BANCO_0

RETURN

; *************************************************************************
PWM1_15MS:

;PASO1:
CALL BANCO_1
MOVLW 0xF9 ; PR2= 249 = 0XF9
MOVWF PR2
CALL BANCO_0

;PASO2:
MOVLW 0X5D ;CCPR1L:CCP1CON=375=0X177=[0X5D:<11>]
MOVWF CCPR1L

BSF CCP1CON, 5 ;CCPR1L:CCP1CON=187.5=0XBB=[0X2E:<11>]


BSF CCP1CON, 4

;PASO3:
CALL BANCO_1
BCF TRISC, 2
CALL BANCO_0

;PASO4:
MOVLW B'00000110' ;
MOVWF T2CON
CLRF TMR2

;PASO5:
BSF CCP1CON, 2 ;
BSF CCP1CON,3

RETURN

; *************************************************************************
PWM1_05MS_B:

;PASO2:
MOVLW 0X1F ;CCPR1L:CCP1CON=62.5=0X3E=[0X0F:<10>]
MOVWF CCPR1L

BSF CCP1CON, 5 ;CCPR1L:CCP1CON=62.5=0X3E=[0X0F:<10>]


BCF CCP1CON, 4

RETURN

; *************************************************************************
PWM1_15MS_B:

;PASO2:
MOVLW 0X5D ;CCPR1L:CCP1CON=187.5=0XBB=[0X2E:<11>]
MOVWF CCPR1L

BSF CCP1CON, 5 ;CCPR1L:CCP1CON=187.5=0XBB=[0X2E:<11>]


BSF CCP1CON, 4

RETURN

; *************************************************************************
PWM1_25MS_B:

;PASO2:
MOVLW 0X9C ;CCPR1L:CCP1CON=312.5=0X138=[0X4E:<00>]
MOVWF CCPR1L

BCF CCP1CON, 5 ;CCPR1L:CCP1CON=312.5=0X138=[0X4E:<00>]


BCF CCP1CON, 4

RETURN

; *************************************************************************
BANCO_0:
BCF STATUS, RP0
BCF STATUS, RP1
RETURN

BANCO_1:
BSF STATUS, RP0
BCF STATUS, RP1
RETURN

BANCO_2:
BCF STATUS, RP0
BSF STATUS, RP1
RETURN

BANCO_3:
BSF STATUS, RP0
BSF STATUS, RP1
RETURN

; *************************************************************************
; FIN DEL PROGRAMA
; *************************************************************************
END

Nota: hacer las modificaciones necesarias para trabajar con el PIC16F887.

2. Ensamblar, depurar y simular el funcionamiento paso a paso de este programa.

3. Analizar el programa de esta práctica y contestar las siguientes preguntas:


a. ¿Cuál es la operación de la subrutina CONFIGURA_PUERTOS?
b. ¿Cuál es la operación de las subrutinas BANCO_0, BANCO_1, BANCO_2 y
BANCO_3?
c. ¿Explica paso a paso la operación de la subrutina PWM1_15MS?
d. ¿Qué cambios significativos provoca la subrutina PWM1_05MS_B?
e. ¿Qué cambios significativos provoca la subrutina PWM1_15MS_B?
f. ¿Qué cambios significativos provoca la subrutina PWM1_25MS_B?
4. En general describir el funcionamiento del programa.

5. Grabar el programa en un Microcontrolador.

6. Armar el circuito de prueba que se muestra a continuación.


VD D
VC C
C 1
O SC 1
U 1
R 3
2 22pF Y 1
M C LR 1 R A0 3 R 2 470
U 4
O SC 1 13 M C L R /V P P R A1 4 C C P1 1 6 D S1 C 2 8 M H z
O S C 1/C L K R A2 5 O SC 2
11 R A3 6 470 5 1 2
32 VD D R A 4 /T 0 C L K 7
VD D R A 5 /S S 3 3 R B 0 4 22pF
R B 0 /IN T 3 4 R B 1 2
R B1 3 5 R B 2 LAM P
4N 25A
R B2 3 6 R B 3
R B3 3 7
R B4 3 8 VC C
R B5 3 9
R B6 4 0 VC C
R B7 1 5
R C 0 /T 1 O S I/T 1 C L K 1 6
R C 1 /T 1 O S O 1 7 C C P1 R 1
R C 2/C C P 1 1 8 47k
R C 3 /S C K /S C L 2 3
R C 4 /S D I/S D A 2 4 SW 1
R C 5 /S D O 2 5 R 4 R 5 R 6 R 7 M C LR
R C 6 2 6 47k 47k 47k 47k
R C 7 1 9 R ESET
R D 0 /P S P 0 2 0
R D 1 /P S P 1 2 1 R B 0
R D 2 /P S P 2 2 2 R B 1
R D 3 /P S P 3 2 7 R B 2
R D 4 /P S P 4 2 8 R B 3
R D 5 /P S P 5 2 9
R D 6 /P S P 6 3 0
R D 7 /P S P 7 8
8
7
6
5

R E 0 /R D 9 SW 18
R E 1 /W R 1 0
R E 2 /C S S W D IP -4
G N D
G N D

1 4 O SC 2
O S C 2 /C L K O U T

P IC 1 6 F 8 7 7
31
12

1
2
3
4

Figura 25. Diagrama esquemático práctica 7.

7. Probar el funcionamiento del circuito.

8. Después de probar el circuito, responda las siguientes preguntas:


a. ¿Cuál es el resultado observado?

b. Conectar un osciloscopio a la terminal RC2 (CCP1, terminal 17). ¿Cuál es la


frecuencia de operación de la salida PWM?, ¿Cuál es el tiempo del ciclo activo?

c. Modifique los microswitch para observar la salida en el osciloscopio, anote los


resultados obtenidos. ¿Cambio la frecuencia de operación de la salida PWM?
¿Cuál es el tiempo activo de la señal?

d. ¿El resultado obtenido es el mismo al resultado esperado? (lo que se observa


en la práctica coincide con la simulación obtenida).
PRÁCTICA # 8.- MANEJO DE INTERRUPCIONES

OBJETIVOS:

 El alumno aprenderá a diseñar algoritmos escritos en Lenguaje ensamblador, que le


permitan configurar y aprovechar las ventajas que ofrece el manejo de
Interrupciones de un circuito Microcontrolador.

INTRODUCCIÓN:

La familia Pic16F87x tiene 13 fuentes de interrupciones los de 28 pines y 14 los de 40


pines. Al aceptarse una interrupción se salva el valor del PC (contador de programa) en
la pila y se carga aquel con el valor 0004h, que es el Vector de Interrupción. La mayoría
de los recursos o periféricos de que disponen los Pic16F87x son capaces de ocasionar
una interrupción, si se programan adecuadamente los bits de los registros que pasamos
a describir a continuación.
1. Desbordamiento del TMR0
2. Activación de la patita de interrupción RB0/INT
3. Cambio de estado de una de las cuatro patitas de más peso del puerto B
4. Finalización de la escritura de un byte en la EEPROM

Hasta aquí se tienen las mismas causas de interrupción del Pic16F84


5. Desbordamiento del Timer1
6. Desbordamiento del Timer2
7. Captura o comparación en el módulo CCP1
8. Captura o comparación en el módulo CCP2
9. Transferencia en la puerta serie Síncrona
10. Colisión de bus en la puerta serie Síncrona
11. Fin de la transmisión en el USART
12. Fin de la recepción en el USART
13. Fin de la conversión en el convertidor A/D
14. Transferencia en la puerta paralela esclava (Esta causa de interrupción no está
disponible en los Pic16F87x de 28 patitas)

MATERIAL Y EQUIPO EMPLEADO

 Laboratorio equipado con computadoras.


 Programador Universal
 Software del Programador de Microcontroladores empleado (Chipmax, SuperPro,
ICPROG).
 Fuente de Alimentación.
 Osciloscopio
 Circuito de prueba armado en protoboard (ver diagramas esquemáticos).
DESARROLLO

1. Abrir el programa MPLAB y escribir la siguiente secuencia de código la cual se


guardará con el nombre de “PRAC08.ASM”. (Xtal= 4MHz).
LIST P=16F877A ;Comando que indica el Pic usado
INCLUDE "P16F877A.INC" ;Etiquetas genéricas para el Pic16F877
__CONFIG 0x3F39

_INT_SAVE_W EQU 0x20 ;Var para guardar W


_INT_SAVE_STATUS EQU 0x21 ;Var para guardar STATUS
_INT_SAVE_FSR EQU 0x22 ;Var para guardar FSR
_INT_SAVE_PCLATH EQU 0x23 ;Var para guardar PCLATH
_INT_SAVE_OPTION_REG EQU 0x24 ;Var para guardar OPTION_REG

ORG 0x00 ;Inicio del programa en la posición cero de memoria


NOP ;Libre (uso del debugger)
GOTO _INICIO ;Ir _inicio

ORG 0x04 ;
MOVWF _INT_SAVE_W ;
SWAPF STATUS, W ;
MOVWF _INT_SAVE_STATUS
SWAPF FSR, W ;
MOVWF _INT_SAVE_FSR
SWAPF PCLATH, W ;
MOVWF _INT_SAVE_PCLATH
SWAPF OPTION_REG, W ;
MOVWF _INT_SAVE_OPTION_REG

GOTO _INTERRUPCION ;Ir rutina de interrupcion

_INICIO
BCF STATUS, RP0 ;Ir banco 0
BCF STATUS, RP1
MOVLW b'01000001' ;A/D conversion Fosc/8
MOVWF ADCON0
BSF STATUS, RP0 ;Ir banco 1
BCF STATUS, RP1

CLRF TRISA ;PORTA salida


CLRF TRISB ;PORTB salida
CLRF TRISC ;PORTC salida
CLRF TRISD ;PORTD salida
CLRF TRISE ;PORTE salida

BCF TRISC, 6 ;RC6/TX salida, pin de transmisión


BSF TRISC, 7 ;RC7/Rx entrada, pin de recepción
MOVLW D'25' ;2400 baud rate Xtal=4Mhz
MOVWF SPBRG
BCF TXSTA, BRGH ;Selección de baja velocidad
BCF TXSTA, SYNC ;Modo asíncrono

MOVLW B'00001110' ;A/D Port AN0/RA0


MOVWF ADCON1
BSF TRISA, 0 ;RA0 linea de entrada para el ADC
CLRF INTCON ;Deshabilitar interrupciones
CLRF PIE1
CLRF PIE2
BSF PIE1, RCIE ;Habilita INTR Recepcion Serial
BSF INTCON, PEIE ;Habilita INTR perifericos
BSF INTCON, GIE ;Habilitador general de interrupciones

BCF STATUS, RP0 ;Ir banco 0


BCF STATUS, RP1
BSF RCSTA, SPEN ;habilita el puerto serie
BSF STATUS, RP0 ;Ir banco 1
BCF STATUS, RP1

BCF TXSTA, TX9 ;8 bits de datos a transmitir


BSF TXSTA, TXEN ;Activa la transmisión serial, TXIF = 1
BCF STATUS, RP0 ;Ir banco 0
BCF STATUS, RP1
BCF RCSTA, RX9 ;8 Bits de datos
BSF RCSTA, CREN ;Para Rx Continuo
CLRF PORTC ;PORTC=0

_BUCLE
BSF ADCON0, GO ;Start A/D conversion

_ESPERA
BTFSC ADCON0, GO ;ADCON0 es 0? (la conversion esta completa?)
GOTO _espera ;No, ir _espera
MOVF ADRESH, W ;Si, W=ADRESH
MOVWF PORTC ;Muestra el resultado en PORTC
GOTO _BUCLE ;Ir bucle

_INTERRUPCION ;Rutina de interrupcion


BCF INTCON, PEIE ;Deshabilita INTR perifericos
MOVF ADRESH, W ;W= ADC
MOVWF TXREG ;Transmitir dato, TXREG = W

_ESPERATX
BTFSS PIR1, TXIF ;Espera hasta que transmisión culminó
GOTO _ESPERATX ;No, ir _esperatx
MOVF RCREG, W ;Limpia el flag de interrupcion RCIF =0
BSF INTCON, PEIE ;Habilita INTR perifericos
SWAPF _INT_SAVE_OPTION_REG, W ;Restaurar valor de OPTIO_REG
MOVWF OPTION_REG
SWAPF _INT_SAVE_PCLATH, W ;Restaurar valor de PCLATH
MOVWF PCLATH
SWAPF _INT_SAVE_FSR, W ;Restaurar valor de FSR
MOVWF FSR
SWAPF _INT_SAVE_STATUS, W ;Restaurar valor de STATUS
MOVWF STATUS
SWAPF _INT_SAVE_W, W
RETFIE

END

2. Ensamblar, depurar y simular el funcionamiento paso a paso de este programa.


3. Analizar el programa de esta práctica y contestar las siguientes preguntas:
a. ¿Cuál es la razón por la que se utiliza la directiva ORG 0x04? ¿Qué indica
esta dirección de memoria?

b. Qué función cumplen las instrucciones:


ORG 0x04 ;
MOVWF _INT_SAVE_W ;
SWAPF STATUS, W ;
MOVWF _INT_SAVE_STATUS
SWAPF FSR, W ;
MOVWF _INT_SAVE_FSR
SWAPF PCLATH, W ;
MOVWF _INT_SAVE_PCLATH
SWAPF OPTION_REG, W ;
MOVWF _INT_SAVE_OPTION_REG

c. ¿En qué dirección de memoria esta la etiqueta de _INICIO del programa?

d. ¿En qué momento el programa entra al Vector de Interrupciones y ejecuta el


código que inicia en la etiqueta _INTERRUPCION?

4. En general describir el funcionamiento del programa.

5. Grabar el programa en un Microcontrolador.

6. Armar el circuito de prueba que se muestra a continuación.

7. Probar el funcionamiento del circuito.

8. Después de probar el circuito, responda las siguientes preguntas:


a. ¿Cuál es el resultado observado?

b. ¿El resultado obtenido es el mismo al resultado esperado? (lo que se observa


en la práctica coincide con la simulación obtenida).

c. ¿Cuál es la diferencia entre un programa que usa Interrupciones y otro que


no las use?

d. ¿En tu opinión personal que es mejor?


R 2 470 D 1 LED
VC C R B0
R 3 470 D 2 LED
U 1 R B1

2 R A0 R 4 470 D 3 LED
M C LR 1 R A0 3 R B2
O SC 1 13 M C L R /V P P R A1 4
O S C 1 /C L K R A2 5 R 5 470 D 4 LED
11 R A3 6 R B3
32 VD D R A 4 /T 0 C L K 7
VD D R A 5 /S S 33 R B 0 R 6 470 D 5 LED
R B 0 /IN T 34 R B 1 R B4
R B1 35 R B 2
R B2 36 R B 3 R 7 470 D 6 LED
R B3 37 R B 4 R B5
R B4 38 R B 5
R B5 39 R B 6 R 8 470 D 7 LED
R B6 40 R B 7 R B6
R B7 15
R C 0 /T 1 O S I/T 1 C L K 16 R 9 470 D 8 LED
R C 1 /T1 O S O 17 R B7
R C 2 /C C P 1 18
R C 3 /S C K /S C L 23
R C 4 /S D I/S D A 24
R C 5 /S D O 25 TXD
R C 6 26 R XD
R C 7 19
R D 0 /P S P 0 20
R D 1 /P S P 1 21 VC C
R D 2 /P S P 2 22
R D 3 /P S P 3 27
R D 4 /P S P 4 28
R D 5 /P S P 5 U 3
29

16
R D 6 /P S P 6 30
R D 7 /P S P 7 M A X232
8 12 13
R E 0 /R D R 1O U T R 1 IN

VC C
9 R XD R 18 330 9 8 R 20 330 R XD B 9
R E 1 /W R 10 14 R 2O U T R 2 IN 11
R E 2 /C S T1O U T T 1 IN
G N D
G N D

14 O SC 2 TXD B 9 R 19 330 7 10 R 21 330 TXD


O S C 2 /C L K O U T T2O U T T 2 IN
VC C 1
P IC 1 6 F 8 7 7 C +
12
31

2 3 C 3 1uF
V+ C 1- 4
C 5 1uF 6 C 2+
V-

G N D
5 C 4 1uF
C 2-
C 6
VC C

15
C 1 1uF VC C
O SC 1

22pF Y 1 R 1 P1
47k 5
C 2 8 M H z 9

3
O SC 2 SW 1 4 R 17
M C LR 8 R 16
TXD B 9 3 R A0 2 10K
22pF S W P U S H B U TTO N 7
R XD B 9 2
6 470
1

1
C O N N EC TO R D B9

Figura 26. Diagrama esquemático práctica 8.


PRÁCTICA # 9.- PROGRAMACIÓN DE MEMORIA EEPROM

OBJETIVOS:

 El alumno aprenderá a diseñar algoritmos escritos en Lenguaje ensamblador, que le


permitan configurar y aprovechar las ventajas que ofrece el almacenamiento de
información en memorias EEPROM de un circuito Microcontrolador.

INTRODUCCIÓN:

La memoria EEPROM (llamada de datos) y la memoria FLASH (memoria de programa)


pueden ser leídas y escritas durante la ejecución de un programa. Trabajan con el
voltaje de alimentación del microcontrolador (VDD).

La memoria de datos (EEPROM) tiene una palabra de 8 bits. Cuando accedemos a


este bloque de memoria el registro EEDATA contiene los 8 bits de datos y el registro
EEADR contiene la dirección que deseamos trabajar. El PIC16F877 tiene 256
posiciones de memoria de datos (EEPROM) numeradas de 0x00 a 0xFF (de 0 a 255).
La memoria de datos (EEPROM) es una memoria no volátil que se graba
eléctricamente, es útil porque nos permite almacenar valores o parámetros que sean
persistentes en la ejecución de la aplicación. Esto es, que no se borren frente a la
pérdida de energía o reset.

En la memoria FLASH (programa) podemos leer o escribir palabras. El acceso a la


memoria de programa se hace para el cálculo del checksum y la calibración de tablas
de almacenamiento. La escritura de un byte o de una palabra borra automáticamente la
localización seleccionada y coloca en ella el dato elegido. La escritura de la memoria de
programa cesa todas las operaciones hasta que es completada. La memoria de
programa no puede ser accedida durante un ciclo de escritura por tanto ninguna
instrucción puede ser ejecutada. Durante la operación de escritura el oscilador continúa
trabajando los demás módulos. Si se presenta una interrupción, está queda en espera
(en una suerte de cola) hasta que el ciclo de escritura de la memoria de programa haya
terminado. Terminado el ciclo, ejecuta una instrucción más (que se cargó antes de que
empiece la grabación) y luego salta al vector de interrupción.

MATERIAL Y EQUIPO EMPLEADO

 Laboratorio equipado con computadoras.


 Programador Universal
 Software del Programador de Microcontroladores empleado (Chipmax, SuperPro,
ICPROG).
 Fuente de Alimentación.
 Osciloscopio
 Circuito de prueba armado en protoboard (ver diagramas esquemáticos).
DESARROLLO

1. Abrir el programa MPLAB y escribir la siguiente secuencia de código la cual se


guardará con el nombre de “PRAC09.ASM”. (Xtal= 4MHz).
LIST P=16F877A ;Comando que indica el Pic usado
INCLUDE "P16F877A.INC" ;Etiquetas genéricas para el Pic16F877
__CONFIG 0x3F39

ADDR_L EQU 0x20


DATA_L EQU 0x21
ORG 0x00 ;Inicio del programa en la posición cero de memoria
NOP ;Libre (uso del debugger)
NOP
NOP

_INICIO
BSF STATUS, RP0 ;Ir banco 1
BCF STATUS, RP1
CLRF TRISA ;PORTA salida
CLRF TRISB ;PORTB salida
CLRF TRISC ;PORTC salida
CLRF TRISD ;PORTD salida
CLRF TRISE
BCF STATUS, RP0 ;Ir banco 0
BCF STATUS, RP1
CLRF PORTC ;Limpiar PORTC
CLRF ADDR_L ;ADDR_L = 0x00 (Variables en banco2)
CALL LEER_EEPROM ;Llamar rutina de lectura
MOVF DATA_L, W ;W = DATA_L
MOVWF PORTC ;PORTC = W
INCF DATA_L, F ;incremento del dato leído de la EEPROM
CALL ESCRIBIR_EEPROM ;Llamar rutina de grabación

_BUCLE
GOTO _BUCLE ;Ir _bucle

ESCRIBIR_EEPROM:
BCF STATUS, RP0 ;Ir banco 0
BCF STATUS, RP1
MOVF ADDR_L, W ;EEADR = ADDR_L
BCF STATUS, RP0 ;Ir banco 2
BSF STATUS, RP1
MOVWF EEADR
BCF STATUS, RP0 ;Ir banco 0
BCF STATUS, RP1
MOVF DATA_L, W ;EEDATA = DATA_L
BCF STATUS, RP0 ;Ir banco 2
BSF STATUS, RP1
MOVWF EEDATA
BSF STATUS, RP0 ;Ir banco 3
BSF STATUS, RP1
BCF EECON1, EEPGD ;Apuntar a la memoria EEPROM
BSF EECON1, WREN ;Habilitar escritura
BCF INTCON, GIE ;Deshabilita interrupciones
MOVLW 55h
MOVWF EECON2 ;Escribe 55 hexadecimal
MOVLW 0xAA
MOVWF EECON2 ;Escribe AA hexadecimal
BSF EECON1, WR ;Habilita el bit de escritura
; BSF INTCON, GIE ;Habilita interrupciones

_BUCLE1
BTFSC EECON1, WR ;Espera el final de grabación
GOTO _BUCLE1 ;Si no termina la grabación: Ir _bucle
BCF PIR2, EEIF ;Si termina Borra bandera interrupción
BCF EECON1, WREN ;Deshabilitar escritura
BCF STATUS, RP0 ;Ir banco 0
BCF STATUS, RP1
RETURN ;Retorno

LEER_EEPROM:
BCF STATUS, RP0 ;Ir banco 0
BCF STATUS, RP1
MOVF ADDR_L, W ;Cargar dirección a leer
BCF STATUS, RP0 ;Ir banco 2
BSF STATUS, RP1
MOVWF EEADR
BSF STATUS, RP0 ;Ir banco 3
BSF STATUS, RP1
BCF EECON1, EEPGD ;Apunta a la memoria EEPROM
BSF EECON1, RD ;Habilita ciclo de lectura
BCF STATUS, RP0 ;Ir banco 2
BSF STATUS, RP1
MOVF EEDATA, W ;W = EEDATA (leer dato de EEPROM)
BCF STATUS, RP0 ;Ir banco 0
BCF STATUS, RP1
MOVWF DATA_L ;DATA_L = W (almacena dato de EEPROM)
RETURN ;Retorno

END

2. Ensamblar, depurar y simular el funcionamiento paso a paso de este programa.

3. Analizar el programa de esta práctica y contestar las siguientes preguntas:


a. ¿Cuánto tiempo consume la rutina de Lectura de la EEPROM?

b. ¿Cuánto tiempo consume la rutina de Escritura de la EEPROM?

4. En general describir el funcionamiento del programa.

5. Grabar el programa en un Microcontrolador.

6. Armar el circuito de prueba que se muestra a continuación.


VC C
R 2 470 D 1 LED
R C 0
U 1
R 3 470 D 2 LED
2 R A0 R C 1
MC LR 1 R A0 3
O SC 1 13 M C L R /V P P R A1 4 R 4 470 D 3 LED
O S C 1 /C L K R A2 5 R C 2
11 R A3 6
32 VD D R A 4 /T 0 C L K 7 R 5 470 D 4 LED
VD D R A 5 /S S 33 R C 3
R B 0 /IN T 34
R B1 35 R 6 470 D 5 LED
R B2 36 R C 4
R B3 37
R B4 38 R 7 470 D 6 LED
R B5 39 R C 5
R B6 40
R B7 15 R C 0 R 8 470 D 7 LED
R C 0 /T 1 O S I/T 1 C L K 16 R C 1 R C 6
R C 1 /T 1 O S O 17 R C 2
R C 2 /C C P 1 18 R C 3 R 9 470 D 8 LED
R C 3 /S C K /S C L 23 R C 4 R C 7
R C 4 /S D I/S D A 24 R C 5
R C 5 /S D O 25 R C 6
R C 6 26 R C 7
R C 7 19
R D 0 /P S P 0 20 VC C
R D 1 /P S P 1 21
R D 2 /P S P 2 22
R D 3 /P S P 3 27
R D 4 /P S P 4 28
R D 5 /P S P 5 29
R D 6 /P S P 6 30

3
R D 7 /P S P 7 8 R 17
R E 0 /R D 9 R 16
R E 1 /W R 10 R A0 2 10K
R E 2 /C S
G N D
G N D

14 O SC 2
O S C 2 /C L K O U T
470
P IC 1 6 F 8 7 7 VC C
12
31

1
R 1
C 1 47k
O SC 1
SW 1
MC LR
22pF Y 1
S W P U S H B U TTO N
C 2 8 MH z
O SC 2

22pF

Figura 27. Diagrama esquemático práctica 9.

7. Probar el funcionamiento del circuito.

8. Después de probar el circuito, responda las siguientes preguntas:


a. ¿Cuál es el resultado observado?

b. ¿Qué valor se despliega en el puerto C?

c. Reinicia el sistema. ¿Qué valor se despliega en el puerto C?

d. ¿El resultado obtenido es el mismo al resultado esperado? (lo que se observa


en la práctica coincide con la simulación obtenida).

También podría gustarte