7
ESCUELA POLITECNICA NACIONAL LABORATORIO DE SISTEMAS MICROPROCESADOS PRÁCTICA 8 TEMA: BARRIDO DE TECLADO Y SUBRUTINAS TRABAJO PREPARATORIO 1. Desarrollar una subrutina que permita identificar o decodificar las teclas que se presionan en un teclado de 16 teclas. Las teclas a identificar deben ser: 0, 1, 2,3, 4, 5, 6, 8, 9, A, B, C, X, =, BORRAR. teclado: ;almaceno registros en stack push r16 push r17 ldi r17,0 ;registro r16 hace barrido de columnas ;reconoce caracteres de la primera fila ldi r16,0b11111110 out portd,r16 sbis pind,4 ldi r17,0 sbis pind,5 ldi r17,1 sbis pind,6 ldi r17,2 sbis pind,7 ldi r17,3 ;reconoce caracteres de la segunda fila ldi r16,0b11111101 out portd,r16 sbis pind,4 ldi r17,4 sbis pind,5 ldi r17,5 sbis pind,6 ldi r17,6 sbis pind,7 ldi r17,7 ;reconoce caracteres de la tercera fila ldi r16,0b1111011 out portd,r16 sbis pind,4 ldi r17,8 sbis pind,5 ldi r17,9 sbis pind,6 ldi r17,10

PREPA8.1 SISTEMAS MICROPROCESADOS

Embed Size (px)

Citation preview

ESCUELA POLITECNICA NACIONALLABORATORIO DE SISTEMAS MICROPROCESADOSPRCTICA 8TEMA: BARRIDO DE TECLADO Y SUBRUTINASTRABAJO PREPARATORIO1. Desarrollar una subrutina que permita identificar o decodificar las teclas que se presionan en un teclado de 16 teclas. Las teclas a identificar deben ser: 0, 1, 2,3, 4, 5, 6, 8, 9, A, B, C, X, =, BORRAR.teclado:;almaceno registros en stackpushr16pushr17

ldir17,0;registro r16 hace barrido de columnas;reconoce caracteres de la primera filaldir16,0b11111110outportd,r16sbispind,4ldir17,0sbispind,5ldir17,1sbispind,6ldir17,2sbispind,7ldir17,3;reconoce caracteres de la segunda filaldir16,0b11111101outportd,r16sbispind,4ldir17,4sbispind,5ldir17,5sbispind,6ldir17,6sbispind,7ldir17,7;reconoce caracteres de la tercera filaldir16,0b1111011outportd,r16sbispind,4ldir17,8sbispind,5ldir17,9sbispind,6ldir17,10sbispind,7ldir17,11;reconoce caracteres de la cuarta filaldir16,0b11110111outportd,r16sbispind,4ldir17,12sbispind,5ldir17,13sbispind,6ldir17,14sbispind,7ldir17,15;almaceno caracter encontrado en la sramststecla,r17;reestituyo registrospopr17popr16

ret

2. Desarrollar un programa que permita resolver la siguiente funcin f(x):

Donde los valores de A, B, C y X son ingresados mediante el teclado matricial. Conforme se vayan aplastando las teclas de nmeros, stos deben ir apareciendo el dgito menos significativo, y conforme se vayan presionando otros nmeros se van desplazando a la izquierda como en una calculadora. Solo se pueden ingresar hasta dos dgitos, es decir el mayor nmero que se puede ingresar ser el 99.Luego de ingresar el operando se debe presionar A, B, C o X para guardar el valor a utilizarse en la funcin, y el display debe volver a 0000. Para mostrar el resultado se debe presionar la tecla [=], esta se puede presionar en cualquier momento, es decir, no se necesita haber ingresado todos y cada uno de los valores de A, B, C y X previamente. Si el resultado es mayor a 9999 mostrar [- - - -] en los displays.Si en cualquier momento se presiona la tecla BORRAR durante el ingreso de los nmeros, el display vuelve a 0000 y se reinicia el ingreso del operando. Si se presiona BORRAR cuando se est mostrando el resultado, se muestra 0000 y los valores de A, B, C y X vuelven a 0.DIAGRAMA DE FLUJO DEL PROGRAMA:

CODIGO IMPLEMENTADO:.include "m164pdef.inc"

.def a=r5.def b=r6.def c=r7.def var=r8.def anterior=r9.def tempo=r16.def aux=r17

