標(biāo)題: 51單片機(jī)AD9833正弦波方波和三角波程序 [打印本頁]

作者: qewtggg    時(shí)間: 2019-5-4 14:40
標(biāo)題: 51單片機(jī)AD9833正弦波方波和三角波程序
STC89C51控制AD9833產(chǎn)生正弦波,頻率可調(diào)

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define BITB 0x08000
  4. sbit fsync=P1^4;//引腳定義
  5. sbit sdata=P1^6;//引腳定義
  6. sbit sclk=P1^2;

  7. #define DDS_SCLK_UP sclk=1                 //串行時(shí)鐘 上升
  8. #define DDS_SLCK_DOWN sclk=0        //
  9. #define DDS_SDATA_UP sdata=1        //串行數(shù)據(jù) 上升
  10. #define DDS_SDATA_DOWN sdata=0        //
  11. #define DDS_FSYNC_UP  fsync=1        //控制輸入 上升
  12. #define DDS_FSYNC-DOWN fsync=0        //

  13. unsigned int Config_Data[B];

  14. void delay2us(unsigned char i)
  15. {
  16.         while(--i);
  17. }

  18. void writeDDS2Byte(unsigned int config)    //寫入兩個(gè)數(shù)據(jù)
  19. {
  20.                 unsigned char i;
  21.                 DDS_SLCK_DOWN;
  22.                 _nop_();
  23.                 DDS_FSYNC_UP;
  24.                 _nop_();
  25.                 DDS_SLCK_up;
  26.                 delay2us(1);
  27.                 DDS_FSYNC_DOWN;
  28.                 _nop_();
  29.                 for(i=0;i<16;i++)
  30.                 {
  31.                         if(config&0x8000) DDS_SDATA_UP;
  32.                        
  33.                         else DDS_SDATA_DOWN;
  34.                         delay2us(1);
  35.                         DDS_SLCK_DOWN;
  36.                         delay2us(1);
  37.                         DDS_SLCK_up;
  38.                         config<=0;
  39.                        
  40.                 }
  41.                 DDS_FSYNC_UP;
  42.                 _nop_();
  43.                 DDS_SLCK_DOWN;
  44.                 delay2us(100);

  45. }

  46. //波形發(fā)生器
  47. //入口參數(shù):頻率:Freq(=12000000)
  48. //形狀:0(正弦波),1(三角波),2(方波)
  49. //默認(rèn):Fmclk=25MHz,0移相,方波不分頻

  50. void waveGennerrate(unsigned long Freq,unsigned char Shape)
  51. {
  52.         unsigned long temp;
  53.         unsigned char k;
  54.         if(Freq>12000000) Freq=12000000;
  55.         switch(Shape)
  56.         {
  57.                 case 0: Config_Data[0]=0x2108;        //正弦波
  58.                                 Config_Data[7]=0x2008;
  59.                                 break;
  60.                                
  61.                 case 1: Config_Data[0]=0x210A;        //三角波
  62.                                 Config_Data[7]=0x200A;
  63.                                 break;       
  64.                                
  65.                 case 2: Config_Data[0]=0x2128;        //方波
  66.                                 Config_Data[7]=0x2028;
  67.                                 break;       

  68.                 default: Config_Data[0]=0x2108;        //正弦波
  69.                                 Config_Data[7]=0x2008;
  70.                                        
  71.         }
  72.        
  73.         temp=Freq*13.4217728;//temp=Freq*(0x10000000/20000000);
  74.         Config_Data[1]=temp&0x3fff;
  75.         Config_Data[3]=Config_Data[1];
  76.         Config_Data[2]=(temp&0xfffC000)>>14;
  77.         Config_Data[4]=Config_Data[2];
  78.        
  79.         Config_Data[1]=Config_Data[1]|0x4000;
  80.         Config_Data[2]=Config_Data[2]|0x4000;
  81.         Config_Data[3]=Config_Data[3]|0x8000;
  82.         Config_Data[4]=Config_Data[4]|0x8000;
  83.         Config_Data[5]=0xC000;
  84.         Config_Data[6]=0xE000;
  85.        
  86.        
  87.         for(k=0;k<8;k++)
  88.         {
  89.                 writeDDS2Byte(Config_Data[k]);
  90.         }
  91.        
  92.         /*for(;;){
  93.         writeDDS2Byte(oxc000);
  94.         for(k=200;k;k--);
  95.         writeDDS2Byte(oxc000|2047);
  96.         for(k=200;k;k--);
  97.         }*/

  98. }



  99. void DDS_2FSK(unsigned long freq1,unsigned long freq2,unsigned char shape)
  100. {
  101.         unsigned long temp;
  102.         unsigned char k;
  103.         if(freq1>12000000)  freq1(12000000);
  104.         if(freq2>12000000)  freq2(12000000);
  105.        
  106.         switch(shape)
  107.         {
  108.                 case 0: Config_Data[0]=0x2108;
  109.                                 Config_Data[7]=0x2008;
  110.                                 break;
  111.                                
  112.                 case 1: Config_Data[0]=0x210A;
  113.                                 Config_Data[7]=0x200A;
  114.                                 break;       
  115.                                
  116.                 case 2: Config_Data[0]=0x2128;
  117.                                 Config_Data[7]=0x2028;
  118.                                 break;       

  119.                 default: Config_Data[0]=0x2108;
  120.                                 Config_Data[7]=0x2008;
  121.                                        
  122.         }
  123.         temp=Freq*13.4217728;//temp=Freq*(0x10000000/20000000);
  124.         Config_Data[1]=temp&0x3fff;
  125.         Config_Data[3]=Config_Data[1];
  126.         Config_Data[2]=(temp&0xfffC000)>>14;
  127.         Config_Data[4]=Config_Data[2];
  128.        
  129.         Config_Data[1]=Config_Data[1]|0x4000;
  130.         Config_Data[2]=Config_Data[2]|0x4000;
  131.         Config_Data[3]=Config_Data[3]|0x8000;
  132.         Config_Data[4]=Config_Data[4]|0x8000;
  133.         Config_Data[5]=0xC000;
  134.         Config_Data[6]=0xE000;
  135. ……………………

  136. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
STC89C51_AD9833.rar (24.16 KB, 下載次數(shù): 165)



作者: qewtggg    時(shí)間: 2019-5-4 14:41
頂一個(gè),良心之作!
作者: lseo    時(shí)間: 2019-8-9 20:34
報(bào)錯(cuò)*********
作者: 光凌1997    時(shí)間: 2019-9-30 21:55
從哪里識(shí)別復(fù)制了一段?很多地方都是錯(cuò)的。DDS_FSYNC_DOWN抄成了DDS_FSYNC-DOWN ,Config_Data[8]定義的長(zhǎng)度為8,抄成了B。。但總的代碼還是很值的借鑒的,大家改一下就行了。
作者: Straw    時(shí)間: 2020-10-17 21:01
錯(cuò)誤好多。。。。。
作者: Straw    時(shí)間: 2020-10-17 21:02
錯(cuò)誤好多,改都要改好久

作者: liaoym    時(shí)間: 2020-11-22 14:59
Straw 發(fā)表于 2020-10-17 21:02
錯(cuò)誤好多,改都要改好久

改好了嗎?麻煩傳一個(gè)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1