Hmm, I can't try your code, so I'm going to have to guess. Here's a reworked version based on what you posted.
Code:
for (i = 0; (cComChar = readcomm()) != 0; i++)
{
rxpacket[i] = cComChar;
if (i == 15)
{
/* 16 bytes received, process complete packet */
cDest = rxpacket[1]; /* get destination char */
cSource = rxpacket[2]; /* get source workstation */
cPktType = rxpacket[3]; /* get packet type */
printf("\npacket received: ");
for (k = 0; k < 16; k++)
{
printf("%c", rxpacket[k]);
}
i = -1; /* Reset i, this allows use to get a new packet */
}
}