将串口控件?是不是这样的?在VB开头定义这样两个常量
Const S = 0
Const M = 1
如果是的话,我在做上位机和多下位机通信的问题,然后有下面这段程序 If (hk(0) = addr(0)) Then
MSComm1.Settings = "9600,S,8,1"
MSComm1.Output = command
MsgBox "握手成功"
Print S
End If
这段程序是将数据发给下位机,但是我在下位机RB8中看到还始终是1,请问哪位高手帮帮忙!
Const S = 0
Const M = 1
如果是的话,我在做上位机和多下位机通信的问题,然后有下面这段程序 If (hk(0) = addr(0)) Then
MSComm1.Settings = "9600,S,8,1"
MSComm1.Output = command
MsgBox "握手成功"
Print S
End If
这段程序是将数据发给下位机,但是我在下位机RB8中看到还始终是1,请问哪位高手帮帮忙!
E Even
M Mark
N (Default) None
O Odd
S Space If you use MARK parity, then the bit after the data word is a logical 1.
If you use SPACE parity, then the bit after the data word is a logical 0.另外,我们向 MSComm 的 Settings 属性时传输的是一个字符串。你的常数 S,/M 已经后面的打印语句都没有意义。
Form1.ShowForm3.Hide
Combo1.ListIndex = 0
Combo2.ListIndex = 0
MSComm1.InputMode = comInputModeBinary
MSComm1.Settings = "9600,M,8,1"
addr = Array(&H1, &H2)
command(0) = &H0End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive ' 收到 RThreshold # ofchars.
xv: Dim hk As Variant
hk = MSComm1.Input
If (hk(0) = addr(0)) Then
MSComm1.PortOpen = False
MSComm1.Settings = "9600,S,8,1"
MSComm1.PortOpen = True
MSComm1.Output = command
MsgBox "握手成功"
Print S
End If
If hk(0) = &HFA Then '通道0的开始标志位
z_start = True
ovt = 0
End If
If hk(0) = &HFB Then '通道0的结束标志位
z_start = False
Text1.Text = in_data(1) & in_data(2) & "." & in_data(3)
End If
If z_start = True Then
in_data(ovt) = hk(0)
ovt = ovt + 1
End If
'第1通道数据接受与处理
If hk(0) = &HFC Then '通道0的开始标志位
t_z_start = True
t_ovt = 0
End If
If hk(0) = &HFD Then '通道0的结束标志位
t_z_start = False
Text2.Text = t_in_data(1) & t_in_data(2) & "." & t_in_data(3)
End If
If t_z_start = True Then
t_in_data(t_ovt) = hk(0)
t_ovt = t_ovt + 1
End If
If MSComm1.InBufferCount <> 0 Then
GoTo xv
End If
End Select我按照您说的方法试了还是不行,我是通过上位机发送命令给下位机采集温湿度数据,首先发送地址给下位机,下位机收到地址后回发地址给上位机表示应答,然后上位机收到地址后跟之前发的地址对比,若一样即If (hk(0) = addr(0)) 则发送采集温湿度的命令0x00,此时发送的的是数据,所以必须定义setting中奇偶校验位为0,我很特地用print S 打印出来确实是0,但是下位机接收的RB8位始终为1 ,下位机代码如下,请各位大侠帮忙分析分析
void Serial_Int(void) interrupt 4
{
RI=0;//接受到上位机传来的地址帧时RI会自动置1,所以先清零
ES=0; //暂时不接受数据,建立一对一通信
if(SBUF!=Local_addr)
ES=1; //若非本机地址,继续地址监听 第一步:接受主机发来的地址(SM2=1)
else
{
SM2=0;//取消地址监听,可以接受数据帧
SBUF=Local_addr;//从机地址回发
while(TI!=1); TI=0; //从机地址发出去 第二步:回发应答信号 while(RI!=0); RI=0;//因为前面已经将RI置0
/*对接受到的数据进行分析判断*/
if(RB8==1)
{ LED=0;SM2=1;ES=1;}//复位信号,恢复地址监听
else
{
command=SBUF;//接受命令 第三步:接受主机发来采集温湿度信号的命令
if(command==ReadTH)
{
send_data();
} //发送的数据为6个字节,注意此时ES=0,所以对本中断不影响
//第四步:发送温湿度数据 SM2=1;ES=1;//恢复地址监听
} }我在这里面定义了LED,但是LED就是亮...
串口中总是DCD、DSR变成红色,请问这是什么问题