ADS7804 AD轉換程序
#include
#includeCC.h>
#defineuintunsignedint
#defineucharunsignedchar
#defineN128/*定采樣長度,如128點*/
sbitBYTE=P1^0;
sbitRC=P1^1;
sbitBUSY=P1^2;/*定義特殊位*/
intxdataarray[128];/*在外部存儲器內定義長度為N的有符號整數(shù)數(shù)*/
intADS7804(void);
intADS7804(void)
{
uintul,uh;intu;
RC=0;/*低電平,進入轉換模式*/
ul=XBYTE[0xffff];/*產生讀脈沖,啟動A/D轉換*/
while(BUSY==0);/*等待轉換完成*/
RC=1;BYTE=0;/*進入讀模式,選擇低字節(jié)*/
ul=XBYTE[0xffff];/*讀轉換結果低8位*/
BYTE=1;/*選擇高字節(jié)*/
uh=XBYTE[0xffff]&0x0f;/*讀轉換結果高4位*/
u=uh*256+ul;/*得到12位轉換結果*/
if(u>=0x0800)
u=u|0xf000;/*如果為負值,則符號擴展*/
return(u);/*返回轉換結果*/
}
voidDAQ(uintinterval)
{
ucharth,tl;
uinti;
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{}while(!TF0);/*查詢等待TF0復位*/
TF0=0;/*清溢出標志*/
TH0=th;TL0=tl;/*裝載計數(shù)初值*/
array[i]=ADS7804();/*采樣、存儲*/
}
TR0=0;/*停止定時*/
}