char buf[2] = {0xa8,0x88};
DWORD dw;
WriteFile( m_hMyCom, buf, 2, &dw, NULL ) );
但这都是发送了8位,怎样发送第9位呢?
各们大侠,我在线等,帮忙弄好了还会加分,谢谢!!
网上很多人说,第9位是校验位的,第九位是地址标识位,1代表是地址,0代表数据,
但我用SetCommState来设置0、1,但还是不行
//设置串口参数:波特率,停止位,等
bool SetState(DWORD dwBaudRate, DWORD dwByteSize = 8, DWORD dwParity = NOPARITY, DWORD dwStopBits = ONESTOPBIT)
static unsigned int k = 0;
BYTE wBuf[1];
memset(wBuf,'\0',1);
switch(k)
{
case 0:
wBuf[0]= 0x88;
if (wBuf[0]==0x88)
{
std::cout<<"gggggggggggg"<<std::endl;
}
//wBuf[1] = 0x01;
m_port.SetState(4800,8,0,1);
m_port.Write(wBuf,1);
k ++;
break;
case 1:
wBuf[0] = 0x88;
//wBuf[1] = 0x00;
m_port.SetState(4800,8,1,1);
m_port.Write(wBuf,1);
k ++;
break;
}
21 个解决方案
#1
你都发了16位了啊。
#2
WriteFile的确是按直接写的,但是你写入的会以比特流的方式发送。
所以第九位就是第二个字节的最高位。
所以第九位就是第二个字节的最高位。
#3
一个byte一个byte的发送不就完了吗?
有那么多讲究么?
那就自己定义一个规则:第三个byte作为前两个byte的标志。
有那么多讲究么?
那就自己定义一个规则:第三个byte作为前两个byte的标志。
#4
在超级终端中你可以设定发送数据的格式,例如我们一般用 8-N-1(8-bit,无效验,一个停止位)
在单片机中有另外一个指定的 register 中的某一位是第九位,有专门的发送指令步骤
在vs2010-->串口-->属性-->databit 可以设定位数
在单片机中有另外一个指定的 register 中的某一位是第九位,有专门的发送指令步骤
在vs2010-->串口-->属性-->databit 可以设定位数
#5
数据位最大是8,我觉得一次发不了9位数据
#6
什么意思,不是很清楚
#7
我也是一个字节一个字节的发,不过一个字节就是8位啊,现在要求含有第九位发,
串口数据格式:
起始位,数据位(5—10位)常用8位,校验位,停止位。。。。但我就是不知道9或10位怎么发
#8
通过校验位来设置第九位,如果是windows得调用设置校验规则的API
#9
楼上正解
#10
#11
怎么设置设置校验呢,你之前也遇到这种情况嘛?一开始打开串口的时候设置校验是什么,是NOPARITY吗,还是MARKPARITY或SPACEPARITY呢?为什么我打开了串口后就再也设置不了校验位了呢,调试时候还是初始化的那个?
#12
SetCommState
在DCB参数中改Parity
这个第九位是上位机和单片机串口通讯尤其是485中经常用到的。
#13
发1还0啊
#14
我用的是51的板哦,它的通信协义要求:(pc机每接收到一位,都要带第9位原原本本的发回去)
开机过程==================================
88 //联络
88 35 01 80 //第1轮
88 33 01 80 //第1回
88 37 00 31 00 80 //
88 51 00 00 00 80 //送1
88 52 00 00 00 80 //送2
88 53 00 00 00 80 //送3
88 54 00 00 00 80 //送4
88 55 00 00 00 80 //送5
88 32 02 80 //
88 33 02 80 //第2回
88 37 00 59 00 80 //同上.....
88 51 00 00 00 80 //
88 52 00 00 00 80 //
88 53 00 00 00 80 //
88 54 00 00 00 80 //
88 55 00 00 00 80 //
88 32 03 80 //
88 33 03 80 //
#15
这个是一对一发送的
收到88就返回88,但我接受不到它发过来的第9位数据
收到88就返回88,但我接受不到它发过来的第9位数据
#16
你咋接受的第九位?
Windows下发送第九位简单,接收似乎没啥可行的方法。
我很好奇。
#17
一般来说协议都是这么定的:
只许上位机发送地址查找单片机,单片机只许响应上位机,不许主动通讯。
上位机决定和哪个单片机通讯,所以不需要查询地址,所以单片机应答时第九位都置0。
只许上位机发送地址查找单片机,单片机只许响应上位机,不许主动通讯。
上位机决定和哪个单片机通讯,所以不需要查询地址,所以单片机应答时第九位都置0。
#18
那PC机要设置为1发送回去吗?
#19
为啥要发送回去?
单片机要对发送回去的数据做什么处理吗?
这些处理有什么重要意义吗?
我不建议这么制定协议。
#20
我不懂单片机的,他提供协议给我,我的软件要和那板进行交互的,相互通讯才可以
#21
#1
你都发了16位了啊。
#2
WriteFile的确是按直接写的,但是你写入的会以比特流的方式发送。
所以第九位就是第二个字节的最高位。
所以第九位就是第二个字节的最高位。
#3
一个byte一个byte的发送不就完了吗?
有那么多讲究么?
那就自己定义一个规则:第三个byte作为前两个byte的标志。
有那么多讲究么?
那就自己定义一个规则:第三个byte作为前两个byte的标志。
#4
在超级终端中你可以设定发送数据的格式,例如我们一般用 8-N-1(8-bit,无效验,一个停止位)
在单片机中有另外一个指定的 register 中的某一位是第九位,有专门的发送指令步骤
在vs2010-->串口-->属性-->databit 可以设定位数
在单片机中有另外一个指定的 register 中的某一位是第九位,有专门的发送指令步骤
在vs2010-->串口-->属性-->databit 可以设定位数
#5
数据位最大是8,我觉得一次发不了9位数据
#6
什么意思,不是很清楚
#7
我也是一个字节一个字节的发,不过一个字节就是8位啊,现在要求含有第九位发,
串口数据格式:
起始位,数据位(5—10位)常用8位,校验位,停止位。。。。但我就是不知道9或10位怎么发
#8
通过校验位来设置第九位,如果是windows得调用设置校验规则的API
#9
楼上正解
#10
各位朋友帮看下我这个贴,谢谢啦
http://topic.csdn.net/u/20111114/09/a073da9d-8be5-4246-a29c-43b118d9e71a.html?seed=123070461&r=76477473#r_76477473
#11
怎么设置设置校验呢,你之前也遇到这种情况嘛?一开始打开串口的时候设置校验是什么,是NOPARITY吗,还是MARKPARITY或SPACEPARITY呢?为什么我打开了串口后就再也设置不了校验位了呢,调试时候还是初始化的那个?
#12
SetCommState
在DCB参数中改Parity
这个第九位是上位机和单片机串口通讯尤其是485中经常用到的。
#13
发1还0啊
#14
我用的是51的板哦,它的通信协义要求:(pc机每接收到一位,都要带第9位原原本本的发回去)
开机过程==================================
88 //联络
88 35 01 80 //第1轮
88 33 01 80 //第1回
88 37 00 31 00 80 //
88 51 00 00 00 80 //送1
88 52 00 00 00 80 //送2
88 53 00 00 00 80 //送3
88 54 00 00 00 80 //送4
88 55 00 00 00 80 //送5
88 32 02 80 //
88 33 02 80 //第2回
88 37 00 59 00 80 //同上.....
88 51 00 00 00 80 //
88 52 00 00 00 80 //
88 53 00 00 00 80 //
88 54 00 00 00 80 //
88 55 00 00 00 80 //
88 32 03 80 //
88 33 03 80 //
#15
这个是一对一发送的
收到88就返回88,但我接受不到它发过来的第9位数据
收到88就返回88,但我接受不到它发过来的第9位数据
#16
你咋接受的第九位?
Windows下发送第九位简单,接收似乎没啥可行的方法。
我很好奇。
#17
一般来说协议都是这么定的:
只许上位机发送地址查找单片机,单片机只许响应上位机,不许主动通讯。
上位机决定和哪个单片机通讯,所以不需要查询地址,所以单片机应答时第九位都置0。
只许上位机发送地址查找单片机,单片机只许响应上位机,不许主动通讯。
上位机决定和哪个单片机通讯,所以不需要查询地址,所以单片机应答时第九位都置0。
#18
那PC机要设置为1发送回去吗?
#19
为啥要发送回去?
单片机要对发送回去的数据做什么处理吗?
这些处理有什么重要意义吗?
我不建议这么制定协议。
#20
我不懂单片机的,他提供协议给我,我的软件要和那板进行交互的,相互通讯才可以