{ int i,temp,A(幅值)
while(1)
{ for(i=0i<=Ai++)
{temp=(int(sin(i*90/A))*常数 这里好好理解下
延时(自定时间)(正半周)
AD芯片驱动函数(temp)
}
for(i=0i<=Ai++)
{ temp=—(int(sin(i*90/A))*常数 (负半周)
延时(自定时间)
AD芯片驱动函数(temp)
}
}
延时函数(int :时间值)带参
{...
}
AD芯片驱动程序(带参(参数为AD输出模拟量大小所代表的数值 注意 这里这个参数应该体现temp的正负值引起AD输出模拟信号方向的改变))
{...
}
纯手打 求采纳
程序在下面:
ORG 0000H
START: LJMP MAIN
ORG 0003H
LJMP INSER
ORG 0030H
MAIN: MOV DPTR,#7FFFH
SETB EX0
SETB IT0
SETB EA
HEHE: JB 20H.0,ST
JB 20H.1,TRI
JB 20H.2,SQ
JB 20H.3,SIN
SJMP HEHE
INSER: JNB P1.0,LL1
SJMP L1
LL1: MOV 20H,#00H
SETB 20H.0
RETI
L1: JNB P1.2,LL2
SJMP L2
LL2: MOV 20H,#00H
SETB 20H.1
RETI
L2: JNB P1.4,LL3
SJMP L3
LL3: MOV 20H,#00H
SETB 20H.2
RETI
L3: JNB P1.6,LL4
RETI
LL4: MOV 20H,#00H
SETB 20H.3
RETI
ST: MOV A,#00H
LOOP: MOVX @DPTR,A
INC A
AJMP LOOP
TRI: MOV A,#00H
UP: MOVX @DPTR,A
INC A
CJNE A,#0FFH,UP
DOWN: MOVX @DPTR,A
DEC A
CJNE A,#00H,DOWN
AJMP UP
SQ: MOV A,#0FFH
MOVX @DPTR,A
ACALL DELAY1
MOV A,#7FH
MOVX @DPTR,A
ACALL DELAY2
AJMP SQ
DELAY1: MOV R4,#0FFH
LOOP7: MOV R5,#10H
LOOP8: NOP
DJNZ R5,LOOP2
DJNZ R4,LOOP1
RET
DELAY2: MOV R4,#0FFH
LOOP5: MOV R5,#10H
LOOP6: NOP
DJNZ R5,LOOP6
DJNZ R4,LOOP5
RET
SIN: MOV DPTR,#SINTAB
MOV R0,#6DH
LOOP0: CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
CJNE R0,#80H,LOOP0
MOV DPTR,#7FFFH
MOV R0,6DH
LOOP1: MOV A,@R0
MOVX @DPTR,A
INC R0
CJNE R0,#7FH,LOOP1
LOOP2: MOV A,@R0
MOVX @DPTR,A
DEC R0
CJNE R0,#6DH,LOOP2
LOOP3: MOV A,@R0
CPL A
MOVX @DPTR,A
INC R0
CJNE R0,#7FH,LOOP3
LOOP4: MOV A,@R0
CPL A
MOVX @DPTR,A
DEC R0
CJNE R0,#6DH,LOOP4
SJMP LOOP1
SINTAB: DB 7FH,89H,94H,9FH,0AAH,0B4H,0BEH,0C8H,0D1H,0D9H
DB 0E0H,0E7H,0EDH,0F2H,0F7H,0FAH,0FCH,0FEH,0FFH
END
第一步,查看芯片手册配置SPI工作方式,控制芯片的SPI工作方式必须和AD9833的一样。第二步,使用厂商做好的函数进行AD9833的设置。(我没有用过AD9833)但是带串行接口的芯片一般都需要设置一下,怎么设置需要看AD手册了。
第三步,向AD发送你想要输出的数字量吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)