第四章 软件系统设计
第四章 软件系统设计
软件设计包括主程序和中断服务程序。主程序完成单片机的初始化,以及等待中断,中断跳转等;中断服务程序包括上电中断服务程序、定时器/计数器中断服务程序等。
4.1 程序设计流程
4.1.1 初始化
初始化程序流程图如图4-1所示:
初始化 初始化堆栈 初始化各个端口 输入端使能 等待/响应中断
图4-1 初始化程序流程图
初始化程序的功能就是初始化各个端口,使其各部件完成先前的准备工作。设置好各个端口的功能,比如哪些端口设置为中断的输入口,哪些设置为外部模块。设置完成以后就可以打开各个中断使能,使系统响应相对应的中断跳转程序。
18
南昌工程学院本科毕业设计(论文)
4.1.2 主程序流程图
开始 系统初始化 采样锂离子电池电信号及温度等参数,BQ2040检测电池电量 W78E365单片机控制 TM1629驱动控制LED DS1302时钟电路 LED数码显示电量 结束返回 图4-2 主程序流程图
主程序完成初始化后,便等待定时器中断状态或外部中断的到来,然后完成锂电池电压、电流和温度值的信号采集,最后完成锂离子电池电量的计算,并在LED输出显示屏上显示出来。
19
第四章 软件系统设计
4.1.3 A/D转换与中断服务
开始 初始化 开中断 启动AD 否
定时中断 读时钟信息 AD转换 是 数据 中断返回 清标志位 置读数标志位 返回
图4-3 A/D转换与中断服务流程图
我们可以通过读时钟信息得到每一次锂离子电池电量检测时的时间,当然还有另外一个重要作用,如果知道了每次电量检测的结果及相对应的时间,就能帮助我们有效地监测该锂离子电池电量检测系统的工作情况是否正常,方便我们排查故障原因,及时对该系统进行维护和检修。
参考子程序(以每50ms中断一次举例): void time0(void) interrupt 1 using 2 {
TH0=0x3c;
20
南昌工程学院本科毕业设计(论文)
TL0=0xb0; TIME_count++; if(TIME_count==21) {
TIME_count = 0;
TIME_seconds++; // 秒寄存器加1 } }
4.2 BQ2040总线时序
BQ2040采用电源系统管理Veil.0(SMBus)协议,支持智能电池数据管理命令(SBData)和智能电池充电控制(SBData)功能,通过串行接口可以检测锂离子电池的充电状态、剩余电量、放电剩余时间、电池材料等信息。
SMBus是System Management Bus的缩写,译为系统管理总线,SMBus是一种二线制串行总线,它大部分基于I2C(Inter-Integrated Circuit)总线规范。I2C两线(串行数据SDA和串行时钟SCL线)式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。I2C是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。和I2C一样,SMBus不需增加额外引脚,但是工作频率只能在10kHz到最高100kHz范围内,且专门面向智能电池管理应用。SMBus为系统电源管理等任务提供了一条控制总线,使用SMBus的系统,设备之间发送和接收消息都是通过SMBus,而不是使用单独的控制线,这样可以节省设备的管脚数。
SMBus最初的目的是为智能电池、充电电池和与其他系统通信的微控制器之间的通信链路而定义的,如今也被用来连接各种设备,包括电源相关设备,系统传感器,EEPROM通讯设备等等,但SMBus最适用于笔记本电脑上,检测各元件状态并更新硬件设置。
21
第四章 软件系统设计
tR SMBC
TSU:STA THD:STTSU:ST SMBD TBUF TSU:DAT TLOW tF THIGH THD:DAT 图4-4 BQ2040总线时序
表4.1 时序特性
符号 FSMB TBUF THD:STA TSU:STA TSU:STO THD:DAT TSU:DAT TLOW THIGH TF TR TLOW:SEXT TTIMEOUT
参数 SMBus工作频率 总线停止和启动间的空闲时间 启动后保持时间 重复启动时间 停止时间 数据保持时间 数据建立时间 低电平时间 高电平时间 时钟/数据下降时间 时钟/数据上升时间 低电平累积时间 最小 10 4.7 4.0 4.7 4.0 300 250 4.7 4.0 25 最大 100 300 1000 25 35 单位 KHz μs μs μs μs ns ns μs μs ms ms
22