Вы находитесь на странице: 1из 8

PROGRAMA 1 .include "C:\VMLAB\include\m8def.inc" .def temp =r16 .

def PRODUCTO=R21 RJMP INICIO INICIO: LDI R16,$0F OUT DDRB,R16 ;DECLARACIN 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 ROR R19 ROR R19 MUL R18,R19 ;SE MULTIPLICA AMBOS NUMEROS MOV PRODUCTO,R0 RET ;RETORNA

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

INICIO: LDI R16,$FF OUT DDRB,R16 CLR R16 CLR SUMA TABLA: LDI R30,LOW(NOTAS*2) LDI R31,HIGH(NOTAS*2) ADD R30,R16 INC R16 LPM R17,Z ADD SUMA,R17 CPI R16,9 BRNE TABLA RCALL MENOR_NOTA RCALL PROMEDIO_FINAL OUT PORTB,PROMEDIO FIN: RJMP FIN MENOR_NOTA: LDI R18,5 LDI R30,LOW(NOTAS*2) LDI R31,HIGH(NOTAS*2) ADD R30,R18 LPM MENOR,Z RET PROMEDIO_FINAL: SUB SUMA,MENOR LDI PROMEDIO,$01 LDI R23,$08 DIVISION: SUB SUMA,R23 CP SUMA,R23 BRLO FIN_DIV INC PROMEDIO RJMP DIVISION FIN_DIV: RET

;declaracion de puerto de salida ;la salida sera en puerto B ;valor inicial de puntero = 0 ;valor inicial de suma igual a 0

;sumamos a la direccin el puntero R16 ;incrementamos para pasar a la sgte nota ;almacena en R17 el valor de Z ;sumamos cada nmero que saquemos de la tabla ;evaluamos cuantas notas son ;llamado de subrutina ;llamado de subrutina ;tras retornar, muestra promedio en display ;fin del programa ; subrutina para discriminar nota menor ; apunta hacia la menor nota

;carga en el registro MENOR la menor nota ;retorna

;a la suma de notas se le resta la menor ;cociente inicial = 1 ;dividimos entre 8 notas ;series sucesivas para division

;el cociente de la division es el promedio

;retorna

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

DIAGRAMA DE FLUJO

PROBLEMA 3 .include "C:\VMLAB\include\m8def.inc" .def temp =r16 .DEF RESTA=R20 .DEF COCIENTE=R21 .DEF MOSTRAR=R24 .CSEG .ORG $0 RJMP INICIO INICIO: LDI R16,$FF OUT DDRB,R16 LDI R16,0b10000000 OUT PORTB,R16 CLR R23 LECTURA: IN R17,PIND MOV R18,R17 MOV R19,R17 ANDI R18,0b11100000 ROR R18 ROR R18 ROR R18 ROR R18 ROR R18 ANDI R19,0b00011100 ROR R19 ROR R19 RCALL RESTAR RCALL DIVIDIR CPI R23,1 BREQ INICIO PULSADOR: IN R22,PINC ANDI R22,0b00000110 CPI R22,0 BREQ PULSADOR

;declaracin de puertos de salida ;el display inicialmente muestra punto "." ;muestra en portb

;lectura de datos en PIND ;mover dato a dos registros ;separacin de nmero 1 ;desplazamiento del LSB

;separacin de nmero 2 ;desplazamiento del LSB

;llamado de subrutina de resta ;llamado de subrutina de division ;condicin para retornar a inicio

;pulsador en pinc ;discriminamos bits sin uso ;evaluamos si presiona

CPI R22,0b00000010 BREQ RESTARE CPI R22,0b00000110 BREQ DIVIDIRE RJMP PULSADOR ESPERA: IN R22,PINC ANDI R22,0b00000110 CPI R22,0 BRNE ESPERA CPI R22,0b00000010 BREQ RESTARE CPI R22,0b00000110 BREQ DIVIDIRE CPI R22,0b00000100 BRNE ESPERA RESTARE: MOV MOSTRAR,RESTA RJMP MUESTRA DIVIDIRE: MOV MOSTRAR,COCIENTE RJMP MUESTRA MUESTRA: LDI R31,HIGH(TABLA*2) LDI R30,LOW(TABLA*2) ADD R30,MOSTRAR LPM R25,Z OUT PORTB,R25 RJMP LECTURA RESTAR: CP R18,R19 BRLO NO_RESTA MOV RESTA,R18 SUB RESTA,R19 RJMP FINRESTA NO_RESTA: LDI R23,1 FINRESTA: RET

;evalua para mostrar la resta ;evalua para mostrar la division

;evalua si se presiono o no

;evalua para mostrar la resta ;evalua para mostrar la division

;hace que muestre la resta

;hace que muestre el cociente

;convierte BCD para segmentos de display

;subrutina de resta

;mueve numero 1 a registro de resta ;sustrae del registro de resta el nmero2

;retorna

DIVIDIR: CPI R18,0 BREQ COCIENTECERO CP R18,R19 BRLO NO_DIVIDE CPI R19,0 BREQ NO_DIVIDE LDI COCIENTE,1 DIVISION: SUB R18,R19 CP R18,R19 BRLO FIN_DIV INC COCIENTE RJMP DIVISION COCIENTECERO: LDI COCIENTE,0 RJMP FIN_DIV NO_DIVIDE: LDI R23,1 FIN_DIV: RET

;evalua si el dividendo es 0

;evalua si dividendo es menor que divisor ;evalua si el divisor es 0 ;cociente inicial en 1 (para restas sucesivas) ;resta sucesiva ;compara ;cuando ya no se puede restar, finaliza ;incrementa cociente si aun se puede restar ;restar nuevamente

;retorna

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

DIAGRAMA DE FLUJO

Вам также может понравиться