Manual de Practicas Microcontrolador PIC18F4550

ELABORADO POR: FRANCISCO TERÁN ARÉVALO Enero 2017 ÍNDICE: Prologo……………………………………………………………………………..4 Reglamento para est

Views 94 Downloads 2 File size 4MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

ELABORADO POR:

FRANCISCO TERÁN ARÉVALO Enero 2017

ÍNDICE: Prologo……………………………………………………………………………..4 Reglamento para estudiantes……………………………………………………5 Competencias previas……………………………………………………………6 Competencias a desarrollar………………………………………………………6 Practica 1 INTERMITENCIA ASM………………………………………………8 Practica 2…ROTA ASM…………..………………………………………………25 Practica 3…MENU ROTA ASM……………………………………………………30 Practica

3A…MENU

CUENTA

ASM……………………………………………..

3A Menu de contadores36 Practica 4…..INT RB0 ASM………………………………………………………47 Practica 5….INT RB ASM……..KEYBOARD……………………………………53 Practica 6….TIMER 0 ASM.………………………………………………………69 Practica 7….TIMER 1 ASM.………………………………………………………81 Practica 8…TIMER 2 ASM..………………………………………………………86

Practica

Practica 9……ADC ASM…………………………………………………………92 Practica 10…PUERTO SERIE ASM..……………………………………….….98 Practica 11…INTERMITENCIA C……………………………………………….104 Practica 12…ROTA C…………….………………………………………………107 Practica1 3…MENU ROTA C……………………………………………………111 Practica 14…INTERRUPCION RB0 C…………………………………………117 Practica 15…INTERRUPCION RB KEYBOARD C..…………………………122 Practica 16……TIMER 0 C………….……………………………………………126 Practica 17……TIMER 1 C..………………………………………………………134 Practica 18……TIMER 2 C..………………………………………………………139 Practica 19……ADC C………………………………………………………………144 Practica 20……RS232 C………………………………………………………….…182 Practica 21 ….LCD C ……………………………………………………………….136 Practica 22 …..PWM…………………………………………………………………146 Practica 23 Ultrasonido……………………………………………………………..148 Practica 24 Reloj de Tiempo Real RTC…………………………………………….152 Practica 25 EEPROM………………………………………………………………….160 Practica 26 Generador de tonos………………………………………………………167 Practica 27 Matriz de leds……………………………………………………………183 Proyecto Integrador………………………………………………………………….PROYECTO

+

Prologo: El desarrollo de la tecnología digital se encuentra en un nivel donde la mayoría de las aplicaciones que antes se realizaban con electrónica analógica hoy día se resuelven con en el formato digital.

Los microprocesadores han revolucionado la solución de problemas para múltiples aplicaciones los vemos cotidianamente en aplicaciones del hogar tales como lavadoras hornos de microondas electrodomésticos en general, en aplicaciones automotrices para el control de velocidad del vehículo, para el monitoreo del motor para asistentes en frenos, tracción, clima etc. Los vehículos actualmente cuentan con diez o más subsistemas de control basados en sistemas digitales. La materia Microprocontroladores de la retícula de Ingeniería Electrónica se refiere a: Esta asignatura aporta al perfil del Ingeniero electrónico el desarrollo de habilidades para diseñar, analizar y construir equipos o sistemas electrónicos para la solución de problemas en el entorno, aplicando normas técnicas y estándares nacionales e internacionales, así como crear, innovar, adaptar, y transferir tecnología en el ámbito de la ingeniería electrónica mediante la aplicación de métodos y procedimientos científicos, tomando en cuenta el desarrollo sustentable del entorno. Además permite gestionar proyectos de investigación y/o desarrollo tecnológico, así como ejercer actividades emprendedoras de liderazgo y adquirir habilidades para la toma de decisiones en su ámbito profesional. En diversas aplicaciones, el uso de la electrónica hace necesario el conocimiento del diseño basado en sistemas digitales, y el uso de circuitos de alta escala de integración, como son los microcontroladores, hace algunas aplicaciones más simples, eficientes o versátiles. Por lo que es conveniente que los alumnos de la carrera de ingeniería electrónica adquieran dominio en el uso de estos dispositivos. La materia consiste en el conocimiento de la estructura interna y externa del microcontrolador, así como la configuración y programación en lenguaje ensamblador y lenguaje C, de los periféricos integrados y aplicaciones típicas de microcontroladores. La asignatura requiere que el estudiante cuente con bases sólidas en diseño digital y analógico, así como nociones de programación, por lo tanto se relaciona con las asignaturas de mediciones eléctricas, programación estructurada, fundamentos de investigación, diseño digital y diseño digital con VHDL, y todas aquellas en las que se realicen aplicaciones, tales como electrónica de potencia, instrumentación, amplificadores operacionales, entre otras.

Reglamento para Estudiantes: 1.- El uso de los sistemas de cómputo es exclusivo para la realización de las prácticas asignadas. 2.- Los equipos utilizados en las practicas deberán utilizarse si se tiene el conocimiento previo de su manejo. Solicite asistencia al maestro en caso contrario. 3.- No se permite bebidas o alimentos en el interior del laboratorio. 4.- Realizar su práctica lo más individual posible favor de no copiar al compañero. Solicite asesoría.

Competencias previas: La asignatura requiere que el estudiante cuente con bases sólidas en diseño digital y analógico, así como nociones de programación, por lo tanto se relaciona con las asignaturas de mediciones eléctricas, programación estructurada, fundamentos de investigación, diseño digital y diseño digital con VHDL, y todas aquellas en las que se realicen aplicaciones, tales como electrónica de potencia, instrumentación, amplificadores operacionales, entre otras.

Competencias a desarrollar: Competencias Especificas: Conocer y explicar el funcionamiento interno y externo del microcontrolador, realizar programas en lenguaje ensamblador y lenguaje C, utilizando todos los recursos del microcontrolador, para resolver problemas específicos en el ámbito de la aplicación de la ingeniería electrónica y en el desarrollo de aplicaciones y de equipo electrónico, para lo cual el estudiante realizará actividades de investigación, análisis, reflexión, observación, y diseño, apoyándose en el uso de herramientas computacionales.

Competencias genéricas: Competencias instrumentales

� Capacidades cognitivas, la capacidad de comprender y manipular ideas y pensamientos.

� Capacidades metodológicas para manipular el ambiente: ser capaz de organizar el tiempo y las estrategias para el aprendizaje, tomar decisiones o resolver problemas. � Destrezas tecnológicas relacionadas con el uso de maquinaria, destrezas de computación; así como, de búsqueda y manejo de información. � Destrezas lingüísticas tales como la comunicación oral y escrita o conocimientos de una segunda lengua

Práctica No.1

Intermitencia (ASM).

