求教一个关于串口通信的一个问题(急!!!!!!!)
有一基于文档的串口通信程序,原理为串口2(COM2)产生随机数每隔1秒向串口1(COM1)发送的NEMA格式的报文,其中一段源码如下:
void CSCPortTestView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
int randdata=rand()%9000; //产生9000以内的随机数
CString strSendData;
strSendData.Format("%04d",randdata);
SendString(strSendData, 2); //串口2发送数据;
CView::OnTimer(nIDEvent);
}
现我希望以用户的输入(可以是汉字、英文字符或数字,用的是ceditview类)来取代随机数,但不知如何生成校验码,附校验码生成函数SendString
void CSCPortTestView::SendString(CString &str, int Port)
{
char checksum=0,cr=CR,lf=LF;
char c1,c2;
for(int i=0;i<str.GetLength();i++)
checksum = checksum^str[i];
c2=checksum & 0x0f; c1=((checksum >> 4) & 0x0f);
if (c1 < 10) c1+= '0'; else c1 += 'A' - 10;
if (c2 < 10) c2+= '0'; else c2 += 'A' - 10;
CString str1;
str1='$'+str+"*"+c1+c2+cr+lf;
m_ComPort[Port-1].WriteToPort((LPCTSTR)str1);
}