MULTIPLICACIÓN Y DIVISIÓN EN MPLAB
Enviado por anacast1456 • 9 de Diciembre de 2021 • Apuntes • 1.524 Palabras (7 Páginas) • 211 Visitas
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:
[pic 1]
[pic 2]
[pic 3]
[pic 4]
[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)
[pic 8]
[pic 9]
[pic 10]
[pic 11]
[pic 12]
[pic 13]
[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.
[pic 21]
[pic 22]
[pic 23]
[pic 24]
[pic 25]
[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 |
...