?? ad7705 sensor00.c
字號:
EA = 1;
}
if((CommandData[4] == 'G'|CommandData[4] == 'g')&(CommandData[3] == 'O'|CommandData[3] == 'o')&CommandData[2] == 0x0d)
{
Update_temp = 1;//Update; /*繼續輸出數據*/
}
if(CommandData[4] == '$'&(CommandData[3] == 'Z'|CommandData[3] == 'z')&CommandData[2] == 0x0d)/*將當前位置設為零點*/
{
ZeroPoint_X_temp = ZeroPoint_X_temp_temp;
ZeroPoint_Y_temp = ZeroPoint_Y_temp_temp;
EA = 0;
FLASH_WriteByte(&ZeroPoint_X,ZeroPoint_X_temp);
FLASH_WriteByte(&ZeroPoint_Y,ZeroPoint_Y_temp);
EA = 1;
}
if(CommandData[4] == '$'&(CommandData[3] == 'B'|CommandData[3] == 'b')&CommandData[2] == ','&CommandData[0] == 0x0d)
{
BAUD_temp = CommandData[1]; /*設置波特率命令*/
switch(BAUD_temp%0x30)
{
case 1: printf("\nBAUD=1200");TH1 = 0xa0;BAUD_Data_temp = 0xa0; break; //波特率1200
case 2: printf("\nBAUD=2400");TH1 = 0xd0;BAUD_Data_temp = 0xd0; break; //波特率2400
case 3: printf("\nBAUD=4800");TH1 = 0xe8;BAUD_Data_temp = 0xe8; break; //波特率4800
case 4: printf("\nBAUD=9600");TH1 = 0xf4;BAUD_Data_temp = 0xf4; break; //波特率9600
case 5: printf("\nBAUD=19200");TH1 = 0xfa;BAUD_Data_temp = 0xfa; break; //波特率19200
case 6: printf("\nBAUD=38400");TH1 = 0xfd;BAUD_Data_temp = 0xfd; break; //波特率38400
default:TH1 = BAUD_Data;BAUD_Data_temp = BAUD_Data; break; //波特率19200
}
EA = 0;
FLASH_WriteByte(&BAUD,BAUD_temp);
FLASH_WriteByte(&BAUD_Data,BAUD_Data_temp);
EA = 1;
}
/* if(CommandData[4] == '$'&CommandData[3] == 'U'&CommandData[2] == ','&CommandData[0] == 0x0d)
{
Update_temp = CommandData[1];
switch(Update_temp%0x30)
{
/* case 1: WriteByte7705(0x10);WriteByte7705(0x45);
WriteByte7705(0x11);WriteByte7705(0x45);
WriteByte7705(0x20);WriteByte7705(0x04);
WriteByte7705(0x21);WriteByte7705(0x04); break; //1.31Hz 輸出,-3dB濾波,排序濾波
case 2: WriteByte7705(0x10);WriteByte7705(0x45);
WriteByte7705(0x11);WriteByte7705(0x45);
WriteByte7705(0x20);WriteByte7705(0x05);
WriteByte7705(0x21);WriteByte7705(0x05); break; //1.57Hz 輸出,-3dB濾波,排序濾波
case 1: WriteByte7705(0x10);WriteByte7705(0x44);
WriteByte7705(0x11);WriteByte7705(0x44);
WriteByte7705(0x20);WriteByte7705(0x04);
WriteByte7705(0x21);WriteByte7705(0x04); break; //5Hz 輸出,排序濾波
case 2: WriteByte7705(0x10);WriteByte7705(0x44);
WriteByte7705(0x11);WriteByte7705(0x44);
WriteByte7705(0x20);WriteByte7705(0x05);
WriteByte7705(0x21);WriteByte7705(0x05); break; //6Hz 輸出,排序濾波
default: WriteByte7705(0x10);WriteByte7705(0x44);
WriteByte7705(0x11);WriteByte7705(0x44);
WriteByte7705(0x20);WriteByte7705(0x04);
WriteByte7705(0x21);WriteByte7705(0x04); break; //5Hz 輸出,排序濾波
}
EA = 0;
FLASH_WriteByte(&Update,Update_temp);
EA = 1;
}*/
if(CommandData[4] == '$'&(CommandData[3] == 'A'|CommandData[3] == 'a')&CommandData[2] == 'X')/*設置報警點命令*/
{
printf("\nPlease input Alarm Point of +X:");//&(CommandData[2] == 'X'|CommandData[2] == 'x')
scanf("%f",&ALARM_X_P_temp);
printf("\nPlease input Alarm Point of -X:");
scanf("%f,",&ALARM_X_N_temp);
EA = 0;
FLASH_WriteByte(&ALARM_X_P,ALARM_X_P_temp);
FLASH_WriteByte(&ALARM_X_N,ALARM_X_N_temp);
EA = 1;
if(ALARM_X_P==ALARM_X_P_temp&ALARM_X_N==ALARM_X_N_temp)
printf("ALARMX SET OK.\n");
else
printf("ALARMX SET FAIL.\n");
}
if(CommandData[4] == '$'&(CommandData[3] == 'A'|CommandData[3] == 'a')&CommandData[2] == 'Y')
{
printf("\nPlease input Alarm Point of +Y:");//(CommandData[2] == 'Y'|CommandData[2] == 'y')
scanf("%f",&ALARM_Y_P_temp);
printf("\nPlease input Alarm Point of -Y:");
scanf("%f",&ALARM_Y_N_temp);
EA = 0;
FLASH_WriteByte(&ALARM_Y_P,ALARM_Y_P_temp);
FLASH_WriteByte(&ALARM_Y_N,ALARM_Y_N_temp);
EA = 1;
if(ALARM_Y_P==ALARM_Y_P_temp&ALARM_Y_N==ALARM_Y_N_temp)
printf("ALARMY SET OK.\n");
else
printf("ALARMY SET FAIL.\n");
}
if(CommandData[4] == '$'&(CommandData[3] == 'D'|CommandData[3] == 'd')&CommandData[1] == 0x0d)
{
printf("COMMAND FORMAT:\n");
printf("$A\n");
printf("$Z\n");
printf("$R\n");
printf("$B,[1-6]\n");
printf("C\n");
printf("GO\n\n");
printf("DATA:\n");
printf("ALARMX+:%2.3f,ALARMX-:%2.3f",ALARM_X_P_temp,ALARM_X_N_temp);
printf("ALARMY+:%2.3f,ALARMY-:%2.3f\n",ALARM_Y_P_temp,ALARM_Y_N_temp);
}
}
//---------------------------------------------------------------------------
//功能:冒泡法排序
//---------------------------------------------------------------------------
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_Y[3]<ReceiveData_Y[2])
{
temp_data = ReceiveData_Y[2];
ReceiveData_Y[3] = ReceiveData_Y[2];
ReceiveData_Y[2] = temp_data;
}
if(ReceiveData_Y[2]<ReceiveData_Y[1])
{
temp_data = ReceiveData_Y[1];
ReceiveData_Y[2] = ReceiveData_Y[1];
ReceiveData_Y[1] = 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--)
{
;
}
}*/
//---------------------------------------------------------------------------
//功能:主程序開始
//---------------------------------------------------------------------------
void main(void)
{
uchar f = 3,ChannelFlag = 2;
// Update_temp = Update;
BAUD_temp = BAUD;
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;
P2M1 = 0;
P2M2 = 0;
P1M1 = 0; //把TXD和RXD設置為準雙向
P1M2 = 0;
ALARM_X = 0;
ALARM_Y = 0;
ZeroPoint_X_temp = ZeroPoint_X;
ZeroPoint_Y_temp = ZeroPoint_Y;
ALARM_X_P_temp = ALARM_X_P;
ALARM_X_N_temp = ALARM_X_N;
ALARM_Y_P_temp = ALARM_Y_P;
ALARM_Y_N_temp = ALARM_Y_N;
// Init7705(CH1,UNIPOLAR,1); //初始化AD7705
// Init7705(CH2,UNIPOLAR,1);
REST = 0;
REST = 1;
while(1)
{
if(RIFlag) //如果串收到數據,則轉去處理這些命令數據
{
ArrangeData();
RIFlag = 0;
i = 4;
}
if(ArrangeFlag) //如果整理數據標志為1,也就是收到10次轉換結果,則轉去處理AD7705數據
{
PaiXu();
SendFlag = 1; //整理之后將輸出數據標志位置位
ArrangeFlag = 0;
}
// if(ChannelFlag==2)
// Init7705(CH1,UNIPOLAR,1);
// if(ChannelFlag==1)
// Init7705(CH2,UNIPOLAR,1);
while(!DRDY)
{
if(ChannelFlag==2)
{
Init7705(CH1,UNIPOLAR,1);
ReceiveData_X[f] = GetData7705(CH1);
}
if(ChannelFlag==1)
{
Init7705(CH2,UNIPOLAR,1);
ReceiveData_Y[f] = GetData7705(CH2);
}
ChannelFlag--;
if(ChannelFlag==0)
{
ChannelFlag = 2;
f--;
}
if(f==0)
{
ArrangeFlag = 1;
f = 3;
}
DRDY = 1;
}
if(((ZeroPoint_X_temp_temp-ZeroPoint_X_temp)*LSB-ALARM_X_P_temp)>=0|(ALARM_X_N_temp - (ZeroPoint_X_temp_temp-ZeroPoint_X_temp)*LSB)>=0)
ALARM_X = 1;
else ALARM_X = 0;
if(((ZeroPoint_Y_temp_temp-ZeroPoint_Y_temp)*LSB-ALARM_Y_P_temp)>=0|(ALARM_Y_N_temp - (ZeroPoint_Y_temp_temp-ZeroPoint_Y_temp)*LSB)>=0)
ALARM_Y = 1;
else ALARM_Y = 0;
if(SendFlag==1&Update_temp)
{
printf("$%d,X:%2.3f,Y:%2.3f\n",ID,(ReceiveData_X[10]-ZeroPoint_X_temp_temp)*LSB-14,(ReceiveData_Y[10]-ZeroPoint_Y_temp_temp)*LSB-18);
ZeroPoint_X_temp_temp = ReceiveData_X[2];
ZeroPoint_Y_temp_temp = ReceiveData_Y[2];
ReceiveData_X[12] = 0;
ReceiveData_Y[2] = 0;
SendFlag = 0;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -