?? dvs-comprotoc.c
字號(hào):
//dvs-comprotoc.c
#include "DVS-V1.0.H"
//=========================================== 函數(shù)定義 ==========================================
void ScanComProtoc(); //掃描串口協(xié)議
void RxTCPSame(unsigned char auc_Command,unsigned char auc_Send_Len,unsigned char *pDst);//返回協(xié)議
void judgeRAYTC(unsigned char auc_Command,unsigned char auc_Send_Len,unsigned char *pDst);
//===============================================================================================
//=========================================== 外部定義 ==========================================
//位
extern bit guc_Bit_BuChe; //布撤防:1為布,0為撤
extern bit guc_bitRsCom; //中斷接收完畢
extern bit guc_bit_SenAlar ; //傳感器報(bào)警
extern bit guc_BitTel ; // 拔打電話標(biāo)致位
//變里
extern unsigned int data guc_Timer0; //拔號(hào)按鍵定時(shí)計(jì)數(shù)器
extern unsigned char data guc_AlarCnt; //拔號(hào)時(shí)計(jì)算器
//數(shù)組
extern unsigned char idata RsBuf[32]; //接收緩沖區(qū)
//函數(shù)
extern void Delay1Ms(unsigned int auc_time); //延時(shí)1MS
extern void ONAlarSoun(); //打開警號(hào)聲
extern void BuFan(); //布防處理
extern void CheFan(); //撤防處理
extern void SendToData(unsigned char *p,unsigned char Long); //發(fā)送命令
extern void SendASC(unsigned char ASC); //發(fā)送-個(gè)ASCII
extern void WrEEPROM(unsigned char address,unsigned char indata); //寫EEPROM
extern unsigned char RdEEPROM(unsigned char address); //讀EEPROM
//===============================================================================================
//===============================================================================================
//語法格式: RxTCPSame()
//實(shí)現(xiàn)功能: 返回相同的協(xié)議
//參數(shù):
//auc_Command:命令字;auc_Send_Len數(shù)據(jù)長度;*pDst:數(shù)據(jù)
//返回: 無
//創(chuàng)建時(shí)間:2008-12-26 修改時(shí)間:
//創(chuàng)建人員: 修改人員:
//===============================================================================================
void RxTCPSame(unsigned char auc_Command,unsigned char auc_Send_Len,unsigned char *pDst)
{
unsigned char data luc_i,luc_temp;
luc_temp = 0xfe^auc_Command^0x00^0x01^auc_Send_Len; //異或協(xié)議區(qū)
for(luc_i = 0 ; luc_i < auc_Send_Len ;luc_i ++) //異或數(shù)據(jù)區(qū)
{
luc_temp = *(pDst+luc_i)^luc_temp;
}
SendASC(0xfe); //返回起始碼
SendASC(auc_Command); //返回命令字
SendASC(0x00); //返回分包標(biāo)記
SendASC(0x01); //返回命令序號(hào)
SendASC(auc_Send_Len); //返回?cái)?shù)據(jù)區(qū)長度
SendToData(pDst,auc_Send_Len); //返回?cái)?shù)據(jù)區(qū)
SendASC(luc_temp) ; //返回異或值
}
//===============================================================================================
//語法格式: judgeRAYTC()
//實(shí)現(xiàn)功能: 判斷返回協(xié)議是否定義協(xié)議相同
//參數(shù):
//auc_Command:命令字;auc_Send_Len數(shù)據(jù)長度;*pDst:數(shù)據(jù)
//返回: 無
//創(chuàng)建時(shí)間:2009-01-08 修改時(shí)間:
//創(chuàng)建人員: 修改人員:
//==============================================================================================
void judgeRAYTC(unsigned char auc_Command,unsigned char auc_Send_Len,unsigned char *pDst)
{
// unsigned char data luc_i;
RxTCPSame(auc_Command,auc_Send_Len,pDst);
guc_Timer0 = 32; //定時(shí)1秒
while(1) //等待回返回信息
{
if(RsBuf[0]==0xFE)
{
Delay1Ms(30);
break;
}
if(guc_Timer0==0) break; //如果沒有等到返回信息也返回
}
RsBuf[0] = 0x00;
// for(luc_i = 0 ; luc_i < 30 ; luc_i ++) //清除接收緩沖區(qū)
// {
// RsBuf[luc_i] = 0x00;
// }
guc_bitRsCom = 0;
}
/*
//===============================================================================================
//語法格式: judgeTCPSame()
//實(shí)現(xiàn)功能: 判斷協(xié)議是否定義協(xié)議相同
//參數(shù): 無
//返回: 如果相同返回1,如果不同返回0
//創(chuàng)建時(shí)間:2008-12-25 修改時(shí)間:
//創(chuàng)建人員: 修改人員:
//===============================================================================================
unsigned char judgeTCPSame()
{
unsigned char data luc_len,luc_xordata;
unsigned char data luc_temp,luc_i;
luc_len = RsBuf[4]; //獲取數(shù)據(jù)長度
luc_xordata = RsBuf[4+luc_len+1]; //獲取校驗(yàn)值
luc_temp = RsBuf[0]^RsBuf[1]^RsBuf[2]^RsBuf[3]^RsBuf[4]; //異或協(xié)議值區(qū)
for(luc_i = 0 ; luc_i < luc_len ;luc_i ++) //異或數(shù)據(jù)區(qū)
{
luc_temp = RsBuf[5+luc_i]^luc_temp;
}
if((luc_xordata==luc_temp )&&(RsBuf[2]==0)&&(RsBuf[3]==1)) return 1; //如果相同則返回1
else
{
// luc_len = 0x02; //返回參數(shù)的數(shù)據(jù)長度錯(cuò)誤
// RxTCPSame(RsBuf[1],1,&luc_len);
return 0 ; //否則返回0
}
}
*/
//===============================================================================================
//語法格式: SetComPhone()
//實(shí)現(xiàn)功能: 設(shè)置串口電話號(hào)碼
//參數(shù): 無
//返回: 無
//創(chuàng)建時(shí)間:2008-12-26 修改時(shí)間:
//創(chuàng)建人員: 修改人員:
//===============================================================================================
void SetComPhone()
{
unsigned char data luc_Phone_nub;
unsigned char data luc_temp;
unsigned char data luc_i;
bit luc_BitOk;
luc_Phone_nub = RsBuf[5]; //獲取電話組數(shù)
luc_temp = RsBuf[0]^RsBuf[1]^RsBuf[2]^RsBuf[3]^RsBuf[4]^RsBuf[5];
for(luc_i = 0 ; luc_i < RsBuf[4]-1; luc_i ++)
{
if((RsBuf[luc_i+6])<13) luc_BitOk = 1;
else
{
luc_BitOk = 0 ;
break;
}
}
if((luc_temp==RsBuf[6])||(luc_BitOk==0)) //如果相等則刪除電話號(hào)碼
{
luc_i = 0x00;
RxTCPSame(SET_COM_PHONE,1,&luc_i); //返回網(wǎng)絡(luò)模塊成功設(shè)置
for(luc_i = 0 ; luc_i < PH_CODE_LEN; luc_i ++)
{
WrEEPROM(STER_ADDR+PH_CODE_LEN*(luc_Phone_nub)+luc_i,0xff); //保存電話號(hào)碼
}
}
else
{
//ALARM_LED = 0;
luc_i = 0x00;
RxTCPSame(SET_COM_PHONE,1,&luc_i); //返回網(wǎng)絡(luò)模塊成功設(shè)置
WrEEPROM(STER_ADDR+PH_CODE_LEN*(luc_Phone_nub),'F'); //保存開始標(biāo)致
for(luc_i = 0 ; luc_i < RsBuf[4]-1; luc_i ++)
{
WrEEPROM(STER_ADDR+PH_CODE_LEN*(luc_Phone_nub)+luc_i+1,RsBuf[luc_i+6]);//保存電話號(hào)碼
}
WrEEPROM(STER_ADDR+PH_CODE_LEN*(luc_Phone_nub)+luc_i+1,0xff); //最后位加0xff結(jié)束標(biāo)致
}
}
//===============================================================================================
//語法格式: QueriesComPhone()
//實(shí)現(xiàn)功能: 查詢串口電話號(hào)碼
//參數(shù): 無
//返回: 無
//創(chuàng)建時(shí)間:2008-12-26 修改時(shí)間:
//創(chuàng)建人員: 修改人員:
//===============================================================================================
unsigned char code SendCom_TAB[5]={0xfe,0x81,0x00,0x01,0x00};
void QueriesComPhone()
{
unsigned char idata luc_Buf[PH_CODE_LEN+2];
unsigned char idata luc_i,luc_j;
unsigned char data luc_temp ;
SendToData(SendCom_TAB,5); // 發(fā)送命令頭
for(luc_j = 0 ; luc_j < 9 ; luc_j ++)
{
for(luc_i=0 ;luc_i<PH_CODE_LEN;luc_i++)
{
luc_Buf[luc_i] = 0xff ;
}
luc_temp = RdEEPROM(STER_ADDR+PH_CODE_LEN*(luc_j));
if(luc_temp=='F')
{
for(luc_i=0 ; luc_i<PH_CODE_LEN - 1 ; luc_i++)
{
luc_Buf[luc_i] = RdEEPROM(STER_ADDR+PH_CODE_LEN*(luc_j)+luc_i+1);
if(luc_Buf[luc_i]==0xff) break ;
if((luc_Buf[luc_i])>=13) luc_Buf[luc_i] = 0xff ;
}
}
SendToData(luc_Buf,PH_CODE_LEN); // 發(fā)送電話號(hào)碼
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -