?? adc0834code.txt
字號:
ADC0832-2應用程序-ADC0832,C語言,KEIL C,51單片機基礎知識C語言
//==============================================================================
//2005-03-28...2005-03-29
//ADC0834模塊的C51程序源文件
//File Name=ADC083X.c
//==============================================================================
#include
#include "DELAY_S.h"
#include "ADC083X.h"
//外部全局變量的預定義
//*******************************************************
//序號:
// HD_ADC083X_S01
//功能:
// 端口初始化
//輸入:
// 無
//輸出:
// 無
//********************************************************
void adc083x_init(void)
{
SET_ADC083X_CS; //不選片
SET_ADC083X_DO; //默認是高
CLR_ADC083X_CLK; // 時鐘默認是低
#if TYPE_VAL >=ADC0832
SET_ADC083X_DI;
#endif
#if TYPE_VAL >=ADC0834
SET_ADC083X_SARS;
#endif
}
//*******************************************************
//序號:
// HD_ADC083X_S02
//功能:
// 讀出AD數據字節
//輸入:
// chanel 通道號以及單、雙端設置選擇,它的值被類型值限制!
// 即有效值是select分別取最低4、3、2位或不使用
// 具體的值參見pdf文檔!
//輸出:
// AD轉換的結果字節
//********************************************************
親愛的:CHANEL(通過CHANEL的值的2.1.0三位組合選擇模擬通道1/2/3/4)數值代表選擇轉換的通道哦
uchar adc083x_do_one_change(uchar chanel)
{
uchar data ad_val;
uchar data i;
//轉換前的初始化
SET_ADC083X_CS;
CLR_ADC083X_CLK;
SET_ADC083X_DO;
CLR_ADC083X_CS;
//SARS引腳非必要時可以不使用,以節省引腳資源!
#if (TYPE_VAL==ADC0838)
//chanel_.3.2.1.0=0000 通道0+_通道1-,=001 通道2+_通道3-,(雙端方式)
親愛的(TYPE_VAL==ADC0838)表示片子是ADC0838的,8個通道(chanel的后四位選擇通道 包括單端方式,就是輸入電壓一個接地一個接CHANEL模擬輸入通道哦)差分方式就是兩端分別接通道如CH1和CH2通過輸入端的電壓差來作為輸入電壓信號,等待芯片的轉換。
// SGL(單端)/DIF差分 ODD/SIGN SELECT SELECT =0010 通道4+_通道5-,=011 通道6+_通道7-,(雙端方式)
// =0100 通道0-_通道1+, =0101 通道2-_通道3+,(雙端方式)
// =0110 通道4-_通道5+,=0111 通道6-_通道7+,(雙端方式)
// =1000 通道0+, =1001 通道2+,(單端方式)
// =1010 通道4+, =1011 通道6+,(單端方式)
// =1100 通道1+, =1101 通道3+,(單端方式)
// =1110 通道5+, =1111 通道7+,(單端方式)
//引腳/SE可以接地,不使用其控制反響字節的輸出延時功能!
chanel |=0x10; //附加起始位
for(i=0; i<5; i++)
{
if( (chanel &0x10)!=0)
{
SET_ADC083X_DI;
}
else
{
CLR_ADC083X_DI;
}
SET_ADC083X_CLK;
CLR_ADC083X_CLK;
chanel <<=1;
}
#elif
(TYPE_VAL==ADC0834)//chanel_.2 .1.0 =000 通道0+_通道1-,=001 通道3-,(雙端方式)
// SGL/DIF ODD/SIGN SELECT=010 通道0-_通道1+, =011 通道2-_通道3+,(雙端方式)
// =100 通道0+, =101 通道2+,(單端方式)
// =110 通道1+, =111 通道3+,(單端方式)
親愛的(TYPE_VAL==ADC0838)表示片子是ADC0838的,8個通道(chanel的后四位選擇通道 包括單端方式,就是輸入電壓一個接地一個接CHANEL模擬輸入通道哦)差分方式就是兩端分別接通道如CH1和CH2通過輸入端的電壓差來作為輸入電壓信號,等待芯片的轉換。
選擇通道:
chanel=4//通道0+(單端方式)
chanel=5//通道1+(單端方式)
chanel=6//通道2+(單端方式)
chanel=7//通道3+(單端方式)
chanel |=0x08; //附加起始位
for(i=0; i<4; i++)
{
if( (chanel &0x08)!=0) //如果第四位是1
{
SET_ADC083X_DI; //DI=1就是如果第四位為1就傳1如果是0就傳0。然后左移位,把要發的數據都移位到第四位上發出。
}
else
{
CLR_ADC083X_DI;
}
SET_ADC083X_CLK; //時鐘=1 數據傳到DI 線上
CLR_ADC083X_CLK; //時鐘=0 ADC0834保存DI得到的數據
chanel <<=1; //發完一位,左移一位發下面的位
}
//以下是ADC0832的通道命令傳輸,與我們,沒有關系哦
#elif (TYPE_VAL==ADC0832)
//chanel_.1.0=00 通道0+_通道1-, =01 通道0-_通道1+,(雙端方式)
// SGL/DIF ODD/SIGN =10 通道0+, =11 通道1+, (單端方式)
chanel |=0x04; //附加起始位
for(i=0; i<3; i++)
{
if( (chanel &0x04)!=0)
{
SET_ADC083X_DI;
}
else
{
CLR_ADC083X_DI;
}
SET_ADC083X_CLK;
CLR_ADC083X_CLK;
chanel <<=1;
}
#else //缺省時為ADC0831
SET_ADC083X_CLK;
CLR_ADC083X_CLK;
#endif
SPI總線是通過兩個單向線DI和DO線和AD0834等芯片進行通信哦,DI是單片機向AD0834輸出控制信號(單片機先要告訴AD0834現在要轉換的是哪個通道,是單端還是差分輸入,DI傳輸必須以一個“1“作為起始位,必須使CHANEL第四位為1,所以chanel |=0x08;//附加起始位其余三位2,1,0位代表SGL/DIF ,ODD/SIGN ,SELECT = 010)然后就把這4位以先傳第四位然后第三位,這樣4次傳完。選擇通道和方式(單端方式/差分方式),ADC0832就知道了需要把你想要轉換的通道數據轉換并開始從DO口一位一位的數據傳輸,因為是8位的數據輸出,(ADC0838是12位的,所以需要指出是先傳8位還是先傳4位/SE來決定先傳12位還是先傳4位)而ADC0834不用這一位控制。所以時序就是單片機傳CHANEL命令給ADC0834,然后單片機就可以通過時鐘和DO來進行8次移位操作來接收數據,然后保存在ad_val中,供單片機調用,要查詢兩個通道可以通過分別輸入輸入不同的CHANEL命令來進行操作)
//親愛的念兒,命令傳完了,轉換就開始了,并且開始從DO口輸出數據了,ADC0834在CLK高電瓶的時候,把數據傳到DO線上,然后SCLK低電平時單片機保存存在緩沖區的數據哦,并且允許DO線上的數據變化;下面的程序單片機通過SPI總線在從這兒開始要接收數據了哦,
SET_ADC083X_CLK; //數據接收前的轉換位
CLR_ADC083X_CLK; //CLK總在開始為低
for(ad_val=0, i=0; i<8; i++)
{
ad_val <<=1; //
SET_ADC083X_CLK;
ad_val +=(JUDGE_ADC083X_DO ==1? 1:0);//如果數據收到的數據為1,那么返回值ad_val加1然后右移一位,如果為0加0右伊,不斷在低位加1,首先接收到的是最高位MSB哦最后得到的是最低位LSB哦
CLR_ADC083X_CLK; //低電平用許數據變化
}
//對非ADC0831的型號而言,后續波形沒有使用!
SET_ADC083X_CS;
return(ad_val);
}
//=============================================================================
//End Of File
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -