Академический Документы
Профессиональный Документы
Культура Документы
LABORATORIO DE
SISTEMAS MICROPROCESADOS
TRABAJO PREPARATORIO
Prctica No:
Tema:
10
CONVERSOR ANALOGO/DIGITAL
Paralelo:
Grupo:
Realizado por:
Estefana Erreyes
Edwin Cabrera
Fecha de Entrega:
2016-07-27
Semestre 2016A
CONVERSOR ANALOGO/DIGITAL
OBJETIVO:
DESARROLLO:
.include "m164pdef.inc"
.def
.def
.def
.def
tempo=r16
aux=r17
monitorsl=r18
monitorsh=r19
.dseg
.org 0x100
bcd: .byte 5
segmentos: .byte 5
resultado: .byte 3
palarma: .byte 1
pasofuncion: .byte 1
pasounidad: .byte 1
lectura_adcl: .byte 1
lectura_adch: .byte 1
.cseg
.org 0x0
rjmp inicio
.org 0x2
rjmp cambiar_canal
.org 0x4
rjmp cambiar_unidad
inicio:
ldi tempo,0
sts pasofuncion,tempo
ldi tempo,0
sts pasounidad,tempo
;puerto A entrada anloga los 2 bits LSB, dems salida digital
ldi tempo,0b11111100
out ddra,tempo
clr tempo
out porta,tempo
;puertoB salida a segmentos
ser tempo
out ddrb,tempo
clr tempo
out portb,tempo
;puertoC bit MSB entrada demas salidas
ldi tempo,0b01111111
out ddrc,tempo
com tempo
out portc,tempo
r16,0b00000011
didr0,r16
r16,0b01000000
admux,r16
monitor:ldi tempo,0b11000110
sts adcsra,tempo
monitor1:
lds tempo,adcsra
sbrc tempo,6
rjmp monitor1
ldi xl,low(resultado)
ldi xh,high(resultado)
lds tempo,adcl
lds aux,adch
sts lectura_adcl,tempo
sts lectura_adch,aux
lds r20,pasofuncion
sbrs r20,0
rjmp modotermometro
ldi monitorsl,low(4888)
ldi monitorsh,high(4888)
rjmp contmonitor
modotermometro:
lds r20,pasounidad
sbrc r20,0
rjmp modotermometro22
modotermometro11:
;ldi monitorsl,low(4888)
;ldi monitorsh,high(4888)
ldi monitorsl,low(2542)
ldi monitorsh,high(2542)
rjmp contmonitor
modotermometro22:
;ldi monitorsl,low(8798)
;ldi monitorsh,high(8798)
ldi monitorsl,low(4560)
ldi monitorsh,high(4560)
contmonitor:
mul
mov
mov
mul
add
clr
adc
mov
mul
tempo,monitorsl
r2,r0
r3,r1
aux,monitorsl
r3,r0
r0
r1,r0
r4,r1
monitorsh,tempo
continuar0:
r5,r0
r6,r1
r3,r5
r4,r6
r5
r6
r5,r6
aux,monitorsh
r4,r0
r5,r1
lds r20,pasofuncion
sbrc r20,0
rjmp continuar0
lds r20,pasounidad
sbrs r20,0
rjmp continuar0
ldi tempo,0
ldi aux,0xe2
ldi r20,0x4
add r2,tempo
adc r3,aux
adc r4,r20
st x+,r2
st x+,r3
st x+,r4
lds tempo,pasofuncion
sbrc tempo,0
rjmp ledsapagados
continuar_leds:
lds tempo,adcl
lds aux,adch
cpi tempo,83
brsh encenderled
cpi r16,62
brlo apagarled
rjmp contruti
encenderled:
in tempo,pinc
ori tempo,0b11000000
out portc,tempo
rjmp contruti
apagarled:
in tempo,pinc
andi tempo,0b10111111
ori tempo,0b10000000
out portc,tempo
rjmp contruti
ledsapagados:
in tempo,portc
andi tempo,0b10001111
out portc,tempo
contruti:
call bin_bcd
call segmentosdisp
call barridodisp
;mostrar conversor en leds:
lds tempo,lectura_adcl
lds aux,lectura_adch
ldi r20,4
mul tempo,r20
mov tempo,r0
andi tempo,0b11111100
out porta,tempo
in tempo,pinc
andi tempo,0b11110000
out portc,tempo
mov tempo,r1
ldi r20,4
funtermometro:
clr
sts
ldi
sts
r16
pasofuncion,r16
r16,0b01000001
admux,r16
salircambs:
pop r16
out sreg,r16
pop r16
reti
;interrupcin INT1, cambiar_unidad
cambiar_unidad:
push r16
in r16,sreg
push r16
lds r16,pasofuncion
cpi r16,1
breq salircamun
lds r16,pasounidad
cpi r16,0
breq unidad
unidadc:
clr r16
sts pasounidad,r16
in tempo,pinc
ori tempo,0b10100000
andi tempo,0b11101111
out portc,tempo
rjmp salircamun
unidadf:
ldi r16,1
sts pasounidad,r16
in tempo,pinc
ori tempo,0b10010000
andi tempo,0b11011111
out portc,tempo
salircamun:
pop r16
out sreg,r16
pop r16
reti
;rutina de binario a BCD
siguiente:
restar:
r17
r18
r19
r20
r21
r22
r23
xl
xh
yl
yh
zl
zh
clr r20
ldi r21,5
ldi zl,low(constantes<<1)
ldi zh,high(constantes<<1)
ldi xl,low(resultado)
ldi xh,high(resultado)
ldi yl,low(bcd)
ldi yh,high(bcd)
ld r16,x+
ld r17,x+
ld r22,x
lpm r18,z+
lpm r19,z+
lpm r23,z+
sub r16,r18
sbc r17,r19
sbc r22,r23
brcs continuar
inc r20
rjmp restar
continuar:
pop
pop
pop
pop
pop
pop
pop
pop
pop
pop
pop
pop
pop
pop
ret
add r16,r18
adc r17,r19
adc r22,r23
st y+,r20
clr r20
dec r21
brne siguiente
zh
zl
yh
yl
xh
xl
r23
r22
r21
r20
r19
r18
r17
r16
xl,low(bcd)
xh,high(bcd)
yl,low(segmentos)
yh,high(segmentos)
;resultado LSB
;resultado MSB
;constante LSB de tabla constantes
;constante MSB de tabla constantes
ldi r17,5
ldi zl,low(tabla<<1)
ldi zh,high(tabla<<1)
ld r16,x+
add zl,r16
clr r16
adc zh,r16
lpm r16,z
st y+,r16
dec r17
brne pasar
sub r4,r2
breq salirbcd
lds r16,pasofuncion
cpi r16,1
breq voltimetropunto
lds r16,segmentos+2
ori r16,0b10000000
sts segmentos+2,r16
rjmp salirbcd
voltimetropunto:
lds r16,segmentos
ori r16,0b10000000
sts segmentos,r16
rjmp salirbcd
salirbcd:
pop
pop
pop
pop
pop
pop
pop
pop
ret
zh
zl
yh
yl
xh
xl
r17
r16
r18,4
xl,low(segmentos)
xh,high(segmentos)
r17,0b01111111
ser r16
out portd,r16
ld r16,x+
out portb,r16
out portd,r17
call retardo
ser r16
out portd,r16
sec
ror r17
dec r18
brne otrobcd
ori r16,0b00001100
out portd,r16
pop xh
pop xl
;cargar letra C
r20
r19
r18
r17
r16
retardo:ldi r19,0x43
retar0: ldi r20,0xc6
retar1: dec r20
brne retar1
dec r19
brne retar0
nop
ret
tabla:
.db
.db
.db
.db
.db
0b00111111,
0b01011011,
0b01100110,
0b01111101,
0b01111111,
0b00000110
0b01001111
0b01101101
0b00000111
0b01101111
;0
;2
;4
;6
;8
y
y
y
y
y
1
3
5
7
9
constantes:.db 0x40,0x42,0xf,0xa0,0x86,1
.db 0x10,0x27,0,0xe8,0x3,0
.db 100,0,0,10,0,0