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

📄 main.c

📁 本程序能够实现温度测量
💻 C
字号:
/*---------------------------------------
 Net analyse's C main file
 Creat by Computer-lov Date: 2005.7.19
 Last edit date:2005.11.18
 Copyright(C) 2005-2015 Computer-lov
 All rights reserved
 Welcome to my Blog: Http://computer00.21ic.org
-----------------------------------------*/

#include <AT89X52.h>
#include "hardware.h"
#include "i2c.h"
#include "serial_port.h"
#include <math.h>

//*****************************************************************************************
void InitAD5933(void)          //AD5933初始化
{
 Write_a_data(D_ADDR,0x80,0xB0);
 Write_a_data(D_ADDR,0x81,0x08);

 Write_a_data(D_ADDR,0x82,0x00);  //start frequency
 Write_a_data(D_ADDR,0x83,0x83);  //1kHz
 Write_a_data(D_ADDR,0x84,0x12);

 Write_a_data(D_ADDR,0x85,0x00);   //increment frequency
 Write_a_data(D_ADDR,0x86,0x41);   //100Hz
 Write_a_data(D_ADDR,0x87,0x89);
 
 Write_a_data(D_ADDR,0x88,0x01);  //测量点数
 Write_a_data(D_ADDR,0x89,0xFF);
 
 Write_a_data(D_ADDR,0x8A,0x01);    //等待建立周期数
 Write_a_data(D_ADDR,0x8B,0xFF);
 
 Write_a_data(D_ADDR,0x80,0x13);
 Write_a_data(D_ADDR,0x80,0x23);
}
//****************************************************************************************

//****************************************************************************************
unsigned int ReadData(unsigned char addr)   //读数据
{
 return Read_a_data(D_ADDR,addr);
}
//****************************************************************************************

//****************************************************************************************
void DelayXms(unsigned int x)
{
 unsigned int i;
 for(;x>0;x--)
  for(i=0;i<133;i++);
}
//****************************************************************************************


//****************************************************************************************
void main(void)
{
 unsigned char Status;  //保存状态
 unsigned int Re,Im,Tm;   //保存实部,虚部,温度
 unsigned int Count;    //计数

 InitComport();  //串口初始化
 InitAD5933();   //AD5933初始化

 while(1)
  {
   OK=0;
   while(!OK);   //等待主机发送数据

   //复位AD5933
   Write_a_data(D_ADDR,0x81,0x18);
   Write_a_data(D_ADDR,0x81,0x08);
   
   //启动温度测量
   Write_a_data(D_ADDR,0x80,0x93);
   
   //等待转换完成
   do
    {
     Status=ReadData(0x8F);
    }while(!(Status & 0x01));
   
   //读出温度,保存在Tm中
   Tm=ReadData(0x92);
   Tm<<=8;
   Tm+=ReadData(0x93);
   Tm<<=2;

   //将温度值通过串口发送
   SendToComport('T');
   PrintHex(Tm);
   SendToComport('E');

   //设置启始频率。参数来自串口接收到的buffer[0]、buffer[1]、buffer[2]中
   Write_a_data(D_ADDR,0x82,Buffer[0]);  //start frequency
   Write_a_data(D_ADDR,0x83,Buffer[1]);
   Write_a_data(D_ADDR,0x84,Buffer[2]);

   //设置频率增量。参数来自串口接收到的buffer[3]、buffer[4]、buffer[5]中
   Write_a_data(D_ADDR,0x85,Buffer[3]);   //increment frequency
   Write_a_data(D_ADDR,0x86,Buffer[4]);
   Write_a_data(D_ADDR,0x87,Buffer[5]);

   //设置等待建立周期数
   Write_a_data(D_ADDR,0x8A,0x01);    //number of setting time cycles
   Write_a_data(D_ADDR,0x8B,0xFF);

   //设置幅度以及增益
   Buffer[6]|=0xF0;  //Buffer[6] 低3位设置输出幅度以及增益
   Write_a_data(D_ADDR,0x80,0x17 & Buffer[6]);  //Control register
   Write_a_data(D_ADDR,0x80,0x27 & Buffer[6]);
   
   //通知上位机,接下来的数据是阻抗测试数据
   SendToComport('S');
   DelayXms(50);

   //设置等待建立周期数
   Write_a_data(D_ADDR,0x8A,0x00);    //number of setting time cycles
   Write_a_data(D_ADDR,0x8B,Buffer[7]);

   //测试105个点。
   for(Count=0;Count<105;Count++)
    {

	//等待一个点测试完毕

     do
      {
       Status=ReadData(0x8F);
      }while(!(Status & 0x02));

	 if(Cancel)break;  //如果接收到取消命令,则取消测试

     //读回阻抗的实部和虚部
     Re=ReadData(0x94);
     Re<<=8;
     Re+=ReadData(0x95);

     Im=ReadData(0x96);
     Im<<=8;
     Im+=ReadData(0x97);

     Write_a_data(D_ADDR,0x80,0x37&Buffer[6]);  //频率调整

     SendToComport('R');
     PrintHex(Re);
     SendToComport('E');

     SendToComport('I');
     PrintHex(Im);
     SendToComport('E');
    }
  }
}
//************************************************************************************************

⌨️ 快捷键说明

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