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

📄 smbuslistener.c

📁 笔记本电池SMBus总线监听程序!用于51单片机!喜欢的朋友可以试试!
💻 C
字号:
/******************************************************************************************************

完美SMBUS监听程序集合;




******************************************************************************************************/





#include <p89c51rx.h>


//bit ACK;
sbit SCL=P1^2;
sbit SDA=P1^1;

sbit Acc_0=   B^0;
sbit Acc_1=   B^1;
sbit Acc_2=   B^2;
sbit Acc_3=   B^3;
sbit Acc_4=   B^4;
sbit Acc_5=   B^5;
sbit Acc_6=   B^6;
sbit Acc_7=   B^7;






/*****************************************************************************************************
初始化串口





***************************************************************************************************/
void INITUART()      //初始化串行口baud115200
{  

	SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr 
	TMOD = 0x22; //TMOD: timer 1, mode 2, 8-bit reload ;
                 //      timer 0, mode 2, 8-bit,reload ;
	PCON = 0x80; //SMOD=1; 
	TH1 = 0xFF; //Baud:9600 fosc=22.1184MHz 
	IE = 0x00;//Enable Serial Interrupt   //EA=1;ES=1; 90

	PS=1;

	TR1 = 1; // timer 1 run 
	
}



main()  
{
  	bit   SDA_old;
	bit   rec_restart;
	int i;
	unsigned char rec[128];
	unsigned char num;
	
	INITUART();
	SDA=1;
	SCL=1;
start:
	if(num!=0)
	{
		
		for(i=1;i<=num;i++)
		{
			SBUF=rec[i];
			while(TI==0);
			TI=0;
		}
	
	}
	num=0;
	B=0;

	P1_7=0;	
	while(SDA);
	while(SCL);
	P1_7=1;
	
//-------------------------------byte1
	while(!SCL);
 Acc_7=SDA;

while(SCL);

while(!SCL);


 Acc_6=SDA;

 
while(SCL);



while(!SCL);



 Acc_5=SDA;
  
while(SCL);




while(!SCL);

 Acc_4=SDA;
 

 
while(SCL);

while(!SCL);

 Acc_3=SDA;
 

 
while(SCL);


while(!SCL);

 Acc_2=SDA;

while(SCL);


while(!SCL);

 Acc_1=SDA;

 

while(SCL);


while(!SCL);

 Acc_0=SDA;

while(SCL);


while(!SCL);


while(SCL);
num++;
rec[num]=B;	
	

	
//-------------------------------------------  byte2
//----------------------------------------------
	


while(!SCL);
 Acc_7=SDA;

while(SCL);

while(!SCL);


 Acc_6=SDA;

 
while(SCL);



while(!SCL);



 Acc_5=SDA;
  
while(SCL);




while(!SCL);

 Acc_4=SDA;
 

 
while(SCL);

while(!SCL);

 Acc_3=SDA;
 

 
while(SCL);


while(!SCL);

 Acc_2=SDA;

while(SCL);


while(!SCL);

 Acc_1=SDA;

 

while(SCL);


while(!SCL);

 Acc_0=SDA;

while(SCL);


while(!SCL);


while(SCL);
num++;
rec[num]=B;	
	



//---------------------------------------------byte3
//---------------------------------------------


   rec_restart=0;
	while(!SCL)
	{SDA_old=SDA;}
	while(SCL)
	{
	  if(SDA_old!=SDA)
	  { 
	  	  if(SDA==0)
		  {	 
	  	  	rec_restart=1;
			while(SCL);
		   }
	  }
	  else
	  {
		  Acc_7=SDA;
		  rec_restart=0;
	  }
	
	}


	if(rec_restart==1)
	{
		while(!SCL);
 		Acc_7=SDA;

		while(SCL);	
	
	
	}
	
	
	while(!SCL);
	
	
	 Acc_6=SDA;
	
	 
	while(SCL);
	
	
	
	while(!SCL);
	
	
	
	 Acc_5=SDA;
	  
	while(SCL);
	
	
	
	
	while(!SCL);
	
	 Acc_4=SDA;
	 
	
	 
	while(SCL);
	
	while(!SCL);
	
	 Acc_3=SDA;
	 
	
	 
	while(SCL);
	
	
	while(!SCL);
	
	 Acc_2=SDA;
	
	while(SCL);
	
	
	while(!SCL);
	
	 Acc_1=SDA;
	
	 
	
	while(SCL);
	
	
	while(!SCL);
	
	 Acc_0=SDA;
	
	while(SCL);	 
	
	
	 
	
	while(!SCL);//ack			 
	while(SCL);
	num++;
rec[num]=B;
	
//--------------------------------------------------byte4 ....
//----------------------------------------------------
while(1)
{	
	
	
	while(!SCL)
	{SDA_old=SDA;}
	while(SCL)
	{
	  if(SDA_old!=SDA)
	  { 
	  	
			goto start;
	  }
	  else
	  {
	  	Acc_7=SDA;	  
	   }
	}
	
	
	
	while(!SCL);
	
	
	 Acc_6=SDA;
	
	 
	while(SCL);
	
	
	
	while(!SCL);
	
	
	
	 Acc_5=SDA;
	  
	while(SCL);
	
	
	
	
	while(!SCL);
	
	 Acc_4=SDA;
	 
	
	 
	while(SCL);
	
	while(!SCL);
	
	 Acc_3=SDA;
	 
	
	 
	while(SCL);
	
	
	while(!SCL);
	
	 Acc_2=SDA;
	
	while(SCL);
	
	
	while(!SCL);
	
	 Acc_1=SDA;
	
	 
	
	while(SCL);
	
	
	while(!SCL);
	
	 Acc_0=SDA;
	
	while(SCL);	 
	
	
	 
	
	while(!SCL);//ack				 
	while(SCL);
	num++;
rec[num]=B;	
}	
	
}  

⌨️ 快捷键说明

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