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

📄 ad9850.lst

📁 直接频率合成技术dds
💻 LST
字号:
C51 COMPILER V7.05   AD9850                                                                06/01/2008 17:16:59 PAGE 1   


C51 COMPILER V7.05, COMPILATION OF MODULE AD9850
OBJECT MODULE PLACED IN ad9850.OBJ
COMPILER INVOKED BY: C:\silabs\IDEfiles\C51\BIN\C51.exe ad9850.c DB OE

stmt level    source

*** WARNING C500 IN LINE 1 OF AD9850.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
   1          #include <c8051f120.h>
   2          #include <intrins.h>
   3          #include<ABSACC.H>  
   4          //-----------------------定义管脚--------------------------------------------------------
   5          #define  data_OUT P0
   6          #define  keypad   P3
   7          
   8          sbit FQ_UD = P2^5;          //AD9850信号更新申请 
   9          sbit W_CLK = P2^6;          //写控制字时钟
  10          sbit SETRST= P2^7;
  11          sbit led = P1^6;
  12          unsigned char key;
  13          unsigned char CON_word[5]; 
  14          const ksp[4]={0XF7,0XFB,0XFD,0XFE};//扫描码
  15          const keycode[]={0X7D,0XE7,0XEB,0XED,0XD7,0XDB,0XDD,0XB7,0XBB,0XBD,
  16                           0XEE,0XDE,0XBE,0X7E,0X77,0X7B};//参考键值
  17          //-----------------------------------------------------------------------------
  18          //         P3.3  P3.2   P3.1    P3.0
  19          //          |      |      |        |
  20          //P3.4---1---2---3---A(+)----
  21          //          |      |      |        |
  22          //P3.5---4---5---6---B(-)----
  23          //          |      |      |        |
  24          //P3.6---7---8---9---C(Enter)--
  25          //          |      |      |        |
  26          //P3.7---E---F---0---D(Clr)---
  27          //---------------------------------------------------------------------------   
  28          
  29          void Oscillator_Init()
  30          {
  31   1          int i = 0;
  32   1          SFRPAGE   = CONFIG_PAGE;
  33   1          OSCXCN    = 0x77;
  34   1          for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
  35   1          while ((OSCXCN & 0x80) == 0);
  36   1          CLKSEL    = 0x01;
  37   1      }
  38          void Port_IO_Init()
  39          {
  40   1          SFRPAGE   = CONFIG_PAGE;
  41   1          P0MDOUT   = 0xFF;
  42   1              P1MDOUT   = 0xFF;
  43   1              P3MDOUT   = 0x0F;
  44   1              P2MDOUT   = 0xFF;
  45   1          XBR2      = 0x40;
  46   1      
  47   1      
  48   1      }
  49          void Init_Device(void)
  50          {
  51   1          Port_IO_Init();
  52   1          Oscillator_Init();
  53   1      }
  54          //--------------------------------------------------------------------------------------------------
C51 COMPILER V7.05   AD9850                                                                06/01/2008 17:16:59 PAGE 2   

  55          // 函数名称: delay
  56          // 入口参数: N
  57          // 函数功能:延时子程序,实现(16*N+24)us的延时 
  58          // 系统采用11.0592MHz的时钟时,延时满足要求,其它情况需要改动
  59          //--------------------------------------------------------------------------------------------------
  60            void delay(unsigned  int N)  
  61            {
  62   1        int i; 
  63   1        for(i=N;i>0;i--);
  64   1        }
  65          
  66           
  67          void jisuan(unsigned long frequence);
  68          void WRITE_AD9850(void);
  69          unsigned char keypad_scan();
  70          unsigned long keypad_data();
  71          //--------------------------------------------------------------------------------------------------
  72          // 函数名称:main
  73          // 用户主函数
  74          // 函数功能:主函数
  75          //--------------------------------------------------------------------------------------------------
  76          void main()
  77               {
  78   1                long freq;
  79   1                   // disable watchdog timer
  80   1             WDTCN = 0xde;
  81   1             WDTCN = 0xad;
  82   1                 Init_Device();
  83   1             led=0;
  84   1                 jisuan(9000000);
  85   1             WRITE_AD9850();
  86   1             FQ_UD=0;
  87   1             delay(150);
  88   1                 while(1){
  89   2             if(keypad_scan()==0x0e)
  90   2                 { 
  91   3                   led=~led;
  92   3                   freq=keypad_data();
  93   3                   jisuan(freq);
  94   3               WRITE_AD9850();
  95   3                       FQ_UD=0;
  96   3                       delay(150);
  97   3             }
  98   2      
  99   2          }
 100   1                
 101   1        }
 102          //  -----------------计算频率------------------------//
 103            void jisuan(unsigned long frequence)
 104           {
 105   1        long freq;
 106   1        freq=85.89934592*frequence; //使用50M晶振,frequence就是所要输出的频率
 107   1        CON_word[1]=(freq&(0xff000000))>>24;    //用与控制频率的高8位
 108   1        CON_word[2]=(freq&(0x00ff0000))>>16;   //用与控制频率的中8位
 109   1        CON_word[3]=(freq&(0x0000ff00))>>8;    //用与控制频率的中8位
 110   1        CON_word[4]=freq&(0x000000ff);     //用与控制频率的低8位
 111   1        }
 112            //--------------------------------------------------------------------------------------------------
 113          // 函数名称: WRITE_AD9850
 114          // 函数功能: 将控制字写入AD9850
 115          //--------------------------------------------------------------------------------------------------
 116          void WRITE_AD9850(void)
C51 COMPILER V7.05   AD9850                                                                06/01/2008 17:16:59 PAGE 3   

 117          {  
 118   1           unsigned char i;
 119   1           W_CLK=0; 
 120   1               FQ_UD=0;
 121   1           delay(0);
 122   1               SETRST=1;
 123   1               delay(0);
 124   1              SETRST=0;
 125   1               CON_word[0]=CON_word[0]&0xfc; //置工作方式选择位为00 
 126   1              
 127   1           for(i=0;i<5;i++)
 128   1           {
 129   2                   W_CLK=0;
 130   2                       data_OUT=CON_word[i];      //送控制字                                                      
 131   2                   delay(0);  
 132   2                   W_CLK=1;                   //上升延
 133   2                       delay(0);
 134   2                W_CLK=0;
 135   2                  
 136   2           }
 137   1          // delay(0);
 138   1           FQ_UD=1;               //上升延要求AD9850改变输出
 139   1      
 140   1      } 
 141            
 142          //------------------键盘扫描------------------------//
 143          //-----------------------------------------------------------------------------
 144          //         P3.3  P3.2   P3.1    P3.0
 145          //          |      |      |        |
 146          //P3.4---1---2---3---A(+)----
 147          //          |      |      |        |
 148          //P3.5---4---5---6---B(-)----
 149          //          |      |      |        |
 150          //P3.6---7---8---9---C(Enter)--
 151          //          |      |      |        |
 152          //P3.7---E---F---0---D(Clr)---
 153          //---------------------------------------------------------------------------   
 154          //---------------------------------------------------------------------------   
 155          unsigned char keypad_scan()
 156          {
 157   1        unsigned char i,j;
 158   1       
 159   1        P3=0Xf0;
 160   1        while(P3!=0XF0);//检查键盘是否有键按下  
 161   1         do
 162   1         { 
 163   2           for(i=0;i<=3;i++)
 164   2              {
 165   3               P3=ksp[i];
 166   3               if(P3!=ksp[i])//检查第i行是否有键按下
 167   3                  {
 168   4                   delay(100);
 169   4                       key=P3;    //读键值
 170   4                       if(key!=ksp[i])//确认有键按下
 171   4                         { 
 172   5                                 for(j=0;j<16;j++)
 173   5                                 {      
 174   6                               if(key==keycode[j]) 
 175   6                                   return (j);                   
 176   6                                 }
 177   5                     return (0x10);
 178   5                          }
C51 COMPILER V7.05   AD9850                                                                06/01/2008 17:16:59 PAGE 4   

 179   4              } 
 180   3          }
 181   2      
 182   2         }
 183   1        while(1); 
 184   1       
 185   1      }
 186          
 187          
 188          unsigned long keypad_data()
 189          {  
 190   1         unsigned char temp1;
 191   1         unsigned long temp=0;
 192   1         
 193   1         while(keypad_scan()!=0X0C)
 194   1      
 195   1         {
 196   2          temp1=keypad_scan();
 197   2              if(temp1>=0&&temp1<=9)
 198   2              {
 199   3              led=~led;
 200   3              temp=temp*10+temp1;
 201   3               }
 202   2         }
 203   1         led=~led;
 204   1      
 205   1         return(temp);
 206   1      }
 207          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    465    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     46      13
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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