下面是基于STC系列單片機的TLV5618驅動程序,該程序的硬件是基于5V供電的,參考電壓為2.5V,編譯環境為KEIL C,已調試成功。
- //=====================================================================
- // TLV5618 DA轉換驅動程序
- //硬件連接: DIN ——P0^0;
- // SCLK ——P0^1;
- // CS ——P0^2;
- // VDD --邏輯電源(+5V)
- // AGND --GND(0V)
- //說明 參考電壓為0—3.5V,本程序為2.5V
- // 輸出模擬電壓為:V=2*Vref*(dignum/0x1000) 注:dignum后四位為:0x0000~~0x0fff
- //注意: 所需輸入的數字信號值為16位數,其中D15~~D12為特殊位設置,D11~~D0為數據位000~~fff
- #include <STC89C51RC.h> //STC單片機頭文件
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define Channal_A 1 //通道A
- #define Channal_B 2 //通道B
- #define Channal_AB 3 //通道A&B
- //**************************一下為函數聲明修**************************************
- static void DA_conver(uint Dignum);
- extern void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model);
- //**************************修改硬件時要修改的部分********************************
- sbit DIN = P0^0; //數據輸入端
- sbit SCLK = P0^1; //時鐘信號
- sbit CS = P0^2; //片選輸入端,低電平有效
- //=================================================================
- // 函數名稱 :void DA_conver(uint Dignum)
- // 函數功能 :進行DA轉換
- // 入口參數 :Dignum:根據說明設置轉化數據.頭四位為特殊位用于選擇轉化方式,
- // 以及用于通道選擇.請自行設置.后12位為需要轉換的值
- // 出口參數 :無
- //=================================================================
- void DA_conver(uint Dignum)
- {
- uint Dig=0;
- uchar i=0;
- SCLK=1;
- CS=0; //片選有效
- for(i=0;i<16;i++) //寫入16為Bit的控制位和數據
- {
- Dig=Dignum&0x8000;
- if(Dig)
- {
- DIN=1;
- }
- else
- {
- DIN=0;
- }
- SCLK=0;
- _nop_();
- Dignum<<=1;
- SCLK=1;
- _nop_();
- }
- SCLK=1;
- CS=1; //片選無效
- }
- //=================================================================
- // 函數名稱 :void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model)
- // 函數功能 :模式、通道選擇并進行DA轉換
- // 入口參數 :Data_A:A通道轉換的電壓值
- // Data_B:B通道轉換的電壓值
- // Channal:通道選擇,其值為Channal_A,Channal_B,或Channal_AB
- // Model:速度控制位 0:slow mode 1:fast mode
- // 出口參數 :無
- // 說明: Data_A,Data_B的范圍為:0—0x0fff
- // 本程序如果只需要一個通道時,另外一個通道的值可任意,但是不能缺省
- //=================================================================
- void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model)
- {
- uint Temp;
- if(Model)
- {
- Temp=0x4000;
- }
- else
- {
- Temp=0x0000;
- }
- switch(Channal)
- {
- case Channal_A: //A通道
- DA_conver(Temp|0x8000|(0x0fff&Data_A));
- break;
- case Channal_B: //B通道
- DA_conver(Temp|0x0000|(0x0fff&Data_B));
- break;
- case Channal_AB:
- DA_conver(Temp|0x1000|(0x0fff&Data_B)); //A&B通道
- DA_conver(Temp|0x8000|(0x0fff&Data_A));
- break;
- default:
- break;
- }
- }
- //=================================================================
- // 函數名稱 :int main(void)
- // 函數功能 :主函數,無實際意義,僅測試TLV5618用
- // 入口參數 :無 1-A;2-B;3-A&B
- // 出口參數 :無
- //=================================================================
- int main(void)
- {
- Write_A_B(0x0355,0x0000,Channal_A,0); //測量A通道
- Write_A_B(0x0000,0x0600,Channal_B,1); //測量B通道
- // Write_A_B(0x0504,0x0a47,Channal_AB,1); //測量AB通道,測量時需屏蔽上面兩句
- while(1);
- }
復制代碼
|