• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

问一个A/D转换的问题

用80c552做一个简单的A/D转换,碰到些问题,但感觉不是硬件问题,因为i2c的测试比较顺利.其中,STADC脚接地,由软件启动转换.

程序如下

unsigned char Read_ADC( unsigned char channel )
{
  ADCON &= ~0x07;            
  ADCON |= 0x07 & channel;      
  ADCON |= 0x8;              
  while(  (ADCON & 0x8) );  
  return( ( ( (unsigned) ADCH << 8) | ADCON ) >> 6 );    
}

void main(void)
{
    unsigned char channal1 = 0x00;
    unsigned char reading;    
    reading = Read_ADC(channal1);
    if(reading>0x200)
    {
        //一个i2c传输
    }
    else
   {
        //另一个i2c传输
   }
while(1);
}

单片总是工作else,是不是说明A/D转换没有成功啊?究竟什么问题呢?
p.s.我A/D转换的是一个用10k电位器对5V的分压,会不会是电阻太大电流太小了?
全部回复(6)
正序查看
倒序查看
2006-06-23 12:57
没人知道啊?大家帮忙啊!
0
回复
2006-06-24 13:35
zai ding
0
回复
dyuan
LV.2
4
2006-06-24 15:43
@realzuoluo
zaiding
unsigned char 类型数据能大于0x200吗?
0
回复
2006-06-27 11:10
@dyuan
unsignedchar类型数据能大于0x200吗?
不是这个的问题.后来我只采集ADCH中的8位数据,还是不对,应该是根本没有开始转换
0
回复
clipper
LV.3
6
2006-06-29 19:09
@dyuan
unsignedchar类型数据能大于0x200吗?
肯定不能,这里肯定是错了,某些人还不承认,没意思
看到问题也不想说了
0
回复
2006-07-04 11:18
@clipper
肯定不能,这里肯定是错了,某些人还不承认,没意思看到问题也不想说了
现在搞清楚了,是延时的问题. while(  (ADCON & 0x8) )这句改成一个用定时器延时51微秒的程序就可以了.奇怪,在keil c里面仿真这两句都是延时51秒啊,哪位知道为什么啊?
0
回复