打印
[AVR单片机]

两次AD转换的结果为什么总是一样

[复制链接]
1884|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
651927693|  楼主 | 2012-7-16 22:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做智能寻迹小车的时候写了一个AD转换的函数,可为什么转换的结果相同?#include#include#define uchar unsigned char #define uint unsigned int #pragma interrupt_handler ADC_average:22uchar leddata[]={                0xC0,  //"0"                0xF9,  //"1"                0xA4,  //"2"                0xB0,  //"3"                0x99,  //"4"                0x92,  //"5"                0x82,  //"6"                0xF8,  //"7"                0x80,  //"8"                0x90,  //"9"                0x88,  //"A"                0x83,  //"B"                0xC6,  //"C"                0xA1,  //"D"                0x86,  //"E"                0x8E,  //"F"                0x89,  //"H"                0xC7,  //"L"                0xC8,  //"n"                0xC1,  //"u"                0x8C,  //"P"                0xA3,  //"o"                0xBF,  //"-"                0xFF,  //ϨÃð                0xFF  //×Ô¶¨Òå                         };uint ADC_value;uchar convert_times=0;uint convert_sum=0;//=========================================//ADC//=========================================void ADC_init(){ADCSRA=BIT(ADEN)|BIT(ADFR)//ADCʹÄÜ£¬Á¬Ðøת»»|BIT(ADIE)|BIT(ADPS2)//ADCÖжÏʹÄÜ|BIT(ADPS1)|BIT(ADPS0);//·ÖƵÒò×ÓΪ128}void ADC_start(uchar num){//ADMUX=num|BIT(REFS1)|BIT(REFS0);//²Î¿¼µçѹΪƬÄÚ»ù×¼µçѹԴ2.56VADMUX=num;SREG|=0X80;ADCSRA|=BIT(ADSC);//¿ªÊ¼×ª»»convert_times=0;convert_sum=0;}void ADC_average(){if(convert_times==5){convert_times=0;convert_sum=0;}convert_times++;convert_sum+=ADCL+(ADCH<<8);if(convert_times==5){ADC_value=convert_sum/5;}}//==========================================================void IO_init(){DDRB=0X0F|BIT(5)|BIT(6);//motor_speed_setDDRF=0;//sensorDDRF|=BIT(1)|BIT(2);//displayPORTF=0B11110111;DDRA=0XFF;DDRC=0XFF;                     //ÊýÂë¹Ü¶ÎÂë¿ØÖƶ˿ÚÉèΪÊä³ö}//==========================================================void display(uint num){uint i,j,temp;temp=num;for(i=0;i<4;i++){j=temp%10;PORTC=leddata[j];PORTA=BIT(7-i);delay_ms(1);temp/=10;} }//===========================================================void delay_ms(uchar num){uint i;for( ;num!=0;num--)for(i=0;i<1000;i++){asm("nop");}}//==========================================================void sensor_test(){     uint i,j;  ADC_init();  ADC_start(5);   while(convert_times<5);   i=ADC_value;        for(j=0;j<500;j++){display(i);}for(j=0;j<500;j++){display(9999);}ADC_init();  ADC_start(5);   while(convert_times<5);   i=ADC_value;        for(j=0;j<500;j++){display(i);}}void main(){IO_init();sensor_test();}

相关帖子

沙发
651927693|  楼主 | 2012-7-16 22:12 | 只看该作者
不好意思,家里没网,用手机发的。手机也不能上传文件

使用特权

评论回复
板凳
651927693|  楼主 | 2012-7-17 16:00 | 只看该作者
问题找到了,在读取AD转换的结果时,一定要先将ADCH和ADCL赋值给另外的变量,否则只能得到相同的值

使用特权

评论回复
地板
zjwfdzry| | 2012-7-17 19:20 | 只看该作者
很好诶

使用特权

评论回复
5
turf123| | 2012-8-9 09:55 | 只看该作者
这个问题N多新手都会犯。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

544

帖子

1

粉丝