⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kjj19-mn.c

📁 这是一个模拟分站的C51源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	   bmoks=0;
	   bms=10;
       bmok=0; 
     while(i!=0x44)   //CRC码发送结束
      {   
        if (bmok==1)
        break;
        i=Z85C30_JCQRD(0X00);  //读取寄存器中的数据   
        i=i&0x44;   	  
        }
    Z85C30_KZJCQ(0x05,0x61);   //挂起发送
	
	SIOAB=1; //设置控制字A路接收 
	Z85C30_init_A();  //A路接受设置
	SIOAB=0;
	fzhybj=0;     //置接口回应标记
     }


/************************************************************************
串口数据处理:1、设置参数填如参数数组。
              2、分站上传数据填入数据数组。
************************************************************************/
void cl232(void)
{
 uchar a,b;
 if(RIbuf[0]==0x55 && RIbuf[1]==0xAA)    //数据包正确
 {
   if(RIbuf[2]==0xFF && RIbuf[3]==0x00)  //如果是设置信息
   {
	  switch ( RIbuf[4])   //判断命令字
	  {
	  	case 1:		  //设置清空置0
		    IE=0X90;	  //T0中断,INTO中断禁止
			dzzs=0;
			wxfzh[0]=0XFF;
		    HY232(1);
			break;
		case 2:		 //添加分站	
		    a=dzzs*4;
			wxfzh[dzzs]=RIbuf[6]; //设置分站地址
			wxfzcs[a]=RIbuf[7];	  //设置分站参数
			wxfzcs[a+1]=RIbuf[8];
			wxfzcs[a+2]=RIbuf[9];
			wxfzcs[a+3]=RIbuf[10];
			dzzs=dzzs+1;

			HY232(2);
			break;
		case 3:		 //设置结束
		    if(dzzs==RIbuf[5])
			 {
		      eeprom_clr(0x20,0x00); //擦除FALSH
			  for(a=0;a<32;a++)	  //存8个分站的参数
               {
				 eeprom_w(0x20,a,wxfzcs[a]);
	               }
               for(a=32;a<40;a++) //存8个分站的地址
                {
				 eeprom_w(0x20,a,wxfzh[a-32]);
                	}
         	   eeprom_w(0x20,40,dzzs); //存设置分站数
               a=0xff-dzzs;
			   eeprom_w(0x20,41,a); //存设置分站数反码
			  HY232(3);
			   }
			r_count=0;
			IE=0X93;    //T0中断,INTO中断开放
			break;
		default:
			break;
	     }
	  }
    else     //分站上传来的数据
	  if(RIbuf[2]==wxfzh[wxh])	 //如果分站号为刚才巡检的分站号
	  	 {
		   a=wxh*8;
	       for(b=0;b<8;b++)
		     {			   
		       fzsj[a+b]=RIbuf[b+3];
			   }
	        }
    }
  }

/************************************************************************
模拟串口对无线接口的查询9个字节(0X55+0XAA+命令+1字节分站号+4字节参数+1字节累加和)
        对设置的回应
/***********************************************************************/ 
 void HY232(uchar ml)    //对无线接口的查询
 {
  uchar i;
  uchar ljh;	
  ljh=0;
  TIbuf[0]=0x55;     //数据包头0X55AA
  ljh=ljh+TIbuf[0];
  TIbuf[1]=0xAA;
  ljh=ljh+TIbuf[1];
  TIbuf[2]=ml;       //命令
  ljh=ljh+TIbuf[2];
  switch (ml)
  {
  	case 1,2,3:		 //对设置的回应
		   TIbuf[0]=0xFF;     //数据包头0XFF00
          ljh=ljh+TIbuf[0];
          TIbuf[1]=0x00;
          ljh=ljh+TIbuf[1];
          TIbuf[2]=ml;       //命令
          ljh=ljh+TIbuf[2];
		  TIbuf[3]=0X55;
	      TIbuf[4]=0;
	      TIbuf[5]=0;
	      TIbuf[6]=0;
	      TIbuf[7]=0;
	      TIbuf[8]=ljh+0X55;
	      break;
	case 4:		//下发巡检指令
		  TIbuf[3]=wxfzh[wxh];   //分站号
	      ljh=ljh+TIbuf[3];
	      i=(wxh-1)<<2;
	      TIbuf[4]=wxfzcs[i];    //4个参数
	      ljh=ljh+TIbuf[4];
	      i=i+1;
	      TIbuf[5]=wxfzh[i];
	      ljh=ljh+TIbuf[5];
	      i=i+1;
	      TIbuf[6]=wxfzh[wxh];
	      ljh=ljh+TIbuf[6];
	      i=i+1;
	      TIbuf[7]=wxfzh[wxh];
	      ljh=ljh+TIbuf[7];
	      TIbuf[8]=ljh;
		break;
	case 5:			 //下发断电指令
	      TIbuf[3]=ddfz;   //断电分站
	      ljh=ljh+ddfz;
	      TIbuf[4]=ddcs;   //断电参数
	      ljh=ljh+ddcs;
	      TIbuf[5]=0;
	      TIbuf[6]=0;
	      TIbuf[7]=0;
	      TIbuf[8]=ljh;
		 break;
	case 6:		 //下发总清指令
		  TIbuf[3]=0;
	      TIbuf[4]=0;
	      TIbuf[5]=0;
	      TIbuf[6]=0;
	      TIbuf[7]=0;
	      TIbuf[8]=ljh;
		break;
	default:
		break;
    }

   SBUF=TIbuf[0];     //串口发送
   tsum=1;
   }
/**********************************************************************************
* function:       delay_ms()					 24M 500us延迟						
* use:	       delay x ms(Max 65535ms,)
* input parameter:	unsigned int delay_counter								
* output parameter: none											
***********************************************************************************/
void delay_ms(uint delay_counter)
{
 unsigned int data i;
	while(delay_counter--)
	  {
	   i=81;
	   while(i--);
	    }
   }
/***********************************************************************************
* function:        Z85C30_KZJCQ()										
* use:	            控制寄存器设置			    	
* input parameter:	 none								
* output parameter: none						
***********************************************************************************/
 void Z85C30_KZJCQ(uchar KZJCQH,uchar KZSJ)   
 {
 SIOCS=1; 	
 SIORD=1;
 SIOWR=1;
 SIODC=0;    //选择控制
 P0=KZJCQH;
 SIOCS=0;SIOWR=0;   //选择寄存器
 _nop_();
 SIOWR=1;SIOCS=1;
  P0=KZSJ;
  SIOCS=0;SIOWR=0;
  _nop_();
 SIOWR=1; SIOCS=1; 

} 

/***********************************************************************************
* function:        Z85C30_WR0()										
* use:	            控制寄存器0设置			    	
* input parameter:	 none								
* output parameter: none						
***********************************************************************************/
 void Z85C30_WR0(uchar KSJ)   
 {
 SIOCS=1; 	
 SIORD=1;
 SIOWR=1;
  P0=KSJ;
  SIODC=0;    //选择控制
  SIOCS=0;SIOWR=0;
  _nop_();
  SIOWR=1;SIOCS=1;
  _nop_(); 
} 
 /***********************************************************************************
* function:        Z85C30_JCQRD()										
* use:	            控制寄存器读取			    	
* input parameter:none								
* output parameter: none						
***********************************************************************************/
 uchar Z85C30_JCQRD(uchar JCQH)   
 {
 uchar a;
 SIOCS=1;	
 SIORD=1;
 SIOWR=1;
 SIODC=0;    //选择控制
if(JCQH!=0)
 {
  P0=JCQH;
  SIOCS=0;SIOWR=0;   //选择寄存器
  _nop_();
  SIOWR=1;SIOCS=1;
  }
  SIOCS=0;SIORD=0;
  _nop_();
  a=P0;  //读取寄存器中的数据   
 SIORD=1;SIOCS=1;
 return a;
} 
    
/*********************************************************************************
* function:         Z85C30_init()	                                                  
* use:	           Z85C30初始化		
* input parameter:  none							
* output parameter: none						
*********************************************************************************/
void Z85C30_init(void)
{	
 SIOAB=1; //设置控制字A路接收
 Z85C30_KZJCQ(0x09,0x80);  //强制复位
 Z85C30_KZJCQ(0x02,0x00);  //WR2    中断向量00H
 Z85C30_KZJCQ(0x04,0x20);  //WR4   SDLC模式  
 Z85C30_KZJCQ(0x01,0x10);  //WR1   接收所有字符和特征字符中断
 Z85C30_KZJCQ(0x87,0x7E);  //WR7   SDLC同步场,复位TX_CRC生成器
 Z85C30_KZJCQ(0x46,0x00);  //WR6   SDLC地址场00H,复位RX_CRC生成器
 Z85C30_KZJCQ(0x0A,0x80);  //WR10  A通道CRC预置FF,NRZ模式
 Z85C30_KZJCQ(0x0B,0x08);  //WR11  接收时钟/RTXC,发送时钟为/RTXC
 Z85C30_KZJCQ(0x0E,0x20);  //WR14  进入地址搜索模式
 Z85C30_WR0(0x10); 
 Z85C30_WR0(0x38);  //  复位IUS
 Z85C30_KZJCQ(0x09,0x2A);  //WR9   INTACK允许   
 Z85C30_KZJCQ(0x03,0xC9);  //WR3   接收8个字符,RX_CRC允许,地址搜索模式,同步字符禁止装入,RX允许
 
 SIOAB=0; //设置控制字B路
 Z85C30_KZJCQ(0x09,0x40);  //强制复位
 Z85C30_KZJCQ(0x02,0x00);  //WR2    中断向量00H
 Z85C30_KZJCQ(0x04,0x20);  //WR4   SDLC模式  
 Z85C30_KZJCQ(0x01,0x00);  //WR1   接收不中断
 Z85C30_KZJCQ(0x87,0x7E);  //WR7   SDLC同步场,复位TX_CRC生成器
 Z85C30_KZJCQ(0x06,0x00);  //WR6   SDLC地址场00H,复位RX_CRC生成器
 Z85C30_KZJCQ(0x0A,0x80);  //WR10  CRC预置FF,NRZ模式
 Z85C30_KZJCQ(0x0B,0x08);  //WR11  接收时钟/RTXC,发送时钟为/RTXC
 Z85C30_KZJCQ(0x0E,0x20);  //WR14  进入地址搜索模式
 Z85C30_WR0(0x10); 
 Z85C30_WR0(0x38);  //  复位IUS
 Z85C30_KZJCQ(0x09,0x0A);  //WR9   INTACK允许   
 Z85C30_KZJCQ(0x03,0xCC);  //WR3   接收8个字符,RX_CRC允许,地址搜索模式,同步字符禁止装入,RX允许*/RX不允许
}
/*********************************************************************************
* function:         Z85C30_init_A()	                                                  
* use:	           Z85C30初始化-A路接收

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -