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

📄 ad.lst

📁 c8051f330 例程 AD转换例程 silicon laboratories IDE
💻 LST
字号:
C51 COMPILER V8.08   AD                                                                    12/14/2007 16:43:40 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE AD
OBJECT MODULE PLACED IN AD.OBJ
COMPILER INVOKED BY: C:\SiLabs\MCU\IDEfiles\C51\BIN\C51.exe AD.C DB OE

line level    source

   1          //-----------------------------------------------------------------------------
   2          // 文件名:AD.C
   3          //-----------------------------------------------------------------------------
   4          //
   5          // 初始作者: 刘建
   6          // 初始版本:V1.0
   7          // 功能说明:单片机初始化;AD转换,并在LED数码管上显示转换结果
   8          // 初始日期:2007年1月26日
   9          //
  10          // 修改版本:
  11          // 修改内容:
  12          // 修改日期: 
  13          
  14          // CPU型号 : C8051F330
  15          // 软件工具: SL IDE 1.9
  16          
  17          //-----------------------------------------------------------------------------
  18          // 包含文件
  19          #include <c8051f330.h>              // SFR 声明
  20          
  21          //-----------------------------------------------------------------------------
  22          // 定义16位特殊功能寄存器
  23          sfr16 ADC0     = 0xbd;              // ADC0     采样数据寄存器地址
  24          
  25          //-----------------------------------------------------------------------------
  26          // 函数原形定义
  27          #define uchar unsigned char
  28          
  29          void main (void);                                       // 主函数
  30          void SYSCLK_Init (void);                        // 系统时钟初始化
  31          void PORT_Init (void);                          // IO口初始化
  32          void ADC0_Init (void);                          // AD转换初始化
  33          
  34          void LED4_Display (void);                       // LED显示
  35          void LED_OUT(uchar X);                          // LED单字节串行移位函数
  36          
  37          unsigned int AD_Sampling (unsigned char Channel);       // AD采样子程序
  38          void _16to4bit10(unsigned int dd);                                      // 16进制到4位10进制转换
  39          
  40          unsigned char code LED_0F[];            // LED字模表
  41          
  42          //-----------------------------------------------------------------------------
  43          // 全局常量
  44          #define SYSCLK  24500000 / 8            // 系统频率
  45          
  46          sbit LED_DOUT = P1^6;                           //串行数据输入
  47          sbit LED_CLK  = P1^5;                           //时钟脉冲信号——上升沿有效
  48          sbit LED_LATCH = P1^7;                          //打入信号————上升沿有效
  49          
  50          #define AI1     6                               // AI1采样通道为P0.6
  51          #define AI2     7                               // AI2采样通道为P0.7
  52          
  53          //-----------------------------------------------------------------------------
  54          // 全局变量
  55          uchar LED[4];   //用于LED的4位显示缓存
C51 COMPILER V8.08   AD                                                                    12/14/2007 16:43:40 PAGE 2   

  56          
  57          
  58          //*****************************************************************************
  59          // 主程序
  60          //
  61          void main (void) 
  62          {
  63   1      
  64   1              PCA0MD &= ~0x40;                // 禁止watchdog timer 
  65   1      
  66   1              SYSCLK_Init ();                 // 初始化系统时钟到 24.5MHz
  67   1              PORT_Init ();                   // 初始化io口与交叉开关
  68   1              ADC0_Init ();                   // 初始化AD转换
  69   1      
  70   1              while(1)
  71   1              {
  72   2                      unsigned long i1;
  73   2                      i1=AD_Sampling (AI1);   //采样
  74   2                      i1=i1*3300;                             //参考电压选择VDD=3.3V
  75   2                                                                      //3.3*1000=3300
  76   2                      i1=i1/1024;                             //除以2的10次方(10位AD)
  77   2      
  78   2                      _16to4bit10(i1);                //结果转换为4位10进制数
  79   2                                                                      //并送显示
  80   2      
  81   2                      LED4_Display ();
  82   2              } 
  83   1      } 
  84          // 主程序结束
  85          //*****************************************************************************
  86          
  87          
  88          
  89          //*****************************************************************************
  90          // 初始化程序
  91          //-----------------------------------------------------------------------------
  92          // SYSCLK_Init 系统时钟初始化程序
  93          //
  94          // 使用内部 24.5MHz / 8 振荡器作为时钟源
  95          // 同时允许时钟丢失检测器
  96          //
  97          void SYSCLK_Init (void)
  98          {
  99   1      
 100   1              OSCICN = 0x80;                          // 使用内部振荡器;8分频
 101   1      
 102   1              RSTSRC = 0x04;                      // 检测到时钟丢失时允许系统复位
 103   1      }
 104          //-----------------------------------------------------------------------------
 105          // PORT_Init IO端口初始化程序
 106          //
 107          // 定义交叉开关和IO口
 108          // P1.0 - LED (推挽)
 109          //
 110          void PORT_Init (void)
 111          {
 112   1              P0MDIN = 0x3f;                                          // 定义P0.6、P0.7为模拟输入通道
 113   1                                                                                      // P0.6——AI1
 114   1                                                                                      // P0.7——AI2
 115   1              P0SKIP = 0xc0;                                          // P0.6、P0.7被交叉开关跳过
 116   1      
 117   1              XBR0     = 0x00;                    // 未选择任何数字外设
C51 COMPILER V8.08   AD                                                                    12/14/2007 16:43:40 PAGE 3   

 118   1              XBR1     = 0x40;                    // 使能交叉开关和弱上拉
 119   1              P1MDOUT |= 0xE0;                    // 设P1.5、P1.6、P1.7为输出端口
 120   1      }
 121          //-----------------------------------------------------------------------------
 122          // ADC0初始化
 123          //
 124          void ADC0_Init (void)
 125          {
 126   1              AMX0N = 0x11;                                           // 单端输入方式
 127   1              ADC0CN = 0x80;                                          // ADC0使能;正常跟踪模式
 128   1                                                                                      // 当写AD0BUSY时ADC0转换开始;ADC0数据右对齐
 129   1              REF0CN = 0xA;                                           // (电压基准控制寄存器)使用VDD
 130   1                                                                                      // 禁止片内温度传感器
 131   1              ADC0CF = (SYSCLK/2500000) << 3;         // ADC转换时钟=2.5MHz
 132   1              EIE1 &= ~0x0C;                                          // 禁止ADC0窗口比较器中断
 133   1                                                                                      // 禁止ADC0 EOC中断
 134   1      }
 135          // 初始化程序结束
 136          //*****************************************************************************
 137          
 138          
 139          
 140          //-----------------------------------------------------------------------------
 141          // AD_Sampling  ——AD采样子程序
 142          //
 143          // Channel 采样通道
 144          //
 145          unsigned int AD_Sampling (unsigned char Channel)
 146          {
 147   1              AMX0P = Channel;                // 选择模拟转换通道
 148   1              AD0INT = 0;                     // 清除转换结束标记
 149   1              AD0BUSY = 1;                    // 开始转换
 150   1              while (AD0INT == 0);    // 等待转换结束 
 151   1              return(ADC0);                   // 读ADC0数据
 152   1      }
 153          
 154          //-----------------------------------------------------------------------------
 155          // 16进制到4位10进制转换
 156          //
 157          // 将dd数据转换为4位10进制数,并存入LED显示缓存
 158          void _16to4bit10(unsigned int dd)
 159          {
 160   1              unsigned int  div;
 161   1              unsigned char i;
 162   1              div=1000;
 163   1              for (i=0;i<4;i++) {
 164   2                      LED[i]=dd/div;
 165   2                      dd%=div;
 166   2                      div/=10;
 167   2              }
 168   1      }
 169          
 170          
 171          
 172          //*****************************************************************************
 173          // 显示程序
 174          //-----------------------------------------------------------------------------
 175          // 4位LED显示程序
 176          //
 177          void LED4_Display (void)
 178          {
 179   1              unsigned char code *led_table;          // 查表指针
C51 COMPILER V8.08   AD                                                                    12/14/2007 16:43:40 PAGE 4   

 180   1              uchar i;
 181   1              //显示第1位
 182   1              led_table = LED_0F + LED[0];
 183   1              i = *led_table;
 184   1              i &= 0x7f;                      //显示小数点
 185   1      
 186   1              LED_OUT(i);                     //段码输出
 187   1              LED_OUT(0xfe);          //位码输出
 188   1      
 189   1              LED_LATCH = 0;
 190   1              LED_LATCH = 1;
 191   1              //显示第2位
 192   1              led_table = LED_0F + LED[1];
 193   1              i = *led_table;
 194   1      
 195   1              LED_OUT(i);                     //段码输出
 196   1              LED_OUT(0xfd);          //位码输出
 197   1      
 198   1              LED_LATCH = 0;
 199   1              LED_LATCH = 1;
 200   1              //显示第3位
 201   1              led_table = LED_0F + LED[2];
 202   1              i = *led_table;
 203   1      
 204   1              LED_OUT(i);                     //段码输出
 205   1              LED_OUT(0xfb);          //位码输出
 206   1      
 207   1              LED_LATCH = 0;
 208   1              LED_LATCH = 1;
 209   1              //显示第4位
 210   1              led_table = LED_0F + LED[3];
 211   1              i = *led_table;
 212   1      
 213   1              LED_OUT(i);                     //段码输出
 214   1              LED_OUT(0xf7);          //位码输出
 215   1      
 216   1              LED_LATCH = 0;
 217   1              LED_LATCH = 1;
 218   1      }
 219          
 220          //-----------------------------------------------------------------------------
 221          // LED单字节串行移位函数
 222          //
 223          void LED_OUT(uchar X)
 224          {
 225   1              uchar i;
 226   1              for(i=8;i>=1;i--)
 227   1              {
 228   2                      if (X&0x80) LED_DOUT=1; else LED_DOUT=0;
 229   2                      X<<=1;
 230   2                      LED_CLK = 0;
 231   2                      LED_CLK = 1;
 232   2              }
 233   1      }
 234          
 235          // 显示程序结束
 236          //*****************************************************************************
 237          
 238          
 239          
 240          //*****************************************************************************
 241          // 表
C51 COMPILER V8.08   AD                                                                    12/14/2007 16:43:40 PAGE 5   

 242          //*****************************************************************************
 243          //-----------------------------------------------------------------------------
 244          // LED转换表0——F
 245          //
 246          unsigned char code LED_0F[] = 
 247          {// 0    1        2        3    4        5        6        7    8        9        A        b    C    d    E    F    -
 248                  0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
 249          };


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    300    ----
   CONSTANT SIZE    =     17    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4       8
   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 + -