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

📄 ad9850.lst

📁 AD9850.rar
💻 LST
字号:
C51 COMPILER V7.10   AD9850                                                                08/17/2007 18:41:25 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE AD9850
OBJECT MODULE PLACED IN AD9850.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AD9850.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<math.h>
   2          #include<reg52.h>
   3          #include"12864_serial.h"
   4          #include"AD9850.H"
   5          #include "intrins.h"
   6          
   7          //unsigned char CON_word[5]; 
   8          //Word  data[7] data[6] data[5] data[4] data[3] data[2] data[1] data[0]
   9          //W0    Phase b         Phase b3        Phase b2        Phase b1        Phase b0        Power Down      Control     Control
  10          //W1    Freq-b31    Freq-b30    Freq-b29        Freq-b28        Freq-b27        Freq-b26        Freq-b25        Freq-b24
  11          //W2    Freq-b23        Freq-b22        Freq-b21        Freq-b20        Freq-b19        Freq-b18        Freq-b17        Freq-b16
  12          //W3    Freq-b15        Freq-b14        Freq-b13        Freq-b12        Freq-b11        Freq-b10        Freq-b9 Freq-b8
  13          //W4    Freq-b7     Freq-b6         Freq-b5         Freq-b4         Freq-b3         Freq-b2       
  14          //--------------------------------------------------------------------------------------------------
  15          // 函数名称: delay
  16          // 入口参数: N
  17          // 函数功能:延时子程序,实现(16*N+24)us的延时 
  18          // 系统采用12MHz的时钟时,延时满足要求,其它情况需要改动
  19          //--------------------------------------------------------------------------------------------------
  20            void delay(unsigned  int N)  
  21            {
  22   1        int i; 
  23   1        for(i=0;i<N;i++);
  24   1        }
  25          //--------------------------------------------------------------------------------------------------
  26          // 函数名称: WRITE_AD9850
  27          // 函数功能: 将控制字写入AD9850
  28          //--------------------------------------------------------------------------------------------------
  29          void WRITE_AD9850(unsigned char CON_word[5])
  30          {  
  31   1           unsigned char i;
  32   1           FQ_UD=0;
  33   1           W_CLK=0;
  34   1               delay(0);
  35   1               CON_word[0]=CON_word[0]&0xFC; //置工作方式选择位为00
  36   1           for(i=0;i<5;i++)
  37   1           {
  38   2           data_OUT=CON_word[i];      //送控制字 
  39   2           W_CLK=0;
  40   2           delay(0);
  41   2           W_CLK=1;                   //上升延
  42   2           delay(0);
  43   2           }
  44   1           FQ_UD=1;               //上升延要求AD9850改变输出
  45   1      } 
  46          
  47          
  48          /*
  49          void AD9850_init(void)
  50           {      
  51              reset=0;
  52                  reset=1;
  53                  fq_ud=0;
  54              w_clk=0;
  55                  reset=0;
C51 COMPILER V7.10   AD9850                                                                08/17/2007 18:41:25 PAGE 2   

  56                                             
  57                  WriteLCD(0x80,"    (AD9850)    ");
  58                  WriteLCD(0x90,"频率:000.000 HZ");
  59                  WriteLCD(0x88,"相位:  0     度");
  60                  WriteLCD(0x98,"  Just Do It... ");
  61            }*/
  62          /*
  63          void send_fivewords(unsigned char DATA[5])//顺序为F0_31,三位控制,P0_4)
  64           { unsigned char i;
  65             
  66             for(i=0;i<5;i++)
  67              { 
  68                    control_words=DATA[i];
  69                    w_clk=1; 
  70                    _nop_ ();
  71                    //for(i=0;i<100;i++);
  72                    w_clk=0;
  73                   }
  74                  fq_ud=1;
  75                  fq_ud=0;
  76                    
  77           } */
  78          void AD9850_DISPLAY(float F,float P)
  79           { unsigned char decimal_code[10]={'0','1','2','3','4','5','6','7','8','9'}     ;
  80   1         unsigned char display_tmp[8]={'0','0','0','.','0','0','0','\0'};
  81   1         unsigned char phasic[6]={'0','0','0','.','0','0'};
  82   1         unsigned int bufh,bufl;
  83   1         unsigned char i;
  84   1          if(F>=1000000)
  85   1           { F/=1000;
  86   2                 bufh=(unsigned int)(F/1000);
  87   2                 bufl=(unsigned int)(F-bufh*1000);
  88   2                     display_tmp[0]=decimal_code[bufh/100];  bufh%=100;
  89   2                         display_tmp[1]=decimal_code[bufh/10] ;  bufh%=10 ;
  90   2                         display_tmp[2]=decimal_code[bufh]    ;
  91   2                         display_tmp[4]=decimal_code[bufl/100] ;  bufl%=100 ;
  92   2                         display_tmp[5]=decimal_code[bufl/10]  ;  bufl%=10 ;
  93   2                         display_tmp[6]=decimal_code[bufl]     ;
  94   2                                 for(i=0;i<2;i++)
  95   2                                 if(display_tmp[i]=='0')
  96   2                                     display_tmp[i]=' ';
  97   2                                      else  break;
  98   2                                for(i=6;i>=4;i--)
  99   2                                      if(display_tmp[i]=='0')
 100   2                                     {
 101   3                                            display_tmp[i]=' ';
 102   3                                            if(i==4)display_tmp[3]=' ';
 103   3                                                else;
 104   3                                          }
 105   2                                      else  break;
 106   2                 WriteLCD(0x93,display_tmp);
 107   2                 WriteLCD(0x97,"M ");
 108   2                 }
 109   1                 else if(F>=1000)
 110   1                  {      bufh=(unsigned int) (F/1000);
 111   2                             bufl=(unsigned int)(F-bufh*1000);
 112   2                             display_tmp[0]=decimal_code[bufh/100]; bufh%=100;
 113   2                         display_tmp[1]=decimal_code[bufh/10] ; bufh%=10 ;
 114   2                         display_tmp[2]=decimal_code[bufh]    ;
 115   2                         display_tmp[4]=decimal_code[bufl/100] ; bufl%=100 ;
 116   2                         display_tmp[5]=decimal_code[bufl/10]  ;  bufl%=10 ;
 117   2                         display_tmp[6]=decimal_code[bufl]     ;
C51 COMPILER V7.10   AD9850                                                                08/17/2007 18:41:25 PAGE 3   

 118   2                                for(i=0;i<2;i++)
 119   2                                 if(display_tmp[i]=='0')
 120   2                                     display_tmp[i]=' ';
 121   2                                      else  break;
 122   2                                for(i=6;i>=4;i--)
 123   2                                      if(display_tmp[i]=='0')
 124   2                                     {display_tmp[i]=' ';
 125   3                                          if(i==4)display_tmp[3]=' ';
 126   3                                              else; }
 127   2                                      else  break;
 128   2                    WriteLCD(0x93,display_tmp);
 129   2                    WriteLCD(0x97,"K ");
 130   2                       }
 131   1                          else if(F>0)
 132   1                                  {   bufh=(unsigned int )F;
 133   2                                    bufl=(unsigned int)(F*1000-bufh*1000);
 134   2                            display_tmp[0]=decimal_code[bufh/100]; bufh%=100;
 135   2                            display_tmp[1]=decimal_code[bufh/10] ; bufh%=10 ;
 136   2                            display_tmp[2]=decimal_code[bufh]    ;
 137   2                            display_tmp[4]=decimal_code[bufl/100] ; bufl%=100 ;
 138   2                            display_tmp[5]=decimal_code[bufl/10]  ;  bufl%=10 ;
 139   2                            display_tmp[6]=decimal_code[bufl]     ;
 140   2                                     for(i=0;i<2;i++)
 141   2                                        if(display_tmp[i]=='0')
 142   2                                         display_tmp[i]=' ';
 143   2                                            else  break;
 144   2                                for(i=6;i>=4;i--)
 145   2                                      if(display_tmp[i]=='0')
 146   2                                     {display_tmp[i]=' ';
 147   3                                          if(i==4)display_tmp[3]=' ';
 148   3                                              else; }
 149   2                                      else  break;
 150   2                         WriteLCD(0x93,display_tmp);
 151   2                         WriteLCD(0x97,"HZ");
 152   2                                 
 153   2                                }
 154   1                                  if((unsigned int)(P*100)%100==0 )
 155   1                                       phasic[3]=0;
 156   1                                  bufh=(unsigned int )P;
 157   1                                      bufl=(unsigned int)(F*100-bufh*100);
 158   1                                 phasic[0]=decimal_code[bufh/100]  ;bufh%=100 ;
 159   1                         phasic[1]=decimal_code[bufh/10]   ;bufh%=10 ;
 160   1                         phasic[2]=decimal_code[bufh]    ;   
 161   1                         phasic[4]=decimal_code[bufl/10]    ;bufl%=10 ;
 162   1                         phasic[5]=decimal_code[bufl]; 
 163   1                                 for(i=0;i<2;i++)
 164   1                                 if(phasic[i]=='0')
 165   1                                     phasic[i]=' ';
 166   1                                      else  break;
 167   1                                for(i=5;i>=4;i--)
 168   1                                      if(phasic[i]=='0')
 169   1                                     {phasic[i]=' ';
 170   2                                          if(i==4)display_tmp[3]=' ';
 171   2                                              else; }
 172   1                                      else  break;    
 173   1                         WriteLCD(0x8B,phasic);      
 174   1        }
 175          
 176            void frequency_to_phase(unsigned long F,unsigned char DATA[5])//转换为DATA[1]-----DATA[4]
 177            {             unsigned long phase;
 178   1             phase=F/125.0/1000*1024.0/1000*1024.0*4096;
 179   1                 DATA[1]=phase/16777216; 
C51 COMPILER V7.10   AD9850                                                                08/17/2007 18:41:25 PAGE 4   

 180   1                 DATA[2]=phase/65536;    
 181   1                 DATA[3]=phase/256;      
 182   1                 DATA[4]=phase;                
 183   1          
 184   1      
 185   1         }
 186          void phasic_to_phase(float P ,unsigned char DATA[5]) //转换为DATA[0]的高5位
 187             { 
 188   1           DATA[0]=(unsigned char)(P/11.25+0.5)<<3;
 189   1               
 190   1          }
 191          /***************串行程序*********************/
 192          /*
 193          void DDS_set_freq (void)
 194            {
 195                  unsigned char byte_temp;
 196                  unsigned long freq_word =0x0505AAFF ;//频率控制字
 197                  float    fTemp;
 198                  fTemp=mulFreq;
 199                  fTemp=fTemp*65536/DDS_CLK_IN*65536;
 200                  freq_word =fTemp;
 201                  //freq_word =(float)mulFreq*65536/DDS_CLK_IN*65536;
 202          
 203                  _nop_(); _nop_(); _nop_(); _nop_();
 204                  DDS_UPDATE = 0;
 205                  _nop_(); _nop_(); _nop_(); _nop_();
 206                  DDS_CLK = 0;
 207                  _nop_(); _nop_(); _nop_(); _nop_();
 208          
 209                  for ( byte_temp = 0; byte_temp < 32; byte_temp++ )
 210                  {
 211                          freq_word = freq_word >> 1;
 212                          DDS_DATA = CY;
 213                          DDS_CLK = 1;
 214                          _nop_(); _nop_(); _nop_(); _nop_(); //实际应用应在延迟
 215                          DDS_CLK = 0;
 216                  }
 217                  for ( byte_temp = 0; byte_temp < 8; byte_temp++ )
 218                  {
 219                          DDS_DATA = 0;
 220                          DDS_CLK = 1;
 221                          _nop_(); _nop_(); _nop_(); _nop_();
 222                          DDS_CLK = 0;
 223                  }
 224          
 225                  DDS_UPDATE = 1;
 226                  _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 227                  DDS_UPDATE = 0;
 228          } */
 229          
 230          void init_dds(void)
 231          {
 232   1              DDS_RESET=0;
 233   1              delay(2);
 234   1              DDS_RESET=1;
 235   1              delay(2);
 236   1              DDS_RESET=0;
 237   1              WriteLCD(0x80,"    (AD9850)    ");
 238   1              WriteLCD(0x90,"频率:000.000 HZ");
 239   1              WriteLCD(0x88,"相位:  0     度");
 240   1              WriteLCD(0x98,"  Just Do It... ");
 241   1      /***************串行初始化程序*****************/
C51 COMPILER V7.10   AD9850                                                                08/17/2007 18:41:25 PAGE 5   

 242   1      /*
 243   1              DDS_DATA=0;
 244   1              DDS_CLK=0;
 245   1              DDS_UPDATE=0;
 246   1              DDS_UPDATE=1;
 247   1              DDS_UPDATE=0;
 248   1      
 249   1              DDS_CLK=1;
 250   1              DDS_CLK=0;
 251   1              DDS_UPDATE=1;
 252   1              DDS_UPDATE=0;
 253   1      
 254   1              mulFreq=0;
 255   1              DDS_set_freq(); */
 256   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1680    ----
   CONSTANT SIZE    =    101    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      51
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -