📄 ads7841.c
字号:
#include <Reg52.h>
#include <Intrins.h>
#include <AbsAcc.h>
#include "meter.h"
/*
uint ADS7841_READ(uchar CH)
{
uchar i, dt;
uint AD_RESULT=0;
CS7841=0; // 芯片允许
_nop_();
SCK=0;
SDI=0;
dt=CH;
i=0;
while(i<8) //写入8位控制字
{
if(dt>=0x80)
SDI=1; //时钟上升沿锁存SDI
else
SDI=0;
_nop_();
SCK=1; //开始发送命令字
_nop_();
dt<<=1;
SCK=0; //时钟脉冲,一共24个
i++;
}
//等待转换完成(20us)
for(i=0;i<20;i++) { _nop_(); }
SCK=1;
i=0;
while(i<12) //读取12位AD转换值
{
AD_RESULT<<=1; _nop_();
SCK=0;
if(SDO)
AD_RESULT|=0x0001; //用时钟的下降沿读取
if(i==7) { _nop_(); _nop_(); }
SCK=1;
i++;
}
i=0;
while(i<4) //滤掉多余的4个时钟
{
_nop_();
SCK=0; _nop_();
SCK=1;
i++;
}
SDI=1;
CS7841=1; //禁止芯片
AD_RESULT&=0x0fff; //屏蔽高4 bit
return AD_RESULT;
}
*/
uint ADS7841_READ(uchar CH)
{
uchar i;
uchar dt;
uint AD_RESULT=0;
SCK=0;
SDI=0;
CS7841=0; // 芯片允许
_nop_();
dt=CH;
i=0;
while(i<8) //写入8位控制字
{
if(dt>=0x80) SDI=1; //时钟上升沿锁存SDI
else SDI=0;
SCK=1; //开始发送命令字
SCK=0; //时钟脉冲,一共24个
dt<<=1;
i++;
}
SDI=0;
//等待转换完成(20us)
for(i=0;i<20;i++) { _nop_(); }
i=0;
SCK=1;
while(i<12) //读取12位AD转换值
{
AD_RESULT<<=1;
SCK=0;
if(SDO) AD_RESULT|=0x0001; //用时钟的下降沿读取
if(i==7) { _nop_(); _nop_(); }
_nop_();
SCK=1;
i++;
}
i=0;
while(i<4) //滤掉多余的4个时钟
{
SCK=0;
SCK=1;
i++;
}
SCK=0;
CS7841=1; //禁止芯片
AD_RESULT&=0x0fff; //屏蔽高4 bit
return AD_RESULT;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -