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

📄 ckcom.c

📁 市面ck报警主机破解接口电脑串口控制源码
💻 C
字号:
#include	"reg51.h"
#include	"Mylib.h"


sbit	En1=P1^5;		  //control KbData,CpuTxd 	to CkData
sbit	En2=P1^6;		  //control CpuTxd 			to PcRxd	   
sbit	En3=P1^7;		  //control CkData,PcTxd 	to CpuRxd
uchar	PcState,KeyBuf;
uchar   CkState=0;
bit		ReceivePcFlag=0,CkRxdFlagOk,PcRxdFlagOk;	
bit		ReceiveCkFlag=1;
uchar	CkBuf[8];
uchar	PcKeyBuf[10];
sbit	test=P1^0;
sbit	test1=P1^1;
sbit	test2=P1^2;
sbit	test3=P1^3;
bit		OkToPcFlag;
void	SysInt()
{
 	SCON=0xd0;
	TMOD=0x21;
	//TH1=0xf4;		//use 11.059M	振荡 波特率2.4k	9bit传送
	//TH1=0Xf2;	    //use 24M	振荡 波特率4.464k	9bit传送
	TH1=0Xe6;		//use 24M	振荡 波特率2.4k	9bit传送 	
	TR1=1;
	TR0=1;
	ET0=1;
	ES=1;
	EA=1;
	En1=0;
	En2=0;
	En3=0;
}

void	timer0() interrupt 1 
{	 	
		static uchar time0low;
		TR0=0;
		TH0=0x3c;	//进入中断需33个机器周期
		TL0=0xd1;	//时钟每次中断误差为正负1US
		TR0=1;
		time0low++;
		if(time0low==40)
		{
			time0low=0;
			OkToPcFlag=1;
		}		
					
}
void	Delay600us()
{  uint i;
   for(	i=0;i<300;i++)
   ;

}
void	Communicate()	interrupt 4	 
{   
	uchar RBuf;
	static uchar i=0;
	static uchar KeyCounter=0;
	ET0=0;	
 	if(RI)
	{
	   RI=0;
	   
	   RBuf=SBUF;
	   if(ReceivePcFlag)
	   {  
	   	   
	   	  if(RBuf==0xbb)
	   	  test3=~test3;	      
		  switch(PcState)
		  {
		   	case 0:	if(RBuf==0xaa)
					PcState=1;
					else
					PcState=0;
					break;

			case 1: KeyBuf=RBuf;					
					if(KeyBuf==0xbb)
						{	
							
							PcKeyBuf[KeyCounter]=KeyBuf;
							KeyCounter=0;
							PcRxdFlagOk=1; 							
							ReceivePcFlag=0;
							PcState=0;
							CkState=0;
							i=0;
							SCON=0Xd0;
							En3=0;
							
						 }
					 else
					 	{
						   PcKeyBuf[KeyCounter]=KeyBuf;
						   KeyCounter++;
						}
					
					
					break;
		  	default:break;
		  }
		}  	
	   else	   
	   {   
		   switch (CkState)
		   {
			 case 0:	if(RBuf==0xff)
			 				CkState=1;
						else
							CkState=0;
						break;
			 case 1:	if(RBuf==0x09)
			 				CkState=2;
							else	
								if(RBuf==0xff)
									break;
									else
										if(RBuf==02)
											CkState=3;
										else
											CkState=0;
						break;
			 case 2:	{		  
			 			  CkBuf[i]=RBuf;						  
						  if(i==7)
						  {
						  	test=~test;
						  	
							i=0;
							CkState=4;
						  }
						  else
						  i++;
			 			}
						break;
			case  3:	{
							
							CkState=0;
						}
						break;
		    case  4:	if(RBuf==0xfe)
						{
							CkRxdFlagOk=1;
							CkState=0;
						}
						break;
			default:	break;
		   }
	   }
	   

	}
	ET0=1;

}
void	SentKeyToCk()
{	
	if(KeyBuf!=0xaa)
	{
	TB8=0;
	SBUF=0x6;
	while(!TI)
	;
	TI=0;
	KeyBuf=KeyBuf&0xff;
	TB8=P;
	SBUF=KeyBuf;
	while(!TI)
	;
	TI=0;
	}
	else
	{
	TB8=1;
	SBUF=0xfe;
	
    while(!TI)
    ;
    TI=0;
	TB8=1;
	SBUF=04;//0x6;
	while(!TI)
	;
	TI=0;
	TB8=0;
	SBUF=03;//KeyBuf;
	while(!TI)
	;
	TI=0;
	}
}
void	SentCkToPc()
{
  uchar i;
  SCON=0X50;
  SBUF=0xaa;
  TB8=P;
  while(!TI)
  ;
  TI=0;
  for(i=0;i<8;i++)
  {
   SBUF=CkBuf[i];
   TB8=P;
   while(!TI)
   ;
   TI=0;
  }
  SCON=0Xd0;
}
uchar	datastate=1;
void	Run()
{	 
	static uchar a=0;
	if(CkRxdFlagOk)
	{  
	   if(PcRxdFlagOk)
	   {   	
	   		ES=0; 
	   		if(PcKeyBuf[a]!=0xbb)
		   	{	
				KeyBuf=PcKeyBuf[a];
				En2=1;
				Delay600us();
			  	SentKeyToCk();
				Delay600us();
			  	En2=0;
				a++;
			}
			else
			{
				PcRxdFlagOk=0;
				a=0;
			}
			ES=1; 
	   }
	   ES=1;
	   CkRxdFlagOk=0;
	  
	}

}

void	main()
{	 
	 SysInt();
	 while(1)
	 	Run();
}


⌨️ 快捷键说明

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