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

📄 twire.c

📁 原创
💻 C
字号:

#include <iom16v.h>
#include <macros.h>
#include "hal.h"
#include "main.h"
#include "uart.h"
#include "Temp.h"


#define S_SEL (1)
#define S_NONE (15)

#define M_STA_SET   (PORTC|= 0x10)
#define M_STA_CLR   (PORTC&=~0x10)

#define M_DAT_SET   (PORTC|= 0x80)
#define M_DAT_CLR   (PORTC&=~0x80)

#define GET_S_STA   (PINC&0x20)

#define GET_S_DAT   (PINC&0x40)

#define MA_SEND(a,b)    if(GET_S_DAT) rdata|=a; if(data&a) M_DAT_SET;else  M_DAT_CLR;b		
	                       		   
uint16 rece_s1_data[32]={0};           
uint16 send_s1_data[32]={0,0,0,0,0,0,0,0,0,0,15,5};     	                
uint8 send_count = 0 ;



void AutoSend (void){
    static uint32 ture_tmp;
	uint32 tmp;
    uint8 no=0;

    tmp = MasterCall( (((uint32)(send_count))<<16)|send_s1_data[send_count]);	//发送
    if(tmp==0xffffffff){
		  return;			
	}												  
	if(send_count>=31){
	      //数据刷新
 	      Road_AdhystSign[0] = (T10_read[12]&0x80)>>7;// 第一路修正符号,0为加修正值,1为减修正值()
	      Road_AdhystSign[1] = (T10_read[13]&0x80)>>7;
 	      Road_AdhystSign[2] = (T10_read[14]&0x80)>>7;
 	      Road_AdhystSign[3] = (T10_read[15]&0x80)>>7;   
 	      Road_AdhystSign[4] = (T10_read[16]&0x80)>>7;
 	      Road_AdhystSign[5] = (T10_read[17]&0x80)>>7;
 	      Road_AdhystSign[6] = (T10_read[18]&0x80)>>7;
 	      Road_AdhystSign[7] = (T10_read[19]&0x80)>>7; 
 	      Road_AdhystSign[8] = (T10_read[20]&0x80)>>7;  
 	      Road_AdhystSign[9] = (T10_read[21]&0x80)>>7; 
		   
 	      Road_AdjustDat[0] = (T10_read[12]&0x7f);                   // 第一路校正值
 	      Road_AdjustDat[1] = (T10_read[13]&0x7f);
 	      Road_AdjustDat[2] = (T10_read[14]&0x7f);
 	      Road_AdjustDat[3] = (T10_read[15]&0x7f);   
          Road_AdjustDat[4] = (T10_read[16]&0x7f);
 	      Road_AdjustDat[5] = (T10_read[17]&0x7f);
 	      Road_AdjustDat[6] = (T10_read[18]&0x7f);
 	      Road_AdjustDat[7] = (T10_read[19]&0x7f); 
 	      Road_AdjustDat[8] = (T10_read[20]&0x7f); 
 	      Road_AdjustDat[9] = (T10_read[21]&0x7f); 	
		
		  SiteFack_Temp = (uint8)T10_read[10];				 // 存储设置温度与实际温度相差几度才开始运算(15)			
		  Check_TempTimeCycle = (uint8)T10_read[11];         // 检测温度时间周期(5)		  
		  	  		  
	      Site_Temp[0] = T10_read[0];			//设置温度数据(没有倍数的温度)			 									 
	      Site_Temp[1] = T10_read[1];						 									 
	      Site_Temp[2] = T10_read[2];						 									 
	      Site_Temp[3] = T10_read[3]; 						 									 
	      Site_Temp[4] = T10_read[4];						 									 
          Site_Temp[5] = T10_read[5]; 						 									 
	      Site_Temp[6] = T10_read[6];						 									 
	      Site_Temp[7] = T10_read[7]; 			  
	      Site_Temp[8] = T10_read[8]; 	      
	      Site_Temp[9] = T10_read[9]; 	
	
	      send_count = 0;
	} 
	else {
	      send_count++;                        //发送周期		
	}
	


}
//主机程序
uint32 MasterCall (uint32 data){
    extern uint8 sendpro,sendpro_bk,test_byte;
    uint32 rdata=0;
    uint8 i;
	PORTC = S_SEL;		   //选择某路的从机和主机开始线
	M_STA_CLR;			  //start
	
	while(GET_S_STA){if (sendpro_bk!=sendpro) {	PORTC = 0xff; return 0xffffffff;} }//y1
	MA_SEND(0x00000001,M_STA_SET);

	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y2
	MA_SEND(0x00000002,M_STA_CLR);           

	while(GET_S_STA){if (sendpro_bk!=sendpro) {	PORTC = 0xff; return 0xffffffff;} }//y3
	MA_SEND(0x00000004,M_STA_SET);
	
	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y4
	MA_SEND(0x00000008,M_STA_CLR);
	
	while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y5
	MA_SEND(0x00000010,M_STA_SET);
			
	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y6
	MA_SEND(0x00000020,M_STA_CLR);
	
	while(GET_S_STA){if (sendpro_bk!=sendpro) {	PORTC = 0xff; return 0xffffffff;} }//y7
	MA_SEND(0x00000040,M_STA_SET);
		
	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y8
	MA_SEND(0x00000080,M_STA_CLR);
	  	 
	while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y9
	MA_SEND(0x00000100,M_STA_SET);
			
	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y10
	MA_SEND(0x00000200,M_STA_CLR);
	
	while(GET_S_STA){if (sendpro_bk!=sendpro) {	PORTC = 0xff; return 0xffffffff;} }//y11
	MA_SEND(0x00000400,M_STA_SET);
		
	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y12
	MA_SEND(0x00000800,M_STA_CLR);
	
	while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y13
	MA_SEND(0x00001000,M_STA_SET);
			
	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y14
	MA_SEND(0x00002000,M_STA_CLR);
	
	while(GET_S_STA){if (sendpro_bk!=sendpro) {	PORTC = 0xff; return 0xffffffff;} }//y15
	MA_SEND(0x00004000,M_STA_SET);
		
	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y16
	MA_SEND(0x00008000,M_STA_CLR);
	
	while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y17
	MA_SEND(0x00010000,M_STA_SET);
			
	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y18
	MA_SEND(0x00020000,M_STA_CLR);
	
	while(GET_S_STA){if (sendpro_bk!=sendpro) {	PORTC = 0xff; return 0xffffffff;} }//y19
	MA_SEND(0x00040000,M_STA_SET);
		
	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y20
	MA_SEND(0x00080000,M_STA_CLR);
	
	while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y21
	MA_SEND(0x00100000,M_STA_SET);
			
	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y22
	MA_SEND(0x00200000,M_STA_CLR);
	
	while(GET_S_STA){if (sendpro_bk!=sendpro) {	PORTC = 0xff; return 0xffffffff;} }//y23
	MA_SEND(0x00400000,M_STA_SET);
		
	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y24
	MA_SEND(0x00800000,M_STA_CLR);
	
//	while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y25
//	MA_SEND(0x01000000,M_STA_SET);
			
//	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y26
//	MA_SEND(0x02000000,M_STA_CLR);
	
//	while(GET_S_STA){if (sendpro_bk!=sendpro) {	PORTC = 0xff; return 0;} }//y27
//	MA_SEND(0x04000000,M_STA_SET);
		
//	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y28
//	MA_SEND(0x08000000,M_STA_CLR);
	
//	while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y29
//	MA_SEND(0x10000000,M_STA_SET);
			
//	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y30
//	MA_SEND(0x20000000,M_STA_CLR);
	
//	while(GET_S_STA){if (sendpro_bk!=sendpro) {	PORTC = 0xff; return 0;} }//y31
//	MA_SEND(0x40000000,M_STA_SET);
		
//	while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y32
//	MA_SEND(0x80000000,M_STA_CLR);							 
		 
		 
	while(GET_S_STA);
		 
	   
	PORTC = 0xff;	
//   TransmitByte(rdata>>16);
//    TransmitByte(rdata>>8);
//   TransmitByte(rdata);	  
//   TransmitByte(0XFF);	

	rece_s1_data[0x1F&(rdata>>16)]=(uint16)rdata;		 
       
	test_byte++;
	
	return rdata;
}


/*
void SendData2Com(void){ 
	 uint8 i;
	 for (i=0;i<10;i++){
     	 SEND2COM_TMP_DISP((0xf0+i),T10_send[i]);	   			  //温度值
	 }
	 for (i=0;i<10;i++){
     	 SEND2COM_TMP_DISP((16*i+0x0f),rece_s1_data[i]);	      //温度值 
	 }
 	 for (i=0;i<10;i++){
     	 SEND2COM_TMP_STATE((0xe0+i),T10_send[i]);	              //状态值
	 }
	 for (i=0;i<10;i++){
     	 SEND2COM_TMP_STATE((16*i+0x0e),rece_s1_data[i]);	      //状态值
	 } 
}
*/
void SendData2Com(void){
	 static uint8 i=0;
	 
	 if ((i>=0)&&(i<10)){
	     SEND2COM_TMP_DISP((0xf0+i),T10_send[i]);	   			  //温度值
		 i++;
		 return;
	 }
	 else if ((i>=10)&&(i<20)){
	 	 SEND2COM_TMP_DISP((16*(i-10)+0x0f),rece_s1_data[i-10]);	      //温度值 
		 i++;
		 return;	 
	 }
	 else if ((i>=20)&&(i<30)){
	     SEND2COM_TMP_STATE((0xe0+i-20),T10_send[i-20]);	              //状态值
		 i++;
		 return;	 
	 }
	 else if ((i>=30)&&(i<40)){
	     SEND2COM_TMP_STATE((16*(i-30)+0x0e),rece_s1_data[i-30]);	      //状态值
		 i++;
		 return;	 
	 }
	 else{
	     i=0;
	 }
	 	
}


	 

uint16 CheckDataFCom (void){
	 if( (0xff==receFCom[5])&&(receFCom[4]==receFCom[2])&&(receFCom[3]==receFCom[1]) ){
	      if(receFCom[1]){
		       return (0x80 + (10*(receFCom[2]>>4))  + (0x0f&receFCom[2])  );//还原数据
		  }
		  else{
		       return (0x00 + (10*(receFCom[2]>>4))  + (0x0f&receFCom[2])  );//还原数据		  	 		  
		  }
	 }
     return 0xffff;
}
 
	 
	 
void ReadComData(void){
     uint8 start_byte,i;
	 start_byte = ReceiveByte();
	 
	 for(i=0;i<62;i++){
	    if(start_byte==receNFtab[i]){
		   receFCom[0] = start_byte;
		   receDComCount = 0;
		   return;
		}
		if(61==i){
		   receDComCount++;
		   receFCom[receDComCount] = start_byte;
		   if(5==receDComCount){
		                  
			  if(0xffff == CheckDataFCom())
			      return;
	          switch (receFCom[0]){
	              case 0xf0:			 										 //温度的设置值M
					 T10_read[0] = CheckDataFCom();
		             break;
	              case 0xf1:
	                 T10_read[1] = CheckDataFCom();
		             break;	 
	              case 0xf2:
	                 T10_read[2] = CheckDataFCom();
	              	 break;	 
	              case 0xf3:
	                 T10_read[3] = CheckDataFCom();
	            	 break;	 
                  case 0xf4:
	                 T10_read[4] = CheckDataFCom();
		             break;	 
	              case 0xf5:
	                 T10_read[5] = CheckDataFCom();
		             break;
	              case 0xf6:
	                 T10_read[6] = CheckDataFCom();
		             break;	 
	              case 0xf7:
	                 T10_read[7] = CheckDataFCom();
		             break;	 
	              case 0xf8:
	                 T10_read[8] = CheckDataFCom();
		             break;	 
	              case 0xf9:
	                 T10_read[9] = CheckDataFCom();
		             break;	 
	
	              case 0x0f:			 										 //温度的设置值S
	                 send_s1_data[0] = CheckDataFCom();
		             break;
	              case 0x1f:
	                 send_s1_data[1] = CheckDataFCom();
		             break;	 
	              case 0x2f:
	                 send_s1_data[2] = CheckDataFCom();
		             break;	 
	              case 0x3f:
	                 send_s1_data[3] = CheckDataFCom();
		             break;	 
	              case 0x4f:
	                 send_s1_data[4] = CheckDataFCom();
		             break;	 
	              case 0x5f:
	                 send_s1_data[5] = CheckDataFCom();
		             break;
	              case 0x6f:
	                 send_s1_data[6] = CheckDataFCom();
		             break;	 
	              case 0x7f:
	                 send_s1_data[7] = CheckDataFCom();
		             break;	 
	              case 0x8f:
	                 send_s1_data[8] = CheckDataFCom();
		             break;	 
	              case 0x9f:
	                 send_s1_data[9] = CheckDataFCom();
	              	 break;	 	 

	 
	              case 0xd0:
	                 T10_read[10] = CheckDataFCom();            //15的那个值
	                 send_s1_data[10] = T10_read[10];		 
		             break;	 	 

	              case 0xd1:
	                 T10_read[11] = CheckDataFCom();            //5的那个值
	                 send_s1_data[11] = T10_read[11];		  
		             break;	 	 
	 
	             case 0xC0:
	                 T10_read[12] = CheckDataFCom();	 
		             break;	 	 
	             case 0xC1:
	                 T10_read[13] = CheckDataFCom();	 
		             break;	
	             case 0xC2:
	                 T10_read[14] = CheckDataFCom();	 
		             break;	
	             case 0xC3:
	                 T10_read[15] = CheckDataFCom();	 
		             break;			 		 		 
	             case 0xC4:
	                 T10_read[16] = CheckDataFCom();	 
		             break;	 	 
	             case 0xC5:
	                 T10_read[17] = CheckDataFCom();	 
		             break;	
	             case 0xC6:
	                 T10_read[18] = CheckDataFCom();	 
	             	 break;	
	             case 0xC7:
	                 T10_read[19] = CheckDataFCom();	 
		             break;	
	             case 0xC8:
	                 T10_read[20] = CheckDataFCom();	 
		             break;	
	             case 0xC9:
	                 T10_read[21] = CheckDataFCom();	 
		             break;			 
		 
		 		 
	             case 0x0C:
	                 send_s1_data[12] = CheckDataFCom();	 
	            	 break;	 	 
	             case 0x1C:
	                 send_s1_data[13] = CheckDataFCom();	 
		             break;	
	             case 0x2C:
	                 send_s1_data[14] = CheckDataFCom();	 
	             	 break;	
	             case 0x3C:
	                 send_s1_data[15] = CheckDataFCom();	 
	             	 break;			 		 		 
	             case 0x4C:
	                 send_s1_data[16] = CheckDataFCom();	 
	            	 break;	 	 
	             case 0x5C:
	                 send_s1_data[17] = CheckDataFCom();	 
	            	 break;	
	             case 0x6C:
	                 send_s1_data[18] = CheckDataFCom();	 
		             break;	
	             case 0x7C:
	                 send_s1_data[19] = CheckDataFCom();	 
		             break;	
	             case 0x8C:
	                 send_s1_data[20] = CheckDataFCom();	 
		             break;	
	             case 0x9C:
	                 send_s1_data[21] = CheckDataFCom();	 
		             break;					  
			  
			  }	 	
			  receFCom[0]=0;
			  receFCom[1]=0;
			  receFCom[2]=0;
			  receFCom[3]=0;
			  receFCom[4]=0;
			  receFCom[5]=0;
			  receDComCount = 0;  	 	 
	       }	
		}     	   
	}	
}

⌨️ 快捷键说明

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