[AVR单片机] ATMEGA16 片内AD 使用问题

[复制链接]
4105|4
 楼主| selfstudy 发表于 2011-7-21 17:11 | 显示全部楼层 |阅读模式
本帖最后由 selfstudy 于 2011-7-21 17:30 编辑

使用ATMEGA16片内ADC0,可是仿真时AD结果不变化。调试很长时间也未发现错在哪里,请指教。
显示程序没有问题的。AD 转换的寄存器设置按照手册来的。

可是就是没有反应,AD 是一个固定值。
//ad 模块
uint AD_Result(void)
{uint data;

DDRA &=~_BV(PA0);//输入方式

PORTA&=~_BV(PA0);//不带上拉电阻

ADMUX=0x00;//右对齐,通道1,外接参考信号//0 0 AREF, 内部Vref 关闭

ADCSRA|=_BV(7) ;//ad使能

ADCSRA|=_BV(6);//启动AD转换

while(!( ADCSRA & _BV(4)));

data=ADCL;

data=data+ADCH*256;


return data;
}

//main 中的 while循环

while(1)
   {




LCD_Show_Num_New(0,0,AD_Result);//显示数字

i++;
       _delay_ms(100);//

if (i>3000) i=0;

LCD_Show_Num_New(0,1,i);//显示循环次数
   }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| selfstudy 发表于 2011-7-21 17:12 | 显示全部楼层
从上面的截图可知,循环次数能正确显示,可是AD 转换结果不变化。

AD 功能模块不知道错在哪里?
uabuntsu 发表于 2011-7-30 16:21 | 显示全部楼层
LCD_Show_Num_New(0,0,AD_Result);//显示数字
应该是LCD_Show_Num_New(0,0,AD_Result());吧?应该是函数调用才有返回值吧?
 楼主| selfstudy 发表于 2011-7-30 17:04 | 显示全部楼层
LCD_Show_Num_New(0,0,AD_Result);//显示数字
应该是LCD_Show_Num_New(0,0,AD_Result());吧?应该是函数调用才有返回值吧?
uabuntsu 发表于 2011-7-30 16:21

对前面显示数字,后面是函数返回值。

我的ad可行,是仿真时未加电源,出错了。
qin552011373 发表于 2011-8-22 14:08 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

84

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部