📄 新建 文本文档.txt
字号:
SeriMonitor () _task_ 1 { //串口数据处理
char i;
while (1) { /* endless loop */
while(seriBuffer.head==seriBuffer.tail)
{
watchdogb=0;
os_switch_task(); }
i=seriBuffer.tail;
os_wait (K_TMO, 20,0);
while(i!=seriBuffer.tail) //说明还没发完
{
i=seriBuffer.tail;
os_wait (K_TMO, 40,0);
}
if(seriBuffer.head!=seriBuffer.tail) //数据发完
{
if(is_inf_valid()){ //验证校验码
ModemConnected=1;
while(CommandProcessing)os_switch_task();
CommandProcessing=1;
if(seriBuffer.serData[1]==0x06)SendVoltageID=seriBuffer.serData[3]; //获取当前电压行放电信息,SendVoltageID电池ID号
ProcessCommand(seriBuffer.serData[1]); //执行上位机发下来的命令
CommandProcessing=0;
}else{
if(CID_Ident==3)ModemConnected=0;
if((CID_Ident==3)&&((seriBuffer.tail<seriBuffer.head)||(seriBuffer.tail-seriBuffer.head>8))){
ES=0;
for(i=0;i<=TelCount;i++){
// if((TelNumberLength>8)||(TelNumberLength<4))TelNumberLength=8;
Read_EEPRom_string(ComTelNumberAddress+i*8,TelNumberLength);
if(getSeriString(tmpchar)){//判断调制解调器是否接通.
CID_Ident=10;
break;
}
}
/* if(CID_Ident==10){
P2_2=0;
os_wait (K_TMO, 80,0);
P2_2=1;}
else{
P2_2=0;
os_wait (K_TMO, 40,0);
P2_2=1;
os_wait (K_TMO, 40,0);
P2_2=0;
os_wait (K_TMO, 40,0);
P2_2=1;
} */
if(CID_Ident==10){
putstring("ATA\r\n");
}
CID_Ident=0;
ES=1;
ModemConnected=0;
}
CID_Ident=0;
seriBuffer.head=seriBuffer.tail+1;
seriBuffer.head = seriBuffer.head & 0x0f;
if(getSeriString("CARRIE")){//判断调制解调器是否接通.
ModemConnected=0;
}
seriBuffer.head=seriBuffer.tail+1;
seriBuffer.head = seriBuffer.head & 0x0f;
if(getSeriString("ONNEC")){//判断调制解调器是否接通.
ModemConnected=1;
}
seriBuffer.head=seriBuffer.tail+1;
seriBuffer.head = seriBuffer.head & 0x0f;
if(getSeriString("2400")){//判断调制解调器是否接通.
ModemConnected=1;
}
seriBuffer.head=seriBuffer.tail+1;
seriBuffer.head = seriBuffer.head & 0x0f;
if(getSeriString("BUSY"))//判断调制解调器是否断开.
{ ModemConnected=0;
}
seriBuffer.head=seriBuffer.tail+1;
seriBuffer.head = seriBuffer.head & 0x0f;
if(getSeriString("CID"))//判断调制解调器是否断开.
{ ModemConnected=0;
}
seriBuffer.head=seriBuffer.tail+1;
seriBuffer.head = seriBuffer.head & 0x0f;
if(getSeriString("+++ATH"))//判断调制解调器是否断开.
{ ModemConnected=0;
}
}
}
seriBuffer.head=0;
seriBuffer.tail=0;
for (i=0;i<15;i++) seriBuffer.serData[i]=0;
}
}
//串口接收程序
serial() interrupt 4 using 2{
if(RI){ //RI,TI在复位后为0。
tmp_char=SBUF;
if(CID_Ident==2)
if(tmp_char==0x44) //读取停电时间
CID_Ident=3;
else
CID_Ident=0;
if(CID_Ident==1)
if(tmp_char==0x49) //连续上报电流累积和
CID_Ident=2;
else
CID_Ident=0;
if(CID_Ident==0)
if(tmp_char==0x43) //读取电话码位数
CID_Ident=1;
if (CID_Ident!=3){
if(seriBuffer.tail<15)
seriBuffer.serData[seriBuffer.tail++] = tmp_char;
seriBuffer.head=0;
}else
else{
serIn();
}
RI=0;
}
if(TI){
TI=0;
if(SendPointer<=SendBufEnd){
SBUF=SendBuf[SendPointer++];
}else
SerialPortAccessing=0;
}
//ET0=1;
}
void serIn(void){
seriBuffer.serData[seriBuffer.tail++] = tmp_char;
seriBuffer.tail = seriBuffer.tail & 0x0f;
if(seriBuffer.tail<=seriBuffer.head)seriBuffer.head++;
seriBuffer.head = seriBuffer.head & 0x0f;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -