📄 cs5532.c.bak
字号:
/* CS5532程序
* Copyright (c) 2007 宁波柯力电气制造有限公司
* All rights reserved
* 文件名称: CS5532_C
* 文件标示: cs5532数据采样程序函数
* 摘 要: 函数及变量定义。
* 当前版本: 1.0
* 作 者: 张勇
* 完成日期: 2007年8月22日
*/
#define CS5532_C
#include "reg8252.h"
#include "intrins.h"
// Original design board
sbit CS5532_CS=P3^7;
sbit CS5532_SDI=P3^6;
sbit CS5532_SCLK=P3^5;
sbit CS5532_SDO=P3^4;
unsigned char idata Sample_buf[4];
void CS5532_Write_Byte(unsigned char dat);
void CS5532_Read_Data(unsigned char address_pt);
void CS5532_Read_Reg(unsigned char address_pt);
void CS5532_Sample(void);
void CS5532_Init(void);
void CS5532_Write_Byte(unsigned char dat)//向CS5532写一字节数据
{
unsigned char i;
CS5532_CS=0;
CS5532_SCLK=0;//时钟低
for(i=0;i<8;i++)
{
if((dat<<i)&0x80)
CS5532_SDI=1; //数据送到SPI的SDI口
else
CS5532_SDI=0;
CS5532_SCLK=1; //时钟高
_nop_();
_nop_();
_nop_();
CS5532_SCLK=0; //时钟低
_nop_();
_nop_();
_nop_();
}
}
void CS5532_Read_Data(void)
{
unsigned char i,j;
CS5532_CS=0;
CS5532_SCLK=0;//时钟低
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
CS5532_SCLK=1; //时钟高
_nop_();
_nop_();
Sample_buf[j]<<=1;
if(CS5532_SDO)
Sample_buf[j] |= 0x01; //从SDO读取数据
else
Sample_buf[j] &= 0xfe;
_nop_();
_nop_();
CS5532_SCLK=0; //时钟低
_nop_();
_nop_();
}
}
}
void CS5532_Read_Reg(unsigned char dat)
{
CS5532_Write_Byte(dat);
CS5532_Read_Data();
CS5532_CS=1;
CS5532_SDI = 0;
CS5532_SCLK = 0; //时钟低
}
void CS5532_Sample(void)
{
unsigned char i;
CS5532_CS=0; //片选使能
CS5532_SDI = 0;
CS5532_SCLK = 0; //时钟低
for(i=0;i<8;i++)
{
_nop_();
_nop_();
CS5532_SCLK = 1;
_nop_();
_nop_();
CS5532_SCLK = 0; //时钟低
}
CS5532_Read_Data();
CS5532_CS = 1; //片选使能
CS5532_SDI = 1;
}
void CS5532_Init(void)
{
unsigned char i;
//串口初始化,串行口为命令状态
CS5532_CS=0; //片选使能
reset:
for(i=0;i<15;i++)
{
CS5532_Write_Byte(0xff);//发送命令
}
CS5532_Write_Byte(0xfe);
CS5532_SDI = 1;
CS5532_CS = 1;
CS5532_SDI = 0;
CS5532_Write_Byte(0x03);////写入CS5532复位命令
CS5532_Write_Byte(0x22);
CS5532_Write_Byte(0x00);
CS5532_Write_Byte(0x00);
CS5532_Write_Byte(0x00);
CS5532_Read_Reg(0x0b);//读取配置寄存器内容
if(!(Sample_buf[0]&0x10)) //acc.4=0 复位没有完成,再来一次复位过程
{
goto reset;
}
CS5532_Write_Byte(0x03);//写配置寄存器
CS5532_Write_Byte(0x00);
CS5532_Write_Byte(0x08);
CS5532_Write_Byte(0x00);
CS5532_Write_Byte(0x00);
CS5532_Write_Byte(0x05);//写通道设置寄存器
CS5532_Write_Byte(0x29);
CS5532_Write_Byte(0x80);
CS5532_Write_Byte(0x29);
CS5532_Write_Byte(0x80);
CS5532_Write_Byte(0xc0);//启动A/D连续转换
}
/********************************************************
向AD420写数据
********************************************************/
void Write_Ad420(unsigned int dat)
{
AD420_CLOCK = 0;
AD420_DIN = 0;
AD420_LATCH = 0;
for(i=0;i<16;i++)
{
if((dat<<i)&0x8000)
AD420_DIN = 1;
else
AD420_DIN = 0;
AD420_CLOCK = 0;
_nop_();
AD420_CLOCK = 1;
_nop_();
}
AD420_CLOCK = 0;
AD420_DIN = 1;
AD420_LATCH = 1;
_nop_();
AD420_LATCH = 0;
}
void main()
{
unsigned int tmp;
CS5532_Init();
while(1)
{
CS5532_Sample();
tmp = (Sample_buf[1]<<8)|Sample_buf[2];
Write_Ad420(tmp);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -