如何用AVR汇编语言在ATmega328P上设置ADMUX的第6位?

时间:2017-04-03 19:44:40

标签: avr atmega

我正在尝试初始化ADC。首先是启用Vref。为此,我需要设置第6位ADMUX。

我尝试过的事情:

sbi ADMUX, 6

错误:I/O out of range (0 <= P <= 31)

ldi r16, 0b01000000
out ADMUX, r16

错误:I/O out of range (0 <= P <= 63)

这些错误甚至意味着什么? 请有人帮忙!!

1 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。这是问题所在:

查看“m328Pdef.inc”,ADMUX0x7C。所以你的 out ADMUX, r16
就像写作一样 out 0x7C, r16

outsbi无法“覆盖”该地址(0x7C)。这就是为什么你会得到那些神秘的out of range错误。

查看ATMEL documentaionout意味着Store Register to I/O Location。它只能访问属于I / O空间的地址 ADMUXADCSRA等不属于I / O空间 PortAPortB等属于I / O空间。

因此,我们只需找到一个可以访问/访问地址0x7C的命令。其中之一是sts command

sts可以到达任何地方!但它也需要2个周期才能完成。

您可以写下:

来解决您的问题
ldi r16, 0b01000000
sts ADMUX, r16