⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tlv2544.c

📁 四路串行模数转换IC--TLV2544的接口驱动源代码
💻 C
字号:

//************* Input data format ******************************

// 4bit Command:
//D15 D14 D13 D12
// 0000=CH0;0010=CH1;00100=CH2;0110=CH3.
// 1000=SW power down;1001=Read CFR SDO D(11-0)
// 1010=wr 12bit data; example 0xa100.

//12bit CFR:
// D11 | D10 | D9 | D8 | D7 | D6 | D5 | D4 | D3 |D2 |D1 | D0
// D11 Ref 选择 D11=0 外部; D11=1 内部
// D10 定义内部 Vref. D10 =0 Vref = 4v; D10=1 Vref = 2v.
// D9  Sample period select =0 12sclks; =1 24sclks;
// D8D7 conversion clock sourse select.
//      00=internal OSC; 01=SCLK; 10=SCLK/4; 11=SCLK/2
// D6D5 conversion mode select. 
//      00=single shot(FIFO D1D0 no effect);01=repeat;10=sweep;11=repeat+sweep
// D4D3 Sweep auto sequence select
// D2   EOC/int Pin select 0=INT; 1=EOC
// D1D0 FIFI.. length
//**********************************************************************

#include <Reg52.h>
#include <Intrins.h>
#include <AbsAcc.h>

#include "Function.h"

uint Tlv2544_rb(uchar ch)
{
    uchar i;
    uint AD_RESULT=0;
       
    CS_2544 = 0;                   // 芯片允许
    SCLK = 0;
       
    i=4;
    do
    {
        if(ch>=0x80) 
              SDI=1;	            //时钟上升沿锁存SDI
        else  
              SDI=0;
        ch<<=1;	
        AD_RESULT<<=1;
        if(SDO) 
              AD_RESULT|=0x0001;
        SCLK = 1;
        SCLK = 0;
    }while(--i);
       
    i=8;                            //开始读取12bit结果
    do
    {
        AD_RESULT<<=1;
        if(SDO) 
            AD_RESULT|=0x0001;      //用时钟的上升沿读取
        SCLK = 1;
          
        SCLK = 0;           
    }while(--i);

    i=4;                            //开始读取12bit结果
    do
    {
        SCLK = 1;
          
        SCLK = 0;           
    }while(--i);
      
    SCLK = 1;                                    
    CS_2544 = 1;  
    AD_RESULT&=0xfff;  
    
    return AD_RESULT;                        
}


//---------------- 向Tlv2544写16bit数据 -----------------------
void Tlv2544_wb ( uint C_dat )
{
    uchar i;
       
    CS_2544 = 0; 
    SCLK=0;
    for(i=0;i<16;i++)
    {
        if(C_dat>=0x8000) 
             SDI=1;	       //时钟上升沿锁存SDI
        else         
             SDI=0;	
        SCLK = 1;                            //开始发送命令字
        SCLK = 0;                           //时钟脉冲,一共16个
        C_dat<<=1;
    }
    SCLK = 1;                
    CS_2544 = 1; 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -