0

这是我的代码。我需要在板上放置一个上拉电阻,以便 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
4

1 回答 1

0

我认为sts EIFR, R16实际上应该是out EIFR, R16

然后,您将 PORTD.2 (INT0) 配置为output,这会导致它变为 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
于 2014-11-24T15:58:10.007 回答