調(diào)試了好久終于調(diào)試出來(lái)了啊,原來(lái)罪魁禍?zhǔn)拙谷皇且粋€(gè)時(shí)鐘的問(wèn)題:
DAC0(uchar t)
{ uchar i;
uint x,y;//控制轉(zhuǎn)換的命令字節(jié)
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端拉高,準(zhǔn)備下次的數(shù)據(jù)輸入.
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端拉高,準(zhǔn)備下次的數(shù)據(jù)輸入.
A138=1;
B138=1;
delay(5);
//**********************以上部分僅僅完成了數(shù)據(jù)的傳送
x=0x0010;
x=x<<t;//用1選中要進(jìn)行轉(zhuǎn)換的通道.
y=0xe000;//啟動(dòng)轉(zhuǎn)換的命令
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;
} 以上為正確的程序,嘔心瀝血啊。有看的就要回貼啊,哪怕是罵兩句。
下面把錯(cuò)誤的程序也貼出來(lái),以供參考學(xué)習(xí):
DAC0(uchar t)
{ uchar i;
uint x,y;//控制轉(zhuǎn)換的命令字節(jié)
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端拉高,準(zhǔn)備下次的數(shù)據(jù)輸入.
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端拉高,準(zhǔn)備下次的數(shù)據(jù)輸入.
A138=1;
B138=1;
delay(5);
//**********************以上部分僅僅完成了數(shù)據(jù)的傳送
x=0x0010;
x=x<<t;//用1選中要進(jìn)行轉(zhuǎn)換的通道.
y=0xe000;//啟動(dòng)轉(zhuǎn)換的命令
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;
}
兩個(gè)程序中綠色的部分為不一樣的地方,其實(shí)也就是時(shí)鐘的下降沿的時(shí)間有沒(méi)有延時(shí)的問(wèn)題,由于DA轉(zhuǎn)換和單片機(jī)部分用了光藕隔離所以才會(huì)出現(xiàn)這種需要延時(shí)的情況,如果沒(méi)有隔離的話,完全可以不用延時(shí),因?yàn)镸AX5307的最高可以達(dá)到15MHZ的轉(zhuǎn)換和數(shù)字傳輸頻率。
轉(zhuǎn)自:http://blog.ednchina.com/wangchangyun/77054/message.aspx