17
Proyecto final Integrantes de equipo P: Rojo Medina Luis Edgar Mascareño Zazueta Carlos Alfonso Materia: Arquitectura de Computadoras Profesor: Alejandro Seleme Carrera: Ingeniería en Tecnologías de la Información y Comunicaciones Universidad: Instituto Tecnológico de Culiacán Fecha: 27 de Noviembre del 2014

Secuencia de Leds con PIC 16f84a y lenguaje ensamblador!

Embed Size (px)

Citation preview

Proyecto finalIntegrantes de equipo P:

Rojo Medina Luis Edgar Mascareño Zazueta Carlos Alfonso

Materia: Arquitectura de Computadoras

Profesor: Alejandro Seleme

Carrera: Ingeniería en Tecnologías de laInformación y Comunicaciones

Universidad: Instituto Tecnológico de Culiacán

Fecha: 27 de Noviembre del 2014

Índice: pag

1. Introducción………………………………………..32. Objetivos…………………………………………..3

3. Materiales………………………………………….34. Practica (desarrollo y resultado)……………4,5

5. Conclusiones……………………………………66. Bibliografia……………………………………….6

Introducción:

Un microcontrolador (abreviado μC, UC o MCU) es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica. Un microcontrolador incluye en su interior las tres principales unidades funcionales de una computadora: unidad central de procesamiento, memoria y periféricos de entrada/salida.El PIC16F84 es un microcontrolador a 8 bits de la familia PIC perteneciente a la Gama Media (según la clasificación dada a los microcontroladores por la misma empresa fabricante) Microchip.Se trata de uno de los microcontroladores más populares del mercado actual, ideal para principiantes, debido a su arquitecturade 8 bits, 18 pines, y un conjunto de instrucciones RISC muy amigable para memorizar y fácil de entender

Objetivos:-Montar un circuito en el protoboard conformado principalmente porel microcontrolador (PIC) 16F84A, un cristal de cuarzo como oscilador y dos capacitores conectados al cristal.

-Programar el Microcontrolador (PIC) 16F84A en Ensamblador para lograr que el Circuito logre hacer 5 tipos de secuencias en 8 LEDs, Cada secuencia estará programado para una entrada del PIC (Patas 1, 2, 3, 17, 18).

Materiales: 1 Computadora Pentium III, 0.8 GHz con 0.5 GB de RAM mínimo. 1 Software de simulación Proteus versión 6.9 mínimo

instalado. 1 Software de Desarrollo MPLAB IDE MR Ver. 8.00.00.00 o

Superior. 1 Placa de Protoboard. PIC 16F84A. 8 LEDs. 5 Pulsadores. 1 Cristal de Cuarzo de 4 mhz. 2 capacitores cerámicos de 33p. Protoboard. Cable Telefonico (UTP).

Desarrollo:

1. Primero Adquirimos los Componentes necesarios para la Realización del Proyecto.

2. Antes de Comenzar a colocar los componentes en el protoboard , Diseñamos el Circuito en el Programa de simulación PROTEUS, basándonos en el circuito de laTarea 5.

3. Ya Teniendo el Circuito Diseñado, Empezamos a Desarrollar el Programa con la herramienta MPLAB en el Lenguaje Ensamblador.

4. Creamos un nuevo proyecto y luego lo guardamos como proyectofinal.asm

5. Comenzamos con el Desarrollo del Programa.6. Ya que terminamos de Desarrollar el Programa, seleccionamos

el componente que vamos a programar en este caso será el PIC16F84A. Para hacer eso nos vamos a Configure, Select Device y por ultimo seleccionamos el PIC16F84A.

7. Y para compilarlo nos vamos a Project y luego le damos a Quickbuild proyectofinal.asm, el cual nos creara el archivo proyectofinal.HEX que necesitaremos para programar el PIC.

8. Ya que esta compilado, nos vamos a nuestro circuito en proteus y le damos doble click al PIC16F84A, le damos click en program file y allí buscamos nuestro programa proyectofinal.HEX, lo seleccionamos y le cargamos el programaal Microcontrolador.

9. Lo Ejecutamos y observamos que nuestro programa hace las 5 secuencias con las 5 entradas que le programamos.

10. Ya Asegurados que el Programa Funciona Correctamente, Empezamos el Montaje del Circuito en el Protoboard.

11. Ya teniendo todos los componentes Correctamente Conectados, Procedimos a Solicitar el apoyo de nuestro profesor para que con la ayuda de una placa programadora nos grabara nuestro programa en el PIC16F84A.

12. Colocamos el PIC16F84A en nuestro protoboard y conectamos el circuito a una fuenta regulada de 5V, y nuestras 5 secuencias de LED funcionaron correctamente en las5 formas de entrada.

Codigo del Programa

