📄 yc.c
字号:
INT8U vv;
INT16U xx;
read_yx();
for(i=0;i<YX_BYTE_NUM;i++)
{vv=yx_now[i]^yx_bak[i];
if (vv!=0)
{for(j=0;j<8;j++)
{k=i*8+j;
if (bittst(&vv,j))
{memcpy(&soe_time[k].year,&mytime.year,8);
yx_timer[k]=yx_delay_const[k];
soe_cnt[k]++;
}
}
yx_bak[i]=yx_now[i];
}
else
{for(j=0;j<8;j++)
{k=i*8+j;
if (yx_timer[k]>=8)
{yx_timer[k]-=8;
if (yx_timer[k]<8)
{if ((soe_cnt[k]&0x1)!=0)
{
memcpy(&soe_buf[soe_wtp].year,&soe_time[k].year,6);
soe_buf[soe_wtp].sch=soe_point++;
soe_buf[soe_wtp].msec=soe_time[k].msecond;
if (bittst(&yx_now[i],j))
{xx=0x8000;
yx_tx[i]= yx_tx[i] | bit1_tab[j];
}
else
{xx=0;
yx_tx[i]= yx_tx[i] & bit0_tab[j];
}
xx=xx+k;
soe_buf[soe_wtp].sta_point=xx;
if( mmi_work_flag!=0x55)
soe_wtp=(soe_wtp+1) & MOD_SOE;
}
soe_cnt[k]=0;
}
}
}
}
}
}
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{ INT8U i;
WDTCTL = WDTPW+WDTCNTCL; //启动看门狗 超时时间=2^15 / 8M=4ms
if (fourier_flag==0)
{
adc_data[ad_point]=ADC12MEM0; //DC1/DC3/DC5/DC7,DC2/DC4/DC6/DC8
ADC12CTL0&=~ENC;
ADC12MCTL0=SREF0+adc_ch[fourier_index].dat[ch_index[ad_point]]; //单通道单次采样/转换
ADC12CTL0|=ENC+ADC12SC;
ad_point++;
if (ad_point>=67) fourier_flag=0x55;
}
com_handle();
for (i=0;i<max_com;i++)
{
if (com_rx_time[i]>0)
{
com_rx_time[i]--;
if (com_rx_time[i]<=5) com_rx_ok[i]=0x55;
}
if (com_tx_time[i]>10) com_tx_time[i]--;
else com_tx_time[i]=0;
}
check_yx();
mytime.msecond++;
if (mytime.msecond>=1000)
{
mytime.msecond=0;
flag_second_inc=0x55;
}
if (gsmint_flag==0x55)
{
gsmint_cnt++;
P1OUT|=0x01; //高电平 10ms
if (gsmint_cnt>=20)
{
gsmint_cnt=0;
gsmint_flag=0;
gsmint_flag2=0x55;
}
} //点火启动GSM模块
if(gsmint_flag2==0x55)
{
gsmint_cnt++;
P1OUT&=0xfe; //低电平 至少100ms
if(gsmint_cnt>=200)
{
gsmint_cnt=0;
gsmint_flag2=0;
sms_init();
P1OUT|=0x01;
}
} //点火启动GSM模块
run_cnt++;
if (MainTxdGsmProcc==0x55) lamp=100;
else lamp=500;
if (run_cnt>=lamp)
{
run_cnt=0;
P3OUT ^=0x09 ; // P3.0=RUN(output),P3.3=WATCH_DOG(output)
}
}
void fourier_handle(INT8U f_index)
{INT8U i,chanel;
INT16S p;
INT32S v,kk;
INT32S vv;
if(f_index==0)//消除0,1通道零漂
{
for(i=3;i<67;i++)
adc_data[i]=adc_data[i]-20;
}
chanel=adc_ch[f_index].dat[0];
kk=kch[chanel];
vv=0;
for(i=3;i<35;i++)
vv+=adc_data[i];
v=vv>>5;
vv=kk*v;
p=(vv>>16)+v;
if (p<10 && p>-10) p=0;
if((bittst(&yx_now[0],0))&&(f_index!=2))
yc.DC[chanel]=0;
else
yc.DC[chanel]=p;//如果交流断电DC1,DC2,DC3,DC4,通道不进行采集,采集为0
chanel=adc_ch[f_index].dat[1];
kk=kch[chanel];
vv=0;
for(i=35;i<67;i++)
vv+=adc_data[i];
v=vv>>5;
vv=kk*v;
p=(vv>>16)+v;
if (p<10 && p>-10) p=0;
if(bittst(&yx_now[0],0))
yc.DC[chanel]=0;
else
yc.DC[chanel]=p;//如果交流断电DC1,DC2,DC3,DC4,通道不进行采集,采集为0
}
void Sms_repeat(INT8U type)
{
if(type==SMS_ALL_DAT)
{
MainTxdGsmProcc=0x55;
sms_flag=SMS_CFG;
sms_type=SMS_ALL_DAT;
}
else if(sms_type==SMS_SIMULAT_DAT)
{
MainTxdGsmProcc=0x55;
sms_flag=SMS_CFG;
sms_type=SMS_SIMULAT_DAT;
}
else if(sms_type==SMS_POWER_OFF)
{
MainTxdGsmProcc=0x55;
sms_flag=SMS_CFG;
sms_type=SMS_POWER_OFF;
}
else if(type==SMS_YX_BY)
{
soe_rdp=(soe_rdp-1) & MOD_SOE;
}
else if(type==SMS_UI_FAULT)
{
asp_rdp=(asp_rdp-1) & MOD_SOE;
}
}
INT8U GsmRxdHandle(INT8U* st,INT8U len)
{
INT8U i;
if(sms_check_flag==0x55)
{
for (i=0;i<len;i++)
{
if (st[i]=='O' && st[i+1]=='K')
{
sms_state=0;
sms_check_flag=0;
check_wait_time=0;
return 1;
}
}
}
for (i=0;i<len;i++)
{
if (st[i]=='D' && st[i+1]=='O'&& st[i+2]=='W')
{ poweroff_flag=0x55;
return 1;
}
}
/* AT+CMGF=0 pdu格式设置;AT+CMGF=1 text格式设置*/
for (i=0;i<len;i++)
{
if (st[i]=='G' && st[i+1]=='F')
{ sms_flag=SMS_CFG_OK;
return 1;
}
}
/*发送短信at+cmgs=**(**短信的内容长大LEN+15);返回的“〉“”空格”号可以发送信息内容*/
for (i=0;i<len;i++)
{
if (st[i]=='>' && st[i+1]==32)
{
sms_flag=SMS_SEND_INFO;
return 1;
}
}
/*如果短信发送成功;返回“+CMGS:xxx OK",则短信不重复,否则短信重发*/
for(i=0;i<len;i++)
{
if(st[i]=='+'&&st[i+1]=='C'&&st[i+2]=='M'&&st[i+3]=='G'&&st[i+4]=='S')
{
sms_repeat_flag=0;
entry_time=0;
return 1;
}
}
return 2;
}
void TxHandle(INT8U*s,INT16U len)
{
INT16U i;
for(i=0;i<len;i++) com1_tx_buf[i]=s[i];
com_tx_time[1]=1000;
__disable_interrupt(); // Disable interrupts
com_tx_point[1]=0;
com_tx_count[1]=len;
__enable_interrupt(); // Enable interrupts
}
/*AT*/
void Gsmcheck()
{
INT8U *p;
p=&gsminit[0];
TxHandle(p,3);
}
/*关机命令*/
void Gsmpoweroff()
{
INT8U *p;
p=&power_off[0];
TxHandle(p,8);
}
/*检测当前短信中心地址*/
void test_cenadd()
{
INT8U *p;
p=&testcenadd[0];
TxHandle(p,9);
}
/*设置短信中心地址*/
void set_cenadd()
{
INT8U *p;
p=&com1_tx_buf[0];
*p++='A';
*p++='T';
*p++='+';
*p++='C';
*p++='S';
*p++='C';
*p++='A';
*p++='=';
*p++='+';
*p++='8';
*p++='6';
*p++=server_certer[1];
*p++=server_certer[0];
*p++=server_certer[3];
*p++=server_certer[2];
*p++=server_certer[5];
*p++=server_certer[4];
*p++=server_certer[7];
*p++=server_certer[6];
*p++=server_certer[9];
*p++=server_certer[8];
*p++=server_certer[11];
*p++=13;
com_tx_time[1]=1000;
__disable_interrupt();
com_tx_point[1]=0;
com_tx_count[1]=23;
__enable_interrupt();
}
/*发短信起始 初始化,at+cmgf=0*/
void GsmCfg()
{
INT8U *p;
p=&smscfg[0];
TxHandle(p,10);
}
void GsmTxdHead()
{
INT8U s,rdp,len,psname_leng,yx_len;
INT8U* tr,k;
INT8U i;
INT8U head_dc1_len,head_dc2_len;
INT8U l,dc1_l,dc2_1;
/*其中LEN的内容为短信内容(短信的实际内容为:26)的一半+15;
其中15为:发送短信的固定头和手机号与固定尾共30个字节的一半
其按十进制发送,长度为两个字节:高位在前,低位在后.
短信的全部长度 一个汉字,数字,标点加2*/
for(i=0;i<4;i++)
{if(sms_name[i*2]==0)
{ psname_leng=i*2;
break;}
else
{psname_leng=8;}
}
com_tx_time[1]=1000;
if(sms_type==SMS_YX_BY)
{
if(soe_rdp==0) rdp=30;
else rdp=soe_rdp-1;
k=soe_buf[rdp].sta_point&0xff;
if(k==0)
{//“交流失电”或“交流恢复;
l=10+psname_leng;
s=l+15;
}
else if(k==1)
{//“机箱门开”或“机箱门关””
l=10+psname_leng;
s=l+15;
}
else if(k==2)
{//遥信3
for(i=0;i<4;i++)
{if((yx_name[i*2]==0x00)||(yx_name[i*2]==0xff))
{ yx_len=i*2;
break;}
else
{yx_len=8;}
} //判断遥信3中有效unicode码的长度,汉字unicode码的高位不为零。
if(yx_len!=0)
l=yx_len+psname_leng+6;
else
l=yx_len+psname_leng+10;
s=l+15;
}
else if(k==3)
{//遥信4
for(i=0;i<4;i++)
{if((yx_name[i*2+8]==0x00)||(yx_name[i*2+8]==0xff))
{ yx_len=i*2;
break;}
else
{yx_len=8;}
}
if(yx_len!=0)
l=yx_len+psname_leng+6;
else
l=yx_len+psname_leng+10;
s=l+15;
}
else if(k==4)
{//遥信5
for(i=0;i<4;i++)
{if((yx_name[i*2+16]==0x00)||(yx_name[i*2+16]==0xff))
{ yx_len=i*2;
break;}
else
{yx_len=8;}
}
if(yx_len!=0)
l=yx_len+psname_leng+6;
else
l=yx_len+psname_leng+10;
s=l+15;
}
else if(k==5)
{//遥信6
for(i=0;i<4;i++)
{if((yx_name[i*2+24]==0x00)||(yx_name[i*2+24]==0xff))
{ yx_len=i*2;
break;}
else
{yx_len=8;}
}
if(yx_len!=0)
l=yx_len+psname_leng+6;
else
l=yx_len+psname_leng+10;
s=l+15;
}
else
{//其余遥信为“遥信X分”或“遥信X合”
l=10+psname_leng;
s=l+15;
}
}
else if(sms_type==SMS_ALL_DAT) /* 频率:xx.xxHz;电压:xxx.xV;电流:xxx.xA;压力:x.xxMPa;系统正常 */
{
l=92+2+psname_leng;
s=l+15;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -