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

📄 dds.lst

📁 KeilC51编程,51与DDS芯片 AD9850的接口程序.包括对DDS的初始化以及输出控制.
💻 LST
字号:
C51 COMPILER V7.06   DDS                                                                   09/06/2005 21:14:35 PAGE 1   


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

stmt level    source

   1          #include <absacc.h>
   2          #include <reg51.h>
   3          #include <intrins.h>
   4          #include <stdio.h>
   5          #include <DDS9834.h>
   6          
   7          /*////////////////////////////*/
   8          /*/                     常量定义         /*/
   9          /*////////////////////////////*/
  10          
  11          /* 定时器初值 */
  12          #define V_T1   0xfd   /*SCOM  9600 baud,  ! notice: crystal 11.0592MHz */
  13          #define V_TH0   0xee  /*   ~ 5ms ,  ! notice: crystal 11.0592MHz */
  14          #define V_TL0   0x00
  15          
  16          /* 1s软件定时器溢出值,200个5ms */
  17          #define V_T1s   200
  18          
  19          /* 数码管段驱动寄存器地址 */
  20          #define ADDR_8SEG       XBYTE[0x2000]
  21          
  22          /* 数码管位驱动和指示灯驱动寄存器地址 */
  23          #define ADDR_SEL        XBYTE[0x4000] 
  24          
  25          /* 按键 */
  26          sbit KEY1=      P1^0;
  27          sbit KEY2=      P1^1;
  28          sbit KEY3=      P1^2;
  29          sbit KEY4=      P1^3;
  30          
  31          sbit SCL =P1^5;
  32          sbit SDA =P1^7;
  33          
  34          /*////////////////////////////*/
  35          /*/                     变量定义         /*/
  36          /*////////////////////////////*/
  37          
  38          /* 1s软件定时器计数 */
  39          unsigned char clock1s;
  40          /* 1s软件定时器溢出标志,位变量 */
  41          bit clock1s_flag;
  42          
  43          /* 数码管位驱动和指示灯驱动信号输出缓存,定义了一个可位寻址的变量 */
  44          unsigned char bdata output_sel;
  45                  sbit led_1 = output_sel^5;
  46                  sbit led_2 = output_sel^6;
  47                  sbit led_3 = output_sel^7;
  48                  sbit led_4 = output_sel^4;
  49          
  50          /* 数码管扫描驱动指针,为测试外部存储器(U3 6264),特使用xdata类型 */
  51          unsigned char xdata digi_scaner;
  52          
  53          /* 测试用计数器,为测试外部存储器(U3 6264),特使用xdata类型 */
  54          unsigned int xdata test_counter;
  55          /* 测试用计数值十进制表示,为测试外部存储器(U3 6264),特使用xdata类型 */
