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

📄 com2process.c

📁 单片机,泰坦电源设备通讯程序.根据协议从泰坦设备中获得状态
💻 C
字号:
#define COM2_GLOBALS
#include "Macro.h"
#include "Main.h"

#define M_DELAY 	300
#define A_DELAY 	40

void Port2Process(void)
{
static unsigned xdata flag1;
static unsigned xdata flag2;
static unsigned xdata flag3;
static unsigned xdata flag4;
static unsigned xdata flag5;
struct Serial_rcv xdata *Com;
static unsigned char xdata hwInit = 0;  
/*  Yinchuan
static unsigned char xdata CmdBuf1[] ={0x01, 0x54, 0x01, 0x54, 0x01, 0x53, 0x00,
									   0x02, 0x53, 0x53, 0x31, 0x20, 0x20, 0x20, 0x45, 0x4e, 0x44, 0x0d, 0x0d, 0x0d,
									   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0d, 0x0d,
									   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0d, 0x0d,
									   0x2a, 0x2a, 0x2a, 0x0d, 0x0d, 0x0d,
									   0x2a, 0x2a, 0x2a, 0x0d, 0x0d, 0x0d,
									   0x20, 0x20, 0x20, 0x0d, 0x0d, 0x0d,
								   	   0x20, 0x20, 0x20, 0x0d, 0x0d, 0x0d,
									   0x03, 0x03, 0x53, 0x53, 0x31, 0x53, 0x53, 0x31 };
*/
static unsigned char xdata CmdBuf1[] ={0x01, 0x54, 0x01, 0x54, 0x01, 0x53, 0x00,
									   0x02, 0x24, 0x74, 0x74, 0x20, 0x20, 0x20,
									   0x53, 0x53, 0x31, 0x20, 0x20, 0x20, 0x20, 0x45, 0x4e, 0x44, 0x0d, 0x0d, 0x0d,
									   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0d, 0x0d,
									   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0d, 0x0d,
									   0x2a, 0x2a, 0x2a, 0x0d, 0x0d, 0x0d,
									   0x2a, 0x2a, 0x2a, 0x0d, 0x0d, 0x0d,
									   0x20, 0x20, 0x20, 0x20, 0x0d, 0x0d, 0x0d,
								   	   0x20, 0x20, 0x20, 0x20, 0x0d, 0x0d, 0x0d,
									   0x03, 0x03, 0x53, 0x53, 0x31, 0x53, 0x53, 0x31 };
static unsigned char xdata CmdBuf2[] ={0x59, 0x59, 0x59, 0x59, 0x59, 0x59,
									   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
unsigned char cTmp;
	if (!hwInit) {
		Port2Data[0] = 0;
		Port2Data[1] = 0;
		hwInit = 1;
		flag1 = 0;
		flag2 = 0;
		flag3 = 0;
		flag4 = 0;
		flag5 = 0;
	}

	if (Port2Cmd[0] != 1) return;
	if (Port2Cmd[1] != 8) return;
	memcpy(&CmdBuf2[6], &Port2Cmd[2], 8);
	memcpy(&CmdBuf1[0x1b], &Port2Cmd[2], 8); // Yinchuan: 0x14 
	memcpy(&CmdBuf1[0x26], &Port2Cmd[2], 8); // Yinchuan: 0x1f
	if (Port2Timer > 36000) Port2Timer = 36000;
	if ( (Port2Data[0] != 0) || (Port2Data[1] != 0) ) {
		Com->Tail = 0; 
		Com->Head = 0;
		Com->pos = 0;
		return;
	}
	Com = Rcv + 2;
	while  ( Com->Tail != Com->Head ) {
		cTmp = Com->Data[Com->Head++];
		Com->Head = Com->Head % sizeof(Com->Data);
		if (flag5 == 1) {
			Com->Buff[Com->pos++] = cTmp;
			Com->pos = Com->pos % sizeof(Com->Buff);
			if (Com->pos >= 28) {
			// receive ok
        		Port2Data[0] = 0x1e;
        		Port2Data[1] = 0x00;
        		Port2Data[2] = 0x3;
        		Port2Data[3] = 0x14;
        		memcpy(&Port2Data[4], &Com->Buff[0], 28);
				Com->pos = 0;
				flag5 = 0;
				flag4 = 0;
				flag3 = 0;
				flag2 = 0;
				flag1 = 0;
				Send_To_Port_Buffer(2, CmdBuf2, sizeof(CmdBuf2));
			}
		}
		if (flag1 != 1) flag1 = (cTmp == 13); 
		if (flag2 != 1) { 
			flag2 = (cTmp == 13); 
			flag1 = flag2;
		}
		if (flag3 != 1) { 
			flag3 = (cTmp == 13); 
			flag2 = flag3;
			flag1 = flag3;
		}
		if (flag4 != 1) { 
			flag4 = (cTmp == 3); 
			flag3 = flag4;
			flag2 = flag4;
			flag1 = flag4;
		}
		if (flag5 != 1) { 
			flag5 = (cTmp == 14); 
			flag4 = flag5;
			flag3 = flag5;
			flag2 = flag5;
			flag1 = flag5;
		}
		continue;
	}
	if ( (Port2Data[0] != 0) || (Port2Data[1] != 0) ) return;
// 
	if (Port2Timer > M_DELAY) {       //  * 100ms
		Port2Timer = 0;
		Send_To_Port_Buffer(2, CmdBuf1, sizeof(CmdBuf1));
		SendStart(2);
        Com->pos = 0;
        return;
	}
}

⌨️ 快捷键说明

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