📄 cs5460.c
字号:
//-------------存在的问题------------------------------------------
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//以下是cs5460的管脚定义:
sbit reset_5460=P1^0;
sbit sdo_5460=P1^1;
sbit sclk_5460=P1^2;
sbit sdi_5460=P1^3;
long buf_rd[3]={0,0,0};
//以下是cs5460的函数声明
void cmd_5460(uchar cmd);
long read_5460(void);
void delay_nms(uint n);
void main(void)
{
char k;
cmd_5460(0xff);
cmd_5460(0xff);
cmd_5460(0xff);
cmd_5460(0xfe);//以上四条命令的功能:初始化5460的串口
cmd_5460(0xe8);//启动5460的连续转换
delay_nms(5000);
//cmd_5460(0x0e);//读取瞬时电流寄存器
k=0;
while(k<3)
{
cmd_5460(0x0e);//读取瞬时电流寄存器
//注意:每次读取AD前都要先写入上述命令
//因为读操作完成之后,5460的串口恢复
//到命令模式。
buf_rd[k]=read_5460();
delay_nms(1000);
k++;
}
//read_5460();
_nop_();
}
/*************************************************
原型:void cmd_5460(uchar cmd)
行参:uchar cmd
返回值:无
功能:向cs5460中写入8位的命令
*************************************************/
void cmd_5460(uchar cmd)
{
char i=8;
while(i>0)
{
sclk_5460=0;
if(cmd>=0x80)
sdi_5460=1;
else
sdi_5460=0;
sclk_5460=1;
i--;
cmd<<=1;
}
}
/******************************
原型:void delay_nms(uint n)
行参:uint n
返回值:无
功能:延时n ms
*****************************/
void delay_nms(uint n)
{
uchar i;
for(;n>0;n--)
{
for(i=125;i>0;i--)
{
;
}
}
}
/******************************
原型:long read_5460(void)
行参:无
返回值:返回一个long型数据
功能:从5460中读取24位的AD数据。仅仅是读数据,
并没有包含串口的初始化和相关的命令
注意:读操作的时序,很古怪,应注意!
*****************************/
long read_5460(void)
{
char i;
char j=0;
long temp;
temp=0;
while(j<3)
{
i=7;
sdi_5460=1;
while(i>0)
{
sclk_5460=0;
temp<<=1;
sclk_5460=1;
_nop_();
if(sdo_5460==1)
temp|=0x00000001;
i--;
}
sdi_5460=0;
sclk_5460=0;
temp<<=1;
sclk_5460=1;
_nop_();
if(sdo_5460==1)
temp|=0x00000001;
j++;
}
return(temp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -