📄 scanner.h
字号:
#define TRUE 1
#define FALSE 0
#define m_POWERLIMIT1 (3150) //2。44v//电压分压后应2。64v(正负12V)1.76V(正负8v)
#define m_POWERLIMIT3 (2550) //对应外部参考时,分压电压范围低值 //2.64v/veref*4096 = 3600
#define m_POWERLIMIT4 (2750) //对应外部参考时,分压电压范围高值
//******************************************
//错误码定义
#define m_MAINPOWERERROR 0x11 //正负电源电压(或其中之一)异常,或器件内部AD失效
#define m_EXREFERROR 0x12 //外部3V参考电压异常
#define INVAILDCOMMANDERROR 0x13 //下位机收到错误的命令。
#define RXBUFFOVERLOADERROR 0x14 //下位即接收缓冲区满或已被锁定
#define TIMEOVERERROR 0x16 //不允许进入升级主程序状态
#define SUCCESS 0x7f //成功代码
//**************************************************
//**********************************************
#define PRODUCTION_NAME 0x19 //产品名称主动采集型18颗电池采集板
#define SOFTWARE_REVISON 01 //ver1.8
//**********************************************
#define RXJA 0x55 //通讯用字节
#define TimesADDRESS 0xf200 //每通道采集次数地址
//0xf200~0xf225 保存数据依次是:MAXTIMES ChTimes1 ChTimes2 ChTimes3...... 19组
//0xf226~0xf249 ChZero1 Chzero2 Chzero3.... 18组
//0xf24a~0xf26d ChVolHig1,ChVolHig2 18组
//0xf26e~0xf291 保存ChVolLow1,ChVolLow2.... 18组
//0xf292~0xf2b5 保存充电时dv/dt阈值 18组
//0xf2b6~0xf2d9 保存放电时dv/dt阈值 18组
//0xf2da~0xf2de //保存充电时总电压dv阈值,放电时总电压阈值
#define IDADDRESS 0xf402 //id空间起始地址 0XF400 ~0XF402
#define SELFIDADDRESS 0xf600 //唯一标识地址为0XF600~0XF60F
#define MODE1 0xA2 //工作模式一;
#define MODE2 0xA4 //工作模式二;
#define CHARGESTATE 0x62 //充电模式 这里的
#define DISCHARGESTATE 0x74 //放电模式
#define HOLDSTATE 0x58 //静置状态
#define OTHERSTATE 0X49 //其他状态或不正常状态
//bypass #define MODE3 0xA6 //工作模式三; //bypass 功能
#define DEFAULTTIMES 2048 //1024 //默认的采集数目
#define P1DATAADDRESS 0xf000 //每通道采集次数地址
#define P2DATAADDRESS 0xf018 //每通道采集次数地址
#define VOLCHANGEVALUE 0x200 //定义判断电压变化的量,小于这个量将认为是正常的采集波动
typedef unsigned char BOOL;
void InitSys(void);
int SelfTest(void); //系统自检测试
void RxComResp(void);
char BinToBcd(unsigned char);
char BcdToBin(unsigned char);
void SendByte(void); //启动发送子程序,该程序负责发送第一个字节,剩余字节由中断服务程序发送
void DelayAMoment(void);
void SetiErrorCode(unsigned char);
void SetNormalTxBuff(unsigned char);
unsigned char ReadPara(unsigned int); //读取外部的设定参数
extern void Update(void);
//---******************* 以下程序因代码空间不足转用汇编语言实现**********------
extern void Delay1ms(void);
unsigned char ta; //用于实现1秒计时和60秒计时的软件时钟寄存器
unsigned char RxBuff[0x10]; //串口接收缓冲区,16字节
unsigned char RxIndex; //接收指针
BOOL RxComRes;
BOOL RxComLock; //当串口接收到的数据在进行处理时,锁定缓冲区,防止进入新数据。这导致不能完全的全双工
//串行数据发送:定义一个十六字节的发送缓冲区,待发送的数据放入缓冲区即可,然后向TXBUF0送数启动发送,并将发送指针变更为1
//数据发送完成后进入发送中断服务程序,完成其他数据的发送,‘$'为结束标记
unsigned char TxBuff[18]; //串口发送缓冲区,48字节
unsigned char TxIndex; //发送指针
unsigned char WriteNum; //待发送的字节数目
int iErrorCode;
char *ptrFlashData;
unsigned char m_IDH,m_IDL;
//协议处理需要的变量单元
unsigned char m_Mode; //工作模式 模式一,接收到命令则采集一次数据,等待上传;模式二,不断采集数据,等待上传
unsigned char m_ResID,m_ResIDbuf; //命令序号用于在模式一时,确定采集的数据是否是采集命令要求的数据,模式二时固定为0
//当工作在模式三时,m_ResID固定为0x99
BOOL ScanRes; //模式一时,要求进行一次电池电压采集
unsigned int ChTimes; //通道的采集次数,保存在FLASH中,可由上位机下载
int ChZero; //通道的零点电压,保存在flash中,可由上位机下载
unsigned long ChAdder;
unsigned int m_ChannelCur[18]; //用于保存当前的采集数据
//unsigned int m_ChannelHis[18]; //用于保存历史
unsigned int m_ChannelHis2[18]; //用于计算dv/dt,保存上一次的电压值
//unsigned long m_TotalChannelCur; //用于保存当前的电压之和
//unsigned long m_TotalChannelHis; //用于保存历史的电压之和
unsigned char ChNum;
BOOL LampFlashRes;
BOOL ScanInitRes;
BOOL OwnScanReady;
BOOL OwnScanEnable;
unsigned int FlashPara; //用于保存从flash中读出的配置参数
unsigned int SecTimer; //每秒加一,拟用于记录主动采集中最大未传输数据间隔
unsigned char m_State; //用于记录当前的充放状态,当其为Mode1时,表示为充电,当其为模式2时,表示放电
unsigned char VolUpNum,VolDownNum; //用于记录电压升高的电池和电压降低的电池个数。
//unsigned char StateSwitchPoint; //用于记录是否发现拐点,当放电到充电时,为1,当充电到放电时为2,其他时为0
//unsigned char UploadStateOverTimer; //当检测到拐点时,一段时间内将禁止采集,等待上位机将数据上传后再进行采集,但若超时则丢弃
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -