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

📄 main.lst

📁 本程序能够实现温度测量
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  11/18/2006 22:47:02 PAGE 1   


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

stmt level    source

   1          /*---------------------------------------
   2           Net analyse's C main file
   3           Creat by Computer-lov Date: 2005.7.19
   4           Last edit date:2005.11.18
   5           Copyright(C) 2005-2015 Computer-lov
   6           All rights reserved
   7           Welcome to my Blog: Http://computer00.21ic.org
   8          -----------------------------------------*/
   9          
  10          #include <AT89X52.h>
  11          #include "hardware.h"
  12          #include "i2c.h"
  13          #include "serial_port.h"
  14          #include <math.h>
  15          
  16          //*****************************************************************************************
  17          void InitAD5933(void)          //AD5933初始化
  18          {
  19   1       Write_a_data(D_ADDR,0x80,0xB0);
  20   1       Write_a_data(D_ADDR,0x81,0x08);
  21   1      
  22   1       Write_a_data(D_ADDR,0x82,0x00);  //start frequency
  23   1       Write_a_data(D_ADDR,0x83,0x83);  //1kHz
  24   1       Write_a_data(D_ADDR,0x84,0x12);
  25   1      
  26   1       Write_a_data(D_ADDR,0x85,0x00);   //increment frequency
  27   1       Write_a_data(D_ADDR,0x86,0x41);   //100Hz
  28   1       Write_a_data(D_ADDR,0x87,0x89);
  29   1       
  30   1       Write_a_data(D_ADDR,0x88,0x01);  //测量点数
  31   1       Write_a_data(D_ADDR,0x89,0xFF);
  32   1       
  33   1       Write_a_data(D_ADDR,0x8A,0x01);    //等待建立周期数
  34   1       Write_a_data(D_ADDR,0x8B,0xFF);
  35   1       
  36   1       Write_a_data(D_ADDR,0x80,0x13);
  37   1       Write_a_data(D_ADDR,0x80,0x23);
  38   1      }
  39          //****************************************************************************************
  40          
  41          //****************************************************************************************
  42          unsigned int ReadData(unsigned char addr)   //读数据
  43          {
  44   1       return Read_a_data(D_ADDR,addr);
  45   1      }
  46          //****************************************************************************************
  47          
  48          //****************************************************************************************
  49          void DelayXms(unsigned int x)
  50          {
  51   1       unsigned int i;
  52   1       for(;x>0;x--)
  53   1        for(i=0;i<133;i++);
  54   1      }
  55          //****************************************************************************************
C51 COMPILER V7.06   MAIN                                                                  11/18/2006 22:47:02 PAGE 2   

  56          
  57          
  58          //****************************************************************************************
  59          void main(void)
  60          {
  61   1       unsigned char Status;  //保存状态
  62   1       unsigned int Re,Im,Tm;   //保存实部,虚部,温度
  63   1       unsigned int Count;    //计数
  64   1      
  65   1       InitComport();  //串口初始化
  66   1       InitAD5933();   //AD5933初始化
  67   1      
  68   1       while(1)
  69   1        {
  70   2         OK=0;
  71   2         while(!OK);   //等待主机发送数据
  72   2      
  73   2         //复位AD5933
  74   2         Write_a_data(D_ADDR,0x81,0x18);
  75   2         Write_a_data(D_ADDR,0x81,0x08);
  76   2         
  77   2         //启动温度测量
  78   2         Write_a_data(D_ADDR,0x80,0x93);
  79   2         
  80   2         //等待转换完成
  81   2         do
  82   2          {
  83   3           Status=ReadData(0x8F);
  84   3          }while(!(Status & 0x01));
  85   2         
  86   2         //读出温度,保存在Tm中
  87   2         Tm=ReadData(0x92);
  88   2         Tm<<=8;
  89   2         Tm+=ReadData(0x93);
  90   2         Tm<<=2;
  91   2      
  92   2         //将温度值通过串口发送
  93   2         SendToComport('T');
  94   2         PrintHex(Tm);
  95   2         SendToComport('E');
  96   2      
  97   2         //设置启始频率。参数来自串口接收到的buffer[0]、buffer[1]、buffer[2]中
  98   2         Write_a_data(D_ADDR,0x82,Buffer[0]);  //start frequency
  99   2         Write_a_data(D_ADDR,0x83,Buffer[1]);
 100   2         Write_a_data(D_ADDR,0x84,Buffer[2]);
 101   2      
 102   2         //设置频率增量。参数来自串口接收到的buffer[3]、buffer[4]、buffer[5]中
 103   2         Write_a_data(D_ADDR,0x85,Buffer[3]);   //increment frequency
 104   2         Write_a_data(D_ADDR,0x86,Buffer[4]);
 105   2         Write_a_data(D_ADDR,0x87,Buffer[5]);
 106   2      
 107   2         //设置等待建立周期数
 108   2         Write_a_data(D_ADDR,0x8A,0x01);    //number of setting time cycles
 109   2         Write_a_data(D_ADDR,0x8B,0xFF);
 110   2      
 111   2         //设置幅度以及增益
 112   2         Buffer[6]|=0xF0;  //Buffer[6] 低3位设置输出幅度以及增益
 113   2         Write_a_data(D_ADDR,0x80,0x17 & Buffer[6]);  //Control register
 114   2         Write_a_data(D_ADDR,0x80,0x27 & Buffer[6]);
 115   2         
 116   2         //通知上位机,接下来的数据是阻抗测试数据
 117   2         SendToComport('S');
C51 COMPILER V7.06   MAIN                                                                  11/18/2006 22:47:02 PAGE 3   

 118   2         DelayXms(50);
 119   2      
 120   2         //设置等待建立周期数
 121   2         Write_a_data(D_ADDR,0x8A,0x00);    //number of setting time cycles
 122   2         Write_a_data(D_ADDR,0x8B,Buffer[7]);
 123   2      
 124   2         //测试105个点。
 125   2         for(Count=0;Count<105;Count++)
 126   2          {
 127   3      
 128   3              //等待一个点测试完毕
 129   3      
 130   3           do
 131   3            {
 132   4             Status=ReadData(0x8F);
 133   4            }while(!(Status & 0x02));
 134   3      
 135   3               if(Cancel)break;  //如果接收到取消命令,则取消测试
 136   3      
 137   3           //读回阻抗的实部和虚部
 138   3           Re=ReadData(0x94);
 139   3           Re<<=8;
 140   3           Re+=ReadData(0x95);
 141   3      
 142   3           Im=ReadData(0x96);
 143   3           Im<<=8;
 144   3           Im+=ReadData(0x97);
 145   3      
 146   3           Write_a_data(D_ADDR,0x80,0x37&Buffer[6]);  //频率调整
 147   3      
 148   3           SendToComport('R');
 149   3           PrintHex(Re);
 150   3           SendToComport('E');
 151   3      
 152   3           SendToComport('I');
 153   3           PrintHex(Im);
 154   3           SendToComport('E');
 155   3          }
 156   2        }
 157   1      }
 158          //************************************************************************************************


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