Está en la página 1de 4

Introducción a Sistemas Embebidoss

Práctica Calificada 1 (segunda parte) Sec2 (pregrado)


6to Ciclo / 2022-2

INDICACIONES
 La evaluación es estrictamente personal.
 Suba al buzón sus respuestas en un archivo comprimido: el diagrama de flujo en formato PDF y el código en
formato assembler.
 Encienda su cámara cuando le sea requerido.
 La documentación (comentarios, redacción, ortografía) será considerada en la evaluación.
 La evaluación completa (teoría y práctica) es de 100 minutos.

Pregunta 1 (13 puntos)

El siguiente circuito recibe un dato de 3 bits de un equipo externo, el mismo que indica mediante un pulso
(‘1’ por menos de 1 ms) cuándo el microcontrolador debe leer el dato. Con el objetivo de enviar un dato
estable por ’Salida’, el microcontrolador debe promediar 32 lecturas recibidas por el equipo externo y
mostrarlas en la ‘Salida’ (PB2..0). Si el valor promediado es mayor a 5, el LED debe encenderse.
Además, los valores promediados deben ser almacenados en memoria RAM desde la dirección 0x1AA,
siendo el máximo valor de datos almacenados 100. Al llegar a dicho máximo, se debe almacenar
nuevamente desde la dirección 0x1AA.
En caso sea presionado el pulsador P1, el proceso se debe reiniciar.
Considere que P1 no genera rebotes mecánicos.

Vdd

PD2

P1 PD0 LED

Atmega328P

Data_in
3
PC2..0
Equipo 3
En PB2..0 Salida
externo
PD1

a) Realice el diagrama de flujo de un programa. (6 puntos)

1 de 4
Introducción a Sistemas Embebidoss
Práctica Calificada 1 (segunda parte) Sec2 (pregrado)
6to Ciclo / 2022-2

Inicio

Configura puertos

Count_mem = 0
Count_lec = 0
Sum = 0
Prom = 0
Est_pres = 0

Dir_mem = 0x1AA

No
EN = 1

No
EN = 0

Sum = Sum + dato leído

Count_lec ++

No
Count_lec = 32


Prom = Sum/32

Sí Prom > 5
No

Enciende LED Apaga LED

Envía Prom a Salida

(Dir_mem) <- Prom

Dir_mem ++
Count_mem++

Count_lec = 0
Sum = 0
Prom = 0

Count_mem = No
100


Count_mem = 0
Dir_mem = 0x1AA

Est_pres = 1

No

Pulsador Pulsador
presionado presionado No

No Sí
Est_pres = 0 Est_pres = 1 2 de 4
Introducción a Sistemas Embebidoss
Práctica Calificada 1 (segunda parte) Sec2 (pregrado)
6to Ciclo / 2022-2

b) Código assembler. Debe ser coherente con su diagrama de flujo (7 puntos). Es obligatorio el uso
de comentarios adecuados y encabezado del código

;*****************************************
; ISE2022_2_s2-P1.asm
; Propuesta de solución de la PC1 - S2
; Semestre: 2022-2
;
; El siguiente circuito recibe un dato de 3 bits de
; un equipo externo, el mismo que indica mediante un
; pulso (‘1’ por menos de 1 ms) cuándo el microcontrolador
; debe leer el dato. Con el objetivo de enviar un dato
; estable por ’Salida’, el microcontrolador debe
; promediar 32 lecturas recibidas por el equipo externo
; y mostrarlas en la ‘Salida’ (PB2..0). Si el valor
; promediado es mayor a 5, el LED debe encenderse.
; Además, los valores promediados deben ser almacenados
; en memoria RAM desde la dirección 0x1AA, siendo el
; máximo valor de datos almacenados 100. Al llegar a
; dicho máximo, se debe almacenar nuevamente desde la
; dirección 0x1AA. En caso sea presionado el pulsador P1,
; el proceso se debe reiniciar. Considere que P1 no genera rebotes mecánicos.
;
; PC2..0: Data_in
; PD1: En
; PB2..0: Salida
; PD0: P (pull-up externo)
; PD2: LED (activo en alto)
;
;***********************************************

; Definiciones de variables según el DF


.DEF Count_mem = R17
.DEF Count_lec = R18
.DEF Sum = R19 ; Prom se implementará en Sum
.DEF Est_pres = R20

;Configuración de puertos
LDI R16, 0x07
OUT DDRB, R16
SBI DDRD, 2

; Inicia variables
INICIO_VAR:
CLR Count_mem
CLR Count_lec
CLR Sum

; Definición de inicio de memoria


LDI XH, 0x01
LDI XL, 0xAA

; Espera que el dato esté listo (Pulso en En)


EVAL_En_1:
SBIS PIND, PD1
RJMP EVAL_En_1
EVAL_En_0:
SBIC PIND, PD1
RJMP EVAL_En_0

3 de 4
Introducción a Sistemas Embebidoss
Práctica Calificada 1 (segunda parte) Sec2 (pregrado)
6to Ciclo / 2022-2

; Acumula dato leído


IN R16, PINC
ANDI R16, 0b00000111 ; enmascara el dato
ADD Sum, R16 ; acumula el dato
INC Count_lec
CPI Count_lec, 32
BREQ EVAL_En_1

; Calcula el promedio
Prom_32:
LSR Sum
LSR Sum
LSR Sum
LSR Sum
LSR Sum

; Evalua encender o apagar el LED


CPI Sum, 6
BRLO Apaga_LED
SBI PORTD, PD2 ; Enciende el LED, prom > 5
RJMP Env_prom
Apaga_LED:
CBI PORTD, PD2

Env_prom:
; envía el promedio por el puerto B
OUT PORTB, Sum

; almacenar el promedio en memoria


ST X+, Sum
INC Count_mem

; Limpia variables
CLR Count_lec
CLR Sum

; Evalua cantidad de datos almacenados


CPI Count_mem, 100
BRNE EVAL_En_1

; Reinicio de dirección de memoria (se alcanzaron los 100 promedios)


CLR Count_mem
LDI XH, 0x01
LDI XL, 0xAA

; Evaluación del estado del pulsador


SBRC Est_pres, 0
RJMP P_presionado2 ; pulsador presionado anteriormente

P_presionado1:
SBIS PIND, PD0 ; Evaluación de pulsador presionado por primera vez
RJMP EVAL_En_1 ; No se presionó, continua recibiendo datos
SBR Est_pres, 0 ; Se presionó. Cambia bit para evaluar próxima lectura
RJMP INICIO_VAR ; Reinicia el sistema

P_presionado2:
SBIC PIND, PD0
RJMP EVAL_En_1 ; Sigue presionado
CBR Est_pres, 0 ; limpia el estado, el pulsador fue soltado
RJMP EVAL_En_1

4 de 4

También podría gustarte