11
PROGRAMA 1 .include "C:\VMLAB\include\m8def.inc" .def temp =r16 .def PRODUCTO=R21 RJMP INICIO INICIO: LDI R16,$0F OUT DDRB,R16 ;DECLARACIÓN DE SALIDAS CLR R16 OUT PORTB,R16 ;DISPLAY INICIALMENTE EN CERO LECTURA_DE_DATOS: ;LECTURA DE DATOS EN PUERTOS IN R17,PIND ;LECTURA EN PIND (MULTIPLICANDOS) IN R20,PINC ;LECTURA EN PINC (PULSADOR) ANDI R20,0b00000100 CPI R20,0 BREQ LECTURA_DE_DATOS ;ESPERA QUE SE PRESIONE ESPERA: IN R20,PINC ANDI R20,0b00000100 CPI R20,0 BRNE ESPERA ;ESPERA QUE SE SUELTE RCALL MULTIPLICACION ;TRAS PRESIONAR, LLAMA SUBRUTINA OUT PORTB,PRODUCTO ;MUESTRA PRODUCTO EN PORTB RJMP LECTURA_DE_DATOS ;RETORNA A LECTURA ;SUBRUTINA ... MULTIPLICACION: MOV R18,R17 ;SE MUEVEN DATOS A UN NUEVO REGISTRO MOV R19,R17 ;SE MUEVEN DATOS A UN NUEVO REGISTRO ANDI R18,0b00000011 ;EL PRIMER NUMERO ANDI R19,0b11000000 ;EL SEGUNDO NUMERO ROR R19 ;SE DESPLAZA EL LSB DE R19 ROR R19 ROR R19 ROR R19

Informe 7 de Micro

Embed Size (px)

Citation preview

Page 1: Informe 7 de Micro

PROGRAMA 1

.include "C:\VMLAB\include\m8def.inc"

.def temp =r16

.def PRODUCTO=R21RJMP INICIOINICIO:LDI R16,$0FOUT DDRB,R16 ;DECLARACIÓN DE SALIDASCLR R16OUT PORTB,R16 ;DISPLAY INICIALMENTE EN CEROLECTURA_DE_DATOS: ;LECTURA DE DATOS EN PUERTOSIN R17,PIND ;LECTURA EN PIND (MULTIPLICANDOS)IN R20,PINC ;LECTURA EN PINC (PULSADOR)ANDI R20,0b00000100CPI R20,0BREQ LECTURA_DE_DATOS ;ESPERA QUE SE PRESIONEESPERA:IN R20,PINCANDI R20,0b00000100CPI R20,0BRNE ESPERA ;ESPERA QUE SE SUELTERCALL MULTIPLICACION ;TRAS PRESIONAR, LLAMA SUBRUTINAOUT PORTB,PRODUCTO ;MUESTRA PRODUCTO EN PORTBRJMP LECTURA_DE_DATOS ;RETORNA A LECTURA;SUBRUTINA ...MULTIPLICACION:MOV R18,R17 ;SE MUEVEN DATOS A UN NUEVO REGISTROMOV R19,R17 ;SE MUEVEN DATOS A UN NUEVO REGISTROANDI R18,0b00000011 ;EL PRIMER NUMEROANDI R19,0b11000000 ;EL SEGUNDO NUMEROROR R19 ;SE DESPLAZA EL LSB DE R19ROR R19ROR R19ROR R19ROR R19ROR R19MUL R18,R19 ;SE MULTIPLICA AMBOS NUMEROSMOV PRODUCTO,R0RET ;RETORNA

Page 2: Informe 7 de Micro

DIAGRAMA DE FLUJO

PROBLEMA 2

.include "C:\VMLAB\include\m8def.inc"

.cseg

.org $0

.def MENOR=R19

.def SUMA=R20

.def PROMEDIO=R21

RJMP INICIO

Page 3: Informe 7 de Micro

INICIO:LDI R16,$FF ;declaracion de puerto de salidaOUT DDRB,R16 ;la salida sera en puerto BCLR R16 ;valor inicial de puntero = 0CLR SUMA ;valor inicial de suma igual a 0TABLA:LDI R30,LOW(NOTAS*2)LDI R31,HIGH(NOTAS*2)ADD R30,R16 ;sumamos a la direccin el puntero R16INC R16 ;incrementamos para pasar a la sgte notaLPM R17,Z ;almacena en R17 el valor de ZADD SUMA,R17 ;sumamos cada número que saquemos de la tablaCPI R16,9 ;evaluamos cuantas notas sonBRNE TABLARCALL MENOR_NOTA ;llamado de subrutinaRCALL PROMEDIO_FINAL ;llamado de subrutinaOUT PORTB,PROMEDIO ;tras retornar, muestra promedio en displayFIN:RJMP FIN ;fin del programa

MENOR_NOTA: ; subrutina para discriminar nota menorLDI R18,5 ; apunta hacia la menor notaLDI R30,LOW(NOTAS*2)LDI R31,HIGH(NOTAS*2)ADD R30,R18LPM MENOR,Z ;carga en el registro MENOR la menor notaRET ;retorna

PROMEDIO_FINAL:SUB SUMA,MENOR ;a la suma de notas se le resta la menorLDI PROMEDIO,$01 ;cociente inicial = 1LDI R23,$08 ;dividimos entre 8 notasDIVISION:SUB SUMA,R23 ;series sucesivas para divisionCP SUMA,R23BRLO FIN_DIVINC PROMEDIO ;el cociente de la division es el promedioRJMP DIVISIONFIN_DIV:RET ;retorna

NOTAS: .DB 3,15,2,12,9,1,10,11,4 ;notas guardadas

Page 4: Informe 7 de Micro

DIAGRAMA DE FLUJO

Page 5: Informe 7 de Micro

PROBLEMA 3

.include "C:\VMLAB\include\m8def.inc"

.def temp =r16

.DEF RESTA=R20

.DEF COCIENTE=R21

.DEF MOSTRAR=R24

.CSEG

.ORG $0

RJMP INICIOINICIO:LDI R16,$FF ;declaración de puertos de salidaOUT DDRB,R16LDI R16,0b10000000 ;el display inicialmente muestra punto "."OUT PORTB,R16 ;muestra en portbCLR R23

LECTURA:IN R17,PIND ;lectura de datos en PINDMOV R18,R17 ;mover dato a dos registrosMOV R19,R17ANDI R18,0b11100000 ;separación de número 1ROR R18 ;desplazamiento del LSBROR R18ROR R18ROR R18ROR R18ANDI R19,0b00011100 ;separación de número 2ROR R19 ;desplazamiento del LSBROR R19

RCALL RESTAR ;llamado de subrutina de restaRCALL DIVIDIR ;llamado de subrutina de division

CPI R23,1 ;condición para retornar a inicioBREQ INICIOPULSADOR:IN R22,PINC ;pulsador en pincANDI R22,0b00000110 ;discriminamos bits sin usoCPI R22,0 ;evaluamos si presionaBREQ PULSADOR

Page 6: Informe 7 de Micro

CPI R22,0b00000010 ;evalua para mostrar la restaBREQ RESTARECPI R22,0b00000110 ;evalua para mostrar la divisionBREQ DIVIDIRERJMP PULSADORESPERA: ;evalua si se presiono o noIN R22,PINCANDI R22,0b00000110CPI R22,0BRNE ESPERACPI R22,0b00000010 ;evalua para mostrar la restaBREQ RESTARECPI R22,0b00000110 ;evalua para mostrar la divisionBREQ DIVIDIRECPI R22,0b00000100BRNE ESPERA

RESTARE:MOV MOSTRAR,RESTA ;hace que muestre la restaRJMP MUESTRADIVIDIRE:MOV MOSTRAR,COCIENTE ;hace que muestre el cocienteRJMP MUESTRA

MUESTRA:LDI R31,HIGH(TABLA*2) ;convierte BCD para segmentos de displayLDI R30,LOW(TABLA*2)ADD R30,MOSTRARLPM R25,ZOUT PORTB,R25RJMP LECTURA

RESTAR: ;subrutina de restaCP R18,R19BRLO NO_RESTAMOV RESTA,R18 ;mueve numero 1 a registro de restaSUB RESTA,R19 ;sustrae del registro de resta el número2RJMP FINRESTANO_RESTA:LDI R23,1FINRESTA:RET ;retorna

Page 7: Informe 7 de Micro

DIVIDIR:CPI R18,0 ;evalua si el dividendo es 0BREQ COCIENTECEROCP R18,R19BRLO NO_DIVIDE ;evalua si dividendo es menor que divisorCPI R19,0BREQ NO_DIVIDE ;evalua si el divisor es 0LDI COCIENTE,1 ;cociente inicial en 1 (para restas sucesivas)DIVISION:SUB R18,R19 ;resta sucesivaCP R18,R19 ;comparaBRLO FIN_DIV ;cuando ya no se puede restar, finalizaINC COCIENTE ;incrementa cociente si aun se puede restarRJMP DIVISION ;restará nuevamenteCOCIENTECERO:LDI COCIENTE,0RJMP FIN_DIVNO_DIVIDE:LDI R23,1FIN_DIV:RET ;retorna

;para convertir de BCD a segmentos del displayTABLA: .DB $3F,$06,$5B,$4F,$66,$6D,$7C,$07

Page 8: Informe 7 de Micro

DIAGRAMA DE FLUJO