📄 ad8522.asm
字号:
COUNTERH EQU 30H ;计数值的高字节
COUNTERL EQU 31H ;计数值的低字节
SDI_AD8522 BIT P3.3
RST_AD8522 BIT P3.5
SCK_AD8522 BIT P3.6
CS_AD8522 BIT P3.7
LDA_AD8522 BIT P1.4
PRESET_AD8522: ;异步预置AD8522到一个确定的状态。
CLR CS_AD8522 ;先片选AD8522,准备异步预置AD8522到一个确定的状态
CLR RST_AD8522 ;MSB=1,RST_AD8522=0,则Asynchronously Presets DAC Registers to Half Scale (800H)
SETB RST_AD8522 ;异步复位AD8522结束,重新将其拉高
PREP_AD8522: ;进行DAC转换前的准备工作
MOV DAC_L,COUNTERL ;将计数值移入(DAC_L)和(DAC_H)单元中,为接下来的DAC转换作准备
MOV DAC_H,COUNTERH ;但(COUNTERL)和(COUNTERH)单元的内容不变,以便显示出真实的计数值
MOV A,DAC_H ;比较待DAC转换的数据,看其是否大于4096(#0FFFH),首先比较其高位DAC_H,看其是否大于#0FH
CJNE A,#0FH,NEXT ;若其高位(DAC_H)=/=#0FH,则跳转至NEXT继续判断(DAC_H)与#0FH的大小
SJMP COMEON ;若它们的高位相等,同时(DAC_L)必然<=#0FFH,即待DAC转换的数据小于4096(#0FFFH),可以进行DAC转换
NEXT: JC COMEON ;C=1,表示(DAC_H)<#0FH, 即待DAC转换的数据小于4096(#0FFFH),则可以进行转换
NEXT1: MOV DAC_H,#0FH ;C=0,表示(DAC_H)>=#0FH, 即待DAC转换的数据大于4096(#0FFFH),则强制其变为#0FFFH
MOV DAC_L,#0FFH
COMEON: MOV DAC_CONST,#10100000B ;DAC转换格式控制位D15D14D13D12=1010,即为Software decode,B=0,A=1(使用LDA),D12=X
MOV A,DAC_H
ADD A,DAC_CONST ;DAC转换格式控制位和待DAC转换的数据的高4位合并在一起
MOV DAC_H,A ;然后存储在DAC_H中
SETB LDA_AD8522 ;移位SDI端口的数据到Shift Register中期间,LDA_AD8522保持为高
CLR SCK_AD8522
BEGIN:
CLR CS_AD8522 ;首先片选AD8522
MOV A,DAC_H ;准备移位待DAC转换的数据的高8位
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第1个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第2个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第3个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第4个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第5个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第6个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第7个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第8个移位脉冲
CLR SCK_AD8522
MOV A,DAC_L ;准备移位待DAC转换的数据的低8位
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第9个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第10个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第11个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第12个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第13个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第14个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第15个移位脉冲
CLR SCK_AD8522
RLC A
MOV SDI_AD8522,C
SETB SCK_AD8522 ;发出第16个移位脉冲
CLR SCK_AD8522 ;至此,DAC_H,DAC_L中的待DAC转换的数据全部移入Shift Register中
CLR LDA_AD8522 ;下降沿到来,Shift Register中的数据移入DAC A Register中
SETB LDA_AD8522
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -