ADS7804 AD轉(zhuǎn)換程序
#include
#includeCC.h>
#defineuintunsignedint
#defineucharunsignedchar
#defineN128/*定采樣長度,如128點(diǎn)*/
sbitBYTE=P1^0;
sbitRC=P1^1;
sbitBUSY=P1^2;/*定義特殊位*/
intxdataarray[128];/*在外部存儲器內(nèi)定義長度為N的有符號整數(shù)數(shù)*/
intADS7804(void);
intADS7804(void)
{
uintul,uh;intu;
RC=0;/*低電平,進(jìn)入轉(zhuǎn)換模式*/
ul=XBYTE[0xffff];/*產(chǎn)生讀脈沖,啟動A/D轉(zhuǎn)換*/
while(BUSY==0);/*等待轉(zhuǎn)換完成*/
RC=1;BYTE=0;/*進(jìn)入讀模式,選擇低字節(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;/*如果為負(fù)值,則符號擴(kuò)展*/
return(u);/*返回轉(zhuǎn)換結(jié)果*/
}
voidDAQ(uintinterval)
{
ucharth,tl;
uinti;
interval=interval-5;/*減去TF0清零和裝載計(jì)數(shù)初值的時(shí)間5μs*/
th=255-(interval/256);
tl=255-(interval%256);/*計(jì)算計(jì)數(shù)初值*/
TMOD=0x01;/*定時(shí)器0,方式1*/
TH0=th;TL0=tl;/*裝載計(jì)數(shù)初值*/
TR0=1;/*啟動定時(shí)*/
for(i=0;i
do{}while(!TF0);/*查詢等待TF0復(fù)位*/
TF0=0;/*清溢出標(biāo)志*/
TH0=th;TL0=tl;/*裝載計(jì)數(shù)初值*/
array[i]=ADS7804();/*采樣、存儲*/
}
TR0=0;/*停止定時(shí)*/
}