Browse Source

串口板修改上库

yidong.fan 6 months ago
parent
commit
9647fffeeb

+ 12 - 9
WZYX_UART_V1.1250726.X/WZYX_UART_V1.1250726.X/Pin.c

@@ -30,18 +30,21 @@ void Pin_Init(){
 	TRISBbits.TRISB7 = 0;
 	TRISBbits.TRISB12 = 1;
 	
-//	RPINR18bits.U1RXR = 17;//上电默认PC使用
-	RPINR18bits.U1RXR = 48; //上电默认屏幕使用    
+//	RPINR18bits.U1RXR = 17;//上电默认PC使用   	
+//    _RP10R = 3;  //上电默认PC使用 
+	RPINR18bits.U1RXR = 48; //上电默认屏幕使用  
+    _RP1R = 3; //上电默认屏幕使用 
+    
 	RPINR19bits.U2RXR= 43;
 	RPINR17bits.U3RXR = 29;
+	/*启用串口4,双串口控制*/
 //	RPINR27bits.U4RXR = 48;
-    
+//    _RP1R = 24;
+	RPINR27bits.U4RXR = 17;
+    _RP10R = 24;
 	
-//    _RP10R = 3;  //上电默认PC使用
-    _RP1R = 3; //上电默认屏幕使用    
 	_RP5R = 5;
 	_RP14R = 22 ;
-//	_RP1R= 24;
     
 
 	TRISFbits.TRISF13 = 1;
@@ -52,10 +55,10 @@ void Pin_Init(){
 	
 }
 
-void SetIO(unsigned char data,unsigned char state){
+void SetIO(unsigned int uc_CH,unsigned char state){
     
- switch(data){
-	 case 1 : STU = data;break;    
+ switch(uc_CH){
+	 case 1 : STU = state;break;    
         default:
             break;
  

+ 3 - 0
WZYX_UART_V1.1250726.X/WZYX_UART_V1.1250726.X/Pin.h

@@ -19,5 +19,8 @@ extern "C" {
 }
 #endif
 void Pin_Init();
+unsigned int Get_IO(unsigned char uc_CH);
+void SetIO(unsigned int uc_CH,unsigned char state);
+
 #endif	/* PIN_H */
 

+ 165 - 57
WZYX_UART_V1.1250726.X/WZYX_UART_V1.1250726.X/Uart.c

@@ -1,6 +1,6 @@
 #define  __UART_DEF
 #include"User.h"
-
+#define     DOOR_ONEN_ST_CH	                1
 /*******************************************************************************
  * 函数名称:Check
  *******************************************************************************/
@@ -155,9 +155,16 @@ void InitUart6(void){
 }
 void UART1SEND(char data)
 {
+	if(g_CmdFrom_UartNum == 1){
      U1TXREG = data;   
       while(!IFS0bits.U1TXIF);
-     IFS0bits.U1TXIF=0;       		
+     IFS0bits.U1TXIF=0; 
+	}     		else{
+     U4TXREG = data;   
+      while(!IFS5bits.U4TXIF);
+     IFS5bits.U4TXIF=0; 
+
+	}
 }
 void Uart1_Receive(char num){
 
@@ -250,7 +257,8 @@ void __attribute__ ( ( interrupt, no_auto_psv ) ) _U1RXInterrupt( void ){
             g_ucCRC1 = (unsigned char)g_ulRSUM1;                         
             if(g_ucCRC1 == g_ucU1RX_Data[g_uiLth1-1]){                   
                 g_ucCMD1 = g_ucU1RX_Data[FRAME_CMD_INDEX];            
-                g_ucUART1_flag  = 1;                                         
+                g_ucUART1_flag  = 1;  
+			    g_CmdFrom_UartNum = 1;
                 g_ulRSUM1       = 0;                                          
                 g_uiUart1_No    = 0;                                     
                 g_ucHeaderFlag1 = 0;                                     
@@ -349,43 +357,44 @@ void __attribute__ ( ( interrupt, no_auto_psv ) ) _U3RXInterrupt( void ){
 }
 
 void __attribute__ ( ( interrupt, no_auto_psv ) ) _U4RXInterrupt( void ){
-    IFS5bits.U4RXIF = 0;       
-	g_ucU4RX_Data[g_uiUart4_No] = U4RXREG;                                
-    if(g_BUSY4 == 1) return;
-    if(g_ucHeaderFlag4 == 0){                                            
-		if(g_ucU4RX_Data[g_uiUart4_No] == FRAME_HEAD){                 
-            g_ucHeaderFlag4 = 1;                                         
-            g_ucU4RX_Data[0] = FRAME_HEAD;                                
-            g_uiUart4_No = 1;                                             
+    IFS5bits.U4RXIF = 0;      
+ 
+	g_ucU1RX_Data[g_uiUart1_No] = U4RXREG;                                   
+    if(g_BUSY1 == 1) return;
+    if(g_ucHeaderFlag1 == 0){                                               
+		if(g_ucU1RX_Data[g_uiUart1_No] == FRAME_HEAD){                      
+            g_ucHeaderFlag1 = 1;                                           
+            g_ucU1RX_Data[0] = FRAME_HEAD;                              
+            g_uiUart1_No = 1;                                             
 		}else{
-            g_BUSY4 = 0;                                                  
+            g_BUSY1 = 0;                                                    
         }
-	}else if(g_ucHeaderFlag4 == 1){                                  
-		g_uiUart4_No++;
+	}else if(g_ucHeaderFlag1 == 1){                                             
+		g_uiUart1_No++;
     } 
-    if(g_uiUart4_No > (FRAME_LTHH_INDEX+1)){                                                      
-        g_uiLth4 = g_ucU4RX_Data[FRAME_LTHH_INDEX]; 
-        if(g_uiUart4_No == g_uiLth4){                                    
-            g_ulRSUM4 = Check(g_ucU4RX_Data,g_uiLth4-1);                
-            g_ucCRC4 = (unsigned char)g_ulRSUM4;                           
-            if(g_ucCRC4 == g_ucU4RX_Data[g_uiLth4-1]){                   
-                g_ucCMD4 = g_ucU4RX_Data[FRAME_CMD_INDEX];                
-                g_ucUART4_flag  = 1;                               
-                g_ulRSUM4       = 0;                                    
-                g_uiUart4_No    = 0;                                 
-                g_ucHeaderFlag4 = 0;                                   
-                g_BUSY4         = 1;                                    
+    if(g_uiUart1_No > (FRAME_LTHH_INDEX+1)){                                                          
+        g_uiLth1 = g_ucU1RX_Data[FRAME_LTHH_INDEX]; 
+        if(g_uiUart1_No == g_uiLth1){                                         
+            g_ulRSUM1 = Check(g_ucU1RX_Data,g_uiLth1-1);                      
+            g_ucCRC1 = (unsigned char)g_ulRSUM1;                         
+            if(g_ucCRC1 == g_ucU1RX_Data[g_uiLth1-1]){                   
+                g_ucCMD1 = g_ucU1RX_Data[FRAME_CMD_INDEX];            
+                g_ucUART1_flag  = 1;  
+			    g_CmdFrom_UartNum = 4;
+                g_ulRSUM1       = 0;                                          
+                g_uiUart1_No    = 0;                                     
+                g_ucHeaderFlag1 = 0;                                     
+                g_BUSY1         = 1;                                          
             }else{
-                memset(g_ucU4RX_Data,0,g_uiLth4*sizeof(unsigned char));     
-                g_BUSY4 = 0;                                                  
+                memset(g_ucU1RX_Data,0,g_uiLth1*sizeof(unsigned char));      
+                g_BUSY1 = 0;                                                  
             }        
-        }else if(g_uiUart4_No > g_uiLth4){                               
-            g_uiUart4_No    = 0;                                         
-            g_ucHeaderFlag4 = 0;                                         
-            g_BUSY4         = 0;                                            
+        }else if(g_uiUart1_No > g_uiLth1){                             
+            g_uiUart1_No    = 0;                                          
+            g_ucHeaderFlag1 = 0;                                         
+            g_BUSY1         = 0;                                       
         }
     }
-           
 	
 }
 
@@ -470,6 +479,110 @@ void __attribute__ ( ( interrupt, no_auto_psv ) ) _U6RXInterrupt( void ){
            
 	
 }
+
+/*******************************************************************************
+ * 函数名称:Uart1_Ack
+ *******************************************************************************/
+
+void Uart1_Ack_new(void)
+{
+	unsigned int	g_uiFrmLth;
+	switch(g_ucU1RX_Data[2]){
+		case 0:{
+			g_uiFrmLth = 6;                                        
+			g_ucU1TX_Data[0] = FRAME_HEAD;
+			g_ucU1TX_Data[1] = g_ucCMD1|0X80;
+			g_ucU1TX_Data[2] = 0;
+			g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;                           
+			g_ucU1TX_Data[4] = 0;                                  
+			g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);    	            
+			for(unsigned int n=0;n<g_ucU1TX_Data[3];n++)
+            {	
+				UART1SEND(g_ucU1TX_Data[n]);
+			}
+
+		}break;
+		case 1:{
+			for(unsigned int n=0;n<g_ucU1RX_Data[3];n++)
+			{
+				UART2SEND(g_ucU1RX_Data[n]);
+			}  
+			while(!g_ucUART2_flag); 
+			g_ucU2RX_Data[0] = FRAME_HEAD;
+			g_ucU2RX_Data[1] = g_ucCMD1|0X80;
+			g_ucU2RX_Data[2] = 1;
+			g_uiFrmLth = g_ucU2RX_Data[3] ;
+			g_ucU2RX_Data[g_uiFrmLth-1] = (unsigned char)Check(g_ucU2RX_Data,g_uiFrmLth-1);
+			for(unsigned int n = 0;n < g_ucU2RX_Data[3];n++)
+			{
+				UART1SEND(g_ucU2RX_Data[n]);	
+			}					  
+			g_ucUART2_flag = 0;
+			g_BUSY2 = 0;  
+
+		}break;
+		case 2:{
+			g_ucU3TX_Data[0] = FRAME_HEAD1;
+			g_ucU3TX_Data[1] = g_ucCMD1;
+			g_ucU3TX_Data[2] = 2;
+			g_ucU3TX_Data[3] = 0;
+			g_ucU3TX_Data[4] = g_ucU1RX_Data[3]+1;	//6
+			g_uiFrmLth = g_ucU3TX_Data[4] ;
+			for(unsigned int i=4;i<g_ucU1RX_Data[3];i++)
+			{
+			  g_ucU3TX_Data[i+1] = g_ucU1RX_Data[i];	
+			}  
+			g_ucU3TX_Data[g_uiFrmLth-1] = (unsigned char)Check(g_ucU3TX_Data,g_uiFrmLth-1);
+			for(unsigned int n=0;n<g_ucU3TX_Data[4];n++)
+			{
+			   UART3SEND(g_ucU3TX_Data[n]);
+			}   
+			while(!g_ucUART3_flag);
+			
+			g_ucU1TX_Data[0] = FRAME_HEAD;
+			g_ucU1TX_Data[1] = g_ucCMD1|0X80;
+			g_ucU1TX_Data[2] = 2;
+			g_ucU1TX_Data[3] = g_ucU3RX_Data[4]-1;
+			g_uiFrmLth = g_ucU1TX_Data[3] ;
+			for(unsigned int i=4;i<g_ucU3RX_Data[4];i++)
+			{
+			  g_ucU1TX_Data[i] = g_ucU4RX_Data[i+1];	
+			}  
+			g_ucU1TX_Data[g_uiFrmLth-1] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth - 1);	
+			
+			for(unsigned int n = 0;n < g_ucU1TX_Data[3];n++)
+			{
+			   UART1SEND(g_ucU1TX_Data[n]);    
+			}
+			g_ucUART3_flag = 0;
+			g_BUSY3 = 0;    
+
+		}break;
+		default:{
+			g_uiFrmLth = 6; 									   
+			g_ucU1TX_Data[0] = FRAME_HEAD;
+			g_ucU1TX_Data[1] = g_ucCMD1|0X80;
+			g_ucU1TX_Data[2] = 0;
+			g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;							
+			g_ucU1TX_Data[4] = EnmErrCode_errPara1; 								 
+			g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);					
+			for(unsigned int n=0;n<g_ucU1TX_Data[3];n++)
+			{	
+				UART1SEND(g_ucU1TX_Data[n]);
+			}
+
+		}break;
+			
+	}
+    g_ucUART1_flag  = 0;
+    g_uiUart1_No    = 0;  
+    g_ucHeaderFlag1 = 0;       
+    memset(g_ucU1RX_Data,0,g_uiLth1*sizeof(unsigned char));   
+    g_BUSY1 = 0;  
+	g_CmdFrom_UartNum = 0;		
+
+}
+
 /*******************************************************************************
  * 函数名称:Uart1_Ack
  *******************************************************************************/
@@ -477,19 +590,11 @@ void __attribute__ ( ( interrupt, no_auto_psv ) ) _U6RXInterrupt( void ){
 void Uart1_Ack(void)
 {
     unsigned int g_uiFrmLth;               
-    unsigned int i=0;                         
-    unsigned int j=0;                         
+                       
     unsigned int n=0;                       
     unsigned char k=0;                        
-    unsigned int UARTAD_buff[8];             
-    unsigned char Flag_STATUS=0;             
-    unsigned char Sensor,ucPWMindex,ucCtrlMode;          
-    long lMPPCtemp = 0;
-    long lPWMstate=0;
-    
-    unsigned long           SoftVersion =230719,date;      
-
-    unsigned char  u8_data1,u8_data2,u8_data3;
+           
+    unsigned char Flag_STATUS=0;        
 
 
     switch(g_ucCMD1){      
@@ -1017,6 +1122,9 @@ void Uart1_Ack(void)
                     g_ucU2RX_Data[1] = g_ucCMD1|0X80;
                     g_ucU2RX_Data[2] = 1;
                     g_uiFrmLth = g_ucU2RX_Data[3] ;
+					g_ucU2RX_Data[g_uiFrmLth-1] = Get_IO(DOOR_ONEN_ST_CH);/*增加1字节,上报开关门状态*/ 
+					g_ucU2RX_Data[3] += 1;			/*上报长度增加1位*/ 
+                    g_uiFrmLth = g_ucU2RX_Data[3] ; /*求和长度增加1位*/
                     g_ucU2RX_Data[g_uiFrmLth-1] = (unsigned char)Check(g_ucU2RX_Data,g_uiFrmLth-1);
                     for(n = 0;n < g_ucU2RX_Data[3];n++)
                     {
@@ -1942,19 +2050,19 @@ void Uart1_Ack(void)
                     {	
 						UART1SEND(g_ucU1TX_Data[n]);
 					}
-                    Delay_ms(500);
-                    if(g_ucU1RX_Data[4] == 253){//屏幕连接
-                        _RP10R = 0;
-                        _RP1R= 3;
-                        RPINR18bits.U1RXR = 48;    //串口输入映射 触摸屏连接
-                        InitUart1();
-                    }
-                    else if(g_ucU1RX_Data[4] == 252){//  PC连接
-                        _RP1R= 0;
-                        _RP10R = 3;
-                        RPINR18bits.U1RXR = 17;    //串口输入映射 PC机器连接  
-                        InitUart1();
-                    }else{}                     
+//                    Delay_ms(500);
+//                    if(g_ucU1RX_Data[4] == 253){//屏幕连接
+//                        _RP10R = 0;
+//                        _RP1R= 3;
+//                        RPINR18bits.U1RXR = 48;    //串口输入映射 触摸屏连接
+//                        InitUart1();
+//                    }
+//                    else if(g_ucU1RX_Data[4] == 252){//  PC连接
+//                        _RP1R= 0;
+//                        _RP10R = 3;
+//                        RPINR18bits.U1RXR = 17;    //串口输入映射 PC机器连接  
+//                        InitUart1();
+//                    }else{}                     
 					break;                                      
                case 1: 
                    for(n = 0;n < g_ucU1RX_Data[3];n++)

+ 28 - 0
WZYX_UART_V1.1250726.X/WZYX_UART_V1.1250726.X/Uart.h

@@ -105,6 +105,31 @@
 #define     ZLENTH1                  134
 #define     ZLENTH2                  198
 
+typedef enum _EnmErrCode {
+    EnmErrCode_errNo = 0,
+    EnmErrCode_errsensor1 = 1,
+    EnmErrCode_errsensor2 = 2,
+    EnmErrCode_errsensor3 = 3,
+    EnmErrCode_errNearHigh = 4,
+    EnmErrCode_errHigh = 5,
+    EnmErrCode_errNearLow = 6,
+    EnmErrCode_errLow = 7,
+    EnmErrCode_errPart1offline = 8,
+    EnmErrCode_errPart2offline = 9,
+    EnmErrCode_errPart3offline = 10,
+    EnmErrCode_errPart4offline = 11,
+    EnmErrCode_errPart1fault = 12,
+    EnmErrCode_errPart2fault = 13,
+    EnmErrCode_errPart3fault = 14,
+    EnmErrCode_errPart4fault = 15,
+    EnmErrCode_errPara1 = 16,
+    EnmErrCode_errPara2 = 17,
+    EnmErrCode_errTimeOut = 34,
+    EnmErrCode_errPreWork = 35,
+    EnmErrCode_errPreCheck = 36,
+    EnmErrCode_err_res_need_ans = 100000,
+    EnmErrCode_errbusy = 100001
+} EnmErrCode;
 
 
 //оƬ¼ì²â
@@ -155,6 +180,7 @@ struct BT{
 };
 
 
+EXTERN_UART unsigned int g_CmdFrom_UartNum;
 
 EXTERN_UART unsigned char g_ucCMD1,Get_IOstate,g_ucCMD2,g_ucCMD3,g_ucCMD4,g_ucCMD5,g_ucCMD6;
 EXTERN_UART unsigned char g_ucUART1_flag,g_ucUART2_flag,g_ucUART3_flag,g_ucUART4_flag,g_ucUART5_flag,g_ucUART6_flag;
@@ -220,6 +246,8 @@ void InitUart6(void);
 void UART1SEND(char data);
 unsigned int Check(unsigned char *p,unsigned char num);
 void Uart1_Ack(void);
+void Uart1_Ack_new(void);
+
 
 #endif	/* XC_HEADER_TEMPLATE_H */
 

+ 5 - 5
WZYX_UART_V1.1250726.X/WZYX_UART_V1.1250726.X/main.c

@@ -164,18 +164,18 @@ int main(void){
     InitUart6();//¡Ì	
 	data=1;
  	while(1){
+			
+		data = Get_IO(1);
+		SetIO(1,data);	
 
 		if(g_ucUART1_flag == 1){  
-            Uart1_Ack();      
-
+//            Uart1_Ack();      
+			Uart1_Ack_new();
 					
 				}
 				
 			}
 			}
-			
-				
-			
 			         
 //		case 1:if(g_ucUART1_flag == 1){  
 //            Uart2_Ack();