r单片机是做什么的的adcsra是哪个

  进行AD转换时要有一个参考电压,参考可采用芯片内部的2.56V参考电压,或者采用AV,也可采用由引脚ARFE接入的外部参考电压。本例使用内部参考电压,并在引脚ARFE上接Cl以提高ADC的抗噪性能。
  与ADC相关的寄存器主要有以下三种:
  1.多工选择寄存器ADMUXADMUX中各位的定义见表1,其中REFSl、REFS0作ADC参考电源电压的选择控制,其取值和参考电压的对应关系见表2。
  ADLAR为AD转换结果对齐方式选择。
  MUX3~0为模拟通道选择,所取数的值即为通道的号,比如取0011时表示选择ADC3通道,余下以此类推。
  2.控制和状态寄存器ADCSRA.ADCSRA中各位的定义见表3。ADEN为ADC使能,写入&1&使能ADC,写入&0&关闭ADC。ADSC为ADC开始转换控制位。ADFR为连续模式选择,当该位被置&1&时,ADC工作在连续转换模式下,清零该位将中止连续转换模式。ADIF为中断标志位,ADIE为中断允许位。ADPS2~O为ADC预选择,这些位决定了XTAL时钟与输入到ADC的ADC时钟之间的分频数,见表4。
  3.数据寄存位ADCL和ADCH当ADC转换完成时,可以在这两个寄存器读取转换的结果,这两个寄存器合起来为16位,转换结果只使用了其中的10位,当ADLAR=0,为右对齐,低8位使用.ADCL,高2位使用ADCH的低2位;当ADLAR=1,为左对齐,高8位使用ADCH,低2位使用ADCL的高2位。
  二.LCD1602液晶显示模块
  LCD1602液晶显示模块能显示的内容为16字符&2行,即最多显示32个字符。
  1.引脚功能
  LCDl602的引脚功能见表5。2.寄存器选择功能寄存器选择功能见表6。
  3.指令功能
  指令格式:RSR/WD7D6D5D4D3D2D1。D0例如要在LCD1602的数据寄存器写入数据0x41的指令为:,把这个二进制数送到LCD脚,就会在LCD1602的显示屏显示字符A,当然在这之前要先写入显示的地址。
  4、标准字符库
  有的读者可能会问:上面我们把数据0x41写入到LCD1602的数据寄存器,怎么显示出来的不是16进制的数字41而是A呢?原来是LCD1602给每个要显示的字符都定义了一个字符码,字符A的字符码就是0x41。LCD1602模块内有一个标准字符库,只要输入字符码就可以显示出对应的字符,常用字符的字符码就使用其在ASCⅡ码表中对应的字符码。在编写程序的过程中,如果使用汇编语言,我们必须给出字符的ASCⅡ码;如果使用CAVRC语言,可以给出字符的ASCⅡ码,也可以只给出要显示的字符,字符码由ICCAVR编译器自动生成,本文的配套程序采用的就是后一种方法。
  三、数字电压表头实验
  1.实验电路
  利用ATmega8与LCD1602设计一个数字电压表,能够测量0~2.5V的直流电压值,四位数码显示。
  实验板上与数字电压表头有关的电路部分见下图,模拟电压通过J2输入到ATmega8的PC3脚,转换结果数据通过PB0~PB7输出到LCD1602显示,PC0~PC2是LCD1602的控制线。
  2.程序设计
  程序由主函数、初始化函数、AD转换函数、计数值处理函数、LCD显的工作过程是这样的:从J2输入的直流电压经ADC转换后由计数值处理函数把16进制的数转换成10进制的BCD码,再通过查表的方式得到对应数字的ASCⅡ码,最后通过LCD1602进行显示。
  ADC转换结束后,在ADC数据寄存器中可以取得转换结果,其转换结果可表示为:ADC=(VIN&1024)/VREF,其中VIN表示输入电压,VREF表示选定的参考电源电压。由公式可知:当输入电压和参考电源电压相等时结果为1024,但由于ADC数据寄存器为10位二进制寄存器,能表示的最大值为1023,因此实际转换的结果为1023,即使输入电压大于参考电源电压,其结果仍然为1023,故输入电压必须不大于参考电源电压,否则得不到正确的转换结果。
  在本文的实例中选择内部2.56V作为参考电源电压,最大输入电压可达2.56V,因此这里输入电压确定为0~2.5V,当输入电压为2.5V时,AD转换的结果正好为1000,为了在LCD1602上显示2500(单位为mV),必须将结果乘以2.5送LCD1602显示。
  为了能通过查表得到待显示数字的ASCⅡ码,定义了一个字符数组Table[],并用字符串给这个数组赋值:Table[]=&&,例如LCD1602要显示数字0,只要读取ASCⅡ码0x30,即Table[0]=0x30而不是Table[0]=0,相应地Table[1]=0x31、Tablel[2]=0x32等等。上面由字符获得其ASCⅡ码的翻译工作是ICCAVR在编译时自动完成的。
  3.电压测量
  按右图的电路将可变器RP输出的电压送到J2接口,图2中的5V电源就使用实验板上的电源。打开实验板的电源,调节RP我们就可发现LCD1602上显示数字跟着变化。
  对于不大于2.5V的电压可以直接输入到J2测量其电压值,如果电压超过这一范围,就要改变数字电压表头的量程,比如把量程改为10V,这时只要做两件事情:一是按左图做一个转换电路,使其输入电压在0~10V变化时输出电压在0~2.5V变化,以满足ADC转换的要求。二是将程序中的语句&i=i*5/2;&改为&i=i*10;&,这时LCD1602的显示范围为0~9999。因为这里只显示4位,当电压为10V时最高位的1不能显示,显示数为0000,因此当量程大于10V时要修改源程序使得LCD1602显示5位数字,只有这样才能满足测量的要求。
