我正在尝试初始化ADC。第一件事是启用 Vref。为此,我需要设置 ADMUX 的第 6 位。
我尝试过的事情:
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)
这些错误甚至意味着什么?请有人帮忙!!
你走在正确的轨道上。问题是这样的:
看《m328Pdef.inc
》,ADMUX
0x7C
。所以你的out ADMUX, r16
就像写作
out 0x7C, r16
.
out
和sbi
无法"到达"该地址(0x7C
(。这正是您遇到那些神秘out of range
错误的原因。
看看ATMEL文件,out
是为了Store Register to I/O Location
。它只能访问属于 I/O 空间的地址。
ADMUX
、ADCSRA
等不属于 I/O 空间。
PortA
、PortB
等都属于I/O空间。
因此,我们只需要找到一个可以到达/访问地址的命令 0x7C
.其中之一是sts
命令。
sts
可以到达任何地方!但它也需要 2 个周期才能完成。
您可以通过编写以下内容来解决问题:
ldi r16, 0b01000000
sts ADMUX, r16