📄 cs5460_01.asm
字号:
;asm写的cs5460程序(电池)
CLK equ P1.6; --
DAT equ P1.7; E2prom
dat7 equ p0.3; ---
clk7 equ p0.2; 7289
cs7 equ p0.1;
rset equ p0.0; ---
sdi equ p1.5; cs5460
sdo equ p1.4
sclk equ p1.3
csa equ p1.0
csb equ p1.1
csc equ p1.2; ---
dog equ p3.5
;"""""""""""""""""""""""""""""""""""
REST: ;5460复位
MOV R6,#06H
MOV R0,#0FFH
USA:
NOP
NOP
cpl dog ;CPL,应该是取反指令
ACALL COMM
DJNZ R6,USA ;串行口初始化
MOV R0,#0FEH;此处初始化串口使用的命令字节是:6个#0FFH,追加一个#0FEH
NOP
NOP
ACALL COMM
MOV 10H,#00H
MOV 11H,#00H
MOV 12H,#81H
MOV R0,#40H ;CS5460复位
;#40H,是配置寄存器写命令
MOV R1,#10H
NOP
NOP
ACALL WWW
NOP
NOP
ACALL T9
MOV 10H,#80H
MOV 11H,#00H
MOV 12H,#20H
MOV R0,#74H
MOV R1,#10H
NOP
NOP ;写中断寄存器
ACALL WWW
NOP
NOP
ACALL T9
MOV 10H,#00H
MOV 11H,#00H
MOV 12H,#71H
MOV R0,#40H ;写入5460配置寄存器
MOV R1,#10H
NOP
NOP
ACALL WWW
NOP
NOP
ACALL T9
MOV R0,#0D0H ;这条指令仅仅是指定电压校准,
;并没有指定偏置校准和增益校准
NOP
NOP
LCALL COMM ;电压校准
ddd1:
MOV R0,#1EH
MOV R1,#10H
NOP
NOP
ACALL READ
MOV A,10H ;等待校准完毕
JNB ACC.7,ddd1;ACC.7,代表的应该就是DRDY
;查询DRDY是否为1
MOV 10H,#0FFH
MOV 11H,#0FFH
MOV 12H,#0FEH
MOV R0,#5EH
MOV R1,#10H
NOP
NOP
LCALL WWW ;清DRDY,WDT位
MOV R0,#0C8H
NOP
NOP
LCALL COMM ;电流校准
Ddd2:
MOV R0,#1EH
MOV R1,#10H
NOP
nOP
ACALL READ
MOV A,10H ;等待校准完毕
JNB ACC.7,ddd2
MOV 10H,#0FFH
MOV 11H,#0FFH
MOV 12H,#0FEH
MOV R0,#5EH
MOV R1,#10H
NOP
NOP
LCALL WWW ;清DRDY,WDT位
NOP
NOP
LCALL WUIROM ;将校准值写入5460
NOP
NOP
ACALL T9
;MOV R0,#0C0H
;NOP
;NOP
;ACALL COMM ;禁止校准
MOV 10H,#0FFH
MOV 11H,#0FFH
MOV 12H,#0FEH
MOV R0,#5EH
MOV R1,#10H
NOP
NOP
LCALL WWW ;清DRDY,WDT位
NOP
NOP
ACALL T9
MOV R0,#0E8H
NOP
NOP
ACALL COMM ;进行连续计算
NOP
NOP
RET
T9:
MOV R7,#0FFH
T2:
NOP
NOP
DJNZ R7,T2
NOP
NOP
RET
COMM: ;对芯片进行控制,命令字在R0
clr sdo
MOV A,R0
MOV R4,#08H
M1: MOV C,ACC.7
MOV sdi,C
NOP
NOP
NOP
NOP
SETB sclk
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR sclk
NOP
NOP
NOP
RL A
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R4,M1
NOP
NOP
NOP
RET
;|||||||||||||||||||||||||||||||||||||
;这个函数,既包含了命令输入,也包含了24位数据的输入
WWW: ;命令字在R0,数据指针在R1。
NOP
NOP
ACALL COMM
MOV R6,#03H
W1: MOV A,@R1
MOV R0,A
NOP
NOP
ACALL COMM
INC R1
DJNZ R6,W1
NOP
NOP
RET
;*******************
READ: ;命令字在R0,数据指针在R1
NOP
NOP
ACALL COMM
setb sdi
SETB sdo
MOV R3,#08H
MOV R2,#03H
NOP
NOP
NOP
NOP
RR2: CLR sclk
CLR C
CLR A
RR1: NOP
NOP
NOP
NOP
SETB sclk
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOV C,sdo
MOV ACC.7,C
RL A
NOP
CLR sclk
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
;读数时最后一个脉冲,Sdi为低电平
cjne r2,#01h,readjie
cjne r3,#02h,readjie
clr sdi
readjie:DJNZ R3,RR1
MOV R3,#08H
MOV @R1,A
INC R1
DJNZ R2,RR2
clr sdi
NOP
NOP
NOP
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -