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

📄 ad7705 sensor00.c

📁 P89LPC931操作AD7705的程序。
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <reg931.h>
#include <stdio.h>
#include <flashiap.h>

#define uchar unsigned char
#define uint  unsigned int
#define CH1 1       /*AD7705输入通道IN1*/ 
#define CH2 2       /*AD7705输入通道IN2*/ 
#define BIPOLAR 0   /*AD7705双极性输入*/ 
#define UNIPOLAR 1  /*AD7705单极性输入*/ 
#define AD_CLK_WIDTH 1 /*AD7705串口时钟脉冲宽度*/ 
sbit AdClk = P2^5;  /*AD7705时钟脉冲*/ 
sbit AdDout = P2^3; /*AD7705数据输出的反相脉冲*/ 
sbit AdDin = P2^2;  /*AD7705数据输入脉冲*/ 
sbit DRDY = P1^4;
sbit REST = P2^6;
sbit ALARM_X = P2^0;
sbit ALARM_Y = P2^1;
uchar code BAUD;     /*存储波特率代码*/ 
uchar code BAUD_Data = 0xfa;  /*存储波特率初值*/ 
uint  code ID = 100;
float code ALARM_X_P=5,ALARM_Y_P=5,ALARM_X_N=-5,ALARM_Y_N=-5; /*存储报警值*/ 
float code ZeroPoint_X,ZeroPoint_Y;
uint idata ZeroPoint_X_temp,ZeroPoint_Y_temp,ZeroPoint_X_temp_temp,ZeroPoint_Y_temp_temp;
float idata LSB = 0.000457764;
uint idata ReceiveData_X[4];   /*存储从AD7705读到的转换结果*/ 
uint idata ReceiveData_Y[4];
float idata ALARM_X_P_temp,ALARM_Y_P_temp,ALARM_X_N_temp,ALARM_Y_N_temp;
uchar idata RIFlag,SendFlag,ArrangeFlag;
uchar idata BAUD_temp,BAUD_Data_temp,Update_temp = 1;
uchar idata CommandData[5];   /*存储从串口接收到的命令数据*/ 
uchar idata i = 4;            /*命令数据字符串的小脚标*/ 
//---------------------------------------------------------------------------
//功能:看门狗初始化
//---------------------------------------------------------------------------
void WatchdogInit(void)
{
  WDL = 0XFF; 				//看门狗复位时间
  EA =0;
  WDCON = 0XE6;    //选择看门狗振荡器为看门狗时钟源;//0XE5;选择PCLK为看门狗时钟源
  WFEED1 = 0XA5;
  WFEED2 = 0X5A;
  EA =1;
}
///---------------------------------------------------------------------------
//功能:关看门狗定时器时钟
//---------------------------------------------------------------------------
void WatchdogStop(void)
{
	EA =0;
	WDCON =0XE1;
	WFEED1 =0XA5;
	WFEED2 =0X5A;
	EA =1;
}
//---------------------------------------------------------------------------
//功能:喂狗程序
//---------------------------------------------------------------------------
void WatchdogFeed(void)
{
  EA =0;
  WFEED1 = 0XA5;
  WFEED2 = 0X5A;
  EA =1;
}

//---------------------------------------------------------------------------
//功能:初始化单片机接口
//---------------------------------------------------------------------------
/*void UART_Init()
{
 P1M1 = 0x00;
 P1M2 = 0x00;
 SCON = 0x52;
 SSTAT = 0x60;
 BRGR1 = 0x02;
 BRGR0 = 0xf0;
 BRGCON = 0x03;
}
*/
//---------------------------------------------------------------------------
//功能:串口中断处理
//---------------------------------------------------------------------------
void serial() interrupt 4 using 1
{
 if(RI)
     {
	  CommandData[i] = SBUF;
	  if(CommandData[i] == 0x0d)
	      {
		   RIFlag = 1;
		  }
	  i--;
	 }
 RI = 0;
}
//---------------------------------------------------------------------------
//功能:外部中断1中断处理子程序
//---------------------------------------------------------------------------
/*void int1() interrupt 2 using 0
{
 ReceiveData_X[m] = GetDataAD7705(0x01);
 ReceiveData_X[m] = ReceiveData_X[m] | GetDataAD7705(0x01);
 ReceiveData_X[m]<<=8;
 ReceiveData_X[m] = ReceiveData_X[m] | GetDataAD7705(0x01);
 WatchdogFeed();
 ReceiveData_Y[m] = ReceiveData_Y[m] | GetDataAD7705(0x02);
 ReceiveData_Y[m]<<=8;
 ReceiveData_Y[m] = ReceiveData_Y[m] | GetDataAD7705(0x02);
 m--;
 if(m == 0)
     {
	  m = 10;
	  ArrangeFlag = 1;
	 }
 EX1 = 0;
 WatchdogFeed();
}*/
/* AD7705软件延时 */ 
void Wait7705(unsigned int t) 
{
    for( ;t>0 ;t-- ); 
} 
//---------------------------------------------------------------------------
//功能:向AD7705写入一个字
//---------------------------------------------------------------------------
void WriteByte7705(uchar x) 
{
    uchar i; 
    AdClk = 1; 
    for (i=0; i<8; i++)
    {
        AdClk=0; 
		Wait7705(AD_CLK_WIDTH);
        AdDin =(bit) (x & 0x80);
 	    Wait7705(AD_CLK_WIDTH);
        AdClk=1; 
		Wait7705(AD_CLK_WIDTH);
        x <<=1; 
    }
} 
//---------------------------------------------------------------------------
//功能:从AD7705读一个字
//---------------------------------------------------------------------------
uint ReadWord7705(void) 
{
    uchar i; 
    uint x ; 
    AdClk = 1 ; 
    for (i = 0,x=0 ; i < 16 ; i++)
    {
        AdClk=0; 
		Wait7705(AD_CLK_WIDTH);
        x<<=1; 
        if (AdDout) /* 光电耦合器反相 */ 
            x |= 0x01; 
        AdClk=1; 
		Wait7705(AD_CLK_WIDTH);
    } 
    return x;
} 
//---------------------------------------------------------------------------
//功能:AD7705通信端口复位
//---------------------------------------------------------------------------
void Reset7705(void) 
{
    uchar i; 
    for(i=0;i<35;i++)    //多于连续32个 DIN=1 使串口复位 
    { 
        AdClk=0; 
		Wait7705(AD_CLK_WIDTH);
        AdDin =1; 
		Wait7705(AD_CLK_WIDTH);
        AdClk=1; 
		Wait7705(AD_CLK_WIDTH);
    }
} 
//---------------------------------------------------------------------------
//功能:AD7705初始化 通道channel 1=IN1,2=IN2; 输入极性polarity -0=双极性,1=单极性; PGA 增益gai 非缓冲模式
//---------------------------------------------------------------------------
void Init7705(uchar channel, bit polarity , uchar gain) 
{
    uchar x; 
    Reset7705();         /* 防止串口失步 */ 
	if(channel == 1)
	{
    WriteByte7705(0x20); /* 写ch0 clock register */ 
    WriteByte7705(0x06); /* 2.4576MHz时钟,50Hz数据更新速率 */ 
	}
	else
	{
    WriteByte7705(0x21); /* 写CH1 clock register */ 
    WriteByte7705(0x06); /* 2.4576MHz时钟,50Hz数据更新速率 */ 
	}
    if(channel==1)       /* com register ,选择下步操作 setup register */ 
        WriteByte7705(0x10); 
    else 
        WriteByte7705(0x11); 
    if(polarity)         /* setup register */ 
        x=0x04; 
    else 
        x=0x00; 
    switch(gain)
    {
        case 1 : x|=0x40;break; 
        case 2 : x|=0x48;break; 
        case 4 : x|=0x50;break; 
        case 8 : x|=0x58;break; 
        case 16 : x|=0x60;break; 
        case 32 : x|=0x68;break; 
        case 64 : x|=0x70;break; 
        case 128 : x|=0x78;break; 
        default : x|=0x40;break; 
    } 
    WriteByte7705(0x44); 
} 
//---------------------------------------------------------------------------
//功能:读AD7705转换数据 输入通道channel ----1=IN1,2=IN2;
//---------------------------------------------------------------------------
uint GetData7705(uchar channel) 
{
    if(channel==1) 
        WriteByte7705(0x38); 
    else 
        WriteByte7705(0x39); 
    return ( ReadWord7705() ); 
}
//---------------------------------------------------------------------------
//功能:处理串口收到的数据
//---------------------------------------------------------------------------
void ArrangeData(void)
{
 if(CommandData[4] == 'C'|CommandData[4] == 'c')  /*终止数据更新命令*/ 
     {
	  Update_temp = 0;
	 }
 if(CommandData[4] == '$'&(CommandData[3] == 'R'|CommandData[3] == 'r')&CommandData[2] == 0x0d)/*复位命令*/ 
     {
	  ZeroPoint_X_temp = 0;
	  ZeroPoint_Y_temp = 0;
	  ALARM_X_P_temp = 15.0;
      ALARM_X_N_temp = -15.0;
      ALARM_Y_P_temp = 15.0;
      ALARM_Y_N_temp = -15.0;
	  EA = 0;
      FLASH_WriteByte(&ALARM_X_P,15.0);
	  FLASH_WriteByte(&ALARM_X_N,-15.0);
	  FLASH_WriteByte(&ALARM_Y_P,15.0);
	  FLASH_WriteByte(&ALARM_Y_N,-15.0);
	  FLASH_WriteByte(&ZeroPoint_X,0);
	  FLASH_WriteByte(&ZeroPoint_Y,0);

⌨️ 快捷键说明

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