📄 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 + -