📄 cs5460.asm
字号:
;----------------------------------
;CS5460A_INIT CS5460A初始化
;
;---------------------------------
CS5460A_INIT: LDI R16, $FF
CALL CS5460A_WR8
LDI R16, $FF
CALL CS5460A_WR8
LDI R16, $FF
CALL CS5460A_WR8
LDI R16, $FE
CALL CS5460A_WR8 ;串口初始化
LDI R16, $42
LDS R19, LIRMSOS0
LDS R18, LIRMSOS1
LDS R17, LIRMSOS2
CALL CS5460A_WR32 ;直流偏移
LDI R16, $60
LDS R19, LIRMSOS3
LDS R18, LIRMSOS4
LDS R17, LIRMSOS5
CALL CS5460A_WR32 ;交流偏移
LDI R16, $44
LDS R19, LIRMSDE0
LDS R18, LIRMSDE1
LDS R17, LIRMSDE2
CALL CS5460A_WR32 ;电流增益
LDI R16, $4A
LDS R19, COUNT0
LDS R18, COUNT1
LDS R17, COUNT2
CALL CS5460A_WR32 ;直流偏移
LDI R16, $78
LDS R19, PEIZHI0
LDS R18, PEIZHI1
LDS R17, PEIZHI2
CALL CS5460A_WR32 ;配置寄存器
LDI R16, $E8
CALL CS5460A_WR8
LDI R16, $E8
CALL CS5460A_WR8
LDI R16, $E8
CALL CS5460A_WR8 ;开始转化
RET
;-------------------------------
;CS5460A_WR8 发送一个字节命令
;入口: R16
;占用资源:R16 R25
;------------------------------
CS5460A_WR8: CBI PORTD,CSCS
;CALL DELAY500US
LDI R25, $8
CLC
LOOP1:
ROL R16
BRCS YI1
CBI PORTD,CSSDI
RJMP SZ1
YI1: SBI PORTD,CSSDI
SZ1: NOP
NOP
SBI PORTD,CSSCLK
NOP
CBI PORTD,CSSCLK
NOP
DEC R25
BRNE LOOP1
CALL DELAY500US
SBI PORTD,CSSCLK
RET
;----------------------------------
;CS5460A_WR32 向寄存器写数据
;入口: R16 R17 R18 R19
;占用资源:R25
;---------------------------------------
CS5460A_WR32: CBI PORTD,CSCS ;写入命令(寄存器地址)
CALL DELAY500US
LDI R25, $8
CLC
LOOP2:
ROL R16
BRCS YI2 ;判断数据位1或0
CBI PORTD,CSSDI ;置0
RJMP SZ2
YI2: SBI PORTD,CSSDI ;置1
SZ2: NOP
NOP
SBI PORTD,CSSCLK ;时钟下降沿改变数据
NOP
CBI PORTD,CSSCLK
NOP
DEC R25
BRNE LOOP2
CALL DELAY500US ;写入第一个数据字节
LDI R25, $8
CLC
LOOP3:
ROL R19
BRCS YI3
CBI PORTD,CSSDI
RJMP SZ3
YI3: SBI PORTD,CSSDI
SZ3: NOP
NOP
SBI PORTD,CSSCLK
NOP
CBI PORTD,CSSCLK
NOP
DEC R25
BRNE LOOP3
CALL DELAY500US ;写入第二个数据字节
LDI R25, $8
CLC
LOOP4:
ROL R18
BRCS YI4
CBI PORTD,CSSDI
RJMP SZ4
YI4: SBI PORTD,CSSDI
SZ4: NOP
NOP
SBI PORTD,CSSCLK
NOP
CBI PORTD,CSSCLK
NOP
DEC R25
BRNE LOOP4
CALL DELAY500US ;写入第三个数据字节
LDI R25, $8
CLC
LOOP5:
ROL R17
BRCS YI5
CBI PORTD,CSSDI
RJMP SZ5
YI5: SBI PORTD,CSSDI
SZ5: NOP
NOP
SBI PORTD,CSSCLK
NOP
CBI PORTD,CSSCLK
NOP
DEC R25
BRNE LOOP5
CALL DELAY500US
SBI PORTD,CSSCLK
RET
;--------------------------------------
;CS5460A_RE32 从寄存器读出数据
;出口;
;占用资源;
;--------------------------------------
CS5460A_RE32: CBI PORTD,CSCS
SBI PORTD,CSSDO
CALL DELAY500US ;送命令子节(寄存器地址)
LDI R25, $8
CLC
LOOP6:
ROL R16
BRCS YI6
CBI PORTD,CSSDI
RJMP SZ6
YI6: SBI PORTD,CSSDI
SZ6: NOP
NOP
SBI PORTD,CSSCLK
NOP
CBI PORTD,CSSCLK
NOP
DEC R25
BRNE LOOP6
LDI R25, $8 ;读出第一个字节
CALL DELAY500US
SBI PORTD,CSSDI
CLC
LOOP7: SBI PORTD,CSSCLK
NOP
SBI PORTD,CSSDO
SBIC PIND, 5
SEC
ROL R3
CBI PORTD,CSSCLK
CALL DELAY500US
DEC R25
BRNE LOOP7
LDI R25, $8 ;读出第二个字节
CALL DELAY500US
LOOP8: SBI PORTD,CSSCLK
NOP
SBI PORTD,CSSDO
SBIC PIND, 5
SEC
ROL R2
CBI PORTD,CSSCLK
CALL DELAY500US
DEC R25
BRNE LOOP8
LDI R25, $8 ;读出第三个字节
CALL DELAY500US
SBI PORTD,CSSDI
CLC
LOOP9: SBI PORTD,CSSCLK
NOP
SBI PORTD,CSSDO
SBIC PIND, 5
SEC
ROL R1
CBI PORTD,CSSCLK
CALL DELAY500US
DEC R25
BRNE LOOP9
NOP
NOP
SBI PORTD,CSSCLK
CBI PORTD,CSSDO
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -