钻石会员
主题
帖子
积分26473
阅读权限50
注册时间2009-2-7
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2016-9-2 15:00
|
显示全部楼层
本帖最后由 老弹弓 于 2016-9-2 18:00 编辑
没问题 是汇编的 主要驱动部分都在这。
MAIN1:
LCALL INT_INA226_A ; 初始化
LCALL READ_A_V ; 读取压降
LCALL A16TO10_2 ; 两字节 16 转bcd 码 (ad值转换为10进制显示)
LCALL PLAY_A_V ; 写压降电压值
lcall DELAY400ms
JMP MAIN1
;--------------------------------------------------------------------------------------
;功能 读取分流压降 02H
;流程:开始---器件地址---检查应答----寄存器地址(8位)--检查应答-------数据高八位--检查应答-----数据低八位--检查应答 ----停止。
;入口:读出的高低字节在 A_V_H ,A_V_L
;--------------------------------------------------------------------------------------
READ_A_V: LCALL SEND_address_W ;-发送器件地址-- 表明要写入一个寄存器地址。
MOV A, #01H ; 放入要读取的寄存器地址
LCALL SEND_AX_Addres ; 写入要读取的地址。发送完就完事了,下面接着开始读的流程。
LCALL SEND_address_R ; 发送器件地址 这次表明接下来是要读。 至于要读的地址,刚才已经写入了
LCALL RADBAT_INA226
MOV A_V_H, A ; 读到的高字节暂存。
LCALL SACK_INA226 ; 发送应答
LCALL RADBAT_INA226
MOV A_V_L, A ; 暂存低字节
LCALL STOP_INA226
MOV 21H, A_V_H ; 高位送入21H 用来判断 是正数还是负数
JNB 0FH, READ_A_V2 ; 0FH (也就是最高位)为0 则跳到 main2 直接计算并显示 为1 则进行下面的取反
LCALL PLAY_FH_2416
LCALL QIU_BU ; 是负数的话调用求补码程序。
JMP READ_A_V3
READ_A_V2: LCALL PLAY_KB_2416 ; 擦 负号子程序
READ_A_V3: RET
;--------------------------------------------------------------------------------------
INT_INA226_A:
LCALL SEND_address_W ;-发送器件地址-- 表明要写入一个寄存器地址。
MOV A, #00H ; 放入要写入的寄存器地址
LCALL SEDBAT_INA226
LCALL CACK_INA226 ; 检查应答
JB F0, INT_INA226_A ; 不行重来
;------------------------------------------------------发送器件地址和 要初始化的地址
INT_226_0:
MOV A, #43H ; 00H 默认初始化值为4127 现在初始化为 4327 默认是采集一个数 4327 是采集4个数然后平均。
LCALL SEDBAT_INA226
LCALL CACK_INA226 ; 检查应答
JB F0, INT_226_0 ; 不行重来
MOV A, #27H ;
LCALL SEDBAT_INA226
LCALL CACK_INA226 ; 检查应答
JB F0, INT_226_0 ; 不行重来
LCALL STOP_INA226
ITN_2: LCALL SEND_address_W ;-发送器件地址-- 表明要写入一个寄存器地址。
MOV A, #05H ; 05H 寄存器是设定电流和功率的,就是一个系数。
LCALL SEDBAT_INA226
LCALL CACK_INA226 ; 检查应答
JB F0, ITN_2 ; 不行重来
INT_226_5:
MOV A, #00H ; 05H 默认初始化值为0 这样算出来的电流 功率都为0
LCALL SEDBAT_INA226
LCALL CACK_INA226 ; 检查应答
JB F0, INT_226_5 ; 不行重来
MOV A, #01H ;
LCALL SEDBAT_INA226
LCALL CACK_INA226 ; 检查应答
JB F0, INT_226_5 ; 不行重来
LCALL STOP_INA226
RET
;--------------------------------------------------------------------------------------
;发送寄存器地址
;--------------------------------------------------------------------------------------
SEND_AX_Addres:
; MOV A, #01H ; 放入要读取的寄存器地址
LCALL SEDBAT_INA226 ; 发送器件地址
LCALL CACK_INA226 ; 检查应答
JB F0, SEND_AX_Addres ; 不行重来
RET
;--------------------------------------------------------------------------------------
;发送器件地址
;
;
;--------------------------------------------------------------------------------------
SEND_address_W:
LCALL STAR_INA226
MOV A, #80H ; 放入要发送的控制字 器件地址+0
LCALL SEDBAT_INA226 ; 发送器件地址
LCALL CACK_INA226 ; 检查应答
JB F0, SEND_address_W ; 不行重来
RET
;--------------------------------------------------------------------------------------
;读取寄存器前发送器件地址
;--------------------------------------------------------------------------------------
SEND_address_R:
LCALL STAR_INA226
MOV A, #81H ; 放入要发送的控制字 器件地址+0
LCALL SEDBAT_INA226 ; 发送器件地址
LCALL CACK_INA226 ; 检查应答
JB F0, SEND_address_R ; 不行重来
RET
|
|