串口通讯是不是每次都要初始化

ma100 2005-05-01 06:07:38
用VC做的一个程序,从104上传一幅图片,每次先运行VC的程序没问题,问题是若先运行104上的程序,就可能通讯不上.若每次传图片时初始化一下串口而不是在构造函数中初始化就没问题.

104程序:(dos)
unsigned char RecByte(void)
{
unsigned char j,rsstatus,incode;
int i;
rsstatus=inportb(COM1+5);
if ((rsstatus&0x01)==0x01)
incode=inportb(COM1);

else
incode='E';
return incode;
}
void TrsByte(char buf) //串口向外发数据
{
inportb(COM1+5);
outportb(COM1,buf);
}
int RSHandshake(int n)
{
char ch,a='A',b='B';
long count=0;

inportb(COM1);

while(1)
{
TrsByte(a);
ch=RecByte();
if(ch=='A')
{
//////////////
104收到了A,但发送的B,PC没有收到,此处加延时也没用
///////////
TrsByte(b);
break;

}
delay(200);
if ( n>0 )
{
count++;
if(count==n)
{
return 0; //failed
}
}
}

return 1; //success
}
////////////////////////////////////////////////////////////
PC程序(vc)
UINT ThreadTransBmp(LPVOID pParam)
{
CString Caption = "文件传送";
UCHAR ch;


//handshake with spectrum analyzer

while(1)
{
ch = rs.ReadByte();
if(ch=='A')
{
rs.SendByte('A');
ch = rs.ReadByte();
if(ch=='B')
{
break;
}
}
}
....
}
...全文
316 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangnanonnet 2005-06-02
  • 打赏
  • 举报
回复
每次OPEN的时候INIT
yangxw96 2005-06-01
  • 打赏
  • 举报
回复
是呀,才进入程序时需要初始化,退出程序时把它关了,就行了
oyljerry 2005-05-03
  • 打赏
  • 举报
回复
调试一下,看什么错误
ma100 2005-05-01
  • 打赏
  • 举报
回复
初始化时我设置了

bool CRS232::InitCom()
{
COMMTIMEOUTS commTimeOuts;

CloseHandle(hComm);

hComm = CreateFile( Com, GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security attrs
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

if(hComm == INVALID_HANDLE_VALUE)
{
MessageBox("打开串口失败,请重新设置串口!","串口错误",MB_OK);
return FALSE;
}
else
{
SetCommMask(hComm , EV_RXCHAR | EV_TXEMPTY );
SetupComm(hComm , 1024 ,1024);
commTimeOuts.ReadIntervalTimeout = 1000;
commTimeOuts.ReadTotalTimeoutMultiplier = 500;
commTimeOuts.ReadTotalTimeoutConstant = 5000;
commTimeOuts.WriteTotalTimeoutMultiplier = 500;
commTimeOuts.WriteTotalTimeoutConstant=5000;
GetCommState(hComm,&dcb);
dcb.BaudRate = BautRate;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fBinary = TRUE;
dcb.fParity = false;
if (!SetCommTimeouts(hComm,&commTimeOuts) ||
!SetCommState(hComm , &dcb))
{
CloseHandle(hComm);
MessageBox("串口初始化失败,请重新设置串口!","串口错误",MB_OK);
return FALSE;
}
else
{
GetCommState(hComm,&dcb);
PurgeComm(hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
}
}
return TRUE;
}
qrlvls 2005-05-01
  • 打赏
  • 举报
回复
在VC的程序中可以先设置DCB结构再CreateFile

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