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

📄 adc0_temp.lst

📁 c8051f040混和信号处理芯片中的内部温度传感器的应用.
💻 LST
字号:
C51 COMPILER V7.20   ADC0_TEMP                                                             08/15/2007 18:56:00 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE ADC0_TEMP
OBJECT MODULE PLACED IN .\ADC0_TEMP.obj
COMPILER INVOKED BY: E:\SoC单片机实验,实践与应用设计(基于C8051F系列)\C8051F应用软件\Keil\C51\BIN\C51.EXE ..\311\ADC0_TEM
                    -P.c DEBUG OBJECTEXTEND PRINT(.\ADC0_TEMP.lst) OBJECT(.\ADC0_TEMP.obj)

line level    source

   1          //内部温度传感器调试程序//
   2          //ADC0_TEMP.c
   3          #include <C8051F040.h>
   4          #define ADC0START temppage=SFRPAGE;SFRPAGE=0x00;AD0BUSY=1;SFRPAGE=temppage
   5          typedef unsigned int uint;
   6          typedef unsigned char uchar;
   7          typedef unsigned long ulong;
   8          sfr16 RCAP2=0xca;
   9          sfr16 RCAP3=0xca;
  10          sfr16 RCAP4=0xca;
  11          sfr16 TMR4=0xcc;
  12          sfr16 TMR3=0xcc;
  13          sfr16 TMR2=0xcc;
  14          sfr16 PCA0CP0=0xfb;
  15          sfr16 PCA0CP1=0xfd;
  16          sfr16 PCA0CP2=0xe9;
  17          sfr16 PCA0CP3=0xeb;
  18          sfr16 PCA0CP4=0xed;
  19          sfr16 PCA0CP5=0xe1;
  20          sfr16 ADC0VAL=0xbe;                                                                     
  21          sfr16 ADC0GT=0xc4;
  22          sfr16 ADC0LT=0xc6;
  23          uchar temppage;
  24          bit isnewdata;
  25          uint kk;
  26          uint i;
  27          float temp;
  28          xdata float t[20];//存放温度检测数据,为20个数据
  29          void adc0_mux(uchar type,uchar source);
  30          void adc0_source(uchar source);
  31          void p3anolog_ini(uchar port);
  32          void HVDA_ini(uchar gaind);
  33          void adc0_ini();
  34          void delay1ms(uint time);
  35          void config();
  36          void adc0_mux(uchar type,uchar source){//type 配置测量方式为差动还是单端输入
  37   1             //source 为ADC0通道选择(共有9个通道)
  38   1              SFRPAGE=0x00;
  39   1              AMX0CF=type;
  40   1              AMX0SL=source;
  41   1      }
  42          void adc0_source(uchar source){//ADC0通道选择,为adc0_mux()的简化函数
  43   1              SFRPAGE=0x00;
  44   1              AMX0SL=source;
  45   1      }
  46          void p3anolog_ini(uchar port){//配置p3口模拟输入管脚
  47   1              SFRPAGE=0x00;
  48   1              AMX0PRT=port;
  49   1              SFRPAGE=0x0f;
  50   1              P3MDIN&=~port;//将相应管脚配置成模拟输入口
  51   1      }
  52          void HVDA_ini(uchar gaind){//高压差动放大器配置
  53   1              SFRPAGE=0x00;
  54   1              HVA0CN=gaind;
C51 COMPILER V7.20   ADC0_TEMP                                                             08/15/2007 18:56:00 PAGE 2   

  55   1      }
  56          void adc0_ini(){
  57   1              SFRPAGE=0x00;
  58   1              ADC0CF=0x80;//ADC0时钟为系统时钟17分频,PGA增益为1
  59   1              ADC0CN=0x80;
  60   1              /*AD0EN=1,ADC0模块使能
  61   1                AD0TM=0,ADC0为连续跟踪模式
  62   1                AD0CM1:AD0CM0=00b,为AD0BUSY启动方式
  63   1                AD0LJST=0,数据存储格式右对齐,即ADC0H存放12bit高四位*/
  64   1              REF0CN&=0x0f;//AD0VRS=0,ADC0参考电压为VREFA
  65   1              REF0CN|=0x07;//TEMPE=1,内部温度传感器工作
  66   1              /*BIASE=1,偏移产生器工作
  67   1                REFBE=1,内部参考电平工作,电路部分须将VREF参考输出(C8051F40的第12管脚)与VREF0(C8051F040的16管脚相连,并
             -最好并联一个4.7uF和0.1uF的旁路电容以电平滤波*/
  68   1              adc0_source(9);//选择第9通道,即选择温度信号为AD转换
  69   1              EIE2 |= 0x02;        //开ADC0中断
  70   1      }
  71          void delay1ms(uint time){ //延迟1ms
  72   1              uint i;
  73   1              uint j;
  74   1              for (i=0;i<time;i++){
  75   2                      for(j=0;j<300;j++);
  76   2              }
  77   1      }       
  78          void config(){
  79   1      //看门狗禁止
  80   1              WDTCN = 0x07;   
  81   1          WDTCN = 0xDE;   
  82   1              WDTCN = 0xAD;
  83   1              SFRPAGE = 0x0F;
  84   1      //交叉开关使能,但没有进行外围设备配置
  85   1              XBR0 = 0x00;    
  86   1              XBR1 = 0x00;    
  87   1              XBR2 = 0x40;
  88   1              XBR3 = 0x00;   
  89   1      //管脚输出配置,P0口为开漏输出,其中P0.6接上拉电阻,P0为数字输入口
  90   1              SFRPAGE = 0x0F;
  91   1              P0MDOUT = 0x00; 
  92   1          P4MDOUT   = 0x03;
  93   1              P1MDIN = 0xFF;
  94   1      
  95   1          OSCXCN    = 0x67;
  96   1          for(i=0;i<256;i++);  //等待1ms以上; // Wait 1ms for initialization
  97   1          while(!(OSCXCN&0x80)); //等待晶体稳定while ((OSCXCN & 0x80) == 0);
  98   1          CLKSEL    = 0x01;
  99   1          OSCICN    = 0x02;
 100   1      
 101   1         /*
 102   1          OSCXCN=0x67;     //启动外部振荡器用22.1184MHz晶体
 103   1          for(i=0;i<256;i++);  //等待1ms以上;
 104   1          while(!(OSCXCN&0x80)); //等待晶体稳定
 105   1          OSCICN=0x88;            //选择外部振荡器作业
 106   1      
 107   1      /*晶振配置,采用内部晶振8分频
 108   1              SFRPAGE = 0x0F;
 109   1              CLKSEL = 0x00;  
 110   1              OSCXCN = 0x00;  
 111   1              OSCICN = 0x80;  */
 112   1              
 113   1      }
 114          void main(){
 115   1         
C51 COMPILER V7.20   ADC0_TEMP                                                             08/15/2007 18:56:00 PAGE 3   

 116   1              char i;
 117   1              config();
 118   1              adc0_ini();//ADC0初始化
 119   1              ADC0START;//ADC0启动
 120   1              EA=1;
 121   1              i=0;
 122   1              while(1){
 123   2                      if(isnewdata){//由该位查询ADC0转化值是否更新
 124   3                              kk=ADC0H*256;
 125   3                              kk+=ADC0L;//可用sfr16一次性读取
 126   3                              temp=(float)kk/4096.0;
 127   3                              temp*=2.43;
 128   3                              temp-=0.776;
 129   3                              temp/=0.00286;//将测量值转化成真实温度值
 130   3                              isnewdata=0;
 131   3                              t[i]=temp;//将温度检测值存入长度为20的数组中
 132   3                              i++;
 133   3                              if(i>19)
 134   3                                      i=0;//在此设断点,观察程序运行结果
 135   3                              delay1ms(100);
 136   3                              ADC0START;
 137   3                      }
 138   2              }
 139   1      }
 140          void ADC0_ISR() interrupt 15{//ADC0中断
 141   1              SFRPAGE=0x00;
 142   1              AD0INT=0;
 143   1              isnewdata=1;
 144   1              
 145   1      }


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