【问题标题】:Atmega328p ADC assembly doesn't convertAtmega328p ADC 组件无法转换
【发布时间】:2015-01-20 15:36:35
【问题描述】:

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

【问题讨论】:

  • 能否请您帮自己一个忙,并添加一些 cmets 用于配置外围设备的值的含义?二进制符号也可以帮助发现错误。

标签: assembly avr adc


【解决方案1】:

我认为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

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 2021-05-03
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2015-02-07
    • 2022-01-07
    相关资源
    最近更新 更多