⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad8522.asm

📁 串行DAC 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 + -