r单片机的作用是什么adcsra是哪个

AVR单片机ADC转换程序
> AVR单片机ADC转换程序
AVR单片机ADC转换程序
//基准定义#defineAD_ref_vref0x00//基准Vref本文引用地址:#defineAD_ref_avcc0x40//基准AVCC#defineAD_ref_vref_in0xc0//基准内部Vref#defineAD_refAD_ref_vref//常量定义//单端通道,不放大#define AD_SE_ADC0 0x00//ADC0#define AD_SE_ADC1 0x01//ADC1#define AD_SE_ADC2 0x02//ADC2#define AD_SE_ADC3 0x03//ADC3#define AD_SE_ADC4 0x04//ADC4#define AD_SE_ADC5 0x05//ADC5#define AD_SE_ADC6 0x06//ADC6#define AD_SE_ADC7 0x07//ADC7//定义AD端口变量#define AD_TEMPAD_SE_ADC0//ADC0#define AD_VOUTAD_SE_ADC1//ADC1#define AD_KEYINAD_SE_ADC2//ADC2#defineAD_VINAD_SE_ADC3//ADC3#define AD_IOUTAD_SE_ADC4//ADC4#define AD_6BATAD_SE_ADC5//ADC5#defineBAT_SE_PORTPORTB#defineBAT_EN_PORTPORTB#defineBAT_EN_PIN0X03void adc_init(void){DDRA=0x00;ADCSRA=(1<//ADMUX=(1<<REFS0);//DIDR0=(1<}unsigned int read_adc(unsigned char adc_input,unsigned char i)//查询方式读取ADC单端通道{unsigned inty=0;ADC=0;ADMUX=(AD_ref|adc_input);//adc_input:单端通道 0x00~0x07,0x1E,0x1F//0xc0:选择内部2.56V参考电压delay_nus(100);for(x=0;x<i;x++){ADCSRA|=(1<loop_until_bit_is_set(ADCSRA,ADIF);//方法1 等待AD转换结束//while ((ADCSRA&(1<//loop_until_bit_is_clear(ADCSRA,ADSC);//方法2 检测ADSC=0也行ADCSRA|=(1<y += ADC;//ADC=ADCH:ADCL}}
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一AVR单片机c编程中,while(!(ADCSRA&(BIT(ADIF)))) 什么意思?请具体分析下,谢啦_百度知道
AVR单片机c编程中,while(!(ADCSRA&(BIT(ADIF)))) 什么意思?请具体分析下,谢啦
我有更好的答案
则程序往下运行如果adcsra中的adif置位。可以去下载一下avr的说明书,里面有各个寄存器的说明,不会看这个文档的话根本没办法自己独立编程。虽然和具体寄存器配置有关系,不过大概就是等待adc模数转换结束
采纳率:37%
为您推荐:
其他类似问题
奇骏的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。哪位哥帮我看看avr写的ad转换在串口显示,显示各种不对啊 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
哪位哥帮我看看avr写的ad转换在串口显示,显示各种不对啊
15:44:59  
# include &iom16v.h&
# include &macros.h&
unsigned int temperture[]={49,46,48,48,45,0};
unsigned int smg_8_show[]={0x81,0xb7,0xc2,0x92,0xb4,0x98,0x88,0xb3,0x80,0x90};
void delay(unsigned int x)
unsigned int i,j;
& & & & for(i=x;i&0;i--)
& & & &&&for(j=0;j&1141;j++)
& & & &&&{
& & & && &;;
& & & &&&}
void Port_init()//端口初始化
DDRA&=~BIT(0);
PORTA&=~BIT(0);
void USART_Init(&&unsigned int baud )//串口初始化
& &UBRRH = (unsigned char )(baud&&8);/*设置波特率,baud的值查数据手册*/
& &UBRRL = (unsigned char )/*&&接收器与发送器使能*/
& &UCSRB = (1&&RXEN)|(1&&TXEN);/*设置帧格式: 8 个数据位, 1个停止位*/
& &UCSRC = (1&&URSEL)|(1&&UCSZ1)|(1&&UCSZ0);
void USART_Receive(unsigned int r)
while ( !(UCSRA & (1&&UDRE)) );/*等待发送数据*/
//AD转换初始化函数
void ADC_Init()
&&ADMUX |= (1&&REFS0); //AVCC提供参考电压、ADC结果右对齐、选择通道ADC0
&&//ADMUX |= (1&&REFS0)|(1&&ADLAR);//左对齐
& &ADCSRA |=(1 &&ADEN) | (1 &&ADPS2) | (1 &&ADPS1); //使能AD转换,ADC时钟64分频
//AD转换函数
unsigned int ADC_GetData()
ADCSRA |= (1 &&ADSC);&&//开始AD转换
while(!(ADCSRA & (1 &&ADIF)));&&//等待转换完成
ADCSRA |= (1 &&ADIF);&&//清零ADC中断标志位
return ADC;&&//返回ADC值
void put_s_1(unsigned int *s)
&&USART_Receive(*s);
void main()
& & unsigned int res,
& & & & //unsigned int re_0,re_1,re_2,re_3;
& &DDRD =0X
& &Port_init();//初始化PA通道
& &USART_Init(51);//串口初始化
& &ADC_Init();//ADC初始化
& &while(1)
& & res = ADC_GetData(); //变换得到电压整数位
& & cr = ((int)((long)res*));
& & & & temperture[0]=cr/1000+48;
& & & & temperture[1]=(cr%;
& & & & temperture[2]=(cr%100)/10+48;
& & & & temperture[3]=(cr%10)+48;
& & put_s_1(temperture);
& & & & delay(1000);
13:22:31  
unsigned int temperture[]={49,46,48,48,45,0};
把temperture定义成char型
10:56:17  
楼上说了,将整型改为字符型。如果还不行就用串口发送一个简单字符。看看串口能不能接收正常。如果不正常就是串口的问题。如果正常那就是AD转换出错了。
16:53:41  
首先用外用表或者示波器测量ad的值,然后计算出ad采样值,看看是转换计算的错误还是串口发送的错误。
04:31:16  
两本AVR单片机黄金教程,我都要学啦
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司}

我要回帖

更多关于 单片机是干嘛的 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信