VIDEO BASICO MPLAB Objetivo: Que el alumno realice un pequeño programa de prueba en ensamblador para empezar a familiarizarse tanto con el software como con el hardware. Introducción: Esta práctica ayudará al alumno a familiarizarse con el software Mplab y al utilizar el simulador le ayudará a entender como funciona la arquitectura del microcontrolador. En el simulador(MPLABSIM) se pueden ver los movimientos en los registros, la memoria de datos, la memoria de programa, el registro de estado,etc. Se recomienda abrir una ventana con los registros utilizados en el programa y correr paso a paso la simulación. Además aprenderá como realizar la conexión básica del microcontrolador para que funcione correctamente. El programa funciona de la siguiente manera: Al energizar el sistema, el led conectado en el pin RB0 encenderá por algunos milisegundos y después se apagará y durará el mismo tiempo apagado que encendido. Este ciclo se repetirá indefinidamente. Al presionar el pushbotton conectado al pin MCLR el microcontrolador se reinicia, es decir volverá a comenzar desde el principio. Esta práctica se correlaciona con el Tema 2.1 de la Unidad 2. Material y Equipo utilizado: 1 Microcontrolador PIC18F4550 1 Cristal 20 Mhz 2 Capacitores de 22pf o 15pf 2 Leds 1 Resistencia de 10 Kohms 2 Resistencia de 220 ohms 1 Push Button 1 Fuente de +5 VDC (Opcional: 1 Pila Cuadrada de +9Vdc, 1 Reg. 7805) Opcional Tarjeta de desarrollo para practicas DV08 ------------------------------------1 Software de MPLAB 1 Grabador de Pics Metodología: 1- Utilice el software MPLAB para editar el programa intermitencia.asm que se muestra mas adelante. 2- Enamble, Simule y entienda el funcionamiento del programa. 3- Grabe el archivo (.HEX obtenido al ensamblar) en el PIC NOTA: En este primer ejemplo se utiliza la librería para el PIC 16F874 es necesario poner entonces las siguientes directivas: LIST P=PIC16F874 #include p16f874.inc Pero si usted esta utilizando otro microcontrolador ejemplo el PIC 18F4550 entonces la librería cambiaria así: LIST P=PIC18F4550

#include p18f4550.inc Si su programador no cuenta con la opción de poner la palabra de configuración , entonces es necesario agregar la configuración por software con la directiva (__config) de la siguiente forma: LIST P=PIC16F874 #include p16f874.inc __config _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF & _LVP_OFF & _WRT_ENABLE_OFF

Para el PIC18F4455 se utiliza la directiva (CONFIG) de la siguiente forma: LIST P=PIC18F4550 #include p18f4550.inc CONFIG FOSC = XT_XT,PWRT = OFF, WDT = OFF, LVP=OFF Observe que en esta configuración se selecciona la oscilación XT porque el cristal a utilizar es de 4 MHZ y todas las opciones están en OFF. 4- Arme el circuito de acuerdo al diagrama de conexión. 5- Pruebe el buen funcionamiento del programa. 6- Ahora modifique el programa para que realice alguna de las siguientes opciones(el maestro decidirá cual): a) Cuando prenda el LED en RB0 apague un LED conectado en el pin RC0, realice un retardo de tiempo y luego prenda el LED en RC0 y apague el LED en RB0, este ciclo lo deberá realizar indefinidamente. b) Simular las luces de un semáforo asignando al pin RB0 un led de color verde, al pin RB1 un led de color amarillo y al pin RB2 un led de color rojo. Asigne los tiempos de retardo tal como un semáforo real. c) Dejar al alumno que utilice su creatividad. d) Dejar que el maestro ponga una opción diferente a estas. 7- Reporte sus resultados.

Creación de un proyecto usando MPLAB Paso 1 Localice el programa MPLAB en su computadora con el icono

O en la carpeta de Microchip localizada en la ruta mostrada

Paso 2 Abrir el programa Mostrará esta ventana: Seleccionar Project para crear un proyecto nuevo.

Paso 3 Seleccione Project Wizard (Asistente de proyecto)

Paso 4 seleccionar dispositivo PIC18F4550 y presione siguiente:

Paso 5 Seleccione ensamblador o compilador a usar (Compilador para programas en C) Si aparece una tacha Roja significa que no esta en la ruta dada usar el Browser para localizar la ruta correcta.

Paso 6 Crear un proyecto (es buena practica cada proyecto ponerlo en una carpeta.

Queda así:

Paso 7 si tiene un programa en ensamblador para este proyecto agregarlo aquí, si no presione siguiente.

Paso 8 Finalizar:

Paso 9 agregar el archivo fuente (source File)

Copiar el programa listado abajo Intermitencia.asm seleccionando en la pestaña File New y abrirá una ventana Untilted, copiar ahí como se muestra:

Paso 10 guardar archivo en la carpeta del proyecto: con la extensión .asm

Aparecerá asi:

Paso 11 Agregarlo a la carpeta Source File usando botón derecho del ratón

Aparecerá así:

Paso 11 Ensamblar presionar el icono Build All

Nota:Absolute es cuando lo quiere solo en su computadora y Reloctable cuando quiere cambiarlo de computadora. Paso 12 asegure que no hay errores

Ya tenemos nuestro primer programa: visualizar los archivos que se generaron en nuestro proyecto:

El archivo Intermitencia.HEX es el ejecutable puede usarlo en un micro o en un simulador como proteus o en el mismo simulador MPLABSIM,

Se abrirá esta ventana: 1 Correr 2 Detener

3 Correr animadamente 4 Correr por pasos 5 Reset B Para Breakpoints (otra forma es poner cursor la li

Abrir una ventana para visualizar las variables y los registros del PIC Seleccionar en la pestaña view la función Watch.

Se pueden abrir multiples ventanas o las que necesite para visualizar que hace el programa Ventana de program Memory viualiza las instrucciones, dirección donde se encuentran, código de operación etiquetas y las instrucciones

Ventana del Harware stock visualiza la posición del apuntador de stack cuando hay subrutinas y la dirección donde se llamo. La ventana de File Registers visualiza las variables que se declararon su contenido y dirección La ventana Watch visualiza al igual que la ventana File Registers lo que el usuario le agregue a la ventana. Al ejecutarse o correrse paso a paso se verán reflejados los cambios de las variables o registros según la instrucción que se ejecutó . Correr animadamente y ver como cambian las variables…… Correr paso a paso y ver como se ejecuta el programa……… Inserar un punto de roptura (Breakpoint) en la instruccion call delay poniendo el cursor antes de la letra D y dar doble click al mouse aparecerá una B en un circulo rojo en esa instrucción , y correr el programa con el triangulo verde. (Run) esto ejecutara todo hasta encontrar otro Breakpoint.

Programa fuente: ;************************************** ;* intermitencia.asm * ;* Este programa configura RD0 como salida * ;* y genera una intermitencia en dicha salida * ;* * ;* Rev A: By Ing. Jorge Aguirre ;* Rev B: F. Teran PIC 18F4550 * ;**************************************

;La siguiente configuración solo se utiliza si usamos alguna librería ejemplo: LIST P=PIC18F4550 #include p18F4550.inc CONFIG FOSC = XT_XT,PWRT = OFF, WDT = OFF, LVP=OFF CUENTA1

EQU

20H

CUENTA2 CUENTA3

EQU EQU

21H 23H

F w

EQU EQU

1 0

;las variables que usemos siempre a ;partir de la dirección 20Hh

;Constantes del programa

ORG 1000H programa BSF STATUS,5 BCF TRISD,0 BCF STATUS,5 INICIO BSF PORTD,0 CALL DELAY BCF PORTD,0 CALL DELAY GOTO INICIO

;Inicia en la dirección 00H de la memoria de ;si se carga a proteus o a un micro sin bootloader ;Si se usa bootloader usar la dirección 1000H ;banco 1 ;RB0 como salida ;banco 0 ;Pone a "1" RD0 (enciende) ;Llama a la subrutina de retardo ;Cuando vuelve del retardo pone ;a "0" RD0 (apaga) ;llama a la subrutina de retardo ;cuando vuelve del retardo ;repite el ciclo

;======================= ;= DELAY: Subrutina de retardo = ;= Modifica los siguientes registros: = ;= CUENTA1 = ;= CUENTA2 = ;======================= ;(Conviene hacerse un pequeño resumen de lo que ;hace cada subrutina, puede sernos muy útil para ;usarla en otros programas) ;Subrurtina hecha con 3 lazos anidados DELAY MOVLW

05cH

;Carga el acumulador W con el valor

;de 05CH (92 en decimal) MOVWF CUENTA3 ACA3

MOVLW

0ffH

MOVWF CUENTA1 ACA1 MOVLW 0FFH MOVWF CUENTA2 ACA

DECFSZ CUENTA2,F GOTO ACA DECFSZ CUENTA1,F

;Carga el acumulador W con el valor ;de FFH (255 en decimal) ;Mueve el contenido del acumulador ;a CUENTA1 ;Carga CUENTA2 con el valor FFH ;Decrementa CUENTA2, guarda el resultado ;en f(CUENTA2), y si es cero se salta la ;siguiente instrucción ;Vuelve a decrementar mientras ;CUENTA2 no sea cero ;Se decrementa CUENTA1 cada vez que ;CUENTA2 llega a cero

GOTO ACA1 DECFSZ CUENTA3,F

;Se decrementa CUENTA3 cada vez que ;CUENTA1 llega a cero

GOTO ACA3

RETURN

;mientras CUENTA3 no llegue a cero recarga ;CUENTA1 y y CUENTA2 repite el proceso ;retorna al programa principal

;= = ;= FIN DE LA SUBRUTINA DELAY = ;=========================== END

Diagrama de conexión:

;Fin del programa

Sugerencias Didácticas: 1.- Por ser el primer programa se le sugiere al maestro de ensamblar y correr el programa de prueba junto con el alumno en la sala de computo, e ir explicando los pasos requeridos en el MPLAB para editar un programa, realizar un proyecto(projet), ensamblar(MPASM) y simular (MPLABSIM). Aproveche para enseñar al alumno el ambiente del MPLAB así como algunas opciones del MPLABSIM. 2.- Formar equipos de trabajo. 3.- Estimular al alumno al desarrollo de su pensamiento lógico y creativo. 4.- Propiciar la investigación. 5.- Estimular la participación en las prácticas. Reporte del Alumno (Resultados): 1.- El diagrama de flujo. 2.- El diagrama de conexión. 3.- El programa fuente obtenido. 4.- Conclusiones del Equipo.

Práctica No.2

Rotación del Puerto RD (ASM).

Objetivo: Que el alumno aprenda a manipular los puertos del Microcontrolador en lenguaje Ensamblador. Introducción: Esta práctica le ayudará al alumno a conocer la distribución de los puertos y aprenderá a manejarlos. Además de manejar saltos condicionados e incondicionados y aprenderá a insertar subrutinas en el programa. El programa funciona de la siguiente manera:

Al energizar el sistema el led que está en el bit RD0 encenderá por un tiempo de aproximádamente de 250 milisegundos, después de esto se apagará y procederá a encender el led siguiente en el bit RD1, este también durará encendido por un tiempo de aproximádamente de 250 milisegundos y se apagará. Esta operación se repetirá con todos los demás leds hasta llegar al último led en el bit RD7. Después de esto este ciclo se repetirá indefinidamente. Esta práctica se correlaciona con los Temas del 2.2.1 al 2.2.5 de la Unidad 2. Material y Equipo utilizado: 1 Microcontrolador PIC18F4550 1 Cristal 4 Mhz 2 Capacitores de 22pf o 15pf 8 Leds 1 Resistencia de 10 Kohms 8 Resistencias de 220 ohms 1 Push Button 1 Fuente de +5 VDC (Opcional: 1 Pila Cuadrada de +9Vdc, 1 Reg. 7805) ------------------------------------1 Software de MPLAB 1 Grabador de Pics Metodología: 1- Utilice el software MPLAB para editar el programa rota.asm que se muestra mas adelante. 2- Ensamble, Simule y entienda el funcionamiento del programa. 3- Grabe el archivo (.HEX obtenido en la compilación) en el PIC 4- Arme el circuito de acuerdo al diagrama de conexión. 5- Pruebe el buen funcionamiento del programa. 6- Ahora modifique el programa para que realice alguna de las siguientes opciones (el maestro decidirá cual): a) Realice una rotación a la derecha del puerto RD. b) Realice una rotación a la izquierda y al llegar al bit 7 realizar una rotación a la derecha hasta el bit 0. Repita el ciclo indefinidamente. c) Realice una rotación a la izquierda involucrando el puerto RD y RC. d) Dejar al alumno que utilice su creatividad para hacer los movimientos que desee de los puertos. e) Dejar que el maestro ponga una opción diferente a estas. 7- Reporte sus resultados. NOTA: Para utilizar el programa fuente con el PIC18F4550 sustituya las siguientes directivas: LIST P=PIC18F4550 #include p18f4550.inc CONFIG FOSC = XT_XT,PWRT = OFF, WDT = OFF, LVP=OFF

Programa fuente: ;************************************************ ;* rota.asm * ;* Este programa configura PORTD como salida *

;* y genera una rotacion a la izquierda hasta llegar * ;* al bit 7 enseguida repite de nuevo el ciclo * ;* Rev A: By Ing. Jorge Aguirre * ;* Rev B: Adaptado al 4550 y tarjeta de desarrollo * ;* F. Teran ;************************************************ LIST P=PIC18F4550 #include p18F4550.inc CONFIG FOSC = XT_XT,PWRT = OFF, WDT = OFF, LVP=OFF CUENTA1 CUENTA2 CUENTA3 F w

EQU EQU EQU

EQU EQU

20H 21H 22H 1 0

ORG 1000H CLRF TRISD INICIO BCF STATUS,0 MOVLW 01H MOVWF PORTD REPETIR CALL DELAY RLF PORTD,F BTFSC STATUS,0 GOTO INICIO GOTO REPETIR

;Puerto RD como salida ;Limpia el bit 0 del registro STATUS ;Saca un 01H por el puerto RD ;Llama a la subrutina de retardo ;Rota a la izquierda el puerto RD ; ;Brinca a la etiqueta REPETIR

;=========================== ; DELAY: Subrutina de retardo ;Rutina de aprox. 250 msegundos ;=========================== DELAY MOVLW 01H ;Carga el W con el valor 01H MOVWF CUENTA3 ;Carga CUENTA3 con el valor del W LAZO3 MOVLW 0F9H MOVWF CUENTA2 LAZO2 MOVLW 0FAH MOVWF CUENTA1 LAZO1 NOP DECFSZ CUENTA1,F

;Carga el W con el valor F9H ;Carga CUENTA2 con el valor del W ;Carga el W con el valor FAH ;Carga CUENTA1 con el valor del W ;Decrementa CUENTA1 y sigue en el

GOTO LAZO1

;lazo1 mientras no sea 0

DECFSZ CUENTA2,F GOTO LAZO2

;Decrementa CUENTA2 y sigue en el ;lazo2 mientras no sea 0

DECFSZ CUENTA3,F GOTO LAZO3

;Decrementa CUENTA3 y sigue en el ;lazo3 mientras no sea 0

RETURN

;retorna al programa principal

;=========================== ;= FIN DE LA SUBRUTINA DELAY = ;=========================== END

;Fin del programa

Diagrama de conexión:

U1 C2 22p

X1 CRYSTAL

C1 22p

2 3 4 5 6 7 14 13 33 34 35 36 37 38 39 40

18

RA0/AN0 RC0/T1OSO/T1CKI RA1/AN1 RC1/T1OSI/CCP2/UOE RA2/AN2/VREF-/CVREF RC2/CCP1/P1A RA3/AN3/VREF+ RC4/D-/VM RA4/T0CKI/C1OUT/RCV RC5/D+/VP RA5/AN4/SS/LVDIN/C2OUT RC6/TX/CK RA6/OSC2/CLKO RC7/RX/DT/SDO OSC1/CLKI RB0/AN12/INT0/FLT0/SDI/SDA RB1/AN10/INT1/SCK/SCL RB2/AN8/INT2/VMO RB3/AN9/CCP2/VPO RB4/AN11/KBI0/CSSPP RB5/KBI1/PGM RB6/KBI2/PGC RB7/KBI3/PGD

VUSB

RD0/SPP0 RD1/SPP1 RD2/SPP2 RD3/SPP3 RD4/SPP4 RD5/SPP5/P1B RD6/SPP6/P1C RD7/SPP7/P1D RE0/AN5/CK1SPP RE1/AN6/CK2SPP RE2/AN7/OESPP RE3/MCLR/VPP

15 16 17 23 24 25 26

19 20 21 22 27 28 29 30

U2

RN1 a b c d e f g h

a1 b2 c3 d4 e5 f6 g7 h8

d1 d2 d3 d4 d5 d6

16 15 14 13 12 11 10 d7 d8 9

20 19 18 17 16 15 14 13 12 11

220 8 9 10 1

LED-BARGRAPH-GRN

PIC18F4550 PROGRAM=p3rota.cof

1

NOTA:

d1 1 d22 d33 d44 d55 d66 d77 d88 9 10

Sugerencias Didácticas: 1.- Se le sugiere al maestro de ensamblar y correr el programa de prueba junto con el alumno en la sala de computo. Aproveche para seguir enseñando al alumno mas opciones del simulador (MPLABSIM). Enfocarse en enseñar en el simulador como esta construida la subrutina de retardo usando las opciones del debugger: Settings.- Poner la velocidad de ejecución a 4Mhz (por default es de 20Mhz). StopWatch.- Nos ayudará a verificar el tiempo de retardo de la subrutina. Set Breakpoint.- Poner punto de paro en el programa en la línea donde se desea que el programa detenga su ejecución, ejemplo: Poner el cursor en la línea donde se llama a la subrutina DELAY (call DELAY),presionar el botón derecho del mouse y aparecerá una ventana con varias opciones, seleccione la opción Set-Breakpoint. Realice lo mismo para poner otro punto de paro en la siguiente instrucción(RLF PORTB,F), de esta forma se puede correr el programa y se detendrá en la instrucción Call DELAY se pone a zero el Stop wtach se vuelve a correr desde ahí el programa y se detendrá en la siguiente instrucción mostrándonos en el Stop Watch el tiempo transcurrido en la subrutina DELAY. 2.- Formar equipos de trabajo. 3.- Estimular al alumno al desarrollo de su pensamiento lógico y creativo. 4.- Propiciar la investigación. 5.- Estimular la participación en las prácticas.

Reporte: 1.- El diagrama de flujo. 2.- El diagrama de conexión. 3.- El programa fuente obtenido. 4.- Conclusiones del Equipo. Bibliografía Preliminar: [1] Microchip Technology Inc., “PIC16F873/874/876/877 Data Sheet”, 2003 [2] Microchip Technology Inc., “PIC18F2455/2550/4455/4550 Data Sheet”, 2009 [3] Tópicos del Help en el MPLAB(MPLAB-IDE, MPLAB- Editor, MPLAB-SIM) [4] E. Martín Cuenca. Microcontroladores PIC. Diseño práctico de aplicaciones Ed. Mc. Graw Hill [5] Apuntes del Maestro. [6] http://www.microchip.com

Práctica No.3 Menú de rotas (ASM). Objetivo: Que el alumno aprenda a elaborar un menú de opciones en Lenguaje Ensamblador. Introducción: Esta práctica le ayudará al alumno a conocer la distribución de los puertos y aprenderá a manejarlos para leer o escribir en ellos. Además de aprender como realizar un menú de opciones en lenguaje ensamblador. Este programa lee una opción por el puerto C y la muestra por el puerto B. Esta práctica se correlaciona con el Tema 2.2.5 de la Unidad 2. Material y Equipo utilizado: 1 Microcontrolador PIC18F4550 1 Cristal 20 Mhz 2 Capacitores de 22pf o 15pf 8 Leds 4 Resistencia de 10 Kohms 8 Resistencias de 220 ohms 1 Push Button 1 Dip Switch (3 o 4 switch) 1 Fuente de +5 VDC (Opcional: 1 Pila Cuadrada de +9Vdc, 1 Reg. 7805)

------------------------------------1 Software de MPLAB 1 Grabador de Pics

Metodología: 1- Utilice el software MPLAB para editar el programa Menu.asm que se muestra mas adelante y termínelo para que tenga 7 opciones de rotas. Las 7 opciones se introducirán en binario por el puerto “C” (opcional-puede usar un dip switch para introducir la opción) de la siguiente forma: 0000 0000 0000 0001 0000 0010 0000 0011 0000 0100 0000 0101 0000 0110 0000 0111

-

No realiza nada Rota1 Rota2 Rota3 Rota4 Rota5 Rota6 Rota7

2- Ensamble, Simule y entienda el funcionamiento del programa. 3- Grabe el archivo (.HEX obtenido en el ensamble) en el PIC 4- Arme el circuito de acuerdo al diagrama de conexión. 5- Pruebe el buen funcionamiento del programa. 6.-Se puede modificar el programa para que el menú de opciones pueda ser de otras opciones diferentes, el maestro puede sugerir las opciones o dejar que el alumno utilice su creatividad. Puede ser por ejemplo que el programa lea un número del puerto C y otro del puerto D y las opciones podrían ser las operaciones aritméticas (suma, resta, etc.) y/o las operaciones lógicas(And , Or, etc.). El resultado de la operación que la muestre por el puerto B. Otro ejemplo sería que lea un número en binario por el puerto C y lo muestre en BCD en un display de 7 segmentos colocado por el puerto B. 7- Reporte sus resultados. NOTA: Para utilizar el programa fuente con el PIC18F4550 sustituya las siguientes directivas: LIST P=PIC18F4550 #include p18f4550.inc CONFIG FOSC = XT_XT,PWRT = OFF, WDT = OFF, LVP=OFF Programa Fuente: ;Programa Fuente: ;*********************************************** ;* menurota.asm * ;* Este programa configura PORTD como salida y el * ;* PORTB como entrada. Lee la opción deseada por el PORTB * ;* de un menú de opciones * ;* Rev A: By Ing. Jorge Aguirre * ;* Rev B: F. Teran ;*********************************************** LIST P=PIC18F4550 #include p18f4550.inc

CONFIG FOSC = XT_XT,PWRT = OFF, WDT = OFF, LVP=OFF ;Declaración de variables en la memoria CUENTA1 EQU 20H CUENTA2 EQU 21H CUENTA3 EQU 22H OPCION EQU 23H F w

EQU EQU

1 0

ORG 1000H CLRF TRISD ;Puerto RD como salida MOVLW 0FFH MOVWF TRISB ;Puerto RB como entrada BCF INTCON2,7 ;RESISTENCIAS DE PULL-UP EN RB MOVLW 0FH MOVWF ADCON1 ;BITS 0-4 DE RB DIGITALES

INICIO BCF STATUS,0 MOVF PORTB,W MOVWF OPCION

;Limpia el bit 0 del registro STATUS ;LEER PUERTO C ;PONER CONTENIDO DE RC EN OPCION

OPCION1 MOVLW 01H SUBWF OPCION,W BTFSC STATUS,2 CALL ROTA1

;Checa si es la opción 1

OPCION2 MOVLW 02H SUBWF OPCION, W BTFSC STATUS,2 CALL ROTA2

;Checa si es la opción 2

OPCION3 MOVLW 03H SUBWF OPCION,W BTFSC STATUS,2 CALL ROTA3

;Si la opción =02h al restarlo con W =02h el resultado ;es cero por lo tanto se levanta la bandera z que esta ;en el registro STATUS y por lo tanto llama a ROTA2 ;Checa si es la opción 3

; Aquí continué poniendo mas opciones GOTO INICIO ;===========================

; SUBRUTINA ROTA1 ;=========================== ROTA1 BCF STATUS,0 ;BORRA LA BANDERA CARRY MOVLW 01H MOVWF PORTD ;Saca un 01H por el puerto RD REPETIR CALL DELAY ;Llama a la subrutina de retardo RLCF PORTD, F ;Rota a la izquierda el puerto RD BTFSS STATUS,0 ;Salta si el carry es 1 a REURN GOTO REPETIR ;Brinca a la etiqueta REPETIR RETURN ;=========================== ; SUBRUTINA ROTA2 ;=========================== ROTA2 BCF STATUS,0 ;BORRA LA BANDERA CARRY MOVLW 80H MOVWF PORTD ;Saca un 80H por el puerto RD REPETIR2 CALL DELAY ;Llama a la subrutina de retardo RRCF PORTD, F ;Rota a la derecha el puerto RD BTFSS STATUS,0 ;Salta si el carry es 1 a REURN GOTO REPETIR2 ;Brinca a la etiqueta REPETIR2 RETURN ;=========================== ; SUBRUTINA ROTA3 ;=========================== ROTA3 ;Esta rutina no hace nada solo es de demostración NOP RETURN ;=========================== ; DELAY: Subrutina de retardo ;Rutina de aprox. 600 milisegundos ;=========================== DELAY MOVLW 01DH ;Carga el W con el valor 01H MOVWF CUENTA3 ;Carga CUENTA3 con el valor del W LAZO3 MOVLW 0F9H MOVWF CUENTA2 LAZO2 MOVLW 0FAH MOVWF CUENTA1 LAZO1 NOP DECFSZ CUENTA1,F GOTO LAZO1

;Carga el W con el valor F9H ;Carga CUENTA2 con el valor del W ;Carga el W con el valor FAH ;Carga CUENTA1 con el valor del W ;Decrementa CUENTA1 y sigue en el ;lazo1 mientras no sea 0

DECFSZ CUENTA2,F GOTO LAZO2

;Decrementa CUENTA2 y sigue en el ;lazo2 mientras no sea 0

DECFSZ CUENTA3,F GOTO LAZO3

;Decrementa CUENTA3 y sigue en el ;lazo3 mientras no sea 0

RETURN

;retorna al programa principal

;=========================== ;= FIN DE LA SUBRUTINA DELAY = ;=========================== END

;Fin del programa

Diagrama de conexión:

U1 C2 22p

X1 CRYSTAL

C1 22p

33 34 35 36 37 38 39 40

1 0 0

SW1

2 3 4 5 6 7 14 13

0

18

RA0/AN0 RC0/T1OSO/T1CKI RA1/AN1 RC1/T1OSI/CCP2/UOE RA2/AN2/VREF-/CVREF RC2/CCP1/P1A RA3/AN3/VREF+ RC4/D-/VM RA4/T0CKI/C1OUT/RCV RC5/D+/VP RA5/AN4/SS/LVDIN/C2OUT RC6/TX/CK RA6/OSC2/CLKO RC7/RX/DT/SDO OSC1/CLKI RB0/AN12/INT0/FLT0/SDI/SDA RB1/AN10/INT1/SCK/SCL RB2/AN8/INT2/VMO RB3/AN9/CCP2/VPO RB4/AN11/KBI0/CSSPP RB5/KBI1/PGM RB6/KBI2/PGC RB7/KBI3/PGD

VUSB

RD0/SPP0 RD1/SPP1 RD2/SPP2 RD3/SPP3 RD4/SPP4 RD5/SPP5/P1B RD6/SPP6/P1C RD7/SPP7/P1D RE0/AN5/CK1SPP RE1/AN6/CK2SPP RE2/AN7/OESPP RE3/MCLR/VPP

15 16 17 23 24 25 26

R3 R4 220R R5 220R

19 20 21 22 27 28 29 30

R6 220R R7 220R R8 220R R9 220R 220R

8 9 10 1

PIC18F4550 PROGRAM=P5M_Rota.HEX

R10 220R

R2

SW-SPDT

220R

SW2 SW-SPDT

SW3 SW-SPDT

D3

D4

D5

D6

D7

D8

D9

D10

LED-GREEN LED-GREEN LED-GREEN LED-GREEN LED-GREEN LED-GREEN LED-GREEN LED-GREEN

NOTA: Agregue una resistencia de protección en serie de 220 Ohms a cada uno de los leds. Sugerencias Didácticas: 1.- Se le sugiere al maestro de ensamblar y correr el programa de prueba junto con el alumno en la sala de computo. Aproveche para seguir enseñando al alumno mas opciones del simulador (MPLABSIM). Enfocarse en enseñar en el

simulador como correr el programa paso a paso y ver como se realiza el llamado a una subrutina. Enseñar las opciones del simulador MPLABSIM ( Step Into, Step Over y Step Out). 2.- Formar equipos de trabajo. 3.- Estimular al alumno al desarrollo de su pensamiento lógico y creativo. 4.- Propiciar la investigación. 5.- Estimular la participación en las prácticas. Reporte: 1.- El diagrama de flujo. 2.- El diagrama de conexión. 3.- El programa fuente obtenido. 4.- Conclusiones del Equipo. Bibliografía Preliminar: [1] Microchip Technology Inc., “PIC16F873/874/876/877 Data Sheet”, 2003 [2] Microchip Technology Inc., “PIC18F2455/2550/4455/4550 Data Sheet”, 2009 [3] Tópicos del Help en el MPLAB(MPLAB-IDE, MPLAB- Editor, MPLAB-SIM) [4] E. Martín Cuenca. Microcontroladores PIC. Diseño práctico de aplicaciones Ed. Mc.Graw Hill [5] Apuntes del Maestro. [6] http://www.microchip.com

Practica 3A Menu de contadores….. ;Programa Fuente: ;*********************************************** ;* menucuenta.asm * ;* Este programa configura PORTD como salida y el * ;* PORTB como entrada. Lee la opción deseada por el PORTB * ;* de un menú de opciones para diferentes contadores de uno y dos digitos ;* y diferentes formas de decodificar a siete segmentos * ;* Rev A: By F. TERAN * ;*********************************************** LIST P=PIC18F4550 #include p18f4550.inc CONFIG FOSC = XT_XT,PWRT = OFF, WDT = OFF, LVP=OFF ;Declaración de variables en la memoria CUENTA1 EQU 20H CUENTA2 EQU 21H CUENTA3 EQU 22H OPCION EQU 23H VAR1 EQU 24H VAR2 EQU 25H TEMP EQU 26H VAR17 EQU 27H VAR27 EQU 29H VARU EQU 28H CONTADEC EQU 2AH CONTADECU EQU 2BH CONTADECD EQU 2CH F w

EQU EQU

1 0

ORG 1000H CLRF TRISD ;Puerto RD como salida MOVLW 0FFH MOVWF TRISB ;Puerto RB como entrada BCF INTCON2,7 ;RESISTENCIAS DE PULL-UP EN RB MOVLW 0FH MOVWF ADCON1 ;BITS 0-4 DE RB DIGITALES CLRF VAR2,F movlw 55h

*

movwf PORTD ;ENVIAR UNOS ALTERNADOS AL PUERTO D PARA CHECAR SI ESTA ;INICIANDO EL PROGRAMA INICIO

BCF STATUS,0 MOVF PORTB,W MOVWF OPCION

;Limpia el bit 0 del registro STATUS ;LEER PUERTO B ;PONER CONTENIDO DE RB EN OPCION

OPCION1 MOVLW 01H SUBWF OPCION,W BTFSC STATUS,2 CALL CONTA1

;Checa si es la opción 1 Y EJECUTA EL CONTADOR UNO

OPCION2 MOVLW 02H SUBWF OPCION, W BTFSC STATUS,2 CALL CONTA2

;Checa si es la opción 2 Y EJECUTA EL CONTADOR DOS ;Si la opción =02h al restarlo con W =02h el resultado ;es cero por lo tanto se levanta la bandera z que esta ;en el registro STATUS y por lo tanto llama a CONTA2

OPCION3 MOVLW 03H SUBWF OPCION,W BTFSC STATUS,2 CALL CONTA3

;Checa si es la opción 3 Y EJECUTA EL CONTADOR TRES

OPCION4 MOVLW 04H SUBWF OPCION,W BTFSC STATUS,2 CALL CONTA4

;Checa si es la opción 4 Y EJECUTA EL CONTADOR CUATRO

OPCION5 MOVLW 05H SUBWF OPCION,W BTFSC STATUS,2 CALL CONTA5

;Checa si es la opción 5 Y EJECUTA EL CONTADOR CINCO

OPCION6 MOVLW 06H SUBWF OPCION,W BTFSC STATUS,2 CALL CONTA6

;Checa si es la opción 6 Y EJECUTA EL CONTADOR SEIS

OPCION7 MOVLW 07H

;Checa si es la opción 7 Y EJECUTA EL CONTADOR SIETE

SUBWF OPCION,W BTFSC STATUS,2 CALL CONTA7 OPCION8 MOVLW 08H SUBWF OPCION,W BTFSC STATUS,2 CALL CONTA8

;Checa si es la opción 7 Y EJECUTA EL CONTADOR SIETE

; Aquí continué poniendo mas opciones GOTO INICIO ;=========================== ; SUBRUTINA CUENTA8 DECIMAL ASCENDENTE EN DISPLAYS ;=========================== CONTA8 CLRF CONTADEC MOVLW 3FH MOVWF VAR17 MOVWF VAR27 MAS1 ; CALL DELAY2 MOVFF CONTADECU,TEMP CALL CONV7 MOVWF VAR17,F MOVFF CONTADECD,TEMP CALL CONV7 MOVWF VAR27,F MOVLW 0FH ;MASCARA UNIDADES ANDWF CONTADEC,W MOVWF CONTADECU MOVLW 0F0H ;MASCARA P DECENAAS ANDWF CONTADEC,W MOVWF CONTADECD SWAPF CONTADECD MOVLW 01 ADDWF CONTADEC,W DAW MOVWF CONTADEC MOVFF PORTB,OPCION MOVLW 08 CPFSEQ OPCION RETURN GOTO MAS1 ;=========================== ; SUBRUTINA CUENTA1

;=========================== CONTA1 MOVLW 00H MOVWF VAR1 MOVLW 3FH MOVWF PORTD REPETIR CALL DELAY INCF VAR1 MOVLW 01H CPFSEQ VAR1 GOTO DOS MOVLW 06H MOVWF PORTD DOS MOVLW 02H CPFSEQ VAR1 GOTO TRES MOVLW 5BH MOVWF PORTD TRES MOVLW 03H CPFSEQ VAR1 GOTO CUATRO MOVLW 4FH MOVWF PORTD CUATRO MOVLW 04H CPFSEQ VAR1 GOTO CINCO MOVLW 66H MOVWF PORTD CINCO MOVLW 05H CPFSEQ VAR1 GOTO SEIS MOVLW 6DH MOVWF PORTD SEIS MOVLW 06H CPFSEQ VAR1 GOTO SIETE MOVLW 7DH MOVWF PORTD SIETE MOVLW 07H CPFSEQ VAR1 GOTO OCHO

;Saca un 00H por el puerto RD

;Llama a la subrutina de retardo ;INCREMENTA CONTADOR ;COMPARA CONTADOR CON 01 SI ES SACAR SU CODIGO EN 7 SEGM ;NO FUE UNO REVISA SI ES DOS ;CODIGO DEL UNO ;SACAR AL DISPLAY ;COMPARA SI FUE DOS Y SACA CODIGO DEL DOS ;EN SIETE SEGMENTOS SI NO FUE CHECAR SI ES TRES

;COMPARA SI FUE TRES Y SACA CODIGO DEL TRES ;EN SIETE SEGM SI NO FUE CHECAR SI ES CUATRO

;COMPARA SI FUE CUATRO Y SACA CODIGO DE CUATRO ;EN SIETE SEGMENTOS SI NO FUE CHECAR EL CINCO

;COMPARA SI FUE CINCO Y SACA CODIGO DE CINCO ;EN SIETE SEGMENTOS SI NO FUE CHECAR SEIS

;COMPARA SI FUE SEIS Y SACA CODIGO DE SIES ;EN SIETE SEGMENTOS SI NO FUE CHECAR SIETE

;COMPARA SI FUE SIETE Y SACA CODIGO DE SIETE ;EN SIETE SEGMENTOS SI NO FUE CHECAR OCHO

MOVLW 07H MOVWF PORTD OCHO MOVLW 08H CPFSEQ VAR1 GOTO NUEVE MOVLW 7FH MOVWF PORTD NUEVE MOVLW 09H CPFSEQ VAR1 GOTO DIEZ MOVLW 6FH MOVWF PORTD DIEZ MOVLW 0AH CPFSEQ VAR1 GOTO REPETIR RETURN

;COMPARA SI FUE OCHO Y SACA CODIGO DE OCHO ;EN SIETE SEGMENTOS SO NO FUE CHECAR NUEVE

;COMPARA SI FUE NUEVE Y SACA CODIGO DE NUEVE ;EN SIETE SEGMENTOS SI NO FUE CHECAR "A" ;Y TERMINAR RUTINA

;Brinca a la etiqueta REPETIR

;=========================== ; SUBRUTINA CUENTA2 ;=========================== ;SUBRUTINA CONTADOR DE NUEVE A CERO CONTA2 MOVLW 09H MOVWF VAR1 MOVLW 6FH MOVWF PORTD REPETIR2 CALL DELAY

;Saca un 09H por el puerto RD

;Llama a la subrutina de retardo

DECF VAR1 ;DECREMENTA CONTADOR MOVLW 01H CPFSEQ VAR1 ;CHECA SI FUE UNO Y SACA SU CODIGO GOTO DOS2 ;SI NO FUE CHECAR SI ES DOS MOVLW 06H MOVWF PORTD DOS2 MOVLW 02H CPFSEQ VAR1 ;CHECA SI FUE DOS Y SACA SU CODIGO GOTO TRES2 ;SI NO FUE CHECAR SI ES TRES MOVLW 5BH MOVWF PORTD TRES2 MOVLW 03H CPFSEQ VAR1 ;CHECA SI FUE TRES Y SACA SU CODIGO GOTO CUATRO2 ;SI NO FUE CHECAR SI ES CUATRO

MOVLW 4FH MOVWF PORTD CUATRO2 MOVLW 04H CPFSEQ VAR1 ;CHECA SI FUE CUATRO Y SACA SU CODIGO GOTO CINCO2 ;SI NO FUE CHECAR SI ES CINCO MOVLW 66H MOVWF PORTD CINCO2 MOVLW 05H CPFSEQ VAR1 ;CHECA SI FUE CINCO Y SACA SU CODIGO GOTO SEIS2 ;SI NO FUE CHECAR SI ES SEIS MOVLW 6DH MOVWF PORTD SEIS2 MOVLW 06H CPFSEQ VAR1 ;CHECA SI FUE SEIS Y SACA SU CODIGO GOTO SIETE2 ;SI NO FUE CHECAR SI ES SIETE MOVLW 7DH MOVWF PORTD SIETE2 MOVLW 07H CPFSEQ VAR1 ;CHECA SI FUE SIETE Y SACA SU CODIGO GOTO OCHO2 ;SI NO FUE CHECAR SI ES OCHO MOVLW 07H MOVWF PORTD OCHO2 MOVLW 08H CPFSEQ VAR1 ;CHECA SI FUE OCHO Y SACA SU CODIGO GOTO NUEVE2 ;SI NO FUE CHECAR SI ES NUEVE MOVLW 7FH MOVWF PORTD NUEVE2 MOVLW 00H CPFSEQ VAR1 ;CHECA SI FUE CERO Y SACA SU CODIGO GOTO DIEZ2 ;SI NO FUE CHECAR SI ES 0FFH MOVLW 3FH MOVWF PORTD DIEZ2 MOVLW 0FFH CPFSEQ VAR1 GOTO REPETIR2 RETURN

;Brinca a la etiqueta REPETIR

;=========================== ; SUBRUTINA CUENTA3 ;=========================== CONTA3 ;Esta rutina cuenta de cero al nueve MOVLW 00

MOVWF VAR1 ;variable que lleva la cuenta inicializar en cero OTRO MOVFF VAR1,TEMP ;se lleva a temp para convertirla en 7 segmentos CALL CONV7 ;llama conversion a siete segentos MOVWF PORTD ; saca 7 segm por puerto D CALL DELAY ; llama retraso de tiempo ,5 seg aprox INCF VAR1 ;incrementa variable contador MOVLW 10H ;checa si la lleva diez cuentas CPFSEQ VAR1 GOTO OTRO ;no lleva diez genera otro CLRF VAR1 ;ya llego a 10 inicializa contador en cero RETURN

;=========================== ; SUBRUTINA CUENTA4 ;=========================== ;esta rutina cuenta de 00-FF hexadecimal multiplexa en delay2 CONTA4 CLRF VAR1 ;inicializa en cero la cuenta OTRO2 MOVFF VAR1,VARU ;llevamos la cuenta a la variable VARU MOVLW 0FH ;elimina la parte alta de VARU ANDWF VARU,W MOVWF TEMP ;lleva parte baja de cuenta a temp. para CALL CONV7 ;convertir en siete sementos el resulatdo queda en W ; MOVWF PORTD MOVWF VAR17,F ;se guarda parte baja del conta en 7 segm en VAR17 MOVFF VAR1,VARU ;se lleva contador a VARU SWAPF VARU ;se intercambia primer digito del segundo digito de contador MOVLW 0FH ;se elimina la parte alta ANDWF VARU,W MOVWF TEMP ; se lleva a temp para su conversion CALL CONV7 ; a siete segmentos ; MOVWF PORTD MOVWF VAR27,F ; se guarda la conversion en VAR27 CALL DELAY2 ;llama delay2 para multiplexar y esperar un tiempo INCF VAR1 ;incrementa contador MOVLW 00H CPFSEQ VAR1 ;compara contgador con cero p' checar si ya dio vuelta GOTO OTRO2 ;no ha terminado de dar vuelta continua ; CLRF VAR1 ; INCF VAR2 ; MOVLW 10H ; CPFSEQ VAR2 ; CLRF VAR2 RETURN

;=========================== ; SUBRUTINA CUENTA5 ;=========================== ;CONTADOR DE CERO A 99 CONTA5 CLRF VAR1 ;inicializa en cero la cuenta OTRO25 MOVFF VAR1,VARU ;llevamos la cuenta a la variable VARU MOVLW 0FH ;elimina la parte alta de VARU ANDWF VARU,W MOVWF TEMP ;lleva parte baja de cuenta a temp. para CALL CONV7 ;convertir en siete sementos el resulatdo queda en W ; MOVWF PORTD MOVWF VAR17,F ;se guarda parte baja del conta en 7 segm en VAR17 MOVFF VAR1,VARU ;se lleva contador a VARU SWAPF VARU ;se intercambia primer digito del segundo digito de contador MOVLW 0FH ;se elimina la parte alta ANDWF VARU,W MOVWF TEMP ; se lleva a temp para su conversion CALL CONV7 ; a siete segmentos ; MOVWF PORTD MOVWF VAR27,F ; se guarda la conversion en VAR27 CALL DELAY2 ;llama delay2 para multiplexar y esperar un tiempo ; INCF VAR1 ;incrementa contador MOVF VAR1,W ;LLEVAR CONTADOR A W ADDLW 01 ;INCREMENTAR CONTADOR DAW ;AJUSTAR A DECIMAL MOVWF VAR1,F ;REGRESAR CONTADOR EN DECIMAL A VAR1 MOVLW 00H CPFSEQ VAR1 ;compara contador con cero p' checar si ya dio vuelta GOTO OTRO25 ;no ha terminado de dar vuelta continua RETURN ;=========================== ; SUBRUTINA CUENTA6 ;=========================== ;CONTADOR DE CERO A 59 CONTA6 CLRF VAR1 ;inicializa en cero la cuenta OTRO26 MOVFF VAR1,VARU ;llevamos la cuenta a la variable VARU MOVLW 0FH ;elimina la parte alta de VARU ANDWF VARU,W MOVWF TEMP ;lleva parte baja de cuenta a temp. para CALL CONV7 ;convertir en siete sementos el resulatdo queda en W ; MOVWF PORTD MOVWF VAR17,F ;se guarda parte baja del conta en 7 segm en VAR17

MOVFF VAR1,VARU ;se lleva contador a VARU SWAPF VARU ;se intercambia primer digito del segundo digito de contador MOVLW 0FH ;se elimina la parte alta ANDWF VARU,W MOVWF TEMP CALL CONV7

; se lleva a temp para su conversion ; a siete segmentos

MOVWF VAR27,F ; se guarda la conversion en VAR27 CALL DELAY2 ;llama delay2 para multiplexar y esperar un tiempo MOVF VAR1,W ;LLEVAR CONTADOR A W ADDLW 01 ;INCREMENTAR CONTADOR DAW ;AJUSTAR A DECIMAL MOVWF VAR1,F ;REGRESAR CONTADOR EN DECIMAL A VAR1 MOVLW 60H CPFSEQ VAR1 ;compara contador con SESENTA p' checar si ya dio vuelta GOTO OTRO26 ;no ha terminado de dar vuelta continua RETURN RETURN ;=========================== ; SUBRUTINA CUENTA7 ;=========================== ;CONTADOR DE CERO A 99 CONTA7 CLRF VAR1 ;inicializa en cero la cuenta OTRO27 MOVFF VAR1,VARU ;llevamos la cuenta a la variable VARU MOVLW 0FH ;elimina la parte alta de VARU ANDWF VARU,W MOVWF TEMP ;lleva parte baja de cuenta a temp. para CALL CONV7 ;convertir en siete sementos el resulatdo queda en W ; MOVWF PORTD MOVWF VAR17,F ;se guarda parte baja del conta en 7 segm en VAR17 MOVFF VAR1,VARU ;se lleva contador a VARU SWAPF VARU ;se intercambia primer digito del segundo digito de contador MOVLW 0FH ;se elimina la parte alta ANDWF VARU,W MOVWF TEMP ; se lleva a temp para su conversion CALL CONV7 ; a siete segmentos ; MOVWF PORTD MOVWF VAR27,F ; se guarda la conversion en VAR27 CALL DELAY2 ;llama delay2 para multiplexar y esperar un tiempo ; INCF VAR1 ;incrementa contador MOVF VAR1,W ;LLEVAR CONTADOR A W ADDLW 01 ;INCREMENTAR CONTADOR

DAW ;AJUSTAR A DECIMAL MOVWF VAR1,F ;REGRESAR CONTADOR EN DECIMAL A VAR1 MOVLW 00H CPFSEQ VAR1 ;compara contador con cero p' checar si ya dio vuelta GOTO OTRO27 ;no ha terminado de dar vuelta continua RETURN RETURN ;================================= ;= INICIA LA SUBRUTINA CONV_7_SEGM = EL NUMERO A CONVERTIR ESTA EN TEMPORAL Y REGRESA EN W ;================================= CONV7 ;RUTINA DE CONVERSION A 7 SEGMENTOS MOVF TEMP,W ADDWF TEMP,W MOVFF PCL, 01H ;HACE UN RESPALDO DEL PCL ADDWF PCL, F ;SUMA EL REGISTRO W CON PCL EL RESULTADO SE ALMACENA EN ;PCL Y BRINCA DEACUERDO AL DATO REQUERIDO RETLW 3Fh ;CODIGO DE 7 SEGMENTOS P'CERO 0gfedcba