資源簡介
現在多數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? {
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人臉識別小程序
評論
共有 條評論