?? ad7705 sensor.c
字號:
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 + -