• 大小: 8KB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-30
  • 语言: 其他
  • 标签: 8051  

资源简介

基于一个单节电池电量计CW2015的单片机程序,不用学习自动测量电量。

资源截图

代码片段和文件信息

#include “Cellwise CW201x Driver for MCU.h“

bit CHARGE = 0; //是否接充电器标志位,1为接充电器,0为拔出充电器
bit no_charger_full_jump =0;
unsigned int allow_no_charger_full =0;
unsigned int allow_charger_always_zero =0;
unsigned char if_quickstart =0;
unsigned char reset_loop =0;

/*定义一个全局变量,外部文件要使用时请先include Cellwise CW201x Driver for MCU.h文件,再用extern声明cw_bat*/
STRUCT_CW_BATTERY   cw_bat;

////////////////////////////////////////////////////////////////////////////////////
////global function: ‘cw_bat_work()‘  and  ‘cw_bat_init()‘                      ////
////‘cw_bat_work()‘need be called by main.c in every second                     ////
////‘cw_bat_init()‘need be called by main.c in system-init after power on reset ////
////////////////////////////////////////////////////////////////////////////////////

//void delay_us(unsigned char us);
bit cw_read(unsigned char PointRegunsigned char *pData);
bit cw_write(unsigned char PointRegunsigned char *pData);

/**********************************************************************************/
/***************CW_Delay10ms() 与 CW_Delay10us() 函数是我根据51单******************/
/***************片机特性写的延迟函数,请根据自己的平台自行替换*********************/
/**********************************************************************************/
void CW_Delay10ms(unsigned int c) 
{
    unsigned char a b;

//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
    for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}          
}       
}

void CW_Delay10us(unsigned char us)
{
unsigned char a b;
unsigned char i;
for(i = 0; i < us; i++){
for(b=1; b>0; b--)
{
for(a=2; a>0; a--);
}
}
}

/*这个函数的作用是更新ic内的电池profile信息,一般只有在ic VDD掉电后再上电时才执行 
return 1 : i2c读写错, return 2 : 芯片处于sleep模式 return 3 : 写入的profile信息读出后与代码中的不一致*/
unsigned char cw_update_config_info(void)
{
bit ret = 0;
unsigned char i;
unsigned char reset_val;
unsigned char reg_val;
/* make sure no in sleep mode */
ret = cw_read(REG_MODE ®_val);
if(ret)
{
return 1;
}
if((reg_val & MODE_SLEEP_MASK) == MODE_SLEEP)
{
return 2;
}
/* update new battery info */
for(i = 0; i < SIZE_BATINFO; i++)
{
reg_val = cw_bat_config_info[i];
ret = cw_write(REG_BATINFO+i ®_val);
if(ret)
{
return 1;
}
}

/* readback & check */
for(i = 0; i < SIZE_BATINFO; i++)
{
ret = cw_read(REG_BATINFO+i ®_val);
if(ret)
{
return 1;
}
if(reg_val != cw_bat_config_info[i])
{
return 3;
}
}
/* set cw2015/cw2013 to use new battery info */
ret = cw_read(REG_CONFIG ®_val);
if(ret)
{
return 1;
}
reg_val |= CONFIG_UPDATE_FLG;   /* set UPDATE_FLAG */
reg_val &= 0x07;                /* clear ATHD */
reg_val |= ATHD;                /* set ATHD */
ret = cw_write(REG_CONFIG ®_val);
if(ret)
{
return 1;
}
/* reset */
reset_val = MODE_NORMAL;
reg_val = MODE_RESTART;
ret = cw_write(REG_MODE ®_val);
if(ret)
{
return 1;
}
CW_Delay10us(10);  //delay 100us      
ret = cw_write(REG_MODE &reset_val);
if

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      12828  2016-09-07 19:19  CW2015_MCU_DRIVER_V2.0\Cellwise CW201x Driver for MCU V2.0.c

     文件       1913  2016-09-07 19:19  CW2015_MCU_DRIVER_V2.0\Cellwise CW201x Driver for MCU.h

     文件       1769  2016-09-07 19:19  CW2015_MCU_DRIVER_V2.0\Cw2015_test.c

     文件       4878  2016-09-07 17:09  CW2015_MCU_DRIVER_V2.0\DriverIIC_Sample.c

     文件        310  2016-09-07 19:17  CW2015_MCU_DRIVER_V2.0\ReadMe.txt

     目录          0  2016-09-07 19:21  CW2015_MCU_DRIVER_V2.0

----------- ---------  ---------- -----  ----

                21698                    6


评论

共有 条评论