📄 ad5933.asm
字号:
CLR VSDA
NOP
NOP
NOP
CLR VSCL
RET
;IIC总线停止子程序
STOP: CLR VSDA
SETB VSCL
NOP
NOP
NOP
SETB VSDA
NOP
NOP
NOP
CLR VSCL
CLR VSDA
RET
;IIC总线发送应答子程序
MACK: CLR VSDA
SETB VSCL
NOP
NOP
NOP
CLR VSCL
SETB VSDA
RET
;IIC 总线发送非应答子程序
MNACK: SETB VSDA
SETB VSCL
NOP
NOP
NOP
CLR VSCL
CLR VSDA
RET
;IIC 总线应答检查子程序
CACK: SETB VSDA
SETB VSCL
CLR F0
MOV C, VSDA
JNC CEND
SETB F0
CEND: CLR VSCL
RET
;IIC 总线发送1字节子程序
WRBYT: MOV R6, #08H
WLP: RLC A
MOV VSDA, C
SETB VSCL
NOP
NOP
NOP
CLR VSCL
DJNZ R6, WLP
RET
;IIC总线发送N字节数据子程序
WRNBYT: MOV R7, NUMBYT
LCALL STA
MOV A, WSLA ;发送 SLAW寻址字节
LCALL WRBYT
LCALL CACK
JB F0, WRNBYT
MOV R0, #MWD
WRDA: MOV A, @R0
LCALL WRBYT
LCALL CACK
JB F0, WRNBYT
INC R0
DJNZ R7, WRDA
LCALL STOP
RET
;IIC总线读入N字节数据子程序
RDNBYT: MOV R7, NUMBYT
LCALL STA
MOV A, RSLA
LCALL WRBYT
LCALL CACK
JB F0, RDNBYT
MOV R0, #MRD
RDN1:
LCALL RDBYT
MOV @R0, A
DJNZ R7, ACK
LCALL MNACK
LCALL STOP
RET
ACK: LCALL MACK
INC R0
SJMP RDN1
;IIC 总线接收1字节子程序
RDBYT: MOV R6, #08H
RLP: SETB VSDA
SETB VSCL
MOV C, VSDA
MOV A, R2
RLC A
MOV R2, A
CLR VSCL
DJNZ R6, RLP
MOV A, R2
RET
;IIC总线一个数据块读子程序
B_READ: LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #0A1H
LCALL WRBYT
LCALL MACK
MOV A, NUMBYT
MOV R7, A
LCALL WRBYT
LCALL MACK
LCALL STA ;启动I2C
MOV A, #AD5933_R ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV R0, #MRD
B_READ1:
LCALL RDBYT
MOV @R0, A
INC R0
LCALL MACK
DJNZ R7, B_READ1
LCALL MNACK
LCALL STOP ;停止I2C
RET
;IIC总线设定寄存器指针
POINT: LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #0B0H
LCALL WRBYT
LCALL MACK
MOV A, R5
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
RET
;IIC初始化AD5933
INI: LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #Ctrl_H ;80H寄存器
LCALL WRBYT
LCALL MACK
MOV A, #0B0H ;写入80H寄存器的内容 标准模式 输出电压范围2.0V P-P
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
NOP
NOP
NOP
LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #Ctrl_L ;81H寄存器
LCALL WRBYT
LCALL MACK
MOV A, #00H ;写入81H寄存器的内容 PGA Gain 0=*5 内部时钟 16.774M
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
NOP
NOP
NOP
LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #82H ;82H寄存器 82H 83H 84H中存入起始频率 设定为1K 系统频率12M
LCALL WRBYT
LCALL MACK
MOV A, #00H ;写入82H寄存器的内容
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
NOP
NOP
NOP
LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #83H ;83H寄存器
LCALL WRBYT
LCALL MACK
MOV A, #0AEH ;写入83H寄存器的内容
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
NOP
NOP
NOP
LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #84H ;84H寄存器
LCALL WRBYT
LCALL MACK
MOV A, #43H ;写入84H寄存器的内容
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
NOP
NOP
NOP
LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #85H ;85H寄存器 85H 86H 87H是频率步长 设定为100HZ 系统频率为12M
LCALL WRBYT
LCALL MACK
MOV A, #00H ;写入85H寄存器的内容
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
NOP
NOP
NOP
LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #86H ;86H寄存器
LCALL WRBYT
LCALL MACK
MOV A, #11H ;写入86H寄存器的内容
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
NOP
NOP
NOP
LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #87H ;87H寄存器
LCALL WRBYT
LCALL MACK
MOV A, #7AH ;写入87H寄存器的内容
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
NOP
NOP
NOP
LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #88H ;88H寄存器 测试点设定为511
LCALL WRBYT
LCALL MACK
MOV A, #01H ;写入88H寄存器的内容
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
NOP
NOP
NOP
LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #89H ;89H寄存器
LCALL WRBYT
LCALL MACK
MOV A, #0FFH ;写入89H寄存器的内容
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
NOP
NOP
NOP
LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #8AH ;8AH寄存器
LCALL WRBYT
LCALL MACK
MOV A, #01H ;写入80H寄存器的内容
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
NOP
NOP
NOP
LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #8BH ;8BH寄存器
LCALL WRBYT
LCALL MACK
MOV A, #0FFH ;写入80H寄存器的内容
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
NOP
NOP
NOP
LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #80H ;80H寄存器
LCALL WRBYT
LCALL MACK
MOV A, #13H ;写入80H寄存器的内容 初始化启动频率
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
NOP
NOP
NOP
LCALL STA ;启动I2C
MOV A, #AD5933_W ;AD5933地址+写命令
LCALL WRBYT
LCALL MACK
MOV A, #80H ;80H寄存器
LCALL WRBYT
LCALL MACK
MOV A, #23H ;写入80H寄存器的内容 起振
LCALL WRBYT
LCALL MACK
LCALL STOP ;停止I2C
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -