永发信息网

AVR atmega168单片机PC0如何设置成ADC0的复用功能

答案:1  悬赏:80  手机版
解决时间 2021-03-24 16:43
AVR atmega168单片机PC0如何设置成ADC0的复用功能
最佳答案
首先初始化ADC:
void ADC_init(void)
{
//作为 ADC 输入,PC0要设置成输入,其实初始默认就是0(输入)。
DDRC &= 0xfe; //#11111110

//关闭PC0内部上拉电阻,(其实初始默认就是0.)
PORTC &= 0xfe;

//选择 ADC 时钟 = 系统时钟128分频
ADCSRA = 0x07;

//设置参考电压为AVCC, AREF 引脚外加滤波电容;
//转换值右对齐;
//ADC通道为内部 GND
ADMUX=0x4f; //01001111

//1.1V 的片内基准电压源, AREF 引脚外加滤波电容 左对齐,ADC通道为内部 GND
//ADMUX=0xef; //11101111

//模拟比较器控制及状态寄存器:ACSR的Bit 7 是 ACD(模拟比较器禁用),ACD 置位(=1)时,模拟比较器的电源被切断。

ACSR=0x80; //关闭内部比较器

ADCSRA |= 0x80; //10000000 //使能 ADC
}
//--------------------------------------------------------------
下面是一次转换的过程:
unsigned int adcRead (void)
{
unsigned int inADC;
ADMUX &= 0xf0; //#11110000B //清除已选择的ADC通道
ADMUX |= 0x01; // #00000001B //选择新的ADC通道(PC0)

ADCSRA|=0x40; //01000000 //启动单次ADC转换

//在 ADC 转换结束,且数据寄存器被更新后, ADCSRA的bit4:ADIF 置位
while ((ADCSRA & 0x10) == 0); //00010000 //通过ADIF判断ADC转换结束

inADC = ADCH ;
inADC =( inADC << 8) | ADCL;

ADCSRA|=0x10; //通过向ADIF标志写 1 来清 ADIF,//清除ADC转换结束标记
return inADC; //返回值

}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
进门是客厅出门是走道如何装修客厅
一共有14颗骰子,分成2个,4个,8个三组,怎
托福得上多少分才能被名牌大学录取?
没有话说写一句爱情的一段话
“涛''可以组什么词
买卖期货能今天提前挂单吗
如何在C中调用Perl,希望大家能给个简单的例
水的字形解析
学校图书馆地面的长和宽分别是16m和4m,用边
重庆千才教育待遇好吗? 工作好做吗?
上海博物馆茶室地址在什么地方,我要处理点事
花中有花蕊 出自哪一首歌?
这个是日本东照宫的三猿,他的寓意真的是有关
土豆海带羊肉能一起炖吗
单选题战国时期各诸侯国的变法运动与春秋时期
推荐资讯
如图所示,已知⊙O是△ABC的外接圆,若∠A=55
赣榆现在离婚请律师要多少钱,我想要孩子2个
幽默搞笑内涵风趣段子:这条鱼怎么也没想到会
南京中山东路311-2号五星控股大厦怎么走啊?
电器的电线上标 227 IEC 53(RVV)代表什么意思
置业顾问的工作是什么?
看中控认车
什么歌有什么 oh my baby 什么什么让我心碎
最硬的菜是什么
安徽金寨县的山区小学迎来5名来自英国的英语
下列说法错误的是A.平分弦的直径,垂直于弦,
安溪那边女孩怎么样
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?