Preparatorio microprocesados 8

Páginas: 5 (1027 palabras) Publicado: 7 de noviembre de 2013
 |









-Se debe modificar el hardware de la práctica anterior, de manera que los datos a ser ingresados al microcontrolador no provengan de interruptores, si no de un teclado matricial. Mantener todo el hardware asociado al barrido de display. Se deben realizar las siguientes modificaciones:




-Desarrollar una subrutina que permita identificar o decodificar las teclas quese presionan en un teclado de 16 teclas. Las teclas a identificar deben ser: 0,1,2,3,4,5,6,8,9,*, =, BORRAR; las otras teclas quedarán sin función. El funcionamiento de esta rutina será de la siguiente manera: conforme se vayan aplastando las teclas de números, éstos deben ir apareciendo el el dígito menos significativo, y conforme se vayan presionando otros números se van desplazando a laizquierda como en una calculadora. Solo se pueden ingresar hasta dos dígitos, es decir el mayor número que se puede ingresar será el 99. Luego de ingresado el primer operando se debe presionar la tecla de multiplicación (*) y luego el segundo operando de hasta dos dígitos (de manera similar al primer operando), luego se presiona el igual (=), y en los 4 display se debe mostrar el resultado de laoperación. Si en cualquier momento se presiona la tecla BORRAR durante el ingreso de los números, el display vuelve a 0000 y se reinicia el ingreso del operando. Si se presiona BORRAR cuando se está mostrando el resultado de la operación anterior, se muestra 0000 y se vuelve  a iniciar con el ingreso del primer operando.



.include "m164pdef.inc"
.def dato = r13
.def RESIDUOL= r14
.def RESIDUOH=r15 ; residuo
.def DIVIDENL = r16
.def DIVIDENH= r17 ; resultado y dividendo
.def DIVISL = r18
.def DIVISH = r19 ; divisor
.def AUX= r20 ; número de iteraciones
.def COMP=r21
.def UNIDA=r22
.def DECEN=r23
.def CENTEN=r24
.def MILLAR=r25
.def FLAG=r28
.def KEYB=r29

;Inicio de Programa

.org 0x00

.DSEG

DIG0: .byte 1
DIG1: .byte 1DIG2: .byte 1
DIG3: .byte 1
.CSEG
;ldi mil,0
ldi AUX,0

ldi r16,255
out ddrb,r16
out ddrd,r16
ldi r16,0b00001111
out ddra,r16

ldi r16,high(ramend)
out sph,r16
ldi r16,low(ramend)
out spl,r16

ldi r16,255
out portb,r16
ldi r18,0
out porta,r18 ;pongo las salidas a0 a a3 en 0L

;INICIO

main:
call barridorcall testear
cpi FLAG,1
brne main

;TOMA EL VALOR Y MUESTRA EN DISPLAY

cpi KEYB,11
breq multi

cpi KEYB,15
breq borrar

cpi KEYB,14
breq resultado

inc auxiliar
ST x+,KEYB

multi:

ldi FLAG,0
;SECCION ANTIREBOTE
ldi r18,0
out porta,r18
mantener: in r18,pina
andi r18,0b11110000
cpi r18,0b11110000brne mantener
rcall retardo ;por posibles rebotes
rjmp main

Borrar:

ldi r16,255
out portb,r16
clr r16
out portd,r16
ldi r18,0
out porta,r18
ldi auxiliar,0
ldi FLAG,0
rjmp multi

; Rutina de Multiplicar
resultado:
ldi xh,high(DIG0)
ldi xl,low(DIG0)
ld r17,x+
ldi r19,10
mul r19,r17
ld r17,x+
addr17,r0
ld r18,x+
ldi r19,10
mul r19,r18
ld r18,x+
add r18,r0

mul R17,R18
mov DIVIDENL,r0
mov dividendohigh,r1
call conversion
ldi xh,high(DIG0)
ldi xl,low(DIG0)
ST X+,MILLAR
ST X+,CENTEN
ST X+,DECEN
ST X,UNIDA
Rcall BARRIDO
rjmp MULTI


CONVERSION: ldi COMP,4
cp dividendohigh,COMPbrsh condicion1
ldi COMP,3
cp dividendohigh,COMP
breq condicion2
rjmp a

condicion1: ldi DIVISL,232
ldi DIVISH,3
rcall division
mov MILLAR,DIVIDENL
mov DIVIDENL,residuol
mov dividendohigh,residuoh
rjmp menor_1000

condicion2: ldi COMP,232
cp DIVIDENL,COMP
brcs a
ldi DIVISL,232
ldi DIVISH,3
call division
mov...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • preparatoria 8
  • Microprocesadores Intel De 4 a 8 bits
  • Preparatorio 8
  • reglamento preparatoria 8
  • Microprocesadores
  • Microprocesadores
  • Microprocesador
  • Microprocesadores

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS