登录
首页 单片机论坛
回帖 发帖
正文

主题:请教单片机与VB通信问题(请指教)

点击:602 回复:6

我想用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
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
11-12-20 16:53
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;
if(recvCount==6){recvCount=0;
recvCount=0;
recvOK=1;
}
}
}
11-12-22 12:26
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;
if(recvCount==6){recvCount=0;
recvCount=0;
recvOK=1;
}
}
}
11-12-22 12:29
表情谢谢啦!哎~我想了好就都没有搞明白!
11-12-23 13:57
4楼
该帖内容不符合相关规定!
11-12-23 17:08
看一看。。。。
12-05-30 21:06
看了好久没弄明白
12-07-07 09:17

工控新闻

更多新闻资讯