专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

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

作者:佚名   来源:本站原创   点击数:  更新时间:2010年05月21日   【字体:

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

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的转换和数字传输频率。

转自:http://blog.ednchina.com/wangchangyun/77054/message.aspx 

关闭窗口

相关文章