求解单片机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;这让我不懂啊!望高手们指导! 展开
它的程序是
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;这让我不懂啊!望高手们指导! 展开
2个回答
展开全部
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,不知道是怎么来的
看你这个程序,转换结果应该是右对齐的,假定转换结果为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,不知道是怎么来的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |