ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

MULTIPLICACIÓN Y DIVISIÓN EN MPLAB


Enviado por   •  9 de Diciembre de 2021  •  Apuntes  •  1.524 Palabras (7 Páginas)  •  210 Visitas

Página 1 de 7

Nombre de la Práctica : 1. MULTIPLICACIÓN Y DIVISIÓN EN MPLAB

Objetivo: Demostrar por medio de MPLAB y proteus el funcionamiento de la multiplicación y división de dos valores y demostrar su salida a través de proteus haciendo uso de un circuito con un PIC16F84A, leds de colores y demás componentes.

Material y Equipo utilizado:

  • MPLAB

[pic 1]

  • Proteus

[pic 2]

  • Circuito proporcionado por la maestra, hecho en proteus
  • Componentes como: Botones, capcitores, diodos, leds, GND, VCC, distintas resistencias, quartz crystal,… para formar el circuito

[pic 3]

  • Leds de distintos colores (opcional los colores)

[pic 4]

  • PIC16F84A

[pic 5]

[pic 6]

Además, debemos de tener en cuenta el datasheet de este pic:

[pic 7]

Metodología: (INDICA LOS PASOS PARA REALIZAR LA PRACTICA)

(Procedimiento)

  1. Primeramente, crearemos el código que controlará el pic, y esto lo haremos en MPLAB. Abrimos MPLAB, y creamos un proyecto (si es que no tenemos uno creado)

[pic 8]

  1. Dentro del proyecto crearemos un archivo de extensión .asm, que es el que guardará el código y lo llamaremos multiplicación. En primer momento es un documento en blanc, y es aquí donde pondremos todo el código referente.
  2. Revisamos el diagrama de flujo proporcionado:

[pic 9]

  1. Realizamos las configuraciones iniciales:

[pic 10]

  1. Posteriormente, basándonos en el diagrama de flujo proporcionado, generamos las instrucciones necesarias para el programa, empezando por las variables y el espacio de memoria donde se guardará:

         [pic 11]

  1. Generar las configuraciones iniciales para poder utilizar el código en el circuito del pic16f84a

[pic 12]

  1. Iniciar con el diagrama de flujo. Guardamos en las variables correspondinetes los valores iniciales, en este caso, NUM1=21 e inicializamos el Contador en 8, que es el que nos indica por cuál numero se multiplica NUM1.

[pic 13]

  1. Creamos el bucle de repetición que sumará el valor num1 las veces que el contador indica.

[pic 14]

La forma en que nos salimos de este bucle es decrementando el Contador, en el momento que el Contador sea 0 se brinca la linea que permite regresarnos al inicio de la rutina sumas, y nos lleva a resul, que es:

[pic 15]

Resul guarda el valor en resultado y lo manda a PORTB, que permite visusalizar el número en proteus por medio de leds.

Resultado de multiplicación.

De multiplicación, sería todo. Probaremos cómo funciona por medio de proteus. Dentro de MPLAB, hacemos click en [pic 16] Posteriormente, en [pic 17], si no nos da ningpun problema, pasamos a proteus.

Dar doble click sobre el pic y nos sale la siguiente Ventana:

[pic 18]

En program file damos click en la carpeta y seleccionamos el archivo con la extension .hex que fue generado en MPLAB:

[pic 19]

Seleccionamos y damos aceptar. Posteriormente, corremos el circuito y visualizaremos que los leds quedan encendidos de la siguiente forma:

[pic 20]

Tenemos encendidos los leds correspondientes a 128,32 y 8, si sumamos estos valores nos da como resultado 168. Si multiplicamos 21*8 vemos que, efectivamente, es 168.

  INICIO        

        BSF STATUS,RP0    ;poner un 1 el bit 5 del registro status con intencion de movernos de banco 0 o 1

        CLRF TRISB          ;poner en 0 el registro trisb, configurandolo como salida

        MOVLW B'11111111' ;poner en 1 a W

        MOVWF TRISA          ;configurando a trisa como entrada de otra manera que trisb

        BCF STATUS,RP0    

movlw d'21'         ; W=21

movwf NUM1        ;NUM1=W=21

movlw d'8'         ; W=8

movwf CONTA        ;CONTA=W=8

movlw d'0'         ; W=0

Sumas

addwf NUM1,0         ;W=NUM1+W=21+0

DECFSZ CONTA,1        ;CONTA=CONTA-1, SI CONTA=0 SE SALTA UNA LINEA

GOTO Sumas ; se regresa a Sumas

GOTO Resul

Resul

movwf RESULTADO        ;W=RESULTADO= 168

MOVWF PORTB

END

División.

  1. Dentro del proyecto crearemos un archivo de extensión .asm, que es el que guardará el código y lo llamaremos división. En primer momento es un documento en blanco, y es aquí donde pondremos todo el código referente.
  2. Revisamos el diagrama de flujo proporcionado:

[pic 21]

  1. Realizamos las configuraciones iniciales:

[pic 22]

  1. Posteriormente, basándonos en el diagrama de flujo proporcionado, generamos las instrucciones necesarias para el programa, empezando por las variables y el espacio de memoria donde se guardará:

         [pic 23]

  1. Generar las configuraciones iniciales para poder utilizar el código en el circuito del pic16f84a

[pic 24]

  1. Iniciar con el diagrama de flujo. Guardamos en las variables correspondinetes los valores iniciales, en este caso, ARRI=45 e inicializamos el Contador en 0, y en ABA=7. que es el que nos indica por cuál numero se divide ARRI.

[pic 25]

  1. Creamos el bucle de repetición que restará el valor 45 las veces que el contador indica.

[pic 26]

La forma en que nos salimos de este bucle es por medio del BTFSC, que revisa si hubo carry en el bit 8. Podemos regresarnos al bucle o irnos a Resul, Resul es:

[pic 27]

Resul guarda el valor en resultado y lo manda a PORTB, que permite visusalizar el número en proteus por medio de leds.

Resultado de división.

De división, sería todo. Probaremos cómo funciona por medio de proteus. Dentro de MPLAB, hacemos click en [pic 28] Posteriormente, en [pic 29], si no nos da ningun problema, pasamos a proteus.

Dar doble click sobre el pic y nos sale la siguiente Ventana:

[pic 30]

En program file damos click en la carpeta y seleccionamos el archivo con la extension .hex que fue generado en MPLAB:

[pic 31]

Seleccionamos y damos aceptar. Posteriormente, corremos el circuito y visualizaremos que los leds quedan encendidos de la siguiente forma:

[pic 32]

Tenemos encendidos los leds correspondientes a 4 y 2, si sumamos estos valores nos da como resultado 6. Si dividimos 45/7 vemos que, efectivamente, es 6 y queda de residuo 3.

Otra forma que tenemos para leer lo resultados en MPLAB es por medio de watches. Dentro de la pestaña debug nos da la siguiente opción: [pic 33]

New watch nos permite agregar una variable, que realmente es el espacio de memoria correspondiente a la variable y al momento de dar debug Podemos correr el código linea por linea y revisar qué valor toma cada variable durante la ejecución, por ejemplo, la division:

[pic 34]

Vemos que el espacio 0x22, que corresponde a la variable resultado, tiene el valor 6, y el espacio 0x23, que es el residuo, tiene el valor 3, como ya habiamos mencionado antes.

El Código de la division es el siguiente:

; PIC16F84A Configuration Bit Settings

CONT EQU 0x21

RESULTADO EQU 0x22

RESIDUO EQU 0x23

ARRI EQU 0x24

ABA EQU 0x25

   INICIO        

        BSF STATUS,RP0    ;poner un 1 el bit 5 del registro status con intencion de movernos de banco 0 o 1

        CLRF TRISB          ;poner en 0 el registro trisb, configurandolo como salida

        MOVLW B'11111111' ;poner en 1 a W

        MOVWF TRISA          ;configurando a trisa como entrada de otra manera que trisb

        BCF STATUS,RP0    ;po

        

;inicia

movlw d'45'         ; W=45

movwf ARRI        ;ARRI=W=45

movlw d'0'         ; W=0

movwf CONT        ;CONT=W=0

movlw d'7'         ; W=0

movwf ABA        ;CONT=W=0

Restas

movf ARRI,0        ;W=ARRI=45

movwf RESIDUO        ;RESIDUO=W=45

MOVF ABA,0        ;W=ABA=7 comp= 11111000

        

incf CONT,1        ;CONT=CONT+1

SUBWF ARRI,0

MOVWF ARRI

BTFSC STATUS,0         ;REVISAR SI HUBO CARRY EN BIT 8

GOTO Restas ; se regresa a Restas

GOTO Resul

Resul

DECF CONT,1        ;CONTA=CONTA-1

movf CONT,0        ;W=CONTA

movwf RESULTADO

movwf PORTB

END

Observaciones y comentarios: (QUE APRENDIÓ, QUE SE LE DIFICULTÓ)

(Conclusiones)

Realmente siento que no se me dificultó nada, si acaso comprender cómo es que funciona MPLAB y cómo se relaciona con PROTEUS para que los leds reciban el valor del resultado. Al haber usado anteriormente el lenguaje ensamblador en lenguajes de interfaz y el procesador 8086/88 en arquitectura de computadoras, fue más fácil familiarizarme para trabajar con el PIC61F84

Vo. Bo. Responsable

     

Firma del alumno

...

Descargar como (para miembros actualizados) txt (8 Kb) pdf (331 Kb) docx (454 Kb)
Leer 6 páginas más »
Disponible sólo en Clubensayos.com