#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
//#define STCVAD 0X1E /*启动电压A/D采集自检,所有CV=0X555*/
//#define STTMPAD 0X3F /*启动温度A/D采集自检,所有TMP=0xAAA*/
//#define RDTMP 0X08 /*读取温度命令*/
//#define RDCV 0X04 /*读取电压命令
//配置寄存器组定义
//#define CFGR0 0x03 /*设定测量电压周期,UV/OV比较周期*/
//#define CFGR1 0x00 /*turn off shorting switch for cell x */
//#define CFGR2 0x00
//#define CFGR3 0x00
//#define CFGR4 0x5e /*设定UV*/
//#define CFGR5 0x98 /*设定OV*/
#define SCK PTBD_PTBD1
#define MOSI PTCD_PTCD1
#define MISO PTAD_PTAD0
#define CSBI PTCD_PTCD2
#define WRCFG 0x01
#define RDCFG 0x02
#define RDCV 0x04
#define RD** 0x06
#define STCVAD 0X1E
//#define STCVAD_USE 1
unsigned char DataBuffer;
unsigned char CVR[19];
unsigned char wrcfg[6]={0x0,0x00,0x00,0x00,0x5e,0x98};
///////////////////////////////////////////////////////
void IO_init()
{
PTBDD_PTBDD1=1;
PTCDD_PTCDD2=1;//cs
PTADD_PTADD0=0;
PTCDD_PTCDD1=1;
SCK = 0;
MOSI = 0;
CSBI = 1;
}
//////////////////////////////////////////////////////
void Delay(unsigned char Value)
{
for(;Value>0;Value--)
;
}
/////////////////////////////////////////////////////////
void SpiWrite(unsigned char data)
{
unsigned char i;
for(i=0;i<8;i++)
{
Delay(10);
SCK = 0;
if(0x80&data)
MOSI = 1;
else
MOSI = 0;
Delay(10);
SCK = 1;
data<<=1;
}
}
/////////////////////////////////////////////////////////////
void TLC6802_init()
{
unsigned char i;
CSBI = 0;
SpiWrite(WRCFG);
for(i=0;i<6;i++)
{
SpiWrite(wrcfg[i]);
}
CSBI = 1;
Delay(10);
}
///////////////////////////////////////////////////////////////
void SPIRead()
{
unsigned char i;
DataBuffer=0;
for(i=0;i<8;i++)
{
SCK = 0;
Delay(9);
SCK = 1;
Delay(1);
if(MISO)
DataBuffer|=0x01;
Delay(10);
DataBuffer<<=1;
}
}
///////////////////////////////////////////////////////////////
void main(void)
{
unsigned char i;
IO_init();
TLC6802_init();
Delay(3);
EnableInterrupts;
for(;;)
{
CSBI = 0;
SpiWrite(0x80);
SpiWrite(RDCFG);
SpiWrite(RDCV);
//SpiWrite(STCVAD);
Delay(30);
for(i=0;i<7;i++)
{
SPIRead();
CVR[i]=DataBuffer;
Delay(10);
}
CSBI = 1;
Delay(50);
#ifdef STCVAD_USE
CSBI = 1;
Delay(10);
CSBI = 0;
SpiWrite(STCVAD);
Delay(30);
CSBI = 1;
#endif
__RESET_WATCHDOG();
}
}
可以通讯,但是得不到正确值,拜求大虾指导,感激不尽!!!!!!!!!!!!!!!!!!!!
|