BCB怎么实现单字节收发?(用API)

aloevera 2006-03-14 05:54:55
我的毕业论文是 <基于RS232的多仪表数据采集系统的设计>
现在准备用上位机用BCB,下位机是两块单片机(AT89S51)用C51编程.
协议是采用多机通信,首先要上位机发送地址(比如01或02),然后从机看是否吻合自己的地址,并发送确认地址回主机.
下面就是正常的数据收发了


在地址发送和接受地址确认时的单字节是怎么编程的?
(用API WiteFile 和 RradFlie之类的实现 )]
谢谢!
...全文
193 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dxqxiaoqiang 2006-03-24
  • 打赏
  • 举报
回复
用串口控件也行,可以用victor串口控件,也有参考源码,并且是开源的。
dxqxiaoqiang 2006-03-24
  • 打赏
  • 举报
回复
你可以去买本C++Builder与RS232通信,有源码光盘
调试的时候最好用串口助手。
aloevera 2006-03-17
  • 打赏
  • 举报
回复
这知道一点
下面是我的部分程序:

void __fastcall TForm1::Button1Click(TObject *Sender)
{ char *ComNo;
DCB dcb;
String Temp;
//取得要打开的通信端口
Temp = "COM"+IntToStr(rdCOM->ItemIndex +1);
// 转换到指针类型的Char
ComNo = Temp.c_str();
hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, 0);


//这样写居然检测不到COM口
// hComm = CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING, 0, 0);
//这样才能检测到COM口 ? ?????为什么啊??????/


if (hComm == INVALID_HANDLE_VALUE) // 如果通信端口未打开
{
MessageBox(0, "打开通信端口错误!!","Comm Error",MB_OK);
return;
}
//将dcb地址传入,以取得通信参数
GetCommState(hComm,&dcb); // 得知目前通信端口的状态
dcb.BaudRate = CBR_9600; // 设置波特率为9600
dcb.ByteSize = 8; // 字节为 8 bit
dcb.Parity = MARKPARITY; // Parity 为 MARK
dcb.StopBits = ONESTOPBIT; // 1 个Stop bit
//通信端口设置
if (!SetCommState(hComm, &dcb)) { // 设置通信端口的状态
MessageBox (0, "通信端口设置错误!!!","Set Error",MB_OK);
CloseHandle(hComm);
return;
}

}

void __fastcall TForm1::Button5Click(TObject *Sender)
{
unsigned long lrc;
String Temp;
DCB dcb;
char *SendData;
if (hComm==0) return; //检查Handle值
Temp = 2;//发送从机的地址
SendData = Temp.c_str(); //字符串转换WriteFile(hComm,1,1, &lrc,NULL); // 送出地址
WriteFile(hComm,SendData,1, &lrc,NULL); // 送出地址
//将dcb地址传入,以取得通信参数
GetCommState(hComm,&dcb); // 得知目前通信端口的状态
dcb.BaudRate = CBR_9600; // 设置波特率为9600
dcb.ByteSize = 8; // 字节为 8 bit
dcb.Parity = NOPARITY; // Parity 为 None
dcb.StopBits = ONESTOPBIT; // 1 个Stop bit
//通信端口设置
if (!SetCommState(hComm, &dcb)) { // 设置通信端口的状态
MessageBox (0, "通信端口设置错误!!!","Set Error",MB_OK);
CloseHandle(hComm);
return;}

char inbuff[2];
DWORD nBytesRead;
ReadFile(hComm, inbuff,1,&nBytesRead,NULL); //接受从机地址回应
inbuff[1]='\0';
if(inbuff[0]=='2')
Label3->Caption="已连到2#机"; //显示已连到从机
else return;
}

调试的时候发送不出去,程序不知怎么的好象死在那了

高人给我指点一下吧!
yy2001 2006-03-17
  • 打赏
  • 举报
回复
学习
netsys2 2006-03-15
  • 打赏
  • 举报
回复
通信时只读1个BYTE不就可以了吗?

再说别人只发1BYTE,你也只能收1BYTE啊
CCED136 2006-03-15
  • 打赏
  • 举报
回复
修改 BCB 程序的字节对齐选项,设置成 1 字节对齐就可以了

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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