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

📄 ad9954.lst

📁 1、直接数字频率合成的单片机代码。 2、重要采用ADI公司提出的DDS芯片AD9954来实现直接数字频率合成。
💻 LST
📖 第 1 页 / 共 2 页
字号:
 195   1      }
 196          
 197          
 198          
 199          /***********************************************************************
 200          ** 函数名称:    RW_Reg
 201          ** 功能描述:    AD9954读写寄存器操作
 202          ** 输 入:      unsigned char addr  寄存器地址
 203          **              unsigned char *buf  写寄存器: 指向发送数据的指针
 204          **                                  读寄存器: 指向读回数据的指针
 205          **              unsigned char num   发送或读回的数据长度 num Byte
 206          **              unsigned char rw    读写选择 1 读  0 写
 207          ** 输 出:      无
 208          ** 全局变量:    无
 209          ** 调用模块:    ReadByte  WriteByte
 210          ***********************************************************************/
 211          void RW_Reg(unsigned char addr,unsigned char *buf,unsigned char num,
 212                      unsigned char rw)
 213          {
 214   1       unsigned char ins;// instruction byte
 215   1       if(rw == 1)
 216   1         {
 217   2          ins = addr | 0x80;
 218   2          WriteByte(ins);
 219   2           do{
 220   3                 buf[num-1] = ReadByte();
 221   3                 num--;
 222   3                 nNop(5);
 223   3            }
 224   2          while(num);
 225   2         }
 226   1       else
 227   1         {
 228   2           ins = addr;
 229   2           WriteByte(ins);
 230   2              do{
 231   3                 WriteByte(buf[num-1]);
 232   3                 num--;
 233   3                 nNop(5);
 234   3                }
 235   2              while(num);   
 236   2         }
 237   1      }
 238          
 239          
 240          /***********************************************************************
 241          ** 函数名称:    AD9954_Write_Reg
C51 COMPILER V7.09   AD9954                                                                08/24/2007 09:36:16 PAGE 5   

 242          ** 功能描述:    AD9954写寄存器操作
 243          ** 输 入:      unsigned long command  写入寄存器的指令
 244          **              unsigned char num      发送或读回的数据长度 num Byte
 245          **              unsigned char addr     寄存器地址
 246          ** 输 出:      无
 247          ** 全局变量:    无
 248          ** 调用模块:    RW_Reg
 249          ***********************************************************************/
 250          void AD9954_Write_Reg(unsigned long command,unsigned char num,unsigned char addr)
 251          {
 252   1        unsigned char temp_com[5] = {0,0,0,0,0};
 253   1        unsigned char i;
 254   1        unsigned long temp;
 255   1        temp = command;
 256   1        for(i = 0;i < num;i++)
 257   1        {
 258   2          temp_com[i] = (temp & 0xff);
 259   2          temp = temp >> 8;
 260   2        } 
 261   1        RW_Reg(addr,temp_com,num,0);
 262   1      }
 263          
 264          
 265          
 266          /***********************************************************************
 267          ** 函数名称:    FTW_Float
 268          ** 功能描述:    将浮点型频率值MHZ 转换成频率控制字
 269          ** 输 入:      float freqfloat    浮点型频率值MHZ        
 270          ** 输 出:      unsigned long      4 byte 频率控制字
 271          ** 全局变量:    无
 272          ** 调用模块:    无
 273          ***********************************************************************/
 274          unsigned long FTW_Float(float freqfloat)
 275          {
 276   1        unsigned long temp = 0;
 277   1        float freqf = 0;
 278   1        freqf = freqfloat / 400;    //AD9954主频400MHZ
 279   1        temp = (freqf * multfreq);
 280   1        return(temp);
 281   1      }
 282          
 283          /***********************************************************************
 284          ** 函数名称:    更新寄存器操作
 285          ** 功能描述:    每次更新寄存器的固定操作
 286          ** 输 入:      无      
 287          ** 输 出:      无
 288          ** 全局变量:    无
 289          ** 调用模块:    无
 290          ***********************************************************************/
 291          void AD9954_Updata_First(void)
 292          {
 293   1       IO9954_Init();
 294   1       CS_Enable();
 295   1       IO_SYNC_1();
 296   1       nNop(40);
 297   1       IO_SYNC_0();
 298   1       IO_UPDATE_0();
 299   1      }
 300          
 301          void AD9954_Updata_Final(void)
 302          {
 303   1       CS_Disable();
C51 COMPILER V7.09   AD9954                                                                08/24/2007 09:36:16 PAGE 6   

 304   1       nNop(20);
 305   1       IO_UPDATE_1(); 
 306   1      }
 307          
 308          
 309          /*****************************************************************************
 310          *                                 Single-Tone Mode
 311          ******************************************************************************/
 312          /***********************************************************************
 313          ** 函数名称:    AD9954_SingleTone_Init
 314          ** 功能描述:    AD9954 Single-Tone Mode  初始化 
 315          ** 输 入:      无       
 316          ** 输 出:      无
 317          ** 全局变量:    CFR1 CFR2   AD9954 功能控制寄存器
 318          ** 调用模块:    AD9954_Write_Reg
 319          ***********************************************************************/
 320          void AD9954_SingleTone_Init(void)
 321          { 
 322   1       CFR1 = 0x00000000;
 323   1       AD9954_Updata_First();
 324   1       AD9954_Write_Reg(CFR2,3,0x01);    //控制寄存器2
 325   1       AD9954_Write_Reg(CFR1,4,0x00);    //控制寄存器1
 326   1       AD9954_Updata_Final();
 327   1      }
 328          
 329          /***********************************************************************
 330          ** 函数名称:    AD9954_SingleTone_Freq
 331          ** 功能描述:    更新频率控制
 332          ** 输 入:      无       
 333          ** 输 出:      无
 334          ** 全局变量:    FTW0
 335          ** 调用模块:    AD9954_Write_Reg   更新寄存器操作
 336          ***********************************************************************/
 337          void AD9954_SingleTone_Freq(float freq)
 338          { 
 339   1       FTW0 = FTW_Float(freq);
 340   1       AD9954_Updata_First();
 341   1       AD9954_Write_Reg(FTW0,4,0x04);      //设置全局输出频率
 342   1       AD9954_Updata_Final();
 343   1      }
 344          
 345          
 346          
 347          /***********************************************************************
 348          ** 函数名称:    AD9954_Amplitude_Change
 349          ** 功能描述:    手动改变输出幅度
 350          ** 输 入:      无       
 351          ** 输 出:      无
 352          ** 全局变量:    ASF
 353          ** 调用模块:    AD9954_Write_Reg   更新寄存器操作
 354          ***********************************************************************/
 355          void AD9954_Amplitude_Change(void)
 356          {
 357   1        CFR1 |= OSKEN;
 358   1        CFR1 &= ~AOSK;
 359   1        AD9954_Updata_First();
 360   1        AD9954_Write_Reg(CFR1,4,0x00);          
 361   1        AD9954_Write_Reg(ASF,2,0x02);
 362   1        AD9954_Updata_Final();
 363   1      }
 364          
 365          
C51 COMPILER V7.09   AD9954                                                                08/24/2007 09:36:16 PAGE 7   

 366          
 367          /***********************************************************************
 368          ** 函数名称:    AD9954_Phase_Change
 369          ** 功能描述:    改变输出相角  0<=phase<=360
 370          ** 输 入:      double phase  浮点型相角值      
 371          ** 输 出:      无
 372          ** 全局变量:    POW0
 373          ** 调用模块:    AD9954_Write_Reg   更新寄存器操作
 374          ***********************************************************************/
 375          void AD9954_Phase_Change(double phase)  //   0<=phase<=360
 376          {
 377   1        POW0=(unsigned int)(phase*45.511111111);
 378   1        AD9954_Updata_First();    
 379   1        AD9954_Write_Reg(POW0,2,0x05);
 380   1        AD9954_Updata_Final();
 381   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    738    ----
   CONSTANT SIZE    =      5    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     44      42
   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 + -