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

📄 text2.lst

📁 c8051f020里面自带的温度传感器的使用程序
💻 LST
字号:
C51 COMPILER V8.05a   TEXT2                                                                08/09/2008 12:43:59 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          // by GaoLin...~
   2          #include <c8051f020.h> // SFR声明
   3          #include <stdio.h>
   4          //-----------------------------------------------------------------------------
   5          // C8051F02X的16位SFR定义
   6          //-----------------------------------------------------------------------------
   7          sfr16 TMR3RL = 0x92; // 定时器3重装值
   8          sfr16 TMR3 = 0x94; // 定时器3计数器
   9          sfr16 ADC0 = 0xbe; // ADC0数据
  10          long temperature; // 温度为百分之一精度度C
  11          int temp_int, temp_frac; // 温度的整数和小数部分
  12          //-----------------------------------------------------------------------------
  13          // 全局常量
  14          //-----------------------------------------------------------------------------
  15          #define SYSCLK 22118400 // 系统时钟频率Hz
  16          #define SAMPLERATE0 50000 // ADC0采样频率Hz
  17          sbit LED = P1^6; // LED=’1’ 意为ON     
  18          sbit test=P3^0;
  19          //-----------------------------------------------------------------------------
  20          // 函数原型
  21          //-----------------------------------------------------------------------------
  22          void SYSCLK_Init (void);
  23          void PORT_Init (void);
  24          void ADC0_Init (void);
  25          void Timer3_Init (int counts);
  26          void ADC0_ISR (void);
  27          //-----------------------------------------------------------------------------
  28          // ADC0中断服务程序
  29          //-----------------------------------------------------------------------------
  30          //
  31          // ADC0转换结束中断服务程序
  32          // 我们将ADC0取样结果存储在全局变量<result>.
  33          //
  34          void ADC0_ISR (void) interrupt 15
  35          {
  36   1      AD0INT = 0; // ADC转换结束清除标志
  37   1      }
  38          
  39          //-----------------------------------------------------------------------------
  40          // 主函数
  41          //-----------------------------------------------------------------------------
  42          void main (void) 
  43          {
  44   1      
  45   1              WDTCN = 0xde; // 禁止看门狗定时器
  46   1              WDTCN = 0xad;
  47   1              SYSCLK_Init (); // 初始化振荡器
  48   1              PORT_Init (); // 初始化数据交叉开关和通用IO口
  49   1              Timer3_Init (SYSCLK/SAMPLERATE0); // 初始化定时器3溢出作为采样速率
  50   1              ADC0_Init (); // 初始化ADC
  51   1              AD0EN = 1; // 使能ADC
  52   1              EA = 1; // 允许全局中断
  53   1      
  54   1      while (1) 
  55   1         {
C51 COMPILER V8.05a   TEXT2                                                                08/09/2008 12:43:59 PAGE 2   

  56   2          while(AD0INT==0);AD0INT=0;
  57   2              temperature = ADC0; 
  58   2      
  59   2              // 计算温度误差为百分之一度
  60   2              temperature = temperature - 41380;
  61   2              temperature = (temperature * 100L) / 156;
  62   2              temp_int = temperature / 100;
  63   2              temp_frac = temperature - (temp_int * 100);
  64   2              test=1;
  65   2         }
  66   1      }
  67          //-----------------------------------------------------------------------------
  68          // 系统时钟初始化
  69          //-----------------------------------------------------------------------------
  70          //
  71          // 此程序初始化系统时钟使用22.1184MHz晶体作为时钟源
  72          //
  73          void SYSCLK_Init (void)
  74          {
  75   1      int i; // 延时计数器
  76   1      OSCXCN = 0x67; // 起动外部振荡器晶体为 22.1184MHz
  77   1      for (i=0; i < 256; i++) ; // 等待振荡器启动(>1ms)
  78   1      while (!(OSCXCN & 0x80)) ; // 等待晶体振荡器稳定
  79   1      OSCICN = 0x88; // 选择外部振荡器作为系统时钟源并使能丢失时钟检测器
  80   1      }
  81          //-----------------------------------------------------------------------------
  82          // IO口初始化
  83          //-----------------------------------------------------------------------------
  84          //
  85          // 配置数据交叉开关和通用IO口
  86          //
  87          void PORT_Init (void)
  88          {
  89   1      XBR0 = 0x04; // 使能UART0
  90   1      XBR1 = 0x00;
  91   1      XBR2 = 0x40; // 允许数据交叉开关和弱上拉
  92   1      P0MDOUT |= 0x01; // 允许TX0为推挽输出
  93   1      P1MDOUT |= 0x40; // 允许P1.6(LED)为推挽输出
  94   1      }
  95          //-----------------------------------------------------------------------------
  96          // ADC0初始化
  97          //-----------------------------------------------------------------------------
  98          //
  99          // 配置ADC0 使用定时器3溢出作为转换源,转换结束产生中断
 100          // 使用左对齐输出模式使能ADC转换结束中断禁止ADC
 101          //
 102          void ADC0_Init (void)
 103          {
 104   1      ADC0CN = 0x05; // 禁止ADC0; 正常跟踪模式
 105   1      // 定时器3溢出ADC0开始转换ADC0数据左对齐
 106   1      REF0CN = 0x07; // 使能温度传感器, 片内 VREF和VREF 输出缓冲器
 107   1      AMX0SL = 0x0f; // 选择温度传感器作为ADC为多路模拟输出
 108   1      ADC0CF = (SYSCLK/2500000) << 3; // ADC 转换时钟=2.5MHz
 109   1      ADC0CF |= 0x01; // PGA增益=2
 110   1      EIE2 |= 0x02; // 允许ADC中断
 111   1      }
 112          //-----------------------------------------------------------------------------
 113          // 定时器3初始化
 114          //-----------------------------------------------------------------------------
 115          //
 116          // 配置定时器3为自动重装时间间隔由<counts> 制定(不产生中断)
 117          // 使用系统时钟作为时基.
C51 COMPILER V8.05a   TEXT2                                                                08/09/2008 12:43:59 PAGE 3   

 118          //
 119          void Timer3_Init (int counts)
 120          {
 121   1      TMR3CN = 0x02; // 停止定时器3; 清除TF3;
 122   1      // 使用系统时钟作为时基
 123   1      TMR3RL = -counts; // 初始化重装值
 124   1      TMR3 = 0xffff; // 设置立即重装值
 125   1      EIE2 &= ~0x01; // 禁止定时器3中断
 126   1      TMR3CN |= 0x04; // 起动定时器3
 127   1      }


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