Rutina De Multiplicacion En Pic16f887
Enviado por cesar86 • 12 de Octubre de 2012 • 10.514 Palabras (43 Páginas) • 1.923 Visitas
MICROPROCESADORES
PRACTICA No 3:
MULTIPLICACION Y SUMA CON ENTER Y DESBORDAMIENTO
PROFESOR:
DR. REYMUNDO RAMIREZ BETANCOUR
ALUMNO:
ERIK RIVERO HERNANDEZ
Miércoles 12 de septiembre del 2012
Material y equipo
1 MICROCONTROLADOR PIC 16F887
1 TECLADO MATRICIAL 4X4
1 PROTOBOARD
9 LEDS
10 RESISTENCIAS DE 220 HOMS
1 FUENTE DE VOLTAJE
1 GRABADORA DE PIC
1 PROTEUS
1 PUSH BUTTON
1 CAPACITOR
OBJETIVO.
Lo que se desea hacer en esta práctica es realizar un programa donde se implemente una rutina de multiplicación, la suma, la resta entre otras instrucciones.
Resumen de procedimiento
Se utiliza el teclado matricial 4x4 con el Pic 16f887, se determina una tecla como enter, máximo se presiona cuatro veces en el teclado lo cual pueden ser un numero y enter, dos números y enter o tres números y enter. Se presiona la primer tecla, después se presiona otra tecla y se verifica si es un enter o es otro numero, si es enter entonces el primer numero se muestra en los leds y se reinicia, sino entonces se multiplica el primer numero por diez , se le suma el segundo y se guarda, se presiona otra tecla y se verifica si es enter u otro numero, si es enter se muestra en los leds el resultado de la operación anterior, si no es enter se multiplica el resultado por diez y se le suma el tercer numero y se guarda, por ultimo se presiona enter o cualquier otra tecla y se muestra el resultado en los leds. Realizaremos la programación en asm con mplab y la simulación con proteus, por último se realizara en protoboard.
DESARROLLO.
PASO 1. Deberá realizarse el código en ASM del programa.
;UNIVERSIDAD JUAREZ AUTONOMA DE TABASCO
;DIVISION ACADEMICA DE INGENIERIA Y ARQUITECTURA
;INGENIERIA EN ELECTRICIDAD Y ELECTRONICA
;MATERIA: MICROPROCESADORES
;ALUMNO: erik rivero hernandez
;segunda practica : Uso del teclado con multiplicacion y suma
PROCESSOR 16f887
#include "p16f887.inc"
__CONFIG _CONFIG1, _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF & _DEBUG_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _BOR40V & _WRT_OFF
cont1 EQU 0x20
cont2 EQU 0X21
cont3 EQU 0x22
cont4 EQU 0X23
tecla EQU 0X24
x EQU 0X25
z EQU 0X26
resul EQU 0X27
num1 EQU 0x28
num2 EQU 0x29
suma EQU 0X2A
num3 EQU 0x2B
CA EQU 0X2C
CB EQU 0X2D
CC EQU 0X2E
constante EQU 0x2F
resul2 EQU 0x30
ORG 0x00 ;inicio
goto Main ; despues del reset salta hacia su lugar
ORG 0x04 ; el vector es interrumpido
goto Main ; rutina no interuunpida
Main
banksel OSCCON
movlw b'01111110'
movwf OSCCON
bsf OSCCON ,3 ; SELECCIONA OSCILADOR ExTERNO
clrf STATUS ; selecciona el banco 0 ]
bcf STATUS,RP0 ; seleccionamos el banco 0
clrf PORTA ; Limpiamos todo el puerto A
clrf PORTC ;liempiar puerto c
bsf STATUS,RP0 ; seleccionamos el banco 1
clrf TRISA ; configuramos todas las patitas de A como salida
movlw 0x00 ; mandar 0x00 a w
movwf TRISC ;se pone como salida digital puerto c
bsf STATUS,RP1 ;seleccionar el banco 2
clrf ANSEL ; limpia ansel para trabajar como salida digital el puerto A
bcf STATUS,RP0 ; ir al banco 0
clrf PORTA ; Limpiamos todo el puerto A
bsf STATUS,RP0 ; banco 1
bcf OPTION_REG,7 ;Conecta todas las resistencias Pull-Up
bsf STATUS,RP1 ; seleccionamos el banco 3
movlw 0x00 ; cargar a w 00
movwf ANSELH ; mover lo que hay en w a anselH para configurarlo
bcf STATUS,RP1 ; seleccionamos el banco 1
movlw 0xF0 ;configura RB7,...,RB4 como entradas
movwf TRISB ;y RB3,RB2,RB1 como salida
bcf STATUS,RP0 ; se regresa al banco 0
call pau ; llamar pausa
movlw 0xFF
movwf PORTB
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ inicio de programacion de datos $$$$$$$$$$$$$$$$$$$$$$$$$$
principio call teclado ; llamar la subrutina teclado
movf tecla,W ; mover el contenido del registro tecla a W
movwf num1 ; mover lo que hay en w a num1
call apagar ; llamar subrutina apagar
call extra ; llamar retardo "extra"
call teclado ; llamar teclado
movf tecla,W ; mover lo que hay en tecla a W
...