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

📄 host.c

📁 主从式总线型SIO系统(多机双向通信)
💻 C
字号:
 //*********主机代码******
 #include <reg51.h>
 #include "Clicent_Setting.h"
 #include "LCD_Funtion.h"
 #include "Futions.h"
 #include "Host_Interrupt_Funtion.h"

 int num1=1;   //从机数码管起始数
 int num2=0;
 int num3=1;
//*****************
void main(void)
{
	Serial_Set();	 //串口设置
 	Lcd_Init();		  //LCD初始化
	Interrupt_Init();	//中断初始化
 	ClrScreen();		//LCD清屏

	while(1)
	{
	 if(Intval1&&Int_pro1)			//如果第一次中断0,采集从机1温度
	 {
			Serial_Init();				//初始化串口
			SBUF=STD1;					//发送从机1 ID
			while(!TI);					//等待发送完成
			TI=0;
						
			while(Int_pro1)				//如果没触发第二次中断
				{
				if(Serial1)				//从机1响应是否正确
				{  
					if(Serial1==1)	  	//如果从机正确接收到地址
					{	
						SCON=0xd0;		 //串口允许接收数据
						Serial1=0;
						SBUF=Clicent_Command1;	 //发送命令给从机1告知从机这是命令
						while(!TI);
						TI=0;
					}
					if(Serial1==2&&SendTo1==1)	  	//
					{	
						Serial1=0;
						SBUF=Clicent_Receive_Data1;	 //发送从机1接收数据的命令
						while(!TI);
						TI=0;
					}

					if(Serial1==2&&ReceiveFrom1==1)	   	//如果从机1正确接受到命令
					{	
						Serial1=0;		//
						SBUF=Clicent_Data_Command1;	  	//发送把从机1结果送主机的命令
						while(!TI);
						TI=0;
					}
					if(Serial1==3)	   //接收从机1 温度数据
					{  	
						Serial1=0;

						SBUF=Clicent_Send_Data1;	 //发送给从机发送数据命令
						while(!TI);
						TI=0;

						while(!RI);
						RI=0;
						DS18B20_Data[0]=SBUF;			  //接收温度数据
						while(!RI);
						RI=0;
						DS18B20_Data[1]=SBUF;
						 
						ClrScreen();  //LCD清屏
						GotoXY(0,0);						
						Print_Str("NUM1");//LCD显示从机号
						temperature_process(DS18B20_Data[0],DS18B20_Data[1]);  //温度数据处理
					   
					   if(!flag) //正			   LCD显示正温度
		 				{
						GotoXY(0,1);
						Print_Str(zhen_temp);
						if(dot_dis)	
						Print_Str(".");
						Print_Str(xiaoshu_temp);
						Print_Char(0xdf);
						Print_Str("C");
		                }
		                else   //负				LCD显示负温度
		                {
						GotoXY(0,1);
						Print_Str("-");
						Print_Str(zhen_temp);	
						Print_Str(".");
						Print_Str(xiaoshu_temp);
					    Print_Char(0xdf);
						Print_Str("C");
  	 	                }
					
			 		}
					if(Serial1==4)				//主机向从机发送数据
					{
					 Serial1=0;                     
					SBUF=num1;					//发送数据1 3 5 7 9....给从机1测试(奇数递增)
					while(!TI);					//等待发送完成
			        TI=0;
					num1=num1+2; 
					}	 
				}
	 		 }
	 }
//****************************

//*****************************
	 if(Intval2&&Int_pro2)			//如果第二次中断0,采集从机2温度
	 {
			Serial_Init();				//初始化串口
			SBUF=STD2;					//发送从机2 ID
			while(!TI);					//等待发送完成
			TI=0;
			while(Int_pro2)				//如果没触发下次中断0,循环
			{ 
				if(Serial2)				//从机2响应是否正确
				{  
					if(Serial2==1)	  	//如果从机2正确接收到地址
					{	
						SCON=0xd0;
						Serial2=0;
						SBUF=Clicent_Command2;	 //发送从机2命令
						while(!TI);
						TI=0;
					}
					if(Serial2==2&&SendTo2==1)	  	//
					{	
						Serial2=0;
						SBUF=Clicent_Receive_Data2;	 //发送从机2接收数据命令
						while(!TI);
						TI=0;
					}
					if(Serial2==2&&ReceiveFrom2==1)	   	//如果从机正确接受到命令
					{	
						Serial2=0;		//
						SBUF=Clicent_Data_Command2;	  	//发送把从机结果送主机的命令
						while(!TI);
						TI=0;
					}
					if(Serial2==3)	   //如果从机发送结果完成
					{  	
						//ClrScreen();
						Serial2=0;

						SBUF=Clicent_Send_Data2;	//从机可发送数据	  
						while(!TI);
						TI=0;

						while(!RI);
						RI=0;
						DS18B20_Data[0]=SBUF;			  //接收温度数据
						while(!RI);
						RI=0;
						DS18B20_Data[1]=SBUF;

						ClrScreen();  //LCD清屏
						GotoXY(0,0);						
						Print_Str("NUM2");//LCD显示从 机号
						temperature_process(DS18B20_Data[0],DS18B20_Data[1]);  //温度数据处理
					   
					   if(!flag) //正
		 				{
						GotoXY(0,1);
						Print_Str(zhen_temp);
						if(dot_dis)	
						Print_Str(".");
						Print_Str(xiaoshu_temp);
						Print_Char(0xdf);
						Print_Str("C");
		                }
		                else   //负
		                {
						GotoXY(0,1);
						Print_Str("-");
						Print_Str(zhen_temp);	
						Print_Str(".");
						Print_Str(xiaoshu_temp);
						Print_Char(0xdf);
						Print_Str("C");
  	 	                }
					 //*/
			 		}
					if(Serial2==4)			  //向从机2发送数据
					{
					 Serial2=0;
					 num2=num2+2;                      
					 SBUF=num2;					//发送数据2 4 6 8....测试(偶数递增)
					while(!TI);					//等待发送完成
			        TI=0;
					}
						 
				}
				}	 
	 }

	 //*********************************************
	 	 if(Intval3&&Int_pro3)			//如果第三次中断,采集从机3温度
	 {
			Serial_Init();				//初始化串口
			SBUF=STD3;					//发送从机3 ID
			while(!TI);					//等待发送完成
			TI=0;
						
			while(Int_pro3)				//如果没触发第二次中断0
				{
				if(Serial3)				//从机3响应是否正确
				{  
					if(Serial3==1)	  	//如果从机3正确接收到地址
					{	
						SCON=0xd0;
						Serial3=0;
						SBUF=Clicent_Command3;	 //发送从机3命令
						while(!TI);
						TI=0;
					}
					if(Serial3==2&&SendTo3==1)	  	//
					{	
						Serial3=0;
						SBUF=Clicent_Receive_Data3;	 //发送从机3命令
						while(!TI);
						TI=0;
					}

					if(Serial3==2&&ReceiveFrom3==1)	   	//如果从机正确接受到命令
					{	
						Serial3=0;		//
						SBUF=Clicent_Data_Command3;	  	//发送把从机结果送主机的命令
						while(!TI);
						TI=0;
					}
					if(Serial3==3)	   //接收从机3 数据
					{  	
						Serial3=0;

						SBUF=Clicent_Send_Data3;
						while(!TI);
						TI=0;

						while(!RI);
						RI=0;
						DS18B20_Data[0]=SBUF;			  //接收数据
						while(!RI);
						RI=0;
						DS18B20_Data[1]=SBUF;
						 
						ClrScreen();  //清屏
						GotoXY(0,0);						
						Print_Str("NUM3");//显示结果
						temperature_process(DS18B20_Data[0],DS18B20_Data[1]);
					   
					   if(!flag) //正
		 				{
						GotoXY(0,1);
						Print_Str(zhen_temp);
						if(dot_dis)	
						Print_Str(".");
						Print_Str(xiaoshu_temp);
						Print_Char(0xdf);
						Print_Str("C");
		                }
		                else   //负
		                {
						GotoXY(0,1);
						Print_Str("-");
						Print_Str(zhen_temp);	
						Print_Str(".");
						Print_Str(xiaoshu_temp);
					    Print_Char(0xdf);
						Print_Str("C");
  	 	                }
					
			 		}
					if(Serial3==4)
					{
					 Serial3=0;                     
					SBUF=num3;					//发送数据1 2 3 4....测试(自然数递增)
					while(!TI);					//等待发送完成
			        TI=0;
					num3=num3+1; 
					}	 
				}
	 		 }
	 }
	}
}

⌨️ 快捷键说明

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