Professional Documents
Culture Documents
Lab 01 Final
Lab 01 Final
Pregunta 1:
Mediante un microcontrolador de 8 bits se desea evaluar la temperatura final a partir de la siguiente expresin:
Donde: L, es la temperatura inicial obtenida a partir de la lectura de 3 interruptores que estn conectadas a los bits 1, 2 y 3 del puerto C. T, es la temperatura final que se observa en diodos leds (forma binaria) que estn conectadas al puerto B.
Circuito Esquemtico
R2 R1
10k 10k
R3
10k
R4
10k
6 5 4
OFF
DSW1
DIPSW_3
13 12 11 6 5 4 3 2
1 28 27 26 25 24 23
U1
ATMEGA8
20 21
D8
LED-RED
D7
LED-RED
D6
LED-RED
10 9 19 18 17 16 15 14
AVCC AREF
D5
LED-RED
D4
LED-RED
D3
LED-RED
1 2 3
ON
D2
LED-RED
D1
LED-RED
R12
220
R11
220
R10
220
R9
220
R8
220
R7
220
R6
220
R5
220
Diagrama de Flujo
INICIO
LEER ENTRADA L
Operando:
D8
LED-RED
20 21 AVCC AREF
220
R12
Para la simulacin:
D7
LED-RED
PD7/AIN1 PD6/AIN0 PD5/T1 PD4/T0/XCK PD3/INT1 PD2/INT0 PD1/TXD PD0/RXD 13 12 11 6 5 4 3 2
220
R11 D6
LED-RED
220
R10 D5
LED-RED
10 9 19 18 17 16 15 14 PB7/TOSC2/XTAL2 PB6/TOSC1/XTAL1 PB5/SCK PB4/MISO PB3/MOSI/OC2 PB2/SS/OC1B PB1/OC1A PB0/ICP1 PC6/RESET PC5/ADC5/SCL PC4/ADC4/SDA PC3/ADC3 PC2/ADC2 PC1/ADC1 PC0/ADC0 1 28 27 26 25 24 23
Simulacin
220
R9 D4 U1
LED-RED ATMEGA8
10k
R1
220
R8 D3
LED-RED
220
R7 D2
LED-RED
10k
R2
1 2 3
ON
OFF
6 5 4
10k
R3
220
R6 D1
LED-RED
10k
R4
DSW1
DIPSW_3
220
R5
Pregunta 2:
Se tiene conectado a un microcontrolador 4 interruptores, un pulsador y 4 diodos leds. Inicialmente los diodos estn apagados el pulsador sin presionar, y los interruptores en circuito abierto. Se desea evaluar el nmero ingresado a travs de los interruptores, para ello se utiliza presionado (sin soltar) el pulsador. Si el nmero ingresado es mayor o igual que 10, se prenden los 4 diodos leds, si es menor a 10 y mayor o igual a 5 se prenden 3 diodos leds y si el nmero es menor que 5 se prenden 2 diodos leds. Al soltar el pulsador los leds se apagan, es decir vuelve a su estado inicial.
Circuito Esquemtico
Inicialmente leds apagados:
Diagrama de Flujo
Cdigo Documentado
.include "m8def.inc" .cseg .org 0x0000 LDI OUT LDI OUT R16,LOW(RAMEND) ;////////////////////// SPL,R16 ;///reservar memoria/// R16,HIGH(RAMEND);///// en la pila ///// SPH,R16 ;//////////////////////
//------------------------------------------incio: ldi out ldi out r16,$00 ddrC,r16 r17,$ff ddrb,r17 ;R16 = $00 ;configuramos el puerto C como entrada ;R17 = $FF ;configuramos el puerto B como entrada
//-------------------------------------------out portB,r16 dato: in r18,pinC ;leemos los 4 switchs y el pulsador cpi r18,0b01011010 ;si button = 1, comparamos con 10 brsh mayor_que_10 ;si es > =, salta a "mayor_que_10" cpi r18,0b01010101 ;si button = 1, comparamos con 5 brsh mayor_que_5 ;si es > =, salta a "mayor_que_5" cpi r18,0b01010000 ;si button = 1, comparamos con 0 brsh mayor_que_0 ;si es > =, salta a "mayor_que_0" //-------------- ;si button = 0 se apagan los leds ldi r16,0b00000000 out portB,r16 rjmp dato mayor_que_0: ldi r16,0b00000011 out portB,r16 rjmp dato mayor_que_5: ldi r16,0b00000111 out portB,r16 rjmp dato mayor_que_10: ldi r16,0b00001111 out portB,r16 rjmp dato ;R16 = $00 ;se apagan los leds ;volvemos a inicio ;R16 = $03 ;prendemos 2 leds ;volvemos a inicio ;inicialmente los leds apagados
Circuito Esquemtico
UP RESET
U1 R6
10k 23 24 25 26 27 28 1 2 3 4 5 6 11 12 13 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 ATMEGA8 PB0/ICP1 PB1/OC1A PB2/SS/OC1B PB3/MOSI/OC2 PB4/MISO PB5/SCK PB6/TOSC1/XTAL1 PB7/TOSC2/XTAL2 14 15 16 17 18 19 9 10
D1
LED-RED
D2
LED-RED
D3
LED-RED
D4
LED-RED
D5
LED-RED
R7
10k
AREF AVCC
21 20
R1
220
R2
220
R3
220
R4
220
R5
220
Diagrama de Flujo
MOSTRAR C EN SALIDA
LEER ENTRADA
SE SOLT?
No
S C=25?
CC+3
Cdigo Documentado
.include "m8def.inc" .cseg .def c=r20 .org 0 rjmp Configuracion Configuracion: ;Configuracion de Pila ldi r16,low(ramend) out spl,r16 ldi r16,high(ramend) out sph,r16 ;Configuracin de Puertos ldi r16,$FF;r16<-FF out ddrb,r16;PuertoB Salida ldi r16,$00;r16<-00 out ddrc,r16;PuertoC Entrada Inicio: ldi c,1;c=1 ldi r17,3 Mostrar: out portb,c;Mostrar 'c' Presionar: rcall Leer;Leer entrada cpi r16,8;Se presion? breq Soltar;S->Soltar rjmp Presionar;No->Pregunta de nuevo Soltar: rcall Leer;Leer entrada cpi r16,0;Se Solt? breq Serie;S->Serie rjmp Soltar;No->Pregunta de nuevo Serie: cpi c,25;C=25? breq Inicio;S->Inicio add c,r17;No->'c<-c+3' rjmp Mostrar;Salta a Mostrar Leer: in r16,pinc;Leer entrada andi r16,8; Filtrar valor ret
*El problema peda: Un pulsador genera una serie aritmtica de razn 3 desde 1 a 25 la cuenta varia al presionar y soltar el pulsador.