C51 COMPILER V7.06   DDS                                                                   09/06/2005 21:14:35 PAGE 2   

  56          unsigned char xdata digi[4];
  57          
  58          ////////////////////////////////////////////////////////////////
  59          ////////////////////////////////////////////////////////////////
  60          
  61          
  62          /*////////////////////////////*/
  63          /*/                     函数定义         /*/
  64          /*////////////////////////////*/
  65          
  66          /**** 7段数码显示译码 
  67              参数:
  68                          DATA: 需要显示的数字或符号;
  69                  返回值: 7段译码结果 ( D7~0 = PGFEDCBA )
  70          *****/
  71          unsigned char NUMTOSEG7(unsigned char DATA)
  72          { unsigned char AA;
  73   1        switch (DATA)
  74   1        { case 0: AA=0xc0;break; /* ‘0’*/
  75   2          case 1: AA=0xf9;break; /* ‘1’*/
  76   2          case 2: AA=0xa4;break; /* ‘2’*/
  77   2          case 3: AA=0xb0;break; /* ‘3’*/
  78   2          case 4: AA=0x99;break; /* ‘4’*/
  79   2          case 5: AA=0x92;break; /* ‘5’*/
  80   2          case 6: AA=0x82;break; /* ‘6’*/
  81   2          case 7: AA=0xf8;break; /* ‘7’*/
  82   2          case 8: AA=0x80;break; /* ‘8’*/
  83   2          case 9: AA=0x90;break; /* ‘9’*/
  84   2          case 10: AA=0x88;break; /* ‘A’*/
  85   2          case 11: AA=0x83;break; /* ‘B’*/
  86   2          case 12: AA=0xc6;break; /* ‘C’*/
  87   2          case 13: AA=0xa1;break; /* ‘D’*/
  88   2          case 14: AA=0x86;break; /* ‘E’*/
  89   2          case 15: AA=0x8e;break; /* ‘F’*/
  90   2          case '-':AA=0xdf;break; /* 破折号*/
  91   2          case '_':AA=0xf7;break; /* 下划线*/
  92   2          case ' ':AA=0xff;break; /* 消隐*/
  93   2          default: AA=0xff;
  94   2        }
  95   1        return(AA);
  96   1      }
  97          
  98          
  99          
 100          /**** T0时钟中断服务程序
 101                  在本例中,每5ms被执行一次
 102          *****/
 103          
 104          timer0() interrupt 1 using 0         
 105          {
 106   1              EA=0;  /*关中断*/
 107   1      
 108   1              /* 重新对计数器赋初值,并启动定时计数 */
 109   1              TH0=V_TH0;
 110   1          TL0=V_TL0;
 111   1          TR0=1;
 112   1      
 113   1              /* 1秒钟软定时器计数 */
 114   1              if (++clock1s>=V_T1s)
 115   1              {
 116   2                      clock1s_flag = 1; /*当1秒到时,溢出标志置1 */
 117   2                      clock1s = 0;
C51 COMPILER V7.06   DDS                                                                   09/06/2005 21:14:35 PAGE 3   

 118   2              }
 119   1      
 120   1              output_sel = 0xf0; /*初值,令数码管驱动位无效,指示灯全灭*/
 121   1      
 122   1              /* 检测到按键被按下(0)时,相应的指示灯亮(0) */
 123   1              if (KEY1==0) led_1 = 0;
 124   1              if (KEY2==0) led_2 = 0;
 125   1              if (KEY3==0) led_3 = 0;
 126   1              if (KEY4==0) led_4 = 0;
 127   1      
 128   1              /* 数码管扫描驱动指针值从1到4重复变换,每5ms间隔对一个数码管进行驱动,20ms一个轮回 */
 129   1              if (++digi_scaner>=5) digi_scaner = 1;
 130   1              switch (digi_scaner)
 131   1              {
 132   2                      case 1: /* 驱动第一个数码管 */
 133   2                                      output_sel |= 0x01;
 134   2                                      ADDR_8SEG = NUMTOSEG7(digi[0]); /*输出到锁存器U5(在电路图中找)*/
 135   2                                      break;
 136   2      
 137   2                      case 2: /* 驱动第二个数码管 */
 138   2                                      output_sel |= 0x02;
 139   2                                      ADDR_8SEG = NUMTOSEG7(digi[1]); /*输出到锁存器U5*/
 140   2                                      break;
 141   2      
 142   2                      case 3: /* 驱动第三个数码管 */
 143   2                                      output_sel |= 0x04;
 144   2                                      ADDR_8SEG = NUMTOSEG7(digi[2]); /*输出到锁存器U5*/
 145   2                                      break;
 146   2      
 147   2                      case 4: /* 驱动第四个数码管 */
 148   2                                      output_sel |= 0x08;
 149   2                                      ADDR_8SEG = NUMTOSEG7(digi[3]); /*输出到锁存器U5*/
 150   2                                      break;
 151   2              }
 152   1      
 153   1              ADDR_SEL = output_sel;          /*输出到锁存器U6(在电路图中找)*/
 154   1      
 155   1      
 156   1              EA=1;  /*开中断*/
 157   1      }
 158          
 159          
 160          /**** 主程序*****/
 161          
 162          main()
 163          {
 164   1      
 165   1      /* 单片机系统初始化 */
 166   1          P1=0XFF;
 167   1          P3=0XFF;
 168   1          /** 中断工作寄存器初始化 **/
 169   1          IE=0X80;
 170   1          IP=0;
 171   1          IT0=0;
 172   1          IT1=0;
 173   1          /** 定时器工作寄存器初始化 **/
 174   1              TMOD=0X21;
 175   1              TH1=V_T1;
 176   1          TL1=V_T1;
 177   1          TH0=V_TH0;
 178   1          TL0=V_TL0;
 179   1          /** 串行通信口工作初始化 ,注:本例中虽未使用到串行通信口,但本段程序无妨保留**/
C51 COMPILER V7.06   DDS                                                                   09/06/2005 21:14:35 PAGE 4   

 180   1              SM0=0;           /*SCOM MODE 1 (8BIT UART VARBR)*/
 181   1          SM1=1;
 182   1              SM2=0;
 183   1              REN=1;
 184   1              TI=1;
 185   1              /** 全局变量赋初值 **/
 186   1              clock1s=0;
 187   1              clock1s_flag=0;
 188   1              digi_scaner=1;
 189   1              /** 开定时器,定时器0中断允许 **/
 190   1          TR0=1;
 191   1          TR1=1;
 192   1              ET0=1;
 193   1      
 194   1              EA=0;
 195   1      /* 主循环,本例中,在T0中断服务程序未被执行的空余时间里,处理机在以下程序中不断循环 */
 196   1              DDS_Rst();
 197   1              while(1)
 198   1              {
 199   2                      ;
 200   2              }
 201   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    370    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =      7    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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