这是我的代码。我需要在电路板上放一个上拉电阻,因此INT0标志会将我发送到转换,然后在PORTB上打印。我在PC0上使用ADC0但它无法正常工作。 PORTB上只打印了一个值。你能救我吗?
.include "m328pdef.inc"
.org 0x0000 jmp startProgram
.org 0x0002 jmp int0_int
.org 0x002A jmp adcComplete
startProgram:
.org 0x0033
// Configuracion de Stack Pointer y Timer0
ldi R16, High(RAMEND)
out SPH, R16
ldi R16, Low(RAMEND)
out SPL, R16
// Configuracion INT0
ldi r16, 0x02
sts EICRA, R16
ldi r16, 0x01
out EIMSK, R16
sts EIFR, R16
// Configuracion del ADC
ldi R16, 0x60
sts ADMUX, R16
ldi r16, 0xFF
sts ADCSRA, R16
ldi r16, 0x02
sts ADCSRB, R16
ldi r16, 0x01
sts DIDR0, R16
SEI
// Inicializando Puerto B
ldi R16, 0xFF
out DDRB, R16
ldi R16, 0x04
out DDRD, R16
// Rutina de espera del ADC
loop:
rjmp loop
int0_int:
reti
adcComplete:
lds R16, ADCH
cpi R16, 63
brlo low_adc
cpi R16, 127
brlo med_adc
cpi R16, 191
brlo high_adc
cpi R16, 191
brsh full_adc
reti
low_adc:
ldi R17, 0xFF
out PORTB, R17
reti
med_adc:
ldi R17, 0x3F
out PORTB, R17
reti
high_adc:
ldi R17, 0x0F
out PORTB, R17
reti
full_adc:
ldi R17, 0x03
out PORTB, R17
reti
答案 0 :(得分:0)
我认为sts EIFR, R16
实际应该是out EIFR, R16
。
然后,您将PORTD.2(INT0)配置为输出,这会使其变为0并保持在那里。没有边沿,没有INT0,没有ADC触发器。
如果您有外部上拉使用
ldi R16, 0x00
out DDRD, R16
out PIND, R16
使用内部上拉使用
ldi R16, 0x00
out DDRD, R16
ldi R16, (1<<2)
out PIND, R16