کد:
eMBErrorCode eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs,eMBRegisterMode eMode )
{
eMBErrorCode eStatus = MB_ENOERR;
int iRegIndex;
USHORT usTempVal;
if( ( usAddress >= REG_INPUT_START )&& ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) )
{
if (eMode==MB_REG_READ)
{
iRegIndex = ( int )( usAddress - usRegInputStart );
while( usNRegs > 0 )
{
usTempVal = ReadReg(iRegIndex);
//printf("read reg:\taddr:%d\tvalue:%x\r",iRegIndex,usTempVal);
*pucRegBuffer++ =( unsigned char )( usTempVal >> 8 );
*pucRegBuffer++ =( unsigned char )( usTempVal & 0xFF );
iRegIndex++;
usNRegs--;
}
}
else if(eMode==MB_REG_WRITE)
{
iRegIndex = ( int )( usAddress - usRegInputStart );
while( usNRegs > 0 )
{
usTempVal = *pucRegBuffer++;
usTempVal <<= 8;
usTempVal |= *pucRegBuffer++;
WriteReg(iRegIndex,usTempVal);
//printf("write reg:\taddr:%d\tvalue:%x\r",iRegIndex,usTempVal);
iRegIndex++;
usNRegs--;
}
}
}
else
{
eStatus = MB_ENOREG;
}
return eStatus;
}
برای استفاده در st باید فایلهای porttimer , portserial
رو تغیر بدید که میشه تنظیم تایمر و یوزارت
بعد از اون هم برای فانکش کد 3 و6 کد بالا رو استفاده کنید
داخل کد بالا 2 تا تابع تعریف کردم ReadReg و WriteReg
که پارامتر ورودیش اندیس رجیستر موردنظر هست
برای بقیه فانکش کد ها مثل همین تابع رو باید خودتون بنویسید