我正在尝试初始化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)
这些错误甚至意味着什么? 请有人帮忙!!
答案 0 :(得分:1)
你走在正确的轨道上。这是问题所在:
查看“m328Pdef.inc
”,ADMUX
为0x7C
。所以你的
out ADMUX, r16
就像写作一样
out 0x7C, r16
。
out
和sbi
无法“覆盖”该地址(0x7C
)。这就是为什么你会得到那些神秘的out of range
错误。
查看ATMEL documentaion,out
意味着Store Register to I/O Location
。它只能访问属于I / O空间的地址
ADMUX
,ADCSRA
等不属于I / O空间
PortA
,PortB
等属于I / O空间。
因此,我们只需找到一个可以访问/访问地址0x7C
的命令。其中之一是sts
command。
sts
可以到达任何地方!但它也需要2个周期才能完成。
您可以写下:
来解决您的问题ldi r16, 0b01000000
sts ADMUX, r16