新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MAX5307程序調試中遇到的時鐘問題

        MAX5307程序調試中遇到的時鐘問題

        作者: 時間:2012-10-27 來源:網絡 收藏

        調試了好久終于調試出來了啊,原來罪魁禍首竟然是一個時鐘的問題:

        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;i16;i++)
        {
        DA_DIN=(bit)(p_up0x8000);//取最高位傳送
        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;i16;i++)
        {
        DA_DIN=(bit)(dandc0x8000);//取最高位傳送
        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=xt;//用1選中要進行轉換的通道.
        y=0xe000;//啟動轉換的命令
        y=y|x;
        EN138=1;
        A138=0;
        B138=0;
        //DA_CLK=1;//由于在下降沿輸出,故先拉高
        delay(10);
        for(i=0;i16;i++)
        {
        DA_DIN=(bit)(y0x8000);//取最高位傳送
        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;i16;i++)
        {
        DA_DIN=(bit)(p_up0x8000);//取最高位傳送
        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;i16;i++)
        {
        DA_DIN=(bit)(dandc0x8000);//取最高位傳送
        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=xt;//用1選中要進行轉換的通道.
        y=0xe000;//啟動轉換的命令
        y=y|x;
        EN138=1;
        A138=0;
        B138=0;
        DA_CLK=1;//由于在下降沿輸出,故先拉高
        delay(10);
        for(i=0;i16;i++)
        {
        DA_DIN=(bit)(y0x8000);//取最高位傳送
        DA_CLK=0;
        delay(10);
        DA_CLK=1;
        delay(10);
        y=1;
        }
        delay(10);
        EN138=1;
        A138=1;
        B138=1;
        }

        兩個程序中綠色的部分為不一樣的地方,其實也就是時鐘的下降沿的時間有沒有延時的問題,由于DA轉換和單片機部分用了光藕隔離所以才會出現這種需要延時的情況,如果沒有隔離的話,完全可以不用延時,因為的最高可以達到15MHZ的轉換和數字傳輸頻率。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 无为县| 新闻| 辽中县| 沁阳市| 金华市| 松潘县| 安徽省| 金堂县| 文安县| 准格尔旗| 科技| 密云县| 涡阳县| 江口县| 司法| 正宁县| 井研县| 松潘县| 衡东县| 安远县| 永修县| 舟山市| 门头沟区| 泾阳县| 平舆县| 扬中市| 顺义区| 东兰县| 阿巴嘎旗| 特克斯县| 贵阳市| 兴城市| 辉县市| 历史| 武宁县| 安龙县| 阿瓦提县| 巩义市| 新宁县| 永州市| 临桂县|