发表于:2011/12/20 16:53:31
#0楼
我想用VB发送一个字节数组
ByteBuf(1) = &H32
ByteBuf(2) = &H12
ByteBuf(3) = &H22
ByteBuf(4) = &H62
ByteBuf(5) = &H42
ByteBuf(6) = &H52
其中ByteBuf(1) = &H32作为单片机中接受的起始判别字节,当单片机接收到&H32时就开始接收数据,接收完以后把接收的
ByteBuf(2) = &H12
ByteBuf(3) = &H22
ByteBuf(4) = &H62
ByteBuf(5) = &H42
ByteBuf(6) = &H52
返回到VB中显示
VB中代码:
Private Sub cmdsend_Click()
Dim ByteBuf(1 To 6) As Byte
ByteBuf(1) = &H32
ByteBuf(2) = &H12
ByteBuf(3) = &H22
ByteBuf(4) = &H62
ByteBuf(5) = &H42
ByteBuf(6) = &H52
Comm1.Output = ByteBuf
End Sub
Private Sub Form_Load()
Comm1.InputMode = comInputModeBinary
Comm1.InputLen = 1
''Comm1.InBufferCount = 0
''Comm1.OutBufferCount = 0
Comm1.RThreshold = 1
Comm1.PortOpen = True
End Sub
Private Sub Comm1_OnComm()
Select Case Comm1.CommEvent
Case comEvReceive
Dim GetBuf() As Byte
Dim temp As Variant
temp = Comm1.Input
GetBuf = temp
For i = LBound(GetBuf) To UBound(GetBuf)
txtrecv.Text = txtrecv.Text + Hex(GetBuf(i)) + Chr(32)
Next i
Comm1.InBufferCount = 0
End Select
End Sub
单片机中代码:
#include <reg52.h>
sbit LED = P1^0;
unsigned char UART_buff,recvCount;
unsigned char recvBuf[];
unsigned char i;
bit recvOK = 0;
void uatrnint()
{
SCON = 0x50; //串口方式1, 8-n-1, 允许接收.
TMOD = 0x20; //T1方式2
TH1 = 0xFD; //9600bps@11.0592MHz
TL1 = 0xFD;
TR1 = 1;
ES = 1; //开中断.
EA = 1;
}
void main ()
{
uatrnint();
while(1)
{
if (recvOK == 1)
{
for (i=1;i<6;i++)
{
SBUF =recvBuf[i]; while (!TI);
TI=0;
}
recvOK = 0;
}
}
}
void ser_int (void) interrupt 4
{
if(RI)
{
RI = 0;
UART_buff = SBUF; //接收
if (recvCount==0)
{
if(UART_buff==0x32)
recvCount++;
else
recvCount=0;
}
else if (recvCount>0&&recvCount<6)
recvBuf[recvCount++]=UART_buff;
else
{
recvCount=0;
recvOK=1;
}
}
}
可是在VB中需要单击cmdsend键两次,接收文本才有数据显示,应该是单击一次接收文本就有数据显示才对,我短接了电脑
232口的2。3脚,单击一次就收到数据,我觉得应该是单片机程序问题,望前辈们资料!
谢谢~~~
ByteBuf(1) = &H32
ByteBuf(2) = &H12
ByteBuf(3) = &H22
ByteBuf(4) = &H62
ByteBuf(5) = &H42
ByteBuf(6) = &H52
其中ByteBuf(1) = &H32作为单片机中接受的起始判别字节,当单片机接收到&H32时就开始接收数据,接收完以后把接收的
ByteBuf(2) = &H12
ByteBuf(3) = &H22
ByteBuf(4) = &H62
ByteBuf(5) = &H42
ByteBuf(6) = &H52
返回到VB中显示
VB中代码:
Private Sub cmdsend_Click()
Dim ByteBuf(1 To 6) As Byte
ByteBuf(1) = &H32
ByteBuf(2) = &H12
ByteBuf(3) = &H22
ByteBuf(4) = &H62
ByteBuf(5) = &H42
ByteBuf(6) = &H52
Comm1.Output = ByteBuf
End Sub
Private Sub Form_Load()
Comm1.InputMode = comInputModeBinary
Comm1.InputLen = 1
''Comm1.InBufferCount = 0
''Comm1.OutBufferCount = 0
Comm1.RThreshold = 1
Comm1.PortOpen = True
End Sub
Private Sub Comm1_OnComm()
Select Case Comm1.CommEvent
Case comEvReceive
Dim GetBuf() As Byte
Dim temp As Variant
temp = Comm1.Input
GetBuf = temp
For i = LBound(GetBuf) To UBound(GetBuf)
txtrecv.Text = txtrecv.Text + Hex(GetBuf(i)) + Chr(32)
Next i
Comm1.InBufferCount = 0
End Select
End Sub
单片机中代码:
#include <reg52.h>
sbit LED = P1^0;
unsigned char UART_buff,recvCount;
unsigned char recvBuf[];
unsigned char i;
bit recvOK = 0;
void uatrnint()
{
SCON = 0x50; //串口方式1, 8-n-1, 允许接收.
TMOD = 0x20; //T1方式2
TH1 = 0xFD; //9600bps@11.0592MHz
TL1 = 0xFD;
TR1 = 1;
ES = 1; //开中断.
EA = 1;
}
void main ()
{
uatrnint();
while(1)
{
if (recvOK == 1)
{
for (i=1;i<6;i++)
{
SBUF =recvBuf[i]; while (!TI);
TI=0;
}
recvOK = 0;
}
}
}
void ser_int (void) interrupt 4
{
if(RI)
{
RI = 0;
UART_buff = SBUF; //接收
if (recvCount==0)
{
if(UART_buff==0x32)
recvCount++;
else
recvCount=0;
}
else if (recvCount>0&&recvCount<6)
recvBuf[recvCount++]=UART_buff;
else
{
recvCount=0;
recvOK=1;
}
}
}
可是在VB中需要单击cmdsend键两次,接收文本才有数据显示,应该是单击一次接收文本就有数据显示才对,我短接了电脑
232口的2。3脚,单击一次就收到数据,我觉得应该是单片机程序问题,望前辈们资料!
谢谢~~~
[此贴子已经被作者于2011/12/20 16:54:27编辑过]
不懂可以问,但更重要的是自己去学,问之前应该自己多想想