资源简介
现在多数bms都采用6803作为采集芯片 此为经典bms程序
代码片段和文件信息
#include
#include“ltc6802_1.h“
#include“reg6802.h“
#include “config.h“
#include“intrins.h“
#include“main.h“
#include “temp.h“
sbit CSBI=P3^3; //使能端
sbit MISO=P3^2; //SPI输出MISO CPU输入采集模块输出
sbit MOSI=P3^4; //SPI输入 CPU输出采集模块输入
sbit SCK=P3^5; //SPI时钟
unsigned char bdata DATA_BUF;
sbit flag =DATA_BUF^7;
sbit flag1 =DATA_BUF^0;
unsigned char xdata CFGR[6];
bit Ltc6801OK;
unsigned char xdata CVR[19];//电池电压寄存器组
unsigned char xdata SECONDCVR[19];//缓存测内阻时的第二次电压值
unCVR xdata CellV[12]; //电池电压值
//unCVR xdata CellDischargeVoltage[2]; //电池放电电压
unCVR xdata AdjustV[12];
unCVR xdata FirstTestIRCellV[12]; //测内阻时 第一次测的电池电压值
unCVR xdata SecondTestIRCellV[12]; //测内阻时 第二次测的电池电压值
unsigned char xdata Tempr[5]; //温度寄存器
unCTR xdata CellT[2]; //温度值对应的电压值
READFLAG xdata Readflag[3];
READFLAG xdata PreReadflag[3];
DISCHARGESWITCH xdata DischargeSwitch[2];
//===============================================================================
// 计算CRC校验码函数;
// 输 入: 要计算数据缓冲区的起始指针pBuff,缓冲区的字节数Len;
// 输 出: CRC校验码;
// 功 能: 计算CRC校验码。
//------------------------------------------------------------------------------------------------------
//crc算法说明:
/*校验多项式为G(X)=X8+X2+X+1,对每个控制字或信息字的
前5个字节进行CRC校验,生成一个8位的余数,该余数取反
后即可作为校验码尾随前5字节发送。计算方法如下:
将每个控制字或信息字中的前5个字节按从低到高的顺序排列,
每个字节的位从高到低排列,构成一个位流,在这个位流的后面加上8个0,
从而得到一个48位的位流。例如,对某个信息字有B0-B5共6个字节,
每个字节8位分别为bi7-bi0(i为字节序号,取值范围0~4),
则按上面的方法得到的位序列为b07b06...b00,b17b16..b10,...,b47b47...b40,00000000,
用校验多项式107H (X^8+X^2+X+1)作为除数去除这个码流,
相除时不做减法而做异或,最后得到一个8位的余数*/
//===============================================================================
unsigned char CRC107(unsigned char *buff int len)
{
int q r;
int crc;
int i;
crc = 0;
q = 0; //字节计数器
r = 0; //字节内位的计数器
while(q < len)
{
if(buff[q] & (0x80>>r))//当字节内某位为1时,在余数末尾置1,否则置0
crc |= 0x01;
if(crc >= 0x100)
crc ^= 0x107; //异或多项余子式
crc <<= 1;
r++;
if(r == 8) //处理下一个字节
{
r = 0;
q++;
}
}
for(i=0; i<8; i++) //对位流的后8位计算CRC校验码
{
if(crc >= 0x100)
crc ^= 0x107;
crc <<= 1;
}
crc >>= 1;
//crc = (~crc); //余数取反
return (unsigned char)crc;
}
//================================================================
//函数功能:片内SPI接口操作
//filename:SpiWrite()
//input:char 读操作,输入参数0
//output:none
//================================================================
void SpiWrite(unsigned char byte)
{
unsigned char i;
DATA_BUF=byte; // Put function‘s parameter into a bdata variable
for (i=0;i<8;i++) // Setup byte circulation bits
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
if (flag) // Put DATA_BUF.7 on data line
MOSI=1;
else
MOSI=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCK=1; // Set clock line high
DATA_BUF=DATA_BUF<<1; // Shift DATA_BUF
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCK=0; // Set clock line low
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 622 2010-01-08 10:38 BATmonitor 1.7\config.h
文件 75850 2010-01-08 10:38 BATmonitor 1.7\LTC6802-1
文件 9624 2010-01-08 10:38 BATmonitor 1.7\ltc6802-1.c
文件 101 2010-01-08 10:38 BATmonitor 1.7\LTC6802-1.lnp
文件 22237 2010-01-08 10:38 BATmonitor 1.7\ltc6802-1.LST
文件 66910 2010-01-08 10:38 BATmonitor 1.7\LTC6802-1.M51
文件 30096 2010-01-08 10:38 BATmonitor 1.7\ltc6802-1.OBJ
文件 29110 2010-01-08 10:38 BATmonitor 1.7\LTC6802-1.plg
....... 72296 2016-07-06 11:12 BATmonitor 1.7\LTC6802-1.uvgui.Administrator
....... 9646 2016-07-06 11:12 BATmonitor 1.7\LTC6802-1.uvopt
....... 14566 2016-07-06 11:12 BATmonitor 1.7\LTC6802-1.uvproj
文件 39 2010-01-08 10:38 BATmonitor 1.7\ltc6802-1.__i
文件 74813 2010-01-08 10:38 BATmonitor 1.7\LTC6802-11
文件 21091 2010-01-08 10:38 BATmonitor 1.7\LTC6802-11.hex
文件 66042 2010-01-08 10:38 BATmonitor 1.7\LTC6802-11.M51
文件 160 2010-04-14 00:39 BATmonitor 1.7\LTC6802-11.plg
文件 3443 2010-01-08 10:38 BATmonitor 1.7\LTC6802-1_Opt.Bak
文件 2300 2010-01-08 10:38 BATmonitor 1.7\LTC6802-1_Uv2.Bak
文件 2316 2010-01-08 10:38 BATmonitor 1.7\LTC6802_1.h
文件 17079 2010-01-08 10:38 BATmonitor 1.7\main.c
文件 701 2010-01-08 10:38 BATmonitor 1.7\main.h
文件 38737 2010-01-08 10:38 BATmonitor 1.7\main.LST
文件 33287 2010-01-08 10:38 BATmonitor 1.7\main.OBJ
文件 3035 2010-01-08 10:38 BATmonitor 1.7\reg6802.H
文件 1405 2010-01-08 10:38 BATmonitor 1.7\rom.c
文件 390 2010-01-08 10:38 BATmonitor 1.7\rom.h
文件 3803 2010-01-08 10:38 BATmonitor 1.7\rom.LST
文件 7167 2010-01-08 10:38 BATmonitor 1.7\rom.OBJ
文件 0 2010-01-08 10:38 BATmonitor 1.7\spi.c
文件 709 2010-01-08 10:38 BATmonitor 1.7\spi.LST
............此处省略15个文件信息
- 上一篇:PSCAD APF仿真模型
- 下一篇:opencv3.4.1人脸识别小程序
评论
共有 条评论