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