Practica-4-Contador 99 PDF

Title Practica-4-Contador 99
Course Microcontroladores
Institution Instituto Tecnológico de Tijuana
Pages 21
File Size 731.9 KB
File Type PDF
Total Downloads 27
Total Views 224

Summary

Tecnológico Nacional de México Instituto Tecnológico de Tijuana Departamento de ingeniería eléctrica y electrónica Ingeniería BiomédicaUnidad 2: Arquitectura de microcontroladores.Materia: Microcontroladores. Alumno: Docente: Granados Enríquez Daniela Prof. Angel H. Corral Hernandez Torres RicardoPr...


Description

Tecnológico Nacional de México Instituto Tecnológico de Tijuana Departamento de ingeniería eléctrica y electrónica Ingeniería Biomédica

Unidad 2: Arquitectura de microcontroladores. Materia: Microcontroladores. Alumno:

Docente:

Granados Enríquez Daniela

Prof. Angel H. Corral

Hernandez Torres Ricardo

Practica 4: Contador decimal descendente usando PIC 16F877A y dos displays de 7 segmentos. Tijuana, Baja California, 29 de marzo de 2019

Índice Índice de figuras

2

1. Introducción

3

2. Objetivos

3

2.1 Objetivo general

3

2.2 Objetivo especifico

3

3. Marco Teórico

4

3.1 Puertos del Microcontrolador

4

3.1.1 Puerto B

4

3.1.2 Puerto D

5

3.2 Depuración del programa

5

3.3 Display de 7 segmentos

6

3.3.1 Display Ánodo Común

6

3.3.2 Display Cátodo Común

7

4. Material y equipo

8

4.1 Equipo

8

4.2 Material

8

5. Desarrollo

9

5.1 Análisis del código en lenguaje ensamblador

9

5.2 Simulación de código en MPLAB

17

5.3 Simulación en proteus

18

6. Conclusión

19

7. Referencias

19

1

Índice de Figuras Figura Figura Figura Figura Figura Figura Figura Figura Figura

1Configuracion de puertos.....................................................................................................4 2 Programa depuración MPLABSIM........................................................................................5 3 Cuadro de herramientas de MPLABSIM...............................................................................5 4 Configuracion siplay de anodo comun.................................................................................6 5 Tabla de verdad del display de ánodo común......................................................................7 6 Configuracion del display de catodo comun........................................................................7 7 Tabla de verdad del display de cátodo común.....................................................................8 8 Simulación con MPLAB-SIM...............................................................................................17 9 Simulación del circuito en proteus.....................................................................................18

2

1. Introducción El microcontrolador es un circuito integrado capaz de realizar diversas funciones dependiendo en la forma en la que sea programado, este tipo de programación se puede realizar utilizando un tipo de lenguaje bajo como el ensamblador o un tipo de lenguaje alto como el C. Cada microcontrolador puede ser ideal para proyectos específicos debido a las variaciones que posee cada uno, como puede ser una mayor capacidad en la memoria RAM, el número de líneas de E/S entre muchas otras. En la siguiente práctica se utiliza el PIC 16F877A el cual se le asignó la tarea de contar de manera descendente del 99 al 0 mostrando el respectivo resultado en displays de 7 segmentos, a continuación se muestra todo el proceso que se llevó a cabo para la realización de la práctica, desde la configuración del respectivo microcontrolador para ser programado, hasta la simulación que muestra el resultado obtenido. 2. Objetivos 2.1

Objetivo general

Escribir y ejecutar un programa en Lenguaje Ensamblador para el microcontrolador 16F877A que realice el conteo decimal descendente del 99 a 00 y despliegue el conteo en dos displays de 7 segmentos. 2.2 Objetivos específicos 

Aprender a realizar el código de programación en lenguaje ensamblador utilizando el entorno MPLAB.



Conocer la configuración del PIC 16F877A especificada en la hoja de datos.



Aprender a programar el PIC 16F877A con el programador [ ].



Armar un circuito con componentes especificados en la práctica.

3

3. Marco teórico 3.1 Puertos del Microcontrolador Para la mayoría de los puertos, la dirección del pin de E / S (entrada o salida) está controlada por el registro de dirección de datos, denominado registro TRIS. TRIS, controla la dirección del puerto. Un '1' en el bit TRIS corresponde a que ese pin sea una entrada, mientras que un '0' corresponde a ese pin como una salida.

Figura 1Configuracion de puertos

3.1.1. Puerto B El puerto B es un puerto bidireccional de 8 líneas, las cuales pueden ser configuradas como E/S con el registro de configuración TRISB. Cada uno de los pines del PORTB tiene un pull-up interno débil (fijan el pin a un nivel de 5 voltios) en donde un solo bit de control puede activar todos los pull-ups. El pull-up débil se desactiva automáticamente cuando el pin del puerto se configura como una salida. Los pull-ups están deshabilitados en un reinicio de encendido. Cuatro de los pines PORTB, RB7: RB4, tienen una función de “interrupt-on- change”, en donde solo los pines configurados como entradas pueden hacer que se produzca esta interrupción; esta interrupción consiste en despertar el dispositivo de la suspensión. 4

3.1.2Puerto D El puerto D es un puerto de 8 bits, con buffers de entrada “Schmitt trigger”. Cada pin está configurado como entrada o salida. PORTD se puede configurar como un puerto de microprocesador de 8 bits de ancho (puerto paralelo de esclavos) configurando el bit de control, PSPMODE (TRISE ). En este modo, los buffers de entrada son TTL. 3.2 Depuración del programa Posteriormente se selecciona la herramienta para depurar/simular el código, en este caso elegir MPLAB SIM; para ello hacer clic en: Debugger » Select Tool » MPLAB SIM.

Figura 2 Programa depuración MPLABSIM

Después de seleccionar MPLAB SIM, se activa un cuadro de herramientas llamado Debug

Figura 3 Cuadro de herramientas de MPLABSIM.

De izquierda a derecha tenemos: 1.

Botón para ejecutar el programa

2.

Botón para detener la ejecución

3.

Botón para animar el programa, es decir, ejecutarlo automáticamente línea por línea.

4.

Ejecutar instrucción dentro (subrutinas) 5

5.

Ejecutar instrucción sobre (subrutinas)

6.

Ejecutar instrucción fuera (subrutinas)

7.

Reset

8.

Breakpoints para detener la ejecución animada o resaltar una línea de código

3.3 Display de 7 segmentos El display de 7 segmentos es un dispositivo electrónico que se utiliza para representar visualmente números y algunos caracteres. Este display es muy popular debido a su gran efectividad y simplicidad al momento de utilizarlo. 3.3.1 Display Ánodo Común Se llama así por que todos los leds están unidos en su terminal positiva (ánodo), para encenderlos tenemos que poner tierra en la terminal de la letra.

6

Figura 4 Configuracion siplay de anodo comun

Los pines (A-B-C-D-E-F-G) representan cada led interno del 7 segmentos, en el caso del Catodo Común se encenderán con un 1 lógico mientras que en Ánodo Común se encenderá con un 0 Logico.

Figura 5 Tabla de verdad del display de ánodo común

3.3.2 Display Catodo Común

7

Este display es el opuesto del ánodo común ya que los leds están unidos en la terminal negativa (cátodo). Para encender los leds tenemos que poner voltaje en las terminales de las letras.

Figura 6 Configuracion del display de catodo comun

8

Figura 7 Tabla de verdad del display de cátodo común

4. Material y equipo 4.1 Equipo 

Fuente de Poder DC de 195 watts con 3 Salidas.



Programados de PIC []

4.2 Material 

1 protoboard con 830 puntos de conexión y 4 raíles de positivo y negativo.



Jumpers macho a macho, tamaño: variado= (17.5cm, 23cm, 12.5cm y 9.5cm).



1 cuarzo de 4 MHz



2 capacitores cerámicos de 22 pF



8 Resistencia 330Ω, 1/4 W



1 Resistencia 10KΩ, 1/4 W



1 PIC 16F877A



Micro interruptor (Switch) de presión de 12 Vcc, 50 mA, 2 terminales.



2 displays de ánodo común []

5. Desarrollo 5.1 Análisis del código en lenguaje ensamblador

9

Se realiza el siguiente código, el cual cumple con las especificaciones que solicita el proyecto. En esta parte del código, se configura el PIC, en donde en la primera línea el watch dog timer (WDT) esta deshabilitado, Power up Timer (PWRT) esta habilitado, si indica que se utilizara un oscilador (XT OSC), se encuentra apagado el programa a voltaje bajo (LVP) y el programa en la memoria flash se encuentra apagado. En la segunda y tercera línea se especifica el PIC utilizado y su librería. Se inicia el programa con el __CONFIG

_WDT_OFF&_PWRTE_ON&_XT_OSC&_LVP_OFF&_CP_OFF

;

Configuración para el programador LIST p=16F877A INCLUDE

Aquí se declaran las variables que se van a utilizar en nuestras subrutinas de retardo y se les asigna una direccion, y se indica en donde inicia el programa, que es en la direccion 0X00. GOTO inicio ; Salta a la etiqueta inicio ORG 0x00

; Inicio de programa

N EQU 0x00 cont1 EQU 0x20 cont2 EQU 0x21 ORG 0x05

En la etiqueta de inicio se muestra la configuración de los puertos, para ello primero se debe de ingresar a los bancos del PIC, en donde para acceder a ellos se utiliza el registro 10

STATUS, el cual contiene los bits para seleccionar dicho banco; para acceder al banco 0 con la instrucción BCF se coloca en cero el bit 5 que es el RPO del registro STATUS, después se limpia el puerto B con la instrucción CLRF y posteriormente se accede al banco 1 al usar la instrucción BSF en el registro status. Se utiliza la instrucción CLRF y TRISB para poder configurar los puertos B y D como salidas, y finalmente regresamos al banco 0. inicio BCF STATUS,RP0 ; Accede a banco 0 BCF STATUS,RP1 CLRF PORTB ; Limpia PORTB BSF STATUS,RP0 ; Accede a banco 1 CLRF TRISB ; Configura todos los pines de PORTB como salidas CLRF TRISD ; Configura todos los pines de PORTD como salidas BCF STATUS,RP0 ; Regresa a banco 0

La siguiente parte del código muestra la subrutina de decenas, en la cual se ingresa el número 9 pero en binario indicado con “b” al registro de trabajo con la instrucción MOVLW, y de ahí se mueve al puerto D con MOVWF, posteriormente se llama a la subrutina retardo con CALL esto para que haya un intervalo de tiempo entre cada instrucción y luego se llama al puerto B que es donde tenemos a la subrutina de unidades. Se repite el proceso para cada decena utilizada que se mostró en el display, esto para que haya un orden en cuanto a la secuencia mostrada y para que el retardo de las decenas fuera un poco más grande que el de las unidades. ;PuertoD, subrutina de decenas PuertoD0 MOVLW B'10011000' ; Mueve B'10011000'(9) al registro de trabajo MOVWF PORTD

; Mueve el registro de trabajo a PORTD 11

CALL Retardo

; Llama a la subrutina de retardo

CALL PuertoB

; Llama a la subrutina de unidades del PuertoB

PuertoD1 MOVLW B'10000000' ; Mueve B'10000000'(8) al registro de trabajo MOVWF PORTD

;Mueve el registro de trabajo a PORTD

CALL Retardo

; Llama a la subrutina de retardo

CALL PuertoB

; Llama a la subrutina de unidades del PuertoB

PuertoD2 MOVLW B'11111000' MOVWF PORTD

; Mueve B'11111000'(7) al registro de trabajo

;Mueve el registro de trabajo a PORTD

CALL Retardo

; Llama a la subrutina de retardo

CALL PuertoB

; Llama a la subrutina de unidades del PuertoB

PuertoD3 MOVLW B'10000010' ; Mueve B'10000010'(6) al registro de trabajo MOVWF PORTD

;Mueve el registro de trabajo a PORTD

CALL Retardo

; Llama a la subrutina de retardo

CALL PuertoB

; Llama a la subrutina de unidades del PuertoB

PuertoD4 MOVLW B'10010010' ; Mueve B'10010010'(5) al registro de trabajo 12

MOVWF PORTD

;Mueve el registro de trabajo a PORTD

CALL Retardo

; Llama a la subrutina de retardo

CALL PuertoB

; Llama a la subrutina de unidades del PuertoB

PuertoD5 MOVLW B'10011001' ; Mueve B'10011001'(4) al registro de trabajo MOVWF PORTD

;Mueve el registro de trabajo a PORTD

CALL Retardo

; Llama a la subrutina de retardo

CALL PuertoB

; Llama a la subrutina de unidades del PuertoB

PuertoD6 MOVLW B'10110000'

; Mueve B'10110000'(3) al registro de trabajo

MOVWF PORTD

;Mueve el registro de trabajo a PORTD

CALL Retardo

; Llama a la subrutina de retardo

CALL PuertoB

; Llama a la subrutina de unidades del PuertoB

PuertoD7 MOVLW B'10100100'

; Mueve B'10100100'(2) al registro de trabajo

MOVWF PORTD

;Mueve el registro de trabajo a PORTD

CALL Retardo

; Llama a la subrutina de retardo

CALL PuertoB

; Llama a la subrutina de unidades del PuertoB

13

PuertoD8 MOVLW B'11111001'

; Mueve B'11111001'(1) al registro de trabajo

MOVWF PORTD

;Mueve el registro de trabajo a PORTD

CALL Retardo

; Llama a la subrutina de retardo

CALL PuertoB

; Llama a la subrutina de unidades del PuertoB

PuertoD9 MOVLW B'11000000'

; Mueve B'11000000'(0) al registro de trabajo

MOVWF PORTD

;Mueve el registro de trabajo a PORTD

CALL Retardo

; Llama a la subrutina de retardo

CALL PuertoB GOTO PuertoD0

; Llama a la subrutina de unidades del PuertoB ;Regresa a la decena D0 del puerto D

En la siguiente parte del código tenemos la subrutina de unidades, la cual muestra las unidades que se mostraran en el display que siguen la secuencia de 9-0, en donde para la primera unidad 9 se mueve al registro de trabajo con MOVLW, se mueve el registro de trabajo a PORTB y se llama a la subrutina de retardo para que pase un intervalo de tiempo antes de cambiar de unidad. ;PuertoB subrutinas de unidades PuertoB ;Nueve MOVLW B'10011000'

; Mueve B'10011000' (9) al registro de trabajo

MOVWF PORTB

; Mueve el registro de trabajo a PORTB

CALL Retardo

; Llama la subrutina Retardo 14

;Ocho MOVLW B'10000000' MOVWF PORTB CALL Retardo ;Siete MOVLW B'11111000' MOVWF PORTB CALL Retardo ;Seis MOVLW B'10000010' MOVWF PORTB CALL Retardo ;Cinco MOVLW B'10010010' MOVWF PORTB CALL Retardo ;Cuatro MOVLW B'10011001' MOVWF PORTB CALL Retardo ;Tres MOVLW B'10110000' MOVWF PORTB 15

CALL Retardo ;Dos MOVLW B'10100100' MOVWF PORTB CALL Retardo ;Uno MOVLW B'11111001' MOVWF PORTB CALL Retardo ;Cero MOVLW B'11000000' MOVWF PORTB CALL Retardo

RETURN

;

En esta parte del código se ejecuta la subrutina de retardo, la cual es el tiempo en que tarda un LED en prender y apagar. Retardo MOVLW N MOVWF cont1

;Mover N al registro de trabajo ; Mover registro de trabajo a cont1

Repite1 MOVLW N MOVWF cont2

;Mover N al registro de trabajo ;Mover el registro de trabajo a cont2 16

Repite2 DECFSZ cont2,1

;Decrementa en 1 el registro de F hasta

llegar a 0 GOTO Repite2 DECFSZ cont1,1

;Decrementa en 1 el registro de F hasta llegar a

0 GOTO Repite1 RETURN END ; Fin de programaEND

5.2 Simulación de código en MPLAB Se realizó la depuración del código utilizando la opción MPLABSIM que ofrece el software MPLAB, la flecha verde que se muestra hace el recorrido del programa.

17

Figura 8 Simulación con MPLAB-SIM

5.3 Simulación en proteus

18

Se realiza la simulación del circuito en donde se incluye en el microcontrolador el archivo.HEX que se genera cuando se compila correctamente el programa en el software MPLAB. Se puede observar que se utilizan el puerto B para representar las unidades y el puerto D para representar las decenas.

Figura 9 Simulación del circuito en proteus

6. Conclusión

19

Para la siguiente practica la cual solicitaba mostrar la secuencia de 99-0 de manera descendente, se puede realizar de varias formas como por ejemplo utilizando la multiplexion o haciendo uso de dos puertos como se presentó anteriormente, en donde para la ejecución correcta del programa fue crucial el conocer las instrucciones que lograron realizar el despliegue de las unidades y las decenas en los displays, además de que se necesitaba que cada uno de estos resultados desplegados tuvieran un retardo diferente para que se pudiera apreciar la secuencia debido a que las decenas debían de tener un retardo mucho mayor que las unidades. 7. Referencias [1] https://need4bits.wordpress.com/2012/06/30/simulacion-en-mplab-ide/ [2] https://www.ingmecafenix.com/electronica/display-de-7-segmentos/ [3] http://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf

20...


Similar Free PDFs