Está en la página 1de 10

PREGUNTA 1 Se tiene la siguiente tabla grabada en la memoria flash del microcontrolador Tabla 7 seg: .

DB 0b00111111, 0b00000110 ;0, 1 .DB 0b01011011, 0b01001111 ;2, 3 .DB 0b01100110, 0b01101101 ;4, 5 .DB 0b01111101, 0b00000111 ;6, 7 .DB 0b01111111, 0b01101111 ;8, 9 Cdigo: .include "C:\VMLAB\include\m8def.inc" .CSEG .ORG $00 RJMP INICIO INICIO: LDI R16,$FF ;declaracin de puertos de salida OUT DDRD,R16 LDI R16,$00 ;el display inicialmente ESTA APAGADO OUT PORTD,R16 ;muestra en portD ;ESPERA PRESIN Y LIBERACIN DE PULSADOR LECTURA: IN R20,PINB ANDI R20,0b00100000 CPI R20,0 BREQ LECTURA ESPERA: SIMULACION
U1
14 15 16 17 18 19 9 10 PB0/ICP1 PB1/OC1A PB2/SS/OC1B PB3/MOSI/OC2 PB4/MISO PB5/SCK PB6/TOSC1/XTAL1 PB7/TOSC2/XTAL2 PC0/ADC0 PC1/ADC1 PC2/ADC2 PC3/ADC3 PC4/ADC4/SDA PC5/ADC5/SCL PC6/RESET PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4/T0/XCK PD5/T1 PD6/AIN0 PD7/AIN1 23 24 25 26 27 28 1 2 3 4 5 6 11 12 13

IN R20,PINB ANDI R20,0b00100000 CPI R20,0 BRNE ESPERA LDI R17,4 ;convierte BCD para segmentos de display LDI R31,HIGH(TABLA*2) LDI R30,LOW(TABLA*2) ADD R30,R17 LPM R18,Z OUT PORTD,R18 RJMP LECTURA ;para convertir de BCD a segmentos del display TABLA: .DB $3F,$06,$5B,$4F,$66,$6D,$7C,$07

R1
10k

21 20

AREF AVCC ATMEGA8

DIAGRAMA DE FLUJO

INICIO

DECKLARACION DE PUERTOS DE SALIDA

DISPLAY INICIALMENTE APAGADOS NO PULSADOR SI CARGAR 4 DESDE LA TABLA

MOSTRAR 4 EN PORT B

SI PULSADOR NO

PREGUNTA 2 (A): Escriba una sub rutina que determina si el nmero grabado en R18 es par. Si es par el registro R16=1, si es impar R16=0. CODIGO: .include "C:\VMLAB\include\m8def.inc" .DEF PAROIMPAR=R24 RJMP INICIO INICIO: ;DECLARAMOS LA PILA LDI R20,LOW(RAMEND) LDI R21,HIGH(RAMEND) OUT SPH,R21 OUT SPL,R20 ;AGINAMOS EL VALOR DE R18: LDI R18,8 RCALL EVALUA MOV R16,PAROIMPAR FIN: RJMP FIN EVALUA: ;GUARDAMOS R18 EN LA PILA PUSH R18 LDI R19,2 ;RESTAMOS SIEMPRE 2 A R18 RESTA: SIMULACIN: Si R18 es par: SUB R18,R19 CP R18,R19 BRLO SALTA RJMP RESTA SALTA: ;SI LLEGA A 0 SERA PAR, SINO SERA IMPAR CPI R18,0 BREQ PAR RJMP IMPAR PAR: LDI PAROIMPAR,1 ;CARGAMOS R18 DE LA PILA Y DEVOLVEMOS LA SUBRUTINA CON RET POP R18 RET IMPAR: ;CARGAMOS R18 DE LA PILA Y DEVOLVEMOS LA SUBRUTINA CON RET LDI PAROIMPAR,0 POP R18 RET

Si R18 es impar:

DIAGRAMA DE FLUJO

PROBLEMA 2(B): Escriba un programa para saber cuntos pares estn grabados en la memoria flash. La cantidad se muestra en los diodos leds conectados al puerto B. Nmeros: .DB 5, 6, 2, 14, 0, 13 (nmeros grabados en la tabla). CDIGO: .include "C:\VMLAB\include\m8def.inc" .DEF CONTEOIMPAR=R23 .DEF CONTEOPAR=R22 .CSEG .ORG $00 RJMP INICIO INICIO: ;DECLARAMOS LA PILA LDI R20,LOW(RAMEND) LDI R21,HIGH(RAMEND) OUT SPH,R21 OUT SPL,R20 CLR R16 ;LOS CONTEOS ESTARAN INCIALMENTE EN CEO CLR CONTEOPAR CLR CONTEOIMPAR ;DECLARO EL PUERTO B COMO SALIDA LDI R17,$FF OUT DDRB,R17 ;SALIDA INICIALMENTE EN CERO OUT PORTB,R16 ;PARA LA TABLA NUMEROS: LDI ZL,LOW(TABLA*2) LDI ZH,HIGH(TABLA*2) ADD R30,R16 LPM R18,Z RCALL EVALUA INC R16 CPI R16,6 ;SOLO EVALUA LA CANTIDAD DE NUMEROS DE LA TABLA BREQ MUESTRA

RJMP NUMEROS MUESTRA: OUT PORTB,CONTEOPAR FIN: RJMP FIN EVALUA: ;GUARDAMOS R18 EN LA PILA PUSH R18 LDI R19,2 ;RESTAMOS SIEMPRE 2 A R18 RESTA: SUB R18,R19 CP R18,R19 BRLO SALTA RJMP RESTA SALTA: ;SI LLEGA A 0 SERA PAR, SINO SERA IMPAR CPI R18,0 BREQ PAR RJMP IMPAR PAR: INC CONTEOPAR;CARGAMOS R18 DE LA PILA Y DEVOLVEMOS LA SUBRUTINA CON RET POP R18 RET IMPAR: ;CARGAMOS R18 DE LA PILA Y DEVOLVEMOS LA SUBRUTINA CON RET INC CONTEOIMPAR POP R18 RET TABLA: .DB 5,6,2,14,0,13

