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

📄 ad7705 sensor.c

📁 P89LPC931操作AD7705的程序。
💻 C
📖 第 1 页 / 共 2 页
字号:
	  ZeroPoint_Y>>=8; 
	  zerotemp = ZeroPoint_Y;
	  FLASH_WriteByte(&ZERO[1],zerotemp);
	  EA = 1;
	  ZeroPoint_X = ReceiveData_X[0]-0x7fff;
      ZeroPoint_Y = ReceiveData_Y[0]-0x7fff;
      ZeroPoint_X_temp = ZERO[3];
	  ZeroPoint_X_temp<<=8;
	  ZeroPoint_X_temp |=ZERO[2];
	  ZeroPoint_Y_temp = ZERO[1];
	  ZeroPoint_Y_temp<<=8;
	  ZeroPoint_Y_temp |=ZERO[0];
	  if(ZeroPoint_X_temp==ZeroPoint_X&ZeroPoint_Y_temp==ZeroPoint_Y)
	       printf("ZERO SET OK.\n");
	  else
	       printf("ZERO SET FAILURE.\n");
	  printf("Currently ZeroPoint_X=%2.3f,ZeroPoint_Y=%2.3f\n",ZeroPoint_X*LSB,ZeroPoint_Y*LSB);
	 }
 if(CommandData[6] == '$'&(CommandData[5] == 'B'|CommandData[5] == 'b')&CommandData[4] == ','&CommandData[2] == 0x0d)
     {
	  BAUD_temp = CommandData[3];  /*设置波特率命令*/ 
	  switch(BAUD_temp%0x30)
	     {
		  case 1: printf("\nBAUD=1200\n");TH1 = 0xa0;BAUD_Data_temp = 0xa0; break;  //波特率1200
		  case 2: printf("\nBAUD=2400\n");TH1 = 0xd0;BAUD_Data_temp = 0xd0; break;  //波特率2400
		  case 3: printf("\nBAUD=4800\n");TH1 = 0xe8;BAUD_Data_temp = 0xe8; break;  //波特率4800
		  case 4: printf("\nBAUD=9600\n");TH1 = 0xf4;BAUD_Data_temp = 0xf4; break;  //波特率9600
		  case 5: printf("\nBAUD=19200\n");TH1 = 0xfa;BAUD_Data_temp = 0xfa; break;  //波特率19200
          case 6: printf("\nBAUD=38400\n");TH1 = 0xfd;BAUD_Data_temp = 0xfd; break;  //波特率38400
          default:TH1 = BAUD_Data;BAUD_Data_temp = BAUD_Data; break;  //波特率19200
		 }
	  EA = 0;
	  FLASH_WriteByte(&BAUD_Data,BAUD_Data_temp);
	  EA = 1;
	 }
 if(CommandData[6] == '$'&(CommandData[5] == 'A'|CommandData[5] == 'a')&(CommandData[4] == 'X'|CommandData[4] == 'x')&CommandData[3] == '+'&CommandData[0] == 0x0d)/*设置报警点命令*/ 
     {
	  EA = 0;
      FLASH_WriteByte(&ALARM[7],CommandData[2]);
	  FLASH_WriteByte(&ALARM[6],CommandData[1]);
	  EA = 1;
	  ALARM_X_P = ALARM[7];
      ALARM_X_P<<=8;
      ALARM_X_P |=ALARM[6]; 
	  if(ALARM[7]==CommandData[2]&ALARM[6]==CommandData[1])
		   printf("ALARMX+ SET OK.\n");
	  else
	       printf("ALARMX+ SET FAILURE.\n");
	  printf("Currently ALARMX+=+%2.3f\n",(ALARM_X_P*LSB-15));
	 }
 if(CommandData[6] == '$'&(CommandData[5] == 'A'|CommandData[5] == 'a')&(CommandData[4] == 'X'|CommandData[4] == 'x')&CommandData[3] == '-'&CommandData[0] == 0x0d)/*设置报警点命令*/ 
     {
	  EA = 0;
      FLASH_WriteByte(&ALARM[5],CommandData[2]);
	  FLASH_WriteByte(&ALARM[4],CommandData[1]);
	  EA = 1;
	  ALARM_X_N = ALARM[5];
      ALARM_X_N<<=8;
      ALARM_X_N |=ALARM[4]; 
	  if(ALARM[5]==CommandData[2]&ALARM[4]==CommandData[1])
		   printf("ALARMX- SET OK.\n");
	  else
	       printf("ALARMX- SET FAILURE.\n");
	  printf("Currently ALARMX-=-%2.3f\n",ALARM_X_N*LSB);
	 }
 if(CommandData[6] == '$'&(CommandData[5] == 'A'|CommandData[5] == 'a')&(CommandData[4] == 'Y'|CommandData[4] == 'y')&CommandData[3] == '+'&CommandData[0] == 0x0d)/*设置报警点命令*/ 
     {
	  EA = 0;
      FLASH_WriteByte(&ALARM[3],CommandData[2]);
	  FLASH_WriteByte(&ALARM[2],CommandData[1]);
	  EA = 1;
	  ALARM_Y_P = ALARM[3];
      ALARM_Y_P<<=8;
      ALARM_Y_P |=ALARM[2];
 	  if(ALARM[3]==CommandData[2]&ALARM[2]==CommandData[1])
		   printf("ALARMY+ SET OK.\n");
	  else
	       printf("ALARMY+ SET FAILURE.\n");
	  printf("Currently ALARMY+=+%2.3f\n",(ALARM_Y_P*LSB-15));
	 }
 if(CommandData[6] == '$'&(CommandData[5] == 'A'|CommandData[5] == 'a')&(CommandData[4] == 'Y'|CommandData[4] == 'y')&CommandData[3] == '-'&CommandData[0] == 0x0d)/*设置报警点命令*/ 
     {
	  EA = 0;
      FLASH_WriteByte(&ALARM[1],CommandData[2]);
	  FLASH_WriteByte(&ALARM[0],CommandData[1]);
	  EA = 1;
	  ALARM_Y_N = ALARM[1];
      ALARM_Y_N<<=8;
      ALARM_Y_N |=ALARM[0];
	  if(ALARM[1]==CommandData[2]&ALARM[0]==CommandData[1])
		   printf("ALARMY- SET OK.\n");
	  else
	       printf("ALARMY- SET FAILURE.\n");
	  printf("Currently ALARMY-=-%2.3f\n",ALARM_Y_N*LSB);
	 } 
}
//---------------------------------------------------------------------------
//功能:冒泡法排序
//---------------------------------------------------------------------------
/*void PaiXu()
{     
// uchar a,b;
 uint temp_data;
// for(a=1;a<=3;a++)
//     for(b=1;b<=3-a;b++)
//	     {
		  if(ReceiveData_X[3]<ReceiveData_X[2])
		      {
			   temp_data = ReceiveData_X[3];
               ReceiveData_X[3] = ReceiveData_X[2];
               ReceiveData_X[2] = temp_data;
			  }
		  if(ReceiveData_X[2]<ReceiveData_X[1])
		      {
			   temp_data = ReceiveData_X[2];
               ReceiveData_X[2] = ReceiveData_X[1];
               ReceiveData_X[1] = temp_data;
			  }
          if(ReceiveData_X[3]<ReceiveData_X[2])
		      {
			   temp_data = ReceiveData_X[3];
               ReceiveData_X[3] = ReceiveData_X[2];
               ReceiveData_X[2] = temp_data;
			  }
		  if(ReceiveData_Y[3]<ReceiveData_Y[2])
		      {
			   temp_data = ReceiveData_Y[3];
               ReceiveData_Y[3] = ReceiveData_Y[2];
               ReceiveData_Y[2] = temp_data;
			  }
          if(ReceiveData_Y[2]<ReceiveData_Y[1])
		      {
			   temp_data = ReceiveData_Y[2];
               ReceiveData_Y[2] = ReceiveData_Y[1];
               ReceiveData_Y[1] = temp_data;
			  }
          if(ReceiveData_Y[3]<ReceiveData_Y[2])
		      {
			   temp_data = ReceiveData_Y[3];
               ReceiveData_Y[3] = ReceiveData_Y[2];
               ReceiveData_Y[2] = temp_data;
			  }
//		 }
// for(a=2;a<=9;a++)
//    {
     ReceiveData_X[0] += ReceiveData_X[2];  //*将去掉最大最小值的数据求平均后存放在Receiv
     ReceiveData_Y[0] += ReceiveData_Y[2];
//	}
}*/
/*void delay20ms()
{
 uchar time1,time2;
 for(time1=150;time1>0;time1--)
     for(time2=200;time2>0;time2--)
	     {
		   ;
		 }
}*/
//---------------------------------------------------------------------------
//功能:外部中断1中断处理子程序
//---------------------------------------------------------------------------
void int1() interrupt 2 using 0
{
 if(ChannelFlag==2)
     {
      ReceiveData_X[f] = GetData7705(CH1);
      Init7705(CH2,UNIPOLAR,1);
     }
 if(ChannelFlag==1)
     {
      ReceiveData_Y[f] = GetData7705(CH2);
      Init7705(CH1,UNIPOLAR,1);
     }
     ChannelFlag--;
 if(ChannelFlag==0)
	{
     ChannelFlag = 2;
     f--;
	}
 if(f==0)
    {
     SendFlag = 1;
     f = 1;
    }
}
/*void SetCalibration()
{
 WriteByte7705(0x60);
 WriteByte7705(0x19);
 WriteByte7705(0x99);
 WriteByte7705(0x7f);
 WriteByte7705(0x61);
 WriteByte7705(0x19);
 WriteByte7705(0x99);
 WriteByte7705(0x7f);
 WriteByte7705(0x70);
 WriteByte7705(0xf2);
 WriteByte7705(0xaf);
 WriteByte7705(0x2e);
 WriteByte7705(0x71);
 WriteByte7705(0xf2);
 WriteByte7705(0xaf);
 WriteByte7705(0x2e);
}*/
//---------------------------------------------------------------------------
//功能:主程序开始
//---------------------------------------------------------------------------
void main(void)
{
 uchar comzero = 6;
 Update_temp = Update;
 ID0_temp = ID0;
 ID1_temp = ID1;
 BAUD_Data_temp = BAUD_Data;
 TMOD = 0x20;
 SCON = 0x52;
 PCON = 0x00;
 TH1 = BAUD_Data_temp;
 TL1 = BAUD_Data_temp;
 TR1 = 1;
 EA = 1;
 ES = 1;
 EX1 = 1;
 IT1 = 1;
 P2M1 = 0;
 P2M2 = 0;
 P1M1 = 0; //把TXD和RXD设置为准双向
 P1M2 = 0;
 ALARM_X = 0;
 ALARM_Y = 0;
 ZeroPoint_X = ZERO[3];
 ZeroPoint_X<<=8;
 ZeroPoint_X |= ZERO[2];
 ZeroPoint_Y = ZERO[1];
 ZeroPoint_Y<<=8;
 ZeroPoint_Y |= ZERO[0];
 ALARM_X_P = ALARM[7];
 ALARM_X_P<<=8;
 ALARM_X_P |= ALARM[6];
 ALARM_X_N = ALARM[5];
 ALARM_X_N<<=8;
 ALARM_X_N |= ALARM[4];
 ALARM_Y_P = ALARM[3];
 ALARM_Y_P<<=8;
 ALARM_Y_P |= ALARM[2];
 ALARM_Y_N = ALARM[1];
 ALARM_Y_N<<=8;
 ALARM_Y_N |= ALARM[0];
 Init7705(1,1,1);  //初始化AD7705
 Init7705(2,1,1);

 while(1)
     {
	  if(RIFlag)   //如果串收到数据,则转去处理这些命令数据
	      {
		   ArrangeData();
		   RIFlag = 0;
           for(i=0;i<6;i++)
               {
                CommandData[i] = 0;
               }
		   i = 6;
		  }
//	  if(ArrangeFlag)  //如果整理数据标志为1,也就是收到10次转换结果,则转去处理AD7705数据
//		  {
//		   PaiXu();
//		   SendFlag = 1;  
//		   ArrangeFlag = 0;
//		  }
	  if(((ReceiveData_X[0]-ZeroPoint_X)-ALARM_X_P)*LSB>=0|(ALARM_X_N - (ReceiveData_X[0]-ZeroPoint_X))*LSB>=0)
		  ALARM_X = 1;
	      else ALARM_X = 0;
      if(((ReceiveData_Y[0]-ZeroPoint_Y)-ALARM_Y_P)*LSB>=0|(ALARM_Y_N - (ReceiveData_Y[0]-ZeroPoint_Y))*LSB>=0)
		  ALARM_Y = 1;
	      else ALARM_Y = 0;
	  if(SendFlag==1&Update_temp)
		  {
		   		printf("$%c%c,X:%x,Y:%x\n",ID1_temp,ID0_temp,ReceiveData_X[1],ReceiveData_Y[1]);
		  		ReceiveData_X[0] = ReceiveData_X[1];
		   		ReceiveData_Y[0] = ReceiveData_Y[1];
           		SendFlag = 0;
		  }
	 }
}

⌨️ 快捷键说明

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