小5带你飞(8)—AVR(ATmega 328P)单片机片内ADC的原理和使用(1)
ATmega328p内部集成了一个10位的逐次逼近的A/D转换器。该转换器与一个8通道的模拟多路复用器连接。它能够对来自端口A的8路单端输入电压进行采样。
ADC转换模块的原理图
看一下它的基本特性:
10位分辨率
0.5 LSB积分非线性
±2 LSB绝对精度
13 -~260µs转换时间
最高采样速率76.9 kSPS/s
6路可选的单端输入通道
2路额外多路复用单端输入通道(TQFP 、QFN/MLF)
温度传感器输入通道
ADC读取的结果可设置为左端对其
0~Vcc ADC输入电压范围
可选择1.1v ADC参考电压
自由连续转换模式和单次转换模式
在ADC转换完成时中断
睡眠模式噪音消除
ADC的供电和参考电压:
ADC由独立的专用的模拟电压引脚AVCC供电,AVCC和VCC的电压差别不能大于±0.3V。
ADC的参考电源可以是芯片内部的1.1v的参考电源,也可以是AVCC,也可以采用外部参考电源,使用外部参考电源的时候,外部参考电源可由引脚AREF接入,使用内部参考电压源的时候,可以通过在AREF引脚外部并接一个电容来提高ADC的抗噪性能。这个电容一般可为0.1uF
与ADC有关的寄存器:
ADMUX:多路复用选择寄存器
bit6、bit7 :ADC参考电压选择。如果在转换过程中改变了设置,则只有等待当前转换结束后才起作用。如果在 AREF引脚上施加了外部参考电压,则内部参考电压将不能被选择。这个参考电压的选择见下图:
还是解释一下:
00 :AREF,内部基准源关闭
01 :AVCC,AREF外接滤波电容
10 : 保留
11 :1.1v内部基准电压源,AREF外接滤波电容
bit5:转换结果对齐位。置位左对齐,清位右对齐
bit4:一个保留位
bit3~bit0:模拟通道选择位
就是选择连接到哪个通道上,这个没啥说的。看表就好了,如下:
2. ADCSRA:ADC控制和状态寄存器A
bit7:ADC使能位。置位则启动ADC功能,清位ADC功能关闭
bit6:ADC开始转换。
在单次转换模式下,该位置位将启动一次ADC转换,在连续转换模式下,该位置位,将启动首次转换
bit5:ADC自动触发使能位。
该位置位,则启动ADC自动触发功能。
bit4:ADC中断标志位
ADC转换结束且数据寄存器被更新后该位置位,如果ADIE及SREG寄存器中的全局中断使能位I被置位,
则ADC转换结束中断服务程序被执行,同时该位被硬件清零,也可以通过软件写1清零。
bit3:ADC中断使能位。如果该位及SREG寄存器中的全局中断使能位I被置位,则ADC转换结束中断将被使能。
bit2~bit0:ADC预分频器的选择。这三位决定ADC输入时钟与CPU时钟之间的分频系数,如下表:
3. ADCL 、 ADCH :ADC数据寄存器
分别是左对齐的和右对齐的数据
ADC转换结束后,转换结果将存在这两个寄存器当中。首先ADMUX寄存器当中的ADLAR和MUXn影响转换结果在寄存器中的存放形式。当ADCL被读取时,ADC数据寄存器在读取ADCH之前不会更新,如果转换结果为左对齐且只需要8位的精度,那么仅需要读取ADCH就可以了,否则需先读取ADCL然后读取ADCH。
4.ADCSRB :ADC控制和状态寄存器B
bit2~bit0:ADC自动触发源的选择
说明一下吧:
000:连续转换模式
001:模拟比较器
010:外部中断请求0
011:定时器/计数器0比较匹配A
100:定时器/计数器0溢出
101: 定时器/计数器0比较匹配B
110:定时器DIDR0数器1溢出
111:定时器/计数器1捕捉事件
5. DIDR0:数字输入禁用寄存器0
说明一下:
bit5~bit0 :当这些位置位,相应的ADC引脚的数字输入缓存区被禁止,相应的PIN寄存器读取的时候都为0,
模拟信号运用于ADC5~ADC0,是不需要这么做的,ADC6和ADC7是没有缓存区的。
下面来看看ADC的基本使用步骤:
ADC输入端口初始化
基准电压的设置,数据对齐方式的设置,通道的选择。(ADMUX寄存器的配置)
AD使能,启动装换,中断的设置(ADCSRA寄存器的设置)
触发源的选择(ADCSRB寄存器的设置)
选择中断号,编写中断服务程序,读取ADC的数据(ADCL 、 ADCH )
好的,关于ADC的寄存器就写这么多了,下一篇我们来写ADC的驱动程序。
更多内容请关注头条号:小5嵌入式
MCS-51单片机有几个工作寄存器
工作寄存器有4组,每组都是8个工作寄存器R0~R7,通过PSW中的RS1、RS0两位来选择使用哪一组,如果不选,默认是选择第0组。
RS1RS0组合为00时,选中第0组工作寄存器,R0~R7地址为00H~07H;
RS1RS0组合为01时,选中第1组工作寄存器,R0~R7地址为08H~0FH;
RS1RS0组合为10时,选中第2组工作寄存器,R0~R7地址为10H~17H;
RS1RS0组合为11时,选中第3组工作寄存器,R0~R7地址为18H~1FH。
类似arm的usr模式svc模式irq模式fiq模式,
psw.4 psw.3
0 0 0区 r0-r7独立
0 1 1区 r0-r7独立
1 0 2区 r0-r7独立
1 2 3区 r0-r7独立
上边的每个区都由相同的名字r0-r7寄存器引用,但数据空间却不同,所以各自独立,
每组寄存器在物理上是独立的,也就是说,一共有32个寄存器。上电后默认是第0组,但四组寄存器的功能、优点完全相同。r0-r7支持丰富的寻址方式,可以大大提高运行效率。
所以,如果你有四个程序段(或者说线程)要交叉运行,都想使用到效率很高的r0-r7,就可以让它们各占一组,只要切换区域就行了,而不必频繁地保护现场。
寻址方式:
51单片机有7种寻址方式。
1、寄存器寻址:前面提到了内部RAM中的00H-1FH地址单元作为工作寄存器使用。一共是有32各地址单元,分成四组,每组有8个寄存器,命名为R0-R7,每次可以使用其中的一组。当使用R0-R7来表示操作数时,就属于寄存器寻址方式。
例如:MOV A,R0;把寄存器R0的内容送入累加器A中
2、直接寻址:在指令中直接给出操作数地址,就属于直接寻址方式。此时指令的操作数部分直接是操作数的地址。
例如:MOV A,2AH ;把RAM地址2AH的内容送入累加器A中
3、立即寻址:
例如:MOV A,#3AH ;该指令就是表示把立即数3AH送入累加器A中,立即数前加上一个#,和直接寻址方式区分
4、寄存器间接寻址:若以寄存器的名称直接给出操作数的地址,则称为寄存器间接寻址。
例如:MOV A,@R0 ;该指令是把RO里的内容作为地址,这个地址的数据送入累加器A,注意前面需要加@
5、变址寻址:变址寻址是以某个寄存器的内容为基本的地址,然后在这个基址上加以地址的偏移量,才是真正的操作数地址。
例如:MOV A,@A+DPTR ;地址是A+DPTR的值,这个地址的内容送如累加器A
6、相对寻址:相对转移指令需要用到相对寻址方式,此时操作数部分给出的是地址的相对偏移量部分。
目的地址 = 源地址 + 指令字节数 + rel(rel可正可负)
例如:SJMP rel
7、位寻址:概念就不做解释了。还是把reg52.h这个头文件贴出来说。
相关问答
51 单片机中R0 ~R7是什么?有什么作用?51单片机的工作寄存器一共有32个,为RAM中的00H--1FH单元,分为4组,分别是0组:00H--07H单元、1组:08H--0FH单元、2组:10H--17H单元、3组:18H--1FH单元,每...
单片机中 r1,r2r3是什么寄存器就是在51芯片逻辑结构中对应那...[最佳回答]51单片机中r1,r2r3是寄存器组中的,共有四组寄存器组,每组都有r0,r1,r2,r3到r7,通过psw中的寄存器组选择字,来选用哪一组.51单片机中r1,r2r3是...
汇编中,请问mov@ R0 ,R1这句话对不对_作业帮[最佳回答]不对,没有这样的指令,可以先把值给A,A再给R0,你可以查书,单片机共111条指令,里面没有这条
51 单片机 复位后 R0 的地址是什么?复位后R0地址为RAM的00H,因为复位后PSW的值为00H,所以PSW.4和PSW.3都为0,使用RAM的0区(00~07H)对应于R0~R7。复位后R0地址为RAM的00H,因为复位后PSW的值...
单片机 inc指令?单片机的ⅠNC指令功能是目标寄存器加1,属于直接寻址指令,操作目标涉及RAM低128字节单元和所有特殊功能寄存器。使用这个指令需要注意两点:第一,它不属于算术...
r0 是特殊功能寄存器吗?不是,R0与R1一样,都是通用寄存器。寄存器:一把指通用寄存器【r0~r7】和特殊寄存器【如,tmod,ip等与单片机的定时器,中断,串口等控制相关的配置寄存器】;...
单片机 指令@符号代表什么?@代表间接寻址例子:MOVA,@R0R0里面存的是地址,假设R0里存的数是30H,那么这条指令的意思是:把地址为30H的存储单元里存的数传,送给累加器A;假设R0里存的...@...
单片机 间接寻址?指令中直接给出操作数地址(dir)的寻址方式称为直接寻址。寻址对象为:1内部数据存储器,在指令中以直接地址表示;2特殊功能寄存器SFR,在指令中用寄存器名...
8031 单片机 内部ram传送指令是?内部ram分几个区1.低128B可以有mova,70h直接寻址取出70h地址的值movr0,#70用r0或r1间址mova,@r0取出70h的值2.高128B只能用间址mo...
单片机 用汇编语言:使内部ram30h~3fh置初值10h~1fh,然后将其传送到外部ram2000h~200fh?ORG0000HLJMPSTAORG0050HSTA:MOVR0,#30HMOVR1,#50HMOVR2,#10HMOVR3,#16MOVDPTR,#2000HLOO...