求解单片机atmega128 A/D转换程序,我自己写的A/D转换程序,然后再接收ADCL和ADCH,

将它们转换成10进制数,然后在1602液晶上显示,可是转换数据那里不会写,老是编译通不过,于是研究了下书上怎么写的它的程序是unsignedintf_ADC_isr(){... 将它们转换成10进制数,然后在1602液晶上显示,可是转换数据那里不会写,老是编译通不过,于是研究了下书上怎么写的
它的程序是
unsigned int f_ADC_isr()
{unsigned int ui_AD_data,ui_ADCH,ui_ADCL;
f_ADint(); //设置A/D的初始化程序
delay(10); //延时10MS
ui_ADCL=ADCL;
ui_ADCH=ADCH;
ui_AD_data=(ui_ADCH<<8)|UI_ADcl; 就是这里我没有看懂
return ui_AD_adta;}

它把ADCH左移8位了,再与ADcl或,这个atmega128的A/D是10位的,所以ADCH+ADCL=1024;但是像书上这个程序返回的ui_AD_adta最大也才255;这让我不懂啊!望高手们指导!
展开
 我来答
尚云社
2012-12-12 · TA获得超过392个赞
知道小有建树答主
回答量:229
采纳率:0%
帮助的人:281万
展开全部
ui_AD_data=(ui_ADCH<<8)|UI_ADcl; 就是这里我没有看懂

看你这个程序,转换结果应该是右对齐的,假定转换结果为1023(0x03ff),那么ADCL = 0XFF,ADCH = 0X03
ui_ADCL=ADCL;也就等于0xff
ui_ADCH=ADCH;也就等于0x03
ui_ADCH<<8,那么ui_ADCH就等于0x0300,再和ui_ADCL做或运算,则ui_AD_data=0x3ff,你所说的返回最大也才255,不知道是怎么来的
楸凤F
2015-01-16
知道答主
回答量:6
采纳率:0%
帮助的人:3万
展开全部
unsigned int 为16位,范围是0~65535哦,不是255
追问
这个早就没管什么这个单片机了,不过很谢谢你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式