MAX5307程序调试中遇到的时钟问题

调试了好久终于调试出来了啊,原来罪魁祸首竟然是一个时钟的问题:

 DAC0(uchar t)
 { uchar i;
   uint x,y;//控制转换的命令字节
   uint p_up;
   p_up=0xffff;
   EN138=1;
   A138=0;
   B138=0;
   //DA_CLK=1;//由于在下降沿输出,故先拉高
   delay(5);
   for(i=0;i<16;i++)
   {
   DA_DIN=(bit)(p_up&0x8000);//取最高位传送
   DA_CLK=1;
   delay(10);  
   DA_CLK=0;
   delay(10);
   p_up<<=1;
   }
   EN138=1;//将5307的CS端拉高,准备下次的数据输入.
   A138=1;
   B138=1;
   delay(10);
//********************************************以上将全部DA使能输出
   EN138=1;
   A138=0;
   B138=0;
   //DA_CLK=1;//由于在下降沿输出,故先拉高
   delay(5);
   for(i=0;i<16;i++)
   {
   DA_DIN=(bit)(dandc&0x8000);//取最高位传送
   DA_CLK=1;
   delay(10);  
   DA_CLK=0;
   delay(10);
   dandc<<=1;
   }
   EN138=1;//将5307的CS端拉高,准备下次的数据输入.
   A138=1;
   B138=1;
   delay(5);
  
   //**********************以上部分仅仅完成了数据的传送
 x=0x0010;
 x=x<<t;//用1选中要进行转换的通道.
 y=0xe000;//启动转换的命令
 y=y|x;
 EN138=1;
 A138=0;
    B138=0;
    //DA_CLK=1;//由于在下降沿输出,故先拉高
 delay(10);
   for(i=0;i<16;i++)
   {
   DA_DIN=(bit)(y&0x8000);//取最高位传送
   DA_CLK=1;
   delay(10);  
   DA_CLK=0;
   delay(10);
   y<<=1;
   }
   delay(10);
   EN138=1;
   A138=1;
   B138=1; 
 }   

以上为正确的程序,呕心沥血啊。有看的就要回贴啊,哪怕是骂两句。

下面把错误的程序也贴出来,以供参考学习:

 DAC0(uchar t)
 { uchar i;
   uint x,y;//控制转换的命令字节
   uint p_up;
   p_up=0xffff;
   EN138=1;
   A138=0;
   B138=0;
   DA_CLK=1;//由于在下降沿输出,故先拉高
   delay(5);
   for(i=0;i<16;i++)
   {
   DA_DIN=(bit)(p_up&0x8000);//取最高位传送
   DA_CLK=0;
   delay(10);  
   DA_CLK=1;
   delay(10);
   p_up<<=1;
   }
   EN138=1;//将5307的CS端拉高,准备下次的数据输入.
   A138=1;
   B138=1;
   delay(10);
//********************************************以上将全部DA使能输出
   EN138=1;
   A138=0;
   B138=0;
   DA_CLK=1;//由于在下降沿输出,故先拉高
   delay(5);
   for(i=0;i<16;i++)
   {
   DA_DIN=(bit)(dandc&0x8000);//取最高位传送
   DA_CLK=0;
   delay(10);  
   DA_CLK=1;
   delay(10);
   dandc<<=1;
   }
   EN138=1;//将5307的CS端拉高,准备下次的数据输入.
   A138=1;
   B138=1;
   delay(5);
  
   //**********************以上部分仅仅完成了数据的传送
 x=0x0010;
 x=x<<t;//用1选中要进行转换的通道.
 y=0xe000;//启动转换的命令
 y=y|x;
 EN138=1;
 A138=0;
    B138=0;
    DA_CLK=1;//由于在下降沿输出,故先拉高
 delay(10);
   for(i=0;i<16;i++)
   {
   DA_DIN=(bit)(y&0x8000);//取最高位传送
   DA_CLK=0;
   delay(10);  
   DA_CLK=1;
   delay(10);
   y<<=1;
   }
   delay(10);
   EN138=1;
   A138=1;
   B138=1; 
 }  

两个程序中斜体的部分为不一样的地方,其实也就是时钟的下降沿的时间有没有延时的问题,由于DA转换和单片机部分用了光藕隔离所以才会出现这种需要延时的情况,如果没有隔离的话,完全可以不用延时,因为MAX5307的最高可以达到15MHZ的转换和数字传输频率。

永不止步步 发表于11-16 10:12 浏览65226次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:302217个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号