📄 tongxin.h
字号:
/**************************通信程序*****************************/
/************************************************************************/
/*通信中断*/
/*fjsq sjsq fs[],js[],first,scond, */
//tongxin shiyong de hanshu yao dingyi !!!!!!!!!
void sumf(unsigned char *dpp,unsigned char sjgs);
unsigned char sums(unsigned char *dpp);
bit txsjcxsj1(void);
bit txsjcxsj2(void);
bit txsjcxsj3(void);
bit cssjcx(void) ;
//***************************END*****************************************
//串口0中断
void serial_0(void) interrupt 4 using 2{
//******************发送数据******************
if(TI){
TI=0;
if(fjsq>0){
SBUF=*(fsj++);
fjsq--;
}
else sjyfs=1;
}
//*******************接收数据***************
if(RI){
RI=0;
BUFF1 = BUFF2;
BUFF2 = BUFF3;
BUFF3 = BUFF4;
BUFF4 = BUFF5;
BUFF5 = BUFF6;
BUFF6 = BUFF7;
BUFF7 = BUFF8;
BUFF8 = SBUF ;
if( BUFF1 == 0XEB ){
if( BUFF8 == sums( BUFF ) ) { //校验正确
if( sjyfs ) { //正在处理其它通信数据 通信请求无效 !
switch ( BUFF2) {
case 0x01:// 电源变压器参数控制
if ( (BUFF5 == 0xff )&&(!zbh)){
ykz = 1 ;
ykml = 0xA5 ;
zjcsml = 0 ;
sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA ;
}
break ;
case 0x02:// 控制回路检测
if ( (BUFF5 == 0xff )&&(!zbh) ){
ykz = 2;
ykml = 0xA5 ;
zjcsml = 0 ;
sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA ;
}
break ;
case 0x03:// 通信回路和接点检测
if ( (BUFF5 == 0xff )&&(!zbh)){
ykz = 3 ;
ykml = 0xA5 ;
zjcsml = 0 ;
sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA;
}
break ;
case 0x04: //停止测试 回到初始测试状态
if ( BUFF5 == 0x00 ){
zbh = 0 ;
ykz = 4 ;
ykml = 0xA5 ;
zjcsml = 0 ;
sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA ;
}
break ;
case 0x05: // 手动控制
if( zbh == 0 ){ // 自控时不手控
if( BUFF5 != 0XFF ){ ykz = 5 ; ykz1 = BUFF5 ; ykml = 0xA5 ; }
sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA ;
}
else if( BUFF5 ==0XFF ){ BUFF5 = 0XFE ; BUFF6 = csbz ; sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA ;} //状态查询
break;
case 0x06: //整机测试命令
if ( (BUFF5 == 0xff )&&(!zbh)){
ykz = 1 ;
ykml = 0xA5 ;
zjcsml = 1 ;
sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA;
}
break ;
case 0x07:
if( txsjcxsj1() == 0 ) break ;
SBUF = 0XFA ; break ;
case 0x08:
if( txsjcxsj2() == 0 ) break ;
SBUF = 0XFA ; break ;
case 0x09:
if( txsjcxsj3() == 0 ) break ;
SBUF = 0XFA ; break ;
case 0x0A: break ;//保留 装置自检
case 0x0B: //实时数据查询
if(!sjcjbz) break ;
if( cssjcx() == 0 ) break ;
SBUF = 0XFA ; break ;
// case 0x0a ~ 0x0F:sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA ; break ; //备用命令
case 0x10:if ( (BUFF5 == 0xaa)&&(!zbh) ){
AD_N = BUFF6 ;
ykz1 = BUFF7 ;
ykz = 0x10 ;
ykml = 0xA5 ;
}
break;
}
}
}
}
}
}
//**************************************函数***********************************
//数据发送时使用SUMF *dzp 数据首址 sjgs 校验数据个数 处理的SUM值
void sumf(unsigned char *dpp,unsigned char sjgs){
unsigned char i,temp ;
unsigned int sum ;
sum = 0xfa ;
for(i = 0 ; i<sjgs ;i++)
{
temp = *dpp ;
sum = sum + temp ;
dpp++ ;
}
*dpp=(char)sum ; // SUML
}
//数据接收时使用SUMS *dzp 数据首址 sjgs 校验数据个数 处理的SUM值
unsigned char sums( unsigned char *dpp){
unsigned char i,temp ;
unsigned int sum ;
sum = 0;
for(i=0 ; i<7 ;i++)
{
temp = *dpp ;
sum = sum + temp ;
dpp++ ;
}
return (char)sum ;
}
/***************************命令发送***************************/
bit txsjcxsj1(void){
unsigned char i ;
unsigned char (*dpp)[32] ;
fshc[0] = BUFF5 ;
switch ( BUFF5 ) {
case 0XA0:
case 0XA1: dpp = dyjcsj ; break ;
case 0XA2:
case 0XA3: dpp = dyjcsj + 1 ; break ;
case 0XA4:
case 0XA5: dpp = dyjcsj + 2 ; break ;
case 0XA6:
case 0XA7: dpp = dyjcsj + 3 ; break ;
default : return 0 ;
}
i = ( BUFF5 & 0x0f ) % 2 ;
if( i == 0 ){
for (i = 0 ; i < 16 ;i++ )
fshc[i+1] = *((*dpp)+i) ;
}
else {
for (i = 0 ; i < 16 ;i++ )
fshc[i+1] = *((*dpp)+16+i ) ;
}
fshc[17]= 0 ;
sumf(fshc,18 );
sjyfs = 0 ;
fjsq = 19 ;
fsj = fshc ;
return 1 ;
}
bit txsjcxsj2(void){
unsigned char i ;
unsigned char (*dpp)[74] ;
fshc[0] = BUFF5 ;
switch ( BUFF5 ) {
case 0XFB: dpp = kzjcsj ; break ;
case 0XB0: dpp = kzjcsj + 1 ; break ;
case 0XB1: dpp = kzjcsj + 2 ; break ;
case 0XB2: dpp = kzjcsj + 3 ; break ;
case 0XB3: dpp = kzjcsj + 4 ; break ;
case 0XB4: dpp = kzjcsj + 5 ; break ;
case 0XB5: dpp = kzjcsj + 6 ; break ;
case 0XB6: dpp = kzjcsj + 7 ; break ;
case 0XB7: dpp = kzjcsj + 8 ; break ;
default : return 0 ;
}
for ( i = 0 ; i < 74 ; i++ )
fshc[i+1] = *((*dpp)+i) ;
sumf( fshc , 75 );
sjyfs = 0 ;
fjsq = 76 ;
fsj = fshc ;
return 1;
}
bit txsjcxsj3(void){
unsigned char i ;
unsigned char (*dpp)[16] ;
fshc[0]=BUFF5;
switch ( BUFF5 ) {
case 0XC0: dpp = otjcsj ; break;
case 0XC1: dpp = otjcsj+1; break;
default : return 0;
}
for (i = 0 ; i < 16 ;i++ )
fshc[i+1] = *((*dpp)+i) ;
fshc[17]= 0;
sumf( fshc , 18 );
sjyfs = 0 ;
fjsq=19;
fsj=fshc;
return 1 ;
}
bit cssjcx(void){
unsigned char i ,*dpp ;
if(BUFF5 == 0XE0){
dpp = sssjbuf ;
fshc[0]=BUFF5;
for (i = 0 ; i < 84 ;i ++ )
fshc[i+1] = *(dpp+i) ;
sumf( fshc , 85 );
sjyfs = 0 ;
fjsq = 86 ;
fsj = fshc;
return 1 ;
}
return 0 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -