打印

ADC0838驱动程序请指正!!

[复制链接]
2031|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
njgxy|  楼主 | 2011-8-7 20:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我编写了ADC0838的驱动程序,用protues仿真,但仿真结果不正确,我不知道问题出在哪里,请朋友们指点,必谢!以下是驱动程序:
sbit AD8_CS=    P2^1;
sbit AD8_DI_DO =P2^2;
sbit AD8_CLK =  P2^0;
sbit AD8_INPUT =P2^3;

unsigned char AD(unsigned char addr)
{
unsigned char ke,num=0x10,MUX=0x18,count,dat=0;
//根据通道号产生配置字
   switch (addr)
  {
    case 0:{MUX=0X18;break;}
    case 1:{MUX=0x1c;break;}
    case 2:{MUX=0X19;break;}
    case 3:{MUX=0x1d;break;}
    case 4:{MUX=0X1a;break;}
    case 5:{MUX=0x1e;break;}
    case 6:{MUX=0x1b;break;}
    case 7:{MUX=0x1f;break;}  
  }
//产生配置字后启动(即初始化)AD转换
  AD8_CLK=0; _nop_(); _nop_();
  AD8_CS=1; _nop_(); _nop_();
  AD8_CS=0;_nop_(); _nop_();
//输入配置,在CLK上升沿接收配置
for(count=4;count>=0;count--)
  {
    AD8_CLK=0;_nop_();
    ke=pow2(count);
    if(ke&MUX)
      {AD8_DI_DO=1;b=1;}//b供测试用
    else
      {AD8_DI_DO=0;b=0;}
    _nop_();
    AD8_CLK=1;
   _nop_();_nop_();
  }   
//产生一个空的脉冲,配置完后隔一个空脉冲AD转换器在CLK下降沿输出数据
   AD8_CLK=0;
   _nop_();_nop_();
   AD8_CLK=1;
   _nop_();_nop_();
//在CLK下降沿接收AD转换器的输出, 移位7次
    for(count=0;count<7;count++)
   {
       AD8_CLK=0;
       _nop_();_nop_();
        if(AD8_INPUT)      
           {
             dat=dat+1;dat=dat*2;b=1;//b为调试测试用
           }      
        else
           { dat=(dat*2);b=0;}
       _nop_();_nop_();
       AD8_CLK=1;  
       _nop_();_nop_();
    }
    AD8_CLK=0;
    if(AD8_INPUT) dat=dat+1;//转换的最后一位
    _nop_();_nop_();
    AD8_CS=1;
    _nop_();
  return dat;//返回转换结果
}
//上面的驱动程序我调试了N次了,弄得快吐血了还是找不到错误,不知是不是protues硬件电路有错误?硬件电路如下:

相关帖子

沙发
njgxy|  楼主 | 2011-8-7 20:06 | 只看该作者
本人Email: vcwlw@163.com, qq:544265359, 请朋友们指点,不胜感激!必谢!!!

使用特权

评论回复
板凳
njgxy|  楼主 | 2011-8-9 15:03 | 只看该作者
等待回复,请朋友们一定帮忙呀!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

4

帖子

1

粉丝