SIMULACIN: SIMULACION CON VMLAB

SIMULACION CON PROTEUS

U1
14 15 16 17 18 19 9 10 PB0/ICP1 PB1/OC1A PB2/SS/OC1B PB3/MOSI/OC2 PB4/MISO PB5/SCK PB6/TOSC1/XTAL1 PB7/TOSC2/XTAL2 PC0/ADC0 PC1/ADC1 PC2/ADC2 PC3/ADC3 PC4/ADC4/SDA PC5/ADC5/SCL PC6/RESET PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4/T0/XCK PD5/T1 PD6/AIN0 PD7/AIN1 23 24 25 26 27 28 1 2 3 4 5 6 11 12 13

21 20

AREF AVCC ATMEGA8

DIAGRAMA DE FLUJO:

INICIO

DECLARACIN DE PUERTOS DE SALIDA Cantidad de nmeros en la tabla

N=0

APUNTA VALOR N EN LA TABLA

CARGAR EN R18 VALOR DE N TABLA

SUBRUTINA

N=N+1

NO

N=6 SI MUESTRA CANTIDAD DE NMERO PAR EN PORT B

FIN

PREGUNTA 3 Escriba un programa que muestre la cuenta desde 4 hasta 36, de 4 en 4, en 6 diodos leds que estn conectados en PB2, PB3, PB4, PB5, PB6 Y PB7 (LSB). El retardo es de 0.7 segundos. Use el temporizador 1, modo CTC, con un pre escalador igual a 64. CDIGO: .INCLUDE "C:\VMLAB\INCLUDE\M8DEF.INC" .CSEG .ORG 0 RJMP INICIO INICIO: LDI R20,0 ;REGISTRO QUE LLEVARA EL CONTEO LDI R16,$FF ; CONFIGURAMOS PORTB COMO SALIDA OUT DDRB,R16 RCALL CONFIGURA_TMR1 LDI R16,$20 ; INICIALIZAMOS CUENTA EN 4 (DESPLAZADO 2 BITS) OUT PORTB, R16 LAZO: IN R16, TIFR ; SONDEAMOS OCF1A (BIT4 DE TIFR) ANDI R16,$10 ; ESPERAMOS QUE SEA 1 CPI R16,$10 BRNE LAZO IN R16,TIFR ; SE PONE 0 EL BIT OCF1A ORI R16,$10 OUT TIFR,R16 ;SE INCREMENTA LA CUENTA LDI ZL,LOW(TABLA*2) LDI ZH,HIGH(TABLA*2) ADD R30,R20 LPM R18,Z INC R20 CPI R20,10 BREQ INICIO OUT PORTB,R18 RJMP LAZO ; RETORNO AL LAZO CONFIGURA_TMR1: ; PREESCALAMIENTO 1:64 ; MODO CTC LDI R16, 0B00000000; OUT TCCR1A, R16 LDI R16, 0B00001011; OUT TCCR1B, R16 ; VALOR DE REGISTRO OCR1A: 10936,5 ...REDONDEARE A 10936($2AB8) LDI R17,$2A LDI R16,$B8 OUT OCR1AH,R17 ; (1US)X(64)X(OCR1A+1) = 0.7 SEG OUT OCR1AL,R16 RET TABLA: ;SON LOS VALORES DE LA SERIE CONSIDERANDO PB7 COMO LSB .DB 0B00100000,0B00010000 .DB 0B00110000,0B00001000 .DB 0B00101000,0B00011000 .DB 0B00111000,0B00000100 .DB 0B00100100

SIMULACIN: VISUALIAZADO EN PROTEUS


U1
6 5 4 3 2 1 14 15 16 17 18 19 9 10 PB0/ICP1 PB1/OC1A PB2/SS/OC1B PB3/MOSI/OC2 PB4/MISO PB5/SCK PB6/TOSC1/XTAL1 PB7/TOSC2/XTAL2 PC0/ADC0 PC1/ADC1 PC2/ADC2 PC3/ADC3 PC4/ADC4/SDA PC5/ADC5/SCL PC6/RESET PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4/T0/XCK PD5/T1 PD6/AIN0 PD7/AIN1 23 24 25 26 27 28 1 2 3 4 5 6 11 12 13

21 20

AREF AVCC ATMEGA8

D1

D2

D3

D4

D5

D6

LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED

VISUALIZADO EN DISPLAY
U1
6 5 4 3 2 1 14 15 16 17 18 19 9 10 PB0/ICP1 PB1/OC1A PB2/SS/OC1B PB3/MOSI/OC2 PB4/MISO PB5/SCK PB6/TOSC1/XTAL1 PB7/TOSC2/XTAL2 PC0/ADC0 PC1/ADC1 PC2/ADC2 PC3/ADC3 PC4/ADC4/SDA PC5/ADC5/SCL PC6/RESET PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4/T0/XCK PD5/T1 PD6/AIN0 PD7/AIN1 23 24 25 26 27 28 1 2 3 4 5 6 11 12 13

21 20

AREF AVCC ATMEGA8

DIAGRAMA DE FLUJO

INICIO

CONFIGURAR PUERTOS DE SALIDA PARA LOS LEDS

CONFIGURAR EL TEMNPORIZADOR

CUENTA = 4

SE CUMPLE EL TIEMPO?

NO

SI
CUENTA = CUENTA+4

MUESTRA DE CUENTA EN LEDS