; InicoR0L EQU 0xCR0H EQU 0xDR1L EQU 0xER1H EQU 0xFR2L EQU 0x10R2H EQU 0x11R3L EQU 0x12R3H EQU 0x13R4L EQU 0x14R4H EQU 0x15R5L EQU 0x16R5H EQU 0x17ORG 0x0000BCF PCLATH,3BCF PCLATH,4GOTO L0002ORG 0x0004RETFIE

L0002:; 1: AllDigital; 2: TRISA = %11111111

BSF STATUS,RP0MOVLW 0xFFMOVWF 0x05

; 3: TRISB = %00000000

CLRF 0x06BCF STATUS,RP0

; 4: Dim mascara As Byte; The address of 'mascara' is 0x18

mascara EQU 0x18; 5: Dim digito As Byte; The address of 'digito' is 0x19

digito EQU 0x19; 6: Dim veces As Byte; The address of 'veces' is 0x1A

veces EQU 0x1A; 7: loop: L0001:; 8: If PORTA.0 = 1 Then

BTFSS 0x05,0GOTO L0003

; 9: For veces = 0 To 2CLRF 0x1A

L0004:MOVF 0x1A,WSUBLW 0x02BTFSS STATUS,CGOTO L0005

; 10: For digito = 0 To 9CLRF 0x19

L0006:MOVF 0x19,WSUBLW 0x09BTFSS STATUS,CGOTO L0007

; 11: PORTB = LookUp(0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff), digito

MOVF 0x19,WSUBLW 0x08BTFSS STATUS,CGOTO L0008CALL L0009MOVWF 0x06GOTO L0008

L0009:MOVLW 0x00MOVWF PCLATHMOVF 0x19,WADDWF PCL,FRETLW 0x00RETLW 0x01RETLW 0x03

RETLW 0x07RETLW 0x0FRETLW 0x1FRETLW 0x3FRETLW 0x7FRETLW 0xFF

L0008:; 12: WaitMs 75

MOVLW 0x4BMOVWF R0LCLRF R0HCALL W001

; 13: Next digitoMOVLW 0x01ADDWF 0x19,FBTFSS STATUS,CGOTO L0006

L0007: MOVLW 0x1FANDWF STATUS,F

; 14: Next vecesMOVLW 0x01ADDWF 0x1A,FBTFSS STATUS,CGOTO L0004

L0005: MOVLW 0x1FANDWF STATUS,F

; 15: EndifL0003: MOVLW 0x1F

ANDWF STATUS,F; 16: If PORTA.1 = 1 Then

BTFSS 0x05,1GOTO L0010

; 17: For veces = 0 To 2CLRF 0x1A

L0011:MOVF 0x1A,WSUBLW 0x02BTFSS STATUS,CGOTO L0012

; 18: For digito = 0 To 9CLRF 0x19

L0013:MOVF 0x19,WSUBLW 0x09BTFSS STATUS,CGOTO L0014

; 19: PORTB = LookUp(0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff), digito

MOVF 0x19,WSUBLW 0x08BTFSS STATUS,CGOTO L0015CALL L0016MOVWF 0x06GOTO L0015

L0016:MOVLW 0x00MOVWF PCLATHMOVF 0x19,WADDWF PCL,FRETLW 0x00RETLW 0x80RETLW 0xC0RETLW 0xE0RETLW 0xF0RETLW 0xF8RETLW 0xFCRETLW 0xFERETLW 0xFF

L0015:; 20: WaitMs 75

MOVLW 0x4BMOVWF R0LCLRF R0HCALL W001

; 21: Next digitoMOVLW 0x01ADDWF 0x19,FBTFSS STATUS,CGOTO L0013

L0014: MOVLW 0x1FANDWF STATUS,F

; 22: Next vecesMOVLW 0x01ADDWF 0x1A,FBTFSS STATUS,CGOTO L0011

L0012: MOVLW 0x1FANDWF STATUS,F

; 23: EndifL0010: MOVLW 0x1F

ANDWF STATUS,F; 24:

; 25: If PORTA.2 = 1 ThenBTFSS 0x05,2GOTO L0017

; 26: For veces = 0 To 2CLRF 0x1A

L0018:MOVF 0x1A,WSUBLW 0x02BTFSS STATUS,CGOTO L0019

; 27: For digito = 0 To 9CLRF 0x19

L0020:MOVF 0x19,WSUBLW 0x09BTFSS STATUS,CGOTO L0021

; 28: PORTB = LookUp(0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80), digito

MOVF 0x19,WSUBLW 0x08BTFSS STATUS,CGOTO L0022CALL L0023MOVWF 0x06GOTO L0022

L0023:MOVLW 0x00MOVWF PCLATHMOVF 0x19,WADDWF PCL,FRETLW 0x00RETLW 0x01RETLW 0x02RETLW 0x04RETLW 0x08RETLW 0x10RETLW 0x20RETLW 0x40RETLW 0x80

L0022:; 29: WaitMs 75

MOVLW 0x4BMOVWF R0LCLRF R0HCALL W001

