Witam,
mam następujący problem:
bity mam ustawione tak jak widać, a przerwanie przychodzi tylko raz w debuggerze- dzięki ustawionemu bitowi ADSC. Jednak po wyjściu z obsługi przerwania ADSC jest wyzerowany, a flaga ADIF w ogóle się nie ustawia. program nie wykonuje przerwania ponownie mimo ustawienia następującego:
ldi R16, (1<<REFS1)|(1<<REFS0)|(1<<ADLAR)
ldi R16, (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(ADPS1)|(1<<ADPS0)
Generalnie program ma zczytywać w regularnych odstępach czasu wartość ADC i porównywać ją z 0x0F. W zależności od tej wartości ma zapalać lub gasić diody na porcie D. Tyle.
I cały kod:
mam następujący problem:
bity mam ustawione tak jak widać, a przerwanie przychodzi tylko raz w debuggerze- dzięki ustawionemu bitowi ADSC. Jednak po wyjściu z obsługi przerwania ADSC jest wyzerowany, a flaga ADIF w ogóle się nie ustawia. program nie wykonuje przerwania ponownie mimo ustawienia następującego:
ldi R16, (1<<REFS1)|(1<<REFS0)|(1<<ADLAR)
ldi R16, (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(ADPS1)|(1<<ADPS0)
Generalnie program ma zczytywać w regularnych odstępach czasu wartość ADC i porównywać ją z 0x0F. W zależności od tej wartości ma zapalać lub gasić diody na porcie D. Tyle.
I cały kod:
.INCLUDE "m32def.inc"
.EQU SYS_FREQ =16
.DSEG
.ORG 0x0060
moja_zmienna: .BYTE 2
.CSEG
.ORG 0
jmp Reset
.ORG ADCCaddr
rjmp ADC_read
.ORG 0x0030
Reset:
ldi R17, high(RAMEND)
ldi R16, low(RAMEND)
out SPH, R17
out SPL, R16
clr R16
ldi R17, 2
ldi XH,high(0x0060)
ldi XL, low(0x0060)
Reset_1:
st X+,R16
dec R17
brne Reset_1
clr R16
ldi R16, (1<<REFS1)|(1<<REFS0)|(1<<ADLAR)
out ADMUX, R16
clr R16
ldi R16, (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(ADPS1)|(1<<ADPS0)
out ADCSR, R16
ldi R16, 0xFF
out DDRD, R16
out PORTD,R16
ldi R16, 0x00
out DDRA, R16
sei
Main_Loop:
jmp Main_Loop
ADC_read:
in R16, ADCL
in R17, ADCH
cpi R17, 0x0F
brlo ch_diode
koniec_adc:
reti
ch_diode:
in R17, PORTD
cpi R17, 0xFF
breq dodaj_00
ldi R17, 0xFF
out PORTD, R17
jmp koniec_adc
dodaj_00:
ldi R17, 0x00
out PORTD, R17
jmp koniec_adc
