📄 main.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 + -