求51单片机控制AD9833输出正弦波的程序啊,最好有仿真图,谢谢

求51单片机控制AD9833输出正弦波的程序啊,最好有仿真图,谢谢,第1张

你直接用个sin 函数写啊 设定一个幅值 然后使用一个延时 幅值的大小决定振幅 延时的大小决定频率 我随手写写:

{ 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发送你想要输出的数字量吧。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7825027.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存