; 30: Next digito

MOVLW 0x01ADDWF 0x19,FBTFSS STATUS,CGOTO L0020

L0021: MOVLW 0x1FANDWF STATUS,F

; 31: Next vecesMOVLW 0x01ADDWF 0x1A,FBTFSS STATUS,CGOTO L0018

L0019: MOVLW 0x1FANDWF STATUS,F

; 32: EndifL0017: MOVLW 0x1F

ANDWF STATUS,F; 33: If PORTA.3 = 1 Then

BTFSS 0x05,3GOTO L0024

; 34: For veces = 0 To 2CLRF 0x1A

L0025:MOVF 0x1A,WSUBLW 0x02BTFSS STATUS,CGOTO L0026

; 35: For digito = 0 To 9CLRF 0x19

L0027:MOVF 0x19,WSUBLW 0x09BTFSS STATUS,CGOTO L0028

; 36: PORTB = LookUp(0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01), digito

MOVF 0x19,WSUBLW 0x08BTFSS STATUS,CGOTO L0029CALL L0030MOVWF 0x06GOTO L0029

L0030:MOVLW 0x00MOVWF PCLATHMOVF 0x19,WADDWF PCL,F

RETLW 0x00RETLW 0x80RETLW 0x40RETLW 0x20RETLW 0x10RETLW 0x08RETLW 0x04RETLW 0x02RETLW 0x01

L0029:; 37: WaitMs 75

MOVLW 0x4BMOVWF R0LCLRF R0HCALL W001

; 38: Next digitoMOVLW 0x01ADDWF 0x19,FBTFSS STATUS,CGOTO L0027

L0028: MOVLW 0x1FANDWF STATUS,F

; 39: Next vecesMOVLW 0x01ADDWF 0x1A,FBTFSS STATUS,CGOTO L0025

L0026: MOVLW 0x1FANDWF STATUS,F

; 40: EndifL0024: MOVLW 0x1F

ANDWF STATUS,F; 41: If PORTA.4 = 1 Then

BTFSS 0x05,4GOTO L0031

; 42: For veces = 0 To 2CLRF 0x1A

L0032:MOVF 0x1A,WSUBLW 0x02BTFSS STATUS,CGOTO L0033

; 43: For digito = 0 To 8CLRF 0x19

L0034:MOVF 0x19,WSUBLW 0x08

BTFSS STATUS,CGOTO L0035

; 44: PORTB = LookUp(0x00, 0x81, 0x42, 0x24, 0x18, 0x24, 0x42, 0x81), digito

MOVF 0x19,WSUBLW 0x07BTFSS STATUS,CGOTO L0036CALL L0037MOVWF 0x06GOTO L0036

L0037:MOVLW 0x00MOVWF PCLATHMOVF 0x19,WADDWF PCL,FRETLW 0x00RETLW 0x81RETLW 0x42RETLW 0x24RETLW 0x18RETLW 0x24RETLW 0x42RETLW 0x81

L0036:; 45: WaitMs 75

MOVLW 0x4BMOVWF R0LCLRF R0HCALL W001

; 46: Next digitoMOVLW 0x01ADDWF 0x19,FBTFSS STATUS,CGOTO L0034

L0035: MOVLW 0x1FANDWF STATUS,F

; 47: Next vecesMOVLW 0x01ADDWF 0x1A,FBTFSS STATUS,CGOTO L0032

L0033: MOVLW 0x1FANDWF STATUS,F

; 48: EndifL0031: MOVLW 0x1F

ANDWF STATUS,F

; 49: PORTB = 0CLRF 0x06

; 50: Goto loopGOTO L0001

; End of programL0038: GOTO L0038; Waitms RoutineW001: MOVF R0L,F

BTFSC STATUS,ZGOTO W002CALL W003DECF R0L,FNOPNOPNOPNOPNOPGOTO W001

W002: MOVF R0H,FBTFSC STATUS,ZRETURNCALL W003DECF R0H,FDECF R0L,FGOTO W001

W003: MOVLW 0x0CMOVWF R2H

W004: DECFSZ R2H,FGOTO W004NOPNOPMOVLW 0x12MOVWF R1L

W005: DECFSZ R1L,FGOTO W006CALL W007CALL W007NOPNOPRETURN

W006: CALL W007GOTO W005

W007: MOVLW 0x0DMOVWF R2L

W008: DECFSZ R2L,FGOTO W008NOP

RETURN; Fin

END

Proyecto realizado en Protoboard.

Conclusiones:En conclusión los Microcontroladores (PIC) son muy importantes para que los aparatos electrónicos que nos rodean cotidianamente en nuestra vida actual como las computadoras, los celulares, radios, estéreos, tabletas, cañones, etc. Tengan un correcto funcionamiento y gracias a este proyecto nos dimos cuenta cómo es que funcionan.

Bibliografía:

http://es.wikipedia.org/wiki/Microcontrolador