關(guān)于A/D轉(zhuǎn)換的方法!
在單片機程序中,經(jīng)常要把探測到的電壓和電流數(shù)值轉(zhuǎn)化成程序能讀得懂的數(shù)值,我在samsung的資料上找了個遍,就是找不到,可能是我眼睛太差了,我現(xiàn)在急著要用,希望哪位能人能將其方法傳上來,不管是samsung 的還是51系列的,資料也可以!小弟在此謝謝了!
全部回復(18)
正序查看
倒序查看
采用外接ADS7804轉(zhuǎn)換芯片的程序,具體到你的應用中可以自己適當調(diào)整.電路接線參考芯片說明,還有晶振選用12M的
# include
# include
# define N 128 /*定采樣長度,如128點*/
sbit BYTE=F1^0;
sbit RC=P1^1;
sbit BUSY=P1^2; /*定義特殊位*/
int XDATA array(N); /*在外部存儲器內(nèi)定義長度為N的有符號整數(shù)數(shù)組*/
int ADS7804(void)
{ uint ul,uh;int u;
RC=0; /*R/C低電平,進入轉(zhuǎn)換模式*/
ul=XBYTE[0xffff]; /*產(chǎn)生讀脈沖,啟動A/D轉(zhuǎn)換*/
while (BUSY= =0); /*等待轉(zhuǎn)換完成*/
RC=1;BYTE=0; /*進入讀模式,選擇低字節(jié)*/
ul=XBYTE[0xffff]; /*讀轉(zhuǎn)換結(jié)果低8位*/
BYTE=1; /*選擇高字節(jié)*/
uh=XBYTE[0xffff]&0x0f;/*讀轉(zhuǎn)換結(jié)果高4位*/
u=uh*256+ul; /*得到12位轉(zhuǎn)換結(jié)果*/
if(u>=0x0800)
u=u 0xf000; /*如果為負值,則符號擴展*/
return(u); /*返回轉(zhuǎn)換結(jié)果*/
}
uoid DAQ(uint interval)
{ uchar th,tl;
interval=interval-5;/*減去TF0清零和裝載計數(shù)初值的時間5μs*/
th=255-(interval/256);
tl=255-(interval%256); /*計算計數(shù)初值*/
TMOD=0x01; /*定時器0,方式1 */
TH0=th; TL0=tl;/*裝載計數(shù)初值*/
TR0=1;/*啟動定時*/
for(I=0;i{ do{}whilt(!TF0);/*查詢等待TF0復位*/
TF0=0; /*清溢出標志*/
TH0=th;TL0=tl; /*裝載計數(shù)初值*/
Array[i]=ADS7804(); /*采樣、存儲*/
}
TR0=0; /*停止定時*/
}
# include
# include
# define N 128 /*定采樣長度,如128點*/
sbit BYTE=F1^0;
sbit RC=P1^1;
sbit BUSY=P1^2; /*定義特殊位*/
int XDATA array(N); /*在外部存儲器內(nèi)定義長度為N的有符號整數(shù)數(shù)組*/
int ADS7804(void)
{ uint ul,uh;int u;
RC=0; /*R/C低電平,進入轉(zhuǎn)換模式*/
ul=XBYTE[0xffff]; /*產(chǎn)生讀脈沖,啟動A/D轉(zhuǎn)換*/
while (BUSY= =0); /*等待轉(zhuǎn)換完成*/
RC=1;BYTE=0; /*進入讀模式,選擇低字節(jié)*/
ul=XBYTE[0xffff]; /*讀轉(zhuǎn)換結(jié)果低8位*/
BYTE=1; /*選擇高字節(jié)*/
uh=XBYTE[0xffff]&0x0f;/*讀轉(zhuǎn)換結(jié)果高4位*/
u=uh*256+ul; /*得到12位轉(zhuǎn)換結(jié)果*/
if(u>=0x0800)
u=u 0xf000; /*如果為負值,則符號擴展*/
return(u); /*返回轉(zhuǎn)換結(jié)果*/
}
uoid DAQ(uint interval)
{ uchar th,tl;
interval=interval-5;/*減去TF0清零和裝載計數(shù)初值的時間5μs*/
th=255-(interval/256);
tl=255-(interval%256); /*計算計數(shù)初值*/
TMOD=0x01; /*定時器0,方式1 */
TH0=th; TL0=tl;/*裝載計數(shù)初值*/
TR0=1;/*啟動定時*/
for(I=0;i
TF0=0; /*清溢出標志*/
TH0=th;TL0=tl; /*裝載計數(shù)初值*/
Array[i]=ADS7804(); /*采樣、存儲*/
}
TR0=0; /*停止定時*/
}
0
回復