&&&&&往下看有更多相关资料
试试再找找您想看的资料
资料搜索:
查看相关资料 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & &
地址: 电话:(86)774-2826670& & &&)4.3.3 ADC 控制和状态寄存器-ADCSRA ADCSRA寄存器如图4-5所示 Bit
读/写 初值
图4-5 ADCSRA 寄存器
Bit 7 – ADEN: ADC 使能
ADEN置位即启动ADC,否则ADC功能关闭。在转换过程中关闭ADC将立即终止正在进行的转换。 Bit 6 – ADSC: ADC 开始转换
在单次转换模式下,ADSC 置位将启动一次ADC 转换。在连续转换模式下,ADSC 置位将启动首次转换。第一次转换( 在ADC 启动之后置位ADSC,或者在使能ADC 的同时置位ADSC) 需要25 个ADC 时钟周期,而不是正常情况下的13 个。第一次转换执行ADC初始化的工作。在转换进行过程中读取ADSC 的返回值为“1”,直到转换结束。ADSC 清零不产生任何动作。 Bit 5 – ADFR: ADC 连续转换选择
该位置位时,运行在连续转换模式。该模式下,ADC 不断对数据寄存器进行采样与更新。该位清零,终止连续转换模式。
Bit 4 – ADIF: ADC 中断标志
在ADC 转换结束,且数据寄存器被更新后, ADIF 置位。如果ADIE 及SREG 中的全局中断使能位I 也置位,ADC 转换结束中断服务程序即得以执行,同时ADIF 硬件清零。此外,还可以通过向此标志写1 来清ADIF。要注意的是,如果对ADCSRA 进行读-修改-写操作,那么待处理的中断会被禁止。这也适用于SBI及CBI指令。 Bit 3 – ADIE: ADC 中断使能
若ADIE 及SREG 的位I 置位, ADC 转换结束中断即被使能。 Bits 2:0 – ADPS2:0: ADC 预分频器选择位
由这几位来确定XTAL 与ADC 输入时钟之间的分频因子。 4.3.4 ADC 转换结果
转换结束后(ADIF 为高),转换结果被存入ADC 结果寄存器(ADCL, ADCH)。 单次转换的结果如下:
其中:式中 VIN为被选中引脚的输入电压。 VREF为参考电压。
4.4 软件程序设计
4.4.1 程序总流程图
小车进入寻迹模式后,即开始不停地扫描与探测器连接的单片I/O 口,并经过ADC将模数转换成数字信号。一旦检测到某个I/O 口有信号变化,就执行相应的判断程序,把相应的信号发送给电动机从而纠正小车的状态。软件的主程序流程图如图4-6所示:
图4-6主程序流程图
4.4.2 ADC 源程序
ADC源程序组分初始化和转换程序。由于ATmega8只有一个ADC转换内核,所以通用六次调用 adc_get()可以得到PC0~PC5六个端口电压,判断线的位确定小车的偏向。
ADC初始化源程序:
void adc_init()
// adc初始化 {
ACSR=0x80;
//关掉模拟比较器的电源(禁用模拟比较器)
ADMUX=(1&&REFS0); //选择外部5V参考电压
ADCSRA=(1&&ADEN);//这里选择的是连续模式 SFIOR=0x00;
//adc高速模式选择 }
ADC转换程序:
unsigned char adc_get(int q)
// q 为要ADMUX值,可以选择ADC通道 {
ADCSRA|=(1&&ADSC);
//开始转换
while(!(ADCSR&(1&&ADIF))){;}//等待转换完成
ADCSR|=(1&&ADIF);
temp=temp*50/0x03
//转换成0-50(表示0-5.0)
return (unsigned char)(temp);
//返回ADC值 }
欢迎转载:
相关推荐:单片机编程ADCSRA|=(1&&ADEN)|(1&&ADSC)|(1&&ADPS1)|(1&&ADPS0)_百度知道
单片机编程ADCSRA|=(1&&ADEN)|(1&&ADSC)|(1&&ADPS1)|(1&&ADPS0)
1是左移一位,那么1&ADEN是什么意思;&lt?ADEN&&&ADEN是什么意思这里1&lt
我有更好的答案
采纳率:25%
这个好像是AVR单片机里面的AD转换的寄存器
是的,但我想问的是1&&ADEN是置位的意思吗?
ADEN应该是AD的使能端吧!他是一个位,要不是0,要不是1,那么“1&&ADEN”的意思是要么把1左移0位,要么左移1位明白了吧
1左移ADEN位呀?
你看看程序前面有有
比如1&&2;即:0x04
ADEN是一个特殊寄存器,应该是AD转换器的使能位,你确定是左移?
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 syn470r单片机例程 的文章

 

随机推荐