📄 instruction.c
字号:
#define Instruction_c
#include "main.h"
/////////////************应答器数据接收**************//////////////////
void hex_bcd_8(uchar temp)
{
uchar bufn[]="000";
uchar a;
for(a=3;a>0;a--) //取出每位中的数据
{
bufn[a-1]=temp%10+48;
temp/=10;
}
UART0_Transmitstr(bufn);
CR;
}
//////////////////////////////////////
//****************发送遥测命令********************//
void Inquiry_tx(void)
{
UART1_TransmitByte(0xff);
UART1_TransmitByte(0x03);
UART1_TransmitByte(0x00);
UART1_TransmitByte(0x41);
}
//应答器数据采集
void Data_acquisition(void)
{
if(set_pown==0)
{
uchar buff[64];
uchar x=0;
DelayMs(5);
Inquiry_tx();
DelayMs(5);
x=0;
DelayMs(500);
while(UART1_DataInReceiveBuffer())
{
buff[x++]=(UART1_ReceiveByte());
}
if(crc16_update (&buff[0], x)==0)//CRC16校验 0表示CRC通过
{
acquisition_n=0;//应答器无应答计数
Six_voltage=40*(buff[12]*256+buff[11]);//6v电压
Supply_current=2*(buff[10]*256+buff[9]);//供电电流
State_health=buff[0];//健康状况
if(buff[13]&0x02)
{
Receiver_c=1;//接收机
}
else
{
Receiver_c=0;//接收机
}
if(buff[13]&0x04)
{
Transmitter_c=1;//发射机
}
else
{
Transmitter_c=0;//发射机
}
if(buff[13]&0x08)
{
Frequency_c=1;//频率精度
}
else
{
Frequency_c=0;//频率精度
}
switch(buff[6])//工作时间
{
case 0 : Action_cycle=10;break;
case 1 : Action_cycle=15;break;
case 2 : Action_cycle=20;break;
case 3 : Action_cycle=25;break;
default:
break;
}
switch(buff[7])//休止时间
{
case 0 : Stops_cycle=0 ;break;
case 1 : Stops_cycle=10;break;
case 2 : Stops_cycle=15;break;
case 3 : Stops_cycle=20;break;
case 4 : Stops_cycle=25;break;
default:
break;
}
switch(buff[5])//工作编码
{
case 0 : Work_code='B';break;
case 1 : Work_code='C';break;
case 2 : Work_code='D';break;
case 3 : Work_code='G';break;
case 4 : Work_code='K';break; case 5 : Work_code='M';break; case 6 : Work_code='N';break; case 7 : Work_code='O';break;
case 8 : Work_code='Q';break; case 9 : Work_code='T';break; case 10: Work_code='Y';break; case 11: Work_code='Z';break; case 12: Work_code='A';break; case 13: Work_code='E';break; case 14: Work_code='F';break; case 15: Work_code='H';break; case 16: Work_code='I';break;
case 17: Work_code='J';break; case 18: Work_code='L';break; case 19: Work_code='P';break; case 20: Work_code='R';break;
case 21: Work_code='S';break;
case 22: Work_code='U';break;
case 23: Work_code='V';break;
case 24: Work_code='W';break;
default:
break;
}
buff[0]=0;
buff[1]=0;
buff[2]=0;
buff[3]=0;
buff[4]=0;
//UART0_Transmitstr("OK!");
//CR;
}
else//crc16校验失败
{
if(acquisition_n<Communication)
{
//UART0_Transmitstr("error");
//CR;
acquisition_n++;
if((acquisition_n==Communication)&( exce==0))
{
sms_counts(9);//通讯故障
exce=1;
}
}
}
}
}
//***********************定时发送监测数据**************//
void Communication_tx(void)
{
if(--Communication_time==0)
{
exce=0;
if(power_ls==0)
{
if(acquisition_n==Communication)
{
sms_counts(9);//通讯故障
}
else
{
sms_counts(5);//发送状态报告
}
}
else
{
sms_counts(21);//发送电源报告
}
eeprom_busy_wait();
Communication_time=eeprom_read_byte (&E_Communication_time);//通讯间隔
if((signal_c==0)&(addr_e==0))//防止CPU复位后,SIM接触不良
{
SET_POW_ON_OFF;//关闭5V电源
DelayMs(5000);
CLR_POW_ON_OFF;//开启5V电源
DelayMs(1000);
UART0_Transmitstr("AT^SMSO"); //关闭TC35,SMS.C会使TC35重启
CR;
}
}
}
//************************************************
//END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -