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

📄 modbus16.c

📁 sci_loopback_interrupts(Modbus),基于TMS320F2812 DSP芯片的Modbus串口通讯程序
💻 C
📖 第 1 页 / 共 5 页
字号:
		case 62:
				nData0Test[62]=SetState;
				break;
		case 63:	
				nData0Test[63]=SetState;
				break;
		case 64:
				nData0Test[64]=SetState;
				break;
		case 65:	
				nData0Test[65]=SetState;
				break;
		case 66:
				nData0Test[66]=SetState;
				break;
		case 67:	
				nData0Test[67]=SetState;
				break;
		case 68:
				nData0Test[68]=SetState;
				break;
		case 69:	
				nData0Test[69]=SetState;
				break;
		case 70:
				nData0Test[70]=SetState;
				break;
		case 71:	
				nData0Test[71]=SetState;
				break;		
		case 72:
				nData0Test[72]=SetState;
				break;
		case 73:	
				nData0Test[73]=SetState;
				break;
		case 74:
				nData0Test[74]=SetState;
				break;
		case 75:	
				nData0Test[75]=SetState;
				break;
		case 76:
				nData0Test[76]=SetState;
				break;
		case 77:	
				nData0Test[77]=SetState;
				break;
		case 78:
				nData0Test[78]=SetState;
				break;
		case 79:	
				nData0Test[79]=SetState;
				break;
		case 80:
				nData0Test[80]=SetState;
				break;
		case 81:	
				nData0Test[81]=SetState;
				break;		
		case 82:
				nData0Test[82]=SetState;
				break;
		case 83:	
				nData0Test[83]=SetState;
				break;
		case 84:
				nData0Test[84]=SetState;
				break;
		case 85:	
				nData0Test[85]=SetState;
				break;
		case 86:
				nData0Test[86]=SetState;
				break;
		case 87:	
				nData0Test[87]=SetState;
				break;
		case 88:
				nData0Test[88]=SetState;
				break;
		case 89:	
				nData0Test[89]=SetState;
				break;
		case 90:
				nData0Test[90]=SetState;
				break;
		case 91:	
				nData0Test[91]=SetState;
				break;		
		case 92:
				nData0Test[92]=SetState;
				break;
		case 93:	
				nData0Test[93]=SetState;
				break;
		case 94:
				nData0Test[94]=SetState;
				break;
		case 95:	
				nData0Test[95]=SetState;
				break;
		case 96:
				nData0Test[96]=SetState;
				break;
		case 97:	
				nData0Test[97]=SetState;
				break;
		case 98:
				nData0Test[98]=SetState;
				break;
		case 99:	
				nData0Test[99]=SetState;
				break;
		case 100:
				nData0Test[100]=SetState;
				break;
		case 101:	
				nData0Test[101]=SetState;
				break;		
		case 102:
				nData0Test[102]=SetState;
				break;
		case 103:	
				nData0Test[103]=SetState;
				break;
		case 104:
				nData0Test[104]=SetState;
				break;
		case 105:	
				nData0Test[105]=SetState;
				break;
		case 106:
				nData0Test[106]=SetState;
				break;
		case 107:	
				nData0Test[107]=SetState;
				break;
		case 108:
				nData0Test[108]=SetState;
				break;
		case 109:	
				nData0Test[109]=SetState;
				break;
		case 110:
				nData0Test[110]=SetState;
				break;
		case 111:	
				nData0Test[111]=SetState;
				break;		
		case 112:
				nData0Test[112]=SetState;
				break;
		case 113:	
				nData0Test[113]=SetState;
				break;
		case 114:
				nData0Test[114]=SetState;
				break;
		case 115:	
				nData0Test[115]=SetState;
				break;
		case 116:
				nData0Test[116]=SetState;
				break;
		case 117:	
				nData0Test[117]=SetState;
				break;
		case 118:
				nData0Test[118]=SetState;
				break;
		case 119:	
				nData0Test[119]=SetState;
				break;
		case 120:
				nData0Test[120]=SetState;
				break;
		case 121:	
				nData0Test[121]=SetState;
				break;		
		case 122:
				nData0Test[122]=SetState;
				break;
		case 123:	
				nData0Test[123]=SetState;
				break;
		case 124:
				nData0Test[124]=SetState;
				break;
		case 125:	
				nData0Test[125]=SetState;
				break;
		case 126:
				nData0Test[126]=SetState;
				break;
		case 127:	
				nData0Test[127]=SetState;
				break;*/
	}	
}

