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

📄 can_adpe.c

📁 这是一个CAN总线适配器的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************/
/*	CAN ADAPTOR PROGRAMME													*/
/*																			*/
/**/
/**/
/**/
/**/
/**/
/**/
/******************************************************************************/
#pragma	large
#include <reg51.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <absacc.h>
#include <intrins.h>
#include <stdarg.h>
#include <setjmp.h>
#include <math.h>

/******************************************************************************/
#define C2764_BASE						0x0000
#define C2864_BASE						0x2000
#define C7132_BASE						0x8000
#define CANA_BASE						0x40
#define CANB_BASE						0xA0

#define C25045CS						P10
#define C25045SO              			P11
#define C25045SI              			P13
#define C25045SCK             			P12

#define WREN							0x06      /*25045 command*/
#define WRDI							0x04
#define RDSR							0x05
#define WRSR							0x01

#define TIME							0x00
/******************************************************************************/
#define EXTENDED_FRAME_FORMAT

#define CAN_Mode							PBYTE[0]
#define CAN_MOD_RM							CAN_Mode&BIT00
#define CAN_MOD_LOM							CAN_Mode&BIT01
#define CAN_MOD_STM							CAN_Mode&BIT02
#define CAN_MOD_AFM							CAN_Mode&BIT03
#define CAN_MOD_SM							CAN_Mode&BIT04

#define CAN_CMD								PBYTE[1]

#define CAN_Status							PBYTE[2]
#define CAN_SR_RBS							( CAN_Status&BIT00 ) >> 0
#define CAN_SR_DOS							( CAN_Status&BIT01 ) >> 1
#define CAN_SR_TBS							( CAN_Status&BIT02 ) >> 2
#define CAN_SR_TCS							( CAN_Status&BIT03 ) >> 3
#define CAN_SR_RS							( CAN_Status&BIT04 ) >> 4
#define CAN_SR_TS							( CAN_Status&BIT05 ) >> 5
#define CAN_SR_ES							( CAN_Status&BIT06 ) >> 6
#define CAN_SR_BS							( CAN_Status&BIT07 ) >> 7

#define CAN_IR								PBYTE[3]
#define CAN_IR_RI							( Interrupt_Value&BIT00 ) >> 0
#define CAN_IR_TI							( Interrupt_Value&BIT01 ) >> 1
#define CAN_IR_EI							( Interrupt_Value&BIT02 ) >> 2
#define CAN_IR_DOI							( Interrupt_Value&BIT03 ) >> 3
#define CAN_IR_WUI							( Interrupt_Value&BIT04 ) >> 4
#define CAN_IR_EPI							( Interrupt_Value&BIT05 ) >> 5
#define CAN_IR_ALI							( Interrupt_Value&BIT06 ) >> 6
#define CAN_IR_BEI							( Interrupt_Value&BIT07 ) >> 7

#define CAN_Interrupt_Enable				PBYTE[4]

#define CAN_Bus_Timing0						PBYTE[6]
#define CAN_Bus_Timing1						PBYTE[7]
#define CAN_Output_Control					PBYTE[8]

#define CAN_Arbitration_Lost_Capture		PBYTE[11]
#define CAN_Error_Code_Capture				PBYTE[12]
#define CAN_Error_Warning_Limit				PBYTE[13]
#define CAN_RX_Error_Counter				PBYTE[14]
#define CAN_TX_Error_Counter				PBYTE[15]

#define CAN_RX_Frame_Information			PBYTE[16]
#define CAN_RX_ID1							PBYTE[17]
#define CAN_RX_ID2		  					PBYTE[18]
#define CAN_RX_ID3							PBYTE[19]
#define CAN_RX_ID4		  					PBYTE[20]
#define CAN_RX_Data1 						PBYTE[21]
#define CAN_RX_Data2						PBYTE[22]
#define CAN_RX_Data3						PBYTE[23]
#define CAN_RX_Data4						PBYTE[24]
#define CAN_RX_Data5						PBYTE[25]
#define CAN_RX_Data6						PBYTE[26]
#define CAN_RX_Data7						PBYTE[27]
#define CAN_RX_Data8						PBYTE[28]

#define CAN_TX_Frame_Information			PBYTE[16]
#define CAN_TX_ID1							PBYTE[17]
#define CAN_TX_ID2		  					PBYTE[18]
#define CAN_TX_ID3							PBYTE[19]
#define CAN_TX_ID4		  					PBYTE[20]
#define CAN_TX_Data1 						PBYTE[21]
#define CAN_TX_Data2						PBYTE[22]
#define CAN_TX_Data3						PBYTE[23]
#define CAN_TX_Data4						PBYTE[24]
#define CAN_TX_Data5						PBYTE[25]
#define CAN_TX_Data6						PBYTE[26]
#define CAN_TX_Data7						PBYTE[27]
#define CAN_TX_Data8						PBYTE[28]

#define CAN_Acceptance_Code0				PBYTE[16]
#define CAN_Acceptance_Code1				PBYTE[17]
#define CAN_Acceptance_Code2				PBYTE[18]
#define CAN_Acceptance_Code3				PBYTE[19]

#define CAN_Acceptance_Mask0				PBYTE[20]
#define CAN_Acceptance_Mask1				PBYTE[21]
#define CAN_Acceptance_Mask2				PBYTE[22]
#define CAN_Acceptance_Mask3				PBYTE[23]

#define CAN_RX_Message_Counter				PBYTE[29]
#define CAN_RX_Buffer_Start_Address			PBYTE[30]
#define CAN_Clock_Divider					PBYTE[31]

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

/******************************************************************************/
#define WEST	0x0F
#define EAST	0xF0

/*Equipment Type---ID3.7~ID3.4*/
#define PC_CAN_TYPE	0x00
#define IRMU_TYPE	0x01
#define SFLU_TYPE	0x02
//#define PAPI_TYPE	0x03
#define IOCU_TYPE 	0x04
#define ADMU_TYPE	0x05
#define MRCU_TYPE	0x06
//#define M_MRCU_TYPE	0x06
//#define B_MRCU_TYPE	0x07		

/******************************************************************************/
/*Frame Type---ID3.3~ID3.0*/
#define COMD_Frame			0x00	/*Command frame,adapt to all equipment*/
#define ARQ1_Frame			0x01	/*Query frame,adapt to all equipment except B_MRCU*/
#define ARQ2_Frame			0x02	/*Query frame,adapt to B_MRCU*/
#define	RES_Frame			0x03	/*Answer frame,adapt to all equipment*/

/******************************************************************************/
#define CAN_INIT_SUCCESS						0xAA
#define CAN_INIT_FAILURE						0xFF

#define TXSUCCESS								0xAA
#define TXFAILURE								0xFF

#define TXBUFRELESED							0xAA
#define TXBUFLOCKED								0xFF

#define CAN_INI_SUCCESS							0xAA
#define CAN_INI_FAILURE							0xFF
/******************************************************************************/
#define BIT00						0x0001
#define BIT01						0x0002
#define BIT02						0x0004
#define BIT03						0x0008
#define BIT04						0x0010
#define BIT05						0x0020
#define BIT06						0x0040
#define BIT07						0x0080
#define BIT08						0x0100
#define BIT09						0x0200
#define BIT10						0x0400
#define BIT11						0x0800
#define BIT12						0x1000
#define BIT13						0x2000
#define BIT14						0x4000
#define BIT15						0x8000
/******************************************************************************/
#define MRCU_NUMBER		XBYTE[Mrcu_Number_Pointer]
#define	IRMU_NUMBER		XBYTE[Irmu_Number_Pointer]
#define SFLU_NUMBER		XBYTE[Sflu_Number_Pointer]
#define IOCU_NUMBER		XBYTE[Iocu_Number_Pointer]
#define ADMU_NUMBER		XBYTE[Admu_Number_Pointer]
#define GEN_NUMBER		XBYTE[Gen_Number_Pointer]
#define NODE_NUMBER		MRCU_NUMBER+IRMU_NUMBER+SFLU_NUMBER+IOCU_NUMBER+ADMU_NUMBER
	
#define DO_NUMBER  		IOCU_NUMBER * 8

/*被监单元数据区字长*/
#define SFLU_DATA_LENGTH        7
#define CCR_DATA_LENGTH         19
#define DI_DATA_LENGTH          3
#define ADMU_DATA_LENGTH        17
#define GEN_DATA_LENGTH			20

/*节点报警区字长*/
#define NODE_WARN_LENGTH        2
#define NET_WARN_LENGTH         1

#define CAN_START				0xAA

#define LCC_CONFIGURE_REQUEST	0xAA
#define ADAPTOR_CONFIGURED_FLAG	0x55

#define REFRESHING				0x0F
#define REFRESH_END				0xF0
#define EMPTY					0xFF
/******************************************************************************/
#define BYTE		unsigned char
#define WORD        unsigned int
/******************************************************************************/

WORD Start_Pointer,Refresh_Order_Pointer,Refresh_Data_Pointer;
WORD Watchdog_Pointer,Configure_Pointer,Configure_Length_Pointer;

WORD Sflu_Number_Pointer,Mrcu_Number_Pointer,Irmu_Number_Pointer;
WORD Iocu_Number_Pointer,Admu_Number_Pointer,Gen_Number_Pointer,Node_Number_Pointer;

WORD Mrcu_Query_Pointer,Irmu_Query_Pointer,Sflu_Query_Pointer;
WORD Iocu_Query_Pointer,Admu_Query_Pointer;

WORD Sflu_Data_Pointer,Ccr_Data_Pointer;
WORD Di_Data_Pointer,Admu_Data_Pointer,Gen_Data_Pointer;

WORD Sflu_Order_Pointer,Mrcu_Order_Pointer,Do_Order_Pointer;

WORD Mrcu_Warn_Pointer,Irmu_Warn_Pointer,Sflu_Warn_Pointer;
WORD Iocu_Warn_Pointer,Admu_Warn_Pointer;

WORD Net_Warn_Pointer;

WORD Mrcu_Counter_Pointer,Irmu_Counter_Pointer,Sflu_Counter_Pointer;
WORD Iocu_Counter_Pointer,Admu_Counter_Pointer;
 
BYTE Ccr_Group_Number,Position,ID_CAN,ID_IOCU,ID_ADMU,ID_SFLU;
BYTE CounterA,CounterB;

/******************************************************************************/
void C25045Outbyt(BYTE);
BYTE C25045Inbyt();
void C25045Wrfish();
void C25045Rstdog();

void Can_Reset(BYTE);
BYTE Can_Initate(BYTE);
BYTE Check_BeforeT(BYTE);
BYTE Can_Transmit(BYTE *,BYTE);
BYTE Check_Tstatus(BYTE);
void Canint(void);
void Interrupt_Process(BYTE,BYTE);

void Order_Process(void);
void Timer0_Int(void);
void Delay(WORD);


void main(void) using 0
{
	BYTE data i,j,ID,Txbuf[6],Query[3];
	WORD data ii,pointer;

	PSW	=	0x00;
	TMOD	=	0x10;
	TH1	=	0;
	TL1	=	0;

	C25045SCK	=	0;
	C25045CS	=	0;
	C25045Outbyt( WREN );
	C25045SCK	=	0;
	C25045CS	=	1;     /* WRITE ENABLE */
	C25045SCK	=	0;
	C25045CS	=	0;
	C25045Outbyt( WRSR );
	C25045Outbyt( TIME );
	C25045SCK	=	0;
	C25045CS	=	1;
	C25045Wrfish();   /* WRITE TIME-BYTE, WRITE FINISHED ? */
	C25045Rstdog();

	XBYTE[Start_Pointer]	=	0;
	CounterA	=	0;
	CounterB	=	0;
	Can_Reset(CANA_BASE);
    Can_Reset(CANB_BASE);

	Can_Initate(CANA_BASE);
    Can_Initate(CANB_BASE);

    ET1	=	1;
  	IT1	=	0;		/*external low start*/
  	EX0	=	1;		/*external interrupt 0 and 1 disable*/
	EA	=	0;

	/*调试状态数据分配**************************************************************/
	/*Configure Area*/
	Position	=	EAST;

	XBYTE[Start_Pointer]			=	0xAA;
	XBYTE[Refresh_Data_Pointer]		=	0x00;
	XBYTE[Refresh_Order_Pointer]	=	0x00;
	XBYTE[Watchdog_Pointer]			=	0x00;
	XBYTE[Configure_Pointer]		=	0x00;
	XBYTE[Configure_Length_Pointer]	=	0x01;

	if (Position	==	WEST)
	{
		MRCU_NUMBER			=	25;
		IRMU_NUMBER			=	24;
		SFLU_NUMBER			=	1;
		IOCU_NUMBER			=	1;
		ADMU_NUMBER			=	1;
		GEN_NUMBER			=	1;
		Ccr_Group_Number	=	5;
		ID_CAN				=	0x94;
		ID_SFLU				=	0x91;
		ID_IOCU				=	0x92;
		ID_ADMU				=	0x93;
	}
	else
	{
		MRCU_NUMBER			=	14;
		IRMU_NUMBER			=	13;
		SFLU_NUMBER			=	0;
		IOCU_NUMBER			=	1;
		ADMU_NUMBER			=	1;
		GEN_NUMBER			=	1;
		Ccr_Group_Number	=	3;
		ID_CAN				=	0xA3;
		ID_IOCU				=	0xA1;
		ID_ADMU				=	0xA2;
	}

   /***************************************************************************/
	Start_Pointer			=	C7132_BASE;
	Refresh_Data_Pointer	= 	Start_Pointer 				+ 	1;
	Refresh_Order_Pointer	=	Refresh_Data_Pointer		+ 	1;
	Watchdog_Pointer  		=	Refresh_Order_Pointer		+ 	1;
	Configure_Pointer		=	Watchdog_Pointer			+	1;

	Configure_Length_Pointer	=	Configure_Pointer	+	1;

   	Mrcu_Number_Pointer	=	Configure_Length_Pointer	+	1;
	Irmu_Number_Pointer	=	Mrcu_Number_Pointer	+	1;
   	Sflu_Number_Pointer	=	Irmu_Number_Pointer	+	1;
   	Iocu_Number_Pointer	=	Sflu_Number_Pointer	+	1;
   	Admu_Number_Pointer	=	Iocu_Number_Pointer	+	1;
   	Gen_Number_Pointer	=	Admu_Number_Pointer	+	1;

	/*查询命令区*/
	Mrcu_Query_Pointer	=	Gen_Number_Pointer	+	1;
	Irmu_Query_Pointer	=	Mrcu_Query_Pointer	+	MRCU_NUMBER*3;
	Sflu_Query_Pointer	=	Irmu_Query_Pointer	+	IRMU_NUMBER*3;
	Iocu_Query_Pointer	=	Sflu_Query_Pointer	+	SFLU_NUMBER*3;
	Admu_Query_Pointer	=	Iocu_Query_Pointer	+	IOCU_NUMBER*3;

	/*受控单元命令区*/
	Sflu_Order_Pointer	=	Admu_Query_Pointer	+ 	ADMU_NUMBER*3;
  	Do_Order_Pointer	= 	Sflu_Order_Pointer	+ 	SFLU_NUMBER*3;
  	Mrcu_Order_Pointer	=	Do_Order_Pointer	+ 	DO_NUMBER*3;

	/*被监单元数据区*/
  	Sflu_Data_Pointer	=	Mrcu_Order_Pointer	+	MRCU_NUMBER	*	3;
  	Ccr_Data_Pointer	=	Sflu_Data_Pointer	+ 	SFLU_NUMBER	*	SFLU_DATA_LENGTH;
  	Di_Data_Pointer		=	Ccr_Data_Pointer	+	MRCU_NUMBER	*	CCR_DATA_LENGTH;
  	Admu_Data_Pointer	=	Di_Data_Pointer   	+ 	IOCU_NUMBER	*	DI_DATA_LENGTH;
	Gen_Data_Pointer	=	Admu_Data_Pointer	+	ADMU_NUMBER	*	ADMU_DATA_LENGTH;

	/*报警区*/	
	Net_Warn_Pointer	=	Gen_Data_Pointer 	+ 	GEN_NUMBER	*	GEN_DATA_LENGTH;

	Mrcu_Warn_Pointer	=	Net_Warn_Pointer	+	1;
	Irmu_Warn_Pointer	=	Mrcu_Warn_Pointer	+	MRCU_NUMBER	*	NODE_WARN_LENGTH;
	Sflu_Warn_Pointer	=	Irmu_Warn_Pointer	+	IRMU_NUMBER	*	NODE_WARN_LENGTH;
	Iocu_Warn_Pointer	=	Sflu_Warn_Pointer	+	SFLU_NUMBER	*	NODE_WARN_LENGTH;
	Admu_Warn_Pointer	=	Iocu_Warn_Pointer	+	IOCU_NUMBER	*	NODE_WARN_LENGTH;

	/*报警计数区*/
	Mrcu_Counter_Pointer	=	Admu_Warn_Pointer		+	ADMU_NUMBER	*	NODE_WARN_LENGTH;
	Irmu_Counter_Pointer	=	Mrcu_Counter_Pointer	+	MRCU_NUMBER	*	3;
	Sflu_Counter_Pointer	=	Irmu_Counter_Pointer	+	IRMU_NUMBER	*	3;
	Iocu_Counter_Pointer	=	Sflu_Counter_Pointer	+	SFLU_NUMBER	*	3;
	Admu_Counter_Pointer	=	Iocu_Counter_Pointer	+	IOCU_NUMBER	*	3;

	/***************************************************************************/
	/*查询命令区初始化*/
//	for (ii=Mrcu_Query_Pointer;ii<Sflu_Order_Pointer;ii++)
//		XBYTE[ii]	=	0xFF;
	/*命令区与数据区初始化为FF*/
	for (ii=Sflu_Order_Pointer;ii<Net_Warn_Pointer; ii++)
		XBYTE[ii]	=	0;
	/*节点与网络报警区初始化为FF*/
	for (ii=Net_Warn_Pointer;ii<Mrcu_Counter_Pointer;ii++)
		XBYTE[ii]	=	0;
	/*报警计数区初始化为0*/
	for (ii=Mrcu_Counter_Pointer;ii<(Admu_Counter_Pointer+ADMU_NUMBER*3);ii++)
		XBYTE[ii]	=	0;
	/***************************************************************************/

	/*调试状态数据分配**********************************************************/
	/*Query Area*/

	for (i=0;i<3;i++)
	{
		XBYTE[Mrcu_Query_Pointer+i*3]	=	0x60|(i+1);
		XBYTE[Mrcu_Query_Pointer+i*3+1]	=	MRCU_TYPE<<4|ARQ1_Frame;
		XBYTE[Mrcu_Query_Pointer+i*3+2]	=	1;

		XBYTE[Irmu_Query_Pointer+i*3]	=	0x60|(i+6);
		XBYTE[Irmu_Query_Pointer+i*3+1]	=	IRMU_TYPE<<4|ARQ1_Frame;
		XBYTE[Irmu_Query_Pointer+i*3+2]	=	0;
	}
	XBYTE[Mrcu_Query_Pointer+3*3]		=	0x60|5;
	XBYTE[Mrcu_Query_Pointer+3*3+1]		=	MRCU_TYPE<<4|ARQ2_Frame;
	XBYTE[Mrcu_Query_Pointer+3*3+2]		=	1;

	XBYTE[Irmu_Query_Pointer+2*3]		=	0x60|(5+5);
	XBYTE[Irmu_Query_Pointer+2*3+1]		=	IRMU_TYPE<<4|ARQ1_Frame;
	XBYTE[Irmu_Query_Pointer+2*3+2]		=	0;

	for (i=0;i<4;i++)
	{
		XBYTE[Mrcu_Query_Pointer+i*3+12]	=	0x70|(i+1);
		XBYTE[Mrcu_Query_Pointer+i*3+12+1]	=	MRCU_TYPE<<4|ARQ1_Frame;
		XBYTE[Mrcu_Query_Pointer+i*3+12+2]	=	1;

		XBYTE[Irmu_Query_Pointer+(i-1)*3+12]	=	0x70|(i+6);
		XBYTE[Irmu_Query_Pointer+(i-1)*3+12+1]	=	IRMU_TYPE<<4|ARQ1_Frame;
		XBYTE[Irmu_Query_Pointer+(i-1)*3+12+2]	=	0;
	}
	XBYTE[Mrcu_Query_Pointer+4*3+12]		=	0x70|5;
	XBYTE[Mrcu_Query_Pointer+4*3+12+1]		=	MRCU_TYPE<<4|ARQ2_Frame;
	XBYTE[Mrcu_Query_Pointer+4*3+12+2]		=	1;

	XBYTE[Irmu_Query_Pointer+3*3+12]		=	0x70|(5+5);
	XBYTE[Irmu_Query_Pointer+3*3+12+1]		=	IRMU_TYPE<<4|ARQ1_Frame;
	XBYTE[Irmu_Query_Pointer+3*3+12+2]		=	0;

	for (i=0;i<4;i++)
	{
		XBYTE[Mrcu_Query_Pointer+i*3+27]	=	0x80|(i+1);
		XBYTE[Mrcu_Query_Pointer+i*3+27+1]	=	MRCU_TYPE<<4|ARQ1_Frame;
		XBYTE[Mrcu_Query_Pointer+i*3+27+2]	=	1;

		XBYTE[Irmu_Query_Pointer+(i-1)*3+27]	=	0x80|(i+6);
		XBYTE[Irmu_Query_Pointer+(i-1)*3+27+1]	=	IRMU_TYPE<<4|ARQ1_Frame;
		XBYTE[Irmu_Query_Pointer+(i-1)*3+27+2]	=	0;
	}
	XBYTE[Mrcu_Query_Pointer+4*3+27]		=	0x80|5;
	XBYTE[Mrcu_Query_Pointer+4*3+27+1]		=	MRCU_TYPE<<4|ARQ2_Frame;
	XBYTE[Mrcu_Query_Pointer+4*3+27+2]		=	1;

	XBYTE[Irmu_Query_Pointer+3*3+27]		=	0x80|(5+5);
	XBYTE[Irmu_Query_Pointer+3*3+27+1]		=	IRMU_TYPE<<4|ARQ1_Frame;
	XBYTE[Irmu_Query_Pointer+3*3+27+2]		=	0;

	for (i=0;i<SFLU_NUMBER;i++)
	{
		XBYTE[Sflu_Query_Pointer]	=	ID_SFLU;
		XBYTE[Sflu_Query_Pointer+1]	=	SFLU_TYPE<<4|ARQ1_Frame;
		XBYTE[Sflu_Query_Pointer+2]	=	0;
	}
	for (i=0;i<IOCU_NUMBER;i++)
	{
		XBYTE[Iocu_Query_Pointer]	=	ID_IOCU;
		XBYTE[Iocu_Query_Pointer+1]	=	IOCU_TYPE<<4|ARQ1_Frame;
		XBYTE[Iocu_Query_Pointer+2]	=	0;
	}
	for (i=0;i<ADMU_NUMBER;i++)
	{
		XBYTE[Admu_Query_Pointer]	=	ID_ADMU;
		XBYTE[Admu_Query_Pointer+1]	=	ADMU_TYPE<<4|ARQ1_Frame;
		XBYTE[Admu_Query_Pointer+2]	=	1;
	}
	/*Order Area*/
	for (i=0;i<SFLU_NUMBER;i++)
	{
		XBYTE[Sflu_Order_Pointer]	=	ID_SFLU;
		XBYTE[Sflu_Order_Pointer+1]	=	SFLU_TYPE<<4|COMD_Frame;
		XBYTE[Sflu_Order_Pointer+2]	=	0;
	}
	for (i=0;i<DO_NUMBER;i++)
	{
		XBYTE[Do_Order_Pointer+i*3]		=	ID_IOCU;
		XBYTE[Do_Order_Pointer+i*3+1]	=	IOCU_TYPE<<4|COMD_Frame;
		XBYTE[Do_Order_Pointer+i*3+2]	=	0;
	}

	for (i=0;i<3;i++)
	{
		XBYTE[Mrcu_Order_Pointer+i*3]	=	0x60|(i+1);
		XBYTE[Mrcu_Order_Pointer+i*3+1]	=	MRCU_TYPE<<4|COMD_Frame;
		XBYTE[Mrcu_Order_Pointer+i*3+2]	=	0;
	}

	XBYTE[Mrcu_Order_Pointer+3*3]	=	0x65;
	XBYTE[Mrcu_Order_Pointer+3*3+1]	=	MRCU_TYPE<<4|COMD_Frame;
	XBYTE[Mrcu_Order_Pointer+3*3+2]	=	0;

	for (i=0;i<5;i++)
	{
		XBYTE[Mrcu_Order_Pointer+i*3+12]	=	0x70|(i+1);
		XBYTE[Mrcu_Order_Pointer+i*3+12+1]	=	MRCU_TYPE<<4|COMD_Frame;
		XBYTE[Mrcu_Order_Pointer+i*3+12+2]	=	0;
	}
	for (i=0;i<5;i++)
	{
		XBYTE[Mrcu_Order_Pointer+i*3+27]	=	0x80|(i+1);
		XBYTE[Mrcu_Order_Pointer+i*3+27+1]	=	MRCU_TYPE<<4|COMD_Frame;
		XBYTE[Mrcu_Order_Pointer+i*3+27+2]	=	0;
	}
	/***************************************************************************/
	


	/*数据区ID号设置*/
	for (i=0;i<SFLU_NUMBER;i++)
	{
		ID	=	XBYTE[Sflu_Query_Pointer	+	i*3];
		XBYTE[Sflu_Data_Pointer	+	i*SFLU_DATA_LENGTH]	=	ID;
	}
	for (i=0;i<MRCU_NUMBER;i++)
	{
		ID	=	XBYTE[Mrcu_Query_Pointer+i*3];
		XBYTE[Ccr_Data_Pointer	+	i*CCR_DATA_LENGTH]	=	ID;
	}
	for (i=0;i<IOCU_NUMBER;i++)
	{
		ID	=	XBYTE[Iocu_Query_Pointer+i*3];
		XBYTE[Di_Data_Pointer	+	i*DI_DATA_LENGTH]	=	ID;
	}
	for (i=0;i<ADMU_NUMBER;i++)
	{
		ID	=	XBYTE[Admu_Query_Pointer+i*3];
		XBYTE[Admu_Data_Pointer	+	i*ADMU_DATA_LENGTH]	=	ID;
	}

	/*报警区ID号设置*/
	for (i=0;i<MRCU_NUMBER;i++)
	{
		ID	=	XBYTE[Mrcu_Query_Pointer+i*3];
		XBYTE[Mrcu_Warn_Pointer	+	i*NODE_WARN_LENGTH]	=	ID;
	}
	for (i=0;i<IRMU_NUMBER;i++)
	{

⌨️ 快捷键说明

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