中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

单片机论坛

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 单片机论坛 → 浏览主题: 请教单片机与VB通信问题(请指教)
发表新帖 回复该主题
回帖:6个,阅读:526 [上一页] [1] [下一页]
* 帖子主题:

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

分享到
891
515324809
文章数:51
年度积分:50
历史总积分:891
注册时间:2011/1/14
发站内信
发表于: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脚,单击一次就收到数据,我觉得应该是单片机程序问题,望前辈们资料!
谢谢~~~




[此贴子已经被作者于2011/12/20 16:54:27编辑过]
不懂可以问,但更重要的是自己去学,问之前应该自己多想想
1058
zhgkwfxs
文章数:160
年度积分:50
历史总积分:1058
注册时间:2010/7/13
发站内信
发表于:2011/12/22 12:26:41
#1楼
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;
}
}
}
1058
zhgkwfxs
文章数:160
年度积分:50
历史总积分:1058
注册时间:2010/7/13
发站内信
发表于:2011/12/22 12:29:08
#2楼
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;
}
}
}
891
515324809
文章数:51
年度积分:50
历史总积分:891
注册时间:2011/1/14
发站内信
发表于:2011/12/23 13:57:03
#3楼
谢谢!
表情谢谢啦!哎~我想了好就都没有搞明白!
不懂可以问,但更重要的是自己去学,问之前应该自己多想想
687
805927734
文章数:5
年度积分:50
历史总积分:687
注册时间:2011/12/23
发站内信
发表于:2011/12/23 17:08:12
#4楼
此楼内容不符合板块规定,不予显示! 查看原帖内容>>
17521
ahljj
文章数:3386
年度积分:233
历史总积分:17521
注册时间:2002/3/23
发站内信
发表于:2012/5/30 21:06:30
#5楼
看一看。。。。
600
601061018
文章数:27
年度积分:50
历史总积分:600
注册时间:2012/7/6
发站内信
发表于:2012/7/7 9:17:59
#6楼
看了好久没弄明白
彩屏解决方案 专业研制单片机驱动彩色液晶    武汉中显为您添光彩
面向工业应用的彩色液晶模块研制推广经验,是您值得信赖的选择;
高速刷屏、触控响应、下载图片,彻底改变您对智能显示终端的应用体欢验;
武汉中显科技有限公司欢迎您!
www.viewtech.cn
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

78.0005