#pragma CODE_SECTION(GetRegisterVal, "MODBUS_CODE")
/*
函数功能:读取多个保持寄存器的16进制内容
参数说明:
		Addr     ---- 保持寄存器的参考地址
		ReadData ---- 读取的内容
*/
void GetRegisterVal(Uint16 Addr,Uint16 *ReadData)
{
	switch(Addr & 0x00ff)
	{
		case 0:
				*ReadData=nData4Test[0]++;
				break;
		case 1:	
				*ReadData=nData4Test[1]++;
				break;
		case 2:		
				*ReadData=nData4Test[2]++;
				break;		
		case 3:
				*ReadData=nData4Test[3]++;
				break;		
		case 4:
				*ReadData=nData4Test[4]++;
				break;		
		case 5:
				*ReadData=nData4Test[5]++;
				break;
		case 6:
				*ReadData=nData4Test[6]++;
				break;			
		case 7:
				*ReadData=nData4Test[7]++;
				break;		
		case 8:
				*ReadData=nData4Test[8]++;
				break;		
		case 9:
				*ReadData=nData4Test[9]++;
				break;		
		case 10:
				*ReadData=nData4Test[10]++;
				break;
		case 11:	
				*ReadData=nData4Test[11]++;
				break;
		case 12:		
				*ReadData=nData4Test[12]++;
				break;		
		case 13:
				*ReadData=nData4Test[13]++;
				break;		
		case 14:
				*ReadData=nData4Test[14]++;
				break;		
		case 15:
				*ReadData=nData4Test[15]++;
				break;
		case 16:
				*ReadData=nData4Test[16]++;
				break;			
		case 17:
				*ReadData=nData4Test[17]++;
				break;		
		case 18:
				*ReadData=nData4Test[18]++;
				break;		
		case 19:
				*ReadData=nData4Test[19];
				break;
		case 20:
				*ReadData=nData4Test[20]++;
				break;
		case 21:	
				*ReadData=nData4Test[21]++;
				break;
		case 22:		
				*ReadData=nData4Test[22]++;
				break;		
		case 23:
				*ReadData=nData4Test[23]++;
				break;		
		case 24:
				*ReadData=nData4Test[24]++;
				break;		
		case 25:
				*ReadData=nData4Test[25]++;
				break;
		case 26:
				*ReadData=nData4Test[26]++;
				break;			
		case 27:
				*ReadData=nData4Test[27]++;
				break;		
		case 28:
				*ReadData=nData4Test[28]++;
				break;		
		case 29:
				*ReadData=nData4Test[29];
				break;
		case 30:
				*ReadData=nData4Test[30]++;
				break;
		case 31:	
				*ReadData=nData4Test[31]++;
				break;	
	}
}

#pragma CODE_SECTION(GetInputRegisterVal, "MODBUS_CODE")
/*
函数功能:读取多个模拟量输入寄存器的16进制内容
参数说明:
		Addr     ---- 保持寄存器的参考地址
		ReadData ---- 读取的内容
*/
void GetInputRegisterVal(Uint16 Addr,Uint16 *ReadData)
{
	switch(Addr & 0x00ff)
	{
		case 0:
				*ReadData=nData3Test[0]++;
				break;
		case 1:	
				*ReadData=nData3Test[1]++;
				break;
		case 2:		
				*ReadData=nData3Test[2]++;
				break;		
		case 3:
				*ReadData=nData3Test[3]++;
				break;		
		case 4:
				*ReadData=nData3Test[4]++;
				break;
		case 5:	
				*ReadData=nData3Test[5]++;
				break;
		case 6:		
				*ReadData=nData3Test[6]++;
				break;		
		case 7:
				*ReadData=nData3Test[7]++;
				break;	
		case 8:
				*ReadData=nData3Test[8]++;
				break;
		case 9:	
				*ReadData=nData3Test[9]++;
				break;
		case 10:
				*ReadData=nData3Test[10]++;
				break;
		case 11:	
				*ReadData=nData3Test[11]++;
				break;
		case 12:		
				*ReadData=nData3Test[12]++;
				break;		
		case 13:
				*ReadData=nData3Test[13]++;
				break;		
		case 14:
				*ReadData=nData3Test[14]++;
				break;
		case 15:	
				*ReadData=nData3Test[15]++;
				break;
		case 16:		
				*ReadData=nData3Test[16]++;
				break;		
		case 17:
				*ReadData=nData3Test[17]++;
				break;	
		case 18:
				*ReadData=nData3Test[18]++;
				break;
		case 19:	
				*ReadData=nData3Test[19]++;
				break;
		case 20:
				*ReadData=nData3Test[20]++;
				break;
		case 21:	
				*ReadData=nData3Test[21]++;
				break;
		case 22:		
				*ReadData=nData3Test[22]++;
				break;		
		case 23:
				*ReadData=nData3Test[23]++;
				break;		
		case 24:
				*ReadData=nData3Test[24]++;
				break;
		case 25:	
				*ReadData=nData3Test[25]++;
				break;
		case 26:		
				*ReadData=nData3Test[26]++;
				break;		
		case 27:
				*ReadData=nData3Test[27]++;
				break;	
		case 28:
				*ReadData=nData3Test[28]++;
				break;
		case 29:	
				*ReadData=nData3Test[29]++;
				break;
		case 30:
				*ReadData=nData3Test[30]++;
				break;
		case 31:	
				*ReadData=nData3Test[31]++;
				break;	
	}
}

