Beruflich Dokumente
Kultur Dokumente
h"
#define SlaveAddress 1
int isrEnd,readEnd;
union transform{
struct twoBytes{
unsigned char lowByte;
unsigned char highByte;
}bytes;
unsigned int integer;
}T;
bit DataArrive = 0;
bit stop = 0;
void setRS(void) //RS setting
{
BRGH = 0;
SPBRG = 31;
SYNC = 0;
SPEN = 1;
CREN = 1;
SREN = 0;
TXIE = 0;
RCIE = 0;
TX9 = 0;
RX9 = 0;
TXEN = 1;
}
void startI2C(void)
{
SEN = 1;
while (SEN);
}
void stopI2C(void)
{
PEN = 1;
while (PEN);
}
unsigned short i;
CheckSum = 0xffff;
for (j=0; j<dataLength; j++)
{
CheckSum = CheckSum^(unsigned int)buffer[j];
for(i=8;i>0;i--)
if((CheckSum)&0x0001)
CheckSum = (CheckSum>>1)^0xa001;
else
CheckSum>>=1;
}
highCRC = CheckSum>>8;
CheckSum<<=8;
lowCRC = CheckSum>>8;
if (check==1){
if ( (buffer[dataLength+1] == highCRC) & (buffer[dataLength] == lowCRC ))
return 1;
else
return 0;
}
else
{
buffer[dataLength] = lowCRC;
buffer[dataLength+1] = highCRC;
return 1;
}
unsigned char i;
T.bytes.lowByte = buffer[3];
T.bytes.highByte = buffer[2];
T.integer*=2;
buffer[2] = buffer[5]*2;
for (i=0; i<buffer[2]; i++)
{
startI2C();
writeI2C(0xA0);
writeI2C(T.bytes.highByte);
writeI2C(T.bytes.lowByte);
stopI2C();
startI2C();
writeI2C(0xA1);
RCEN = 1;
buffer[i+3] = readI2C();
RCEN = 0;
T.integer++;
}
CRC16(buffer[2]+3,0);
for (i=0; i<buffer[2] + 5; i++)
writeRS(buffer[i]);
}
CRC16(3,0);
for (i=0; i<5; i++)
writeRS(buffer[i]);
}
}
bit CheckRSInBuffer(void)
{
unsigned int j = 0;
void I2CInitialize(void)
{
SSPEN = 1;
SSPM3 = 1;
SSPM2 = 0;
SSPM1 = 0;
SSPM0 = 0;
SSPADD = 12;
}
void main(void)
{
unsigned char c;
c = 1;
TRISB = 0xE0;
TRISC = 0xF8;
RB1 = 0;
RB2 = 0;
RC3 = 1;
RC4 = 1;
setISR();
I2CInitialize();
setRS();
for(;;)
{
if (RCIF) {
c =ReadMBFrame();
if (c == 3)
readRegResponse();
else
if (c==16)
writeRegResponse();
else
writeBadRequest(c);
}