.dsegtecla: .byte 1binariol: .byte 1binarioh: .byte 1dig: .byte 4segmentos: .byte 4

.cseg.org 0x00rjmp inicio

.org 0x06rjmp nueva_tecla

inicio:;configuro puertosclrtempooutddrb,tempooutporta,tempocomtempooutportb,tempooutddra,tempo;para el teclado y control display uso 4 bits como salida y 4 como entradalditempo,0b00001111outddrc,tempooutddrd,tempocomtempooutportc,tempooutportd,tempo;activo pull upintempo,mcucranditempo,0b11101111outmcucr,tempo;configuro stack pointerlditempo,high(ramend)outsph,tempolditempo,low(ramend)outspl,tempo;activo interrupcionesldi tempo,0b00100000sts eicra,tempoldi tempo,0b00000100out eimsk,temposei;lazo principallazo:callbin_bcdcallbcd_7segcallbarridorjmp lazo;inicio interrupcionnueva_tecla:;evalua condicion para ingresar dos digitoscpi r18,0xffbrne dig2;llama teclado para reconocer teclacall tecladolds anterior,tecla ;almaceno tecla en registrosts binariol,anterior;almacena valor en la sramldi r21,0sts binarioh,r21;reestablece el tecladoldi tempo,0b11110000out portd,tempoclr r18;condicion para digitosreti;lo mismo para el segundo digitodig2:call tecladolds r20,teclacpi r20,10;comparo el maximo lugar de digitos en el tecladobrcc guardar ;si es mayor va a evaluar el resto de teclasldi r27,10mul anterior,r27mov r25,r0mov r26,r1add r25,r20clr r20adc r26,r20sts binariol,r25sts binarioh,r26ldi tempo,0b11110000out portd,temposer r18reti

guardar:;evalua si fue tecla Acpi r20,10breq movera;evalua si fue tecla Bcpi r20,11breq moverb;evalua si fue tecla Ccpi r20,12breq moverc;evalua si fue tecla Xcpi r20,13breq movervar;evalua si fue tecla =cpi r20,14breq moverigual;evalua si fue tecla BORRARcpi r20,15breq borrar;almacena valor en la variable deseadamovera:mov a,anteriorsts binariol,aldi r21,0sts binarioh,r21;reestablece tecladoldi tempo,0b11110000out portd,temporeti

;almacena valor en la variable deseadamoverb:mov b,anteriorsts binariol,b ;ldi r21,0sts binarioh,r21;reestablece tecladoldi tempo,0b11110000out portd,temporeti

;almacena valor en la variable deseadamoverc:mov c,anteriorsts binariol,c ldi r21,0sts binarioh,r21;reestablece tecladoldi tempo,0b11110000out portd,temporeti

;almacena valor en la variable deseadamovervar:mov var,anteriorsts binariol,var ldi r21,0sts binarioh,r21;reestablece tecladoldi tempo,0b11110000out portd,temporeti;realiza operacion de la f(x)moverigual:mul var,varmov r10,r0mov r11,r1mul b,r10mov r12,r0mov r13,r1mul a,varadd r10,r12adc r11,r13add r10,r0adc r11,r1add r10,r7clr r7adc r11,r7sts binariol,r10 sts binarioh,r11;reestablece tecladoldi tempo,0b11110000out portd,temporeti;limpia los registros reinicia todoborrar:clr temposts binariol,temposts binarioh,temporjmp nueva_tecla

.include "teclado.asm".include "binarioabcd.asm".include "bcda7seg.asm".include "barrido.asm"

SIMULACION:

BIBLIOGRAFIA:Apuntes de clase de Sistemas Microprocesados, Ing. Jhon PilataxiApuntes de clase de Laboratorio de Sistemas Microprocesados, Ing. Roberto Guachi

INICIO

CONFIGURACION DE PUERTOS,STACK POINTER,PULL UP, INTERRUPCIONES

LAZO PRINCIPAL

INICIO INTERRUPCION

LLAMO A SUBRUTINAS

CONVERSION BINARIO A BCD

CONVERSION BCD A 7SEGMENTOS

BARRIDO DE DISPLAY

LLAMO A SUBRUTINA TECLADO(LEE LA TECLA PRESIONADA)

RECONOCE EL DATO,LO ALMACENA TEMPORALMENTE

ALMACENA EL DATO EN UNA VARIABLE A,B,C,X

REALIZA LA OPERACION DE F(X)

BORRAMOS DATOS REINICIANDO VARIABLES