#pragma CODE_SECTION(SetRegisterVal, "MODBUS_CODE")
//设置寄存器值 
void SetRegisterVal(Uint16 addr,Uint16 tempData)
{
	switch(addr & 0xff)
	{
		case 0:
				nData4Test[0]=tempData;
				break;
		case 1:	
				nData4Test[1]=tempData;
				break;
		case 2:		
				nData4Test[2]=tempData;
				break;		
		case 3:
				nData4Test[3]=tempData;
				break;		
		case 4:
				nData4Test[4]=tempData;
				break;		
		case 5:
				nData4Test[5]=tempData;
				break;
		case 6:
				nData4Test[6]=tempData;
				break;			
		case 7:
				nData4Test[7]=tempData;
				break;		
		case 8:
				nData4Test[8]=tempData;
				break;		
		case 9:
				nData4Test[9]=tempData;
				break;
		case 10:
				nData4Test[10]=tempData;
				break;
		case 11:	
				nData4Test[11]=tempData;
				break;
		case 12:		
				nData4Test[12]=tempData;
				break;		
		case 13:
				nData4Test[13]=tempData;
				break;		
		case 14:
				nData4Test[14]=tempData;
				break;		
		case 15:
				nData4Test[15]=tempData;
				break;
		case 16:
				nData4Test[16]=tempData;
				break;			
		case 17:
				nData4Test[17]=tempData;
				break;		
		case 18:
				nData4Test[18]=tempData;
				break;		
		case 19:
				nData4Test[19]=tempData;
				break;	
		case 20:
				nData4Test[20]=tempData;
				break;
		case 21:	
				nData4Test[21]=tempData;
				break;
		case 22:		
				nData4Test[22]=tempData;
				break;		
		case 23:
				nData4Test[23]=tempData;
				break;		
		case 24:
				nData4Test[24]=tempData;
				break;		
		case 25:
				nData4Test[25]=tempData;
				break;
		case 26:
				nData4Test[26]=tempData;
				break;			
		case 27:
				nData4Test[27]=tempData;
				break;		
		case 28:
				nData4Test[28]=tempData;
				break;		
		case 29:
				nData4Test[29]=tempData;
				break;	
		case 30:
				nData4Test[30]=tempData;
				break;		
		case 31:
				nData4Test[31]=tempData;
				break;		
	}
}

#pragma CODE_SECTION(ModbusExcep, "MODBUS_CODE")
void ModbusExcep(Uint16 FunctionCode,Uint16 ExceptionCode)
{
	Uint16 CRCCheck=0;
	
	SdataA[0] = Local;
	SdataA[1] = FunctionCode+0x80;	
	SdataA[2] = ExceptionCode;

	CRCCheck  = Crc16(SdataA,3);	
	SdataA[3] = CRCCheck >> 8;
	SdataA[4] = CRCCheck & 0xFF;
	
	SdataA_Num = 5;
}

#pragma CODE_SECTION(MarkCompute, "MODBUS_CODE")
Uint16 MarkCompute(Uint16 DataSrc,Uint16 DataAnd,Uint16 DataOr)
{
	Uint16 TempData1,TempData2;

	TempData1=DataSrc & DataAnd;
	TempData2=DataOr & (~DataAnd);
	
	return(TempData1|TempData2);
}

void SciaTx_Response(void)
{
	if(SdataA_Num<=16)
		SciaRegs.SCIFFTX.bit.TXFFILIL=SdataA_Num;
	else if(16<SdataA_Num && SdataA_Num<=80)
	    SciaRegs.SCIFFTX.bit.TXFFILIL=16;

    EDIS;   // This is needed to disable write to EALLOW protected registers 
    PieCtrlRegs.PIEIER9.bit.INTx2=1;     // PIE Group 9, INT2
    EINT;
}




⌨️ 快捷键说明

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