打印

串口通信,VB单片机发给上位机程序接收【有程序】

[复制链接]
7419|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kufan|  楼主 | 2013-1-13 16:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kufan 于 2013-1-13 20:21 编辑

VB上位机源码.zip (9.88 KB)
18b20测温数码管显示实验.zip (42.11 KB)
AT89S52
下面是下位机部分程序(其他功能已完毕)
void init_serialcomm( void )
{
SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
PCON |= 0x80 ; //SMOD=1;
TH1 = 0xFA ; //Baud:9600 fosc=11.0592MHz
IE |= 0x90 ; //Enable Serial Interrupt
TR1 = 1 ; // timer 1 run
}
//串口发送一个字节
void Uart_SendChar(unsigned char dat)
{
SBUF = dat; //待发送的数据写入缓冲区
while(!TI); //等待发送完成
TI = 0; //清零发送标志位
}



/*-------------------------------------------------------------*/
//串口发送一个字符串
void Uart_SendString(unsigned char *datc)
{     
    while(*datc != '\0')
        {
            Uart_SendChar(*datc);
              datc++;
        }
}



//串口接收中断函数
void serial () interrupt 4 using 3
{
if (RI) //RI==开始接收
{
unsigned char ch;
RI = 0 ; //软件RI=0
ch=SBUF;
if (ch> 1 )
{
count3= 0 ;
inbuf2[count3]=ch;
}
else
{
count3++;
inbuf2[count3]=ch;
}
}
}   
下面是VB部分     mscomm  setting部分已设置了9600,n,8,1
Private Sub cmdConnect_Click()

    '查找指定端口
    Dim i As Integer
    For i = 1 To 16
        If optComPort(i - 1).Value = True Then
            ComPort.CommPort = i
            Exit For '跳出循环
        End If
    Next
   
    If ComPort.PortOpen = True Then ComPort.PortOpen = False  '如果端口打开则先关闭
    ComPort.PortOpen = True  '然后打开
   
    '状态信息
    lblStatus = "已连接..."
    ''Text1.Text = "EXIT"
   
   
    cmdConnect.Enabled = False
    cmdDisconnect.Enabled = True
   
End Sub

Private Sub cmdDisconnect_Click()

    '断开连接
    If ComPort.PortOpen = True Then ComPort.PortOpen = False
   
    lblStatus = "已断开..."
   
    cmdDisconnect.Enabled = False
    cmdConnect.Enabled = True
   
End Sub

Private Sub cmdExit_Click()

    '先断开端口再退出程序
    If ComPort.PortOpen = True Then ComPort.PortOpen = False
        Unload Me
    End

End Sub



Private Sub Form_Load()
    Dim iComPort As Integer
    '错误陷阱
    On Error GoTo CommErrorHandle
    '尝试列表存在端口
    For iComPort = 1 To 16
        ComPort.CommPort = iComPort '指定端口号
        If ComPort.PortOpen = True Then ComPort.PortOpen = False '如打开先关闭
        ComPort.PortOpen = True  '尝试打开
        ComPort.PortOpen = False '确认成功关闭
    Next
   
    '端口配置
    ComPort.InputLen = 1    '1 个字符产生接收事件
    ComPort.RThreshold = 1  '1 个字符产生接收事件
   
    '跳出错误
    Exit Sub
   
CommErrorHandle:

    '68   = 设备无效
    '8002 = 端口号无效
    '8012 = 端口无法打开
    If Err = 68 Or Err = 8002 Or Err = 8012 Then
        '端口无效时则禁止单击连接按钮
        optComPort(iComPort - 1).Enabled = False
    End If
   
    '继续错误
    Resume Next
   
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

    '断开连接并退出
    If ComPort.PortOpen = True Then ComPort.PortOpen = False

End Sub


Private Sub Text1_Change()
If ComPort.PortOpen = True Then
Text1.Text = ComPort.Input
End If

End Sub

单片机发送的灯不断闪,证明是发送的,现倾向于接收端出现错误,附上位机程序


相关帖子

沙发
airwill| | 2013-1-13 20:01 | 只看该作者
是否借助示波器, 串口调试工具来帮助你, 寻找问题到底真哪里?

使用特权

评论回复
板凳
kufan|  楼主 | 2013-1-13 20:12 | 只看该作者
airwill 发表于 2013-1-13 20:01
是否借助示波器, 串口调试工具来帮助你, 寻找问题到底真哪里?

很困扰啊,求帮助

使用特权

评论回复
地板
lzqxs89| | 2013-1-13 23:44 | 只看该作者
airwill 发表于 2013-1-13 20:01
是否借助示波器, 串口调试工具来帮助你, 寻找问题到底真哪里?

关于搞单片机通信方面的开发,是不是要求自己会写通信调试的上位机程序啊?

使用特权

评论回复
5
airwill| | 2013-1-14 08:49 | 只看该作者
lzqxs89 发表于 2013-1-13 23:44
关于搞单片机通信方面的开发,是不是要求自己会写通信调试的上位机程序啊? ...

我认为并没有这个要求, 毕竟是两个领域.
不过有时间和机会的话, 适当了解和学习一下, 对单片机编程也有帮助.
很想帮一下楼主, 不过我的上位机用的是 C++ Builder. 没有玩过 VB.

使用特权

评论回复
6
kufan|  楼主 | 2013-1-14 09:05 | 只看该作者
airwill 发表于 2013-1-14 08:49
我认为并没有这个要求, 毕竟是两个领域.
不过有时间和机会的话, 适当了解和学习一下, 对单片机编程也有帮 ...

坛子里有玩过VB的麽。版主没玩过没,我看估计没人帮我了

使用特权

评论回复
7
airwill| | 2013-1-14 09:25 | 只看该作者
kufan 发表于 2013-1-14 09:05
坛子里有玩过VB的麽。版主没玩过没,我看估计没人帮我了 ...

坛子里的高人有的是, 不过未必都有时间.
其实:
1. 书本是最好的老师.
2. 要善于利用工具来帮助自己
建议借助示波器, 串口调试工具来帮助你寻找问题

使用特权

评论回复
8
江枫渔火| | 2013-1-14 09:39 | 只看该作者
网上这种资料好多,可以上网搜索。
首先要知道具体什么问题,什么原因。可以通过调试很容易确定。最好你去下载一个串口监视工具,去看看系统是否如你所愿的让你控制了指定端口。如果没有监视工具,那就自己查看自己上位机软件中,具体打开了哪个串口,参数是否准确。如果串口都没设置对,那搞什么都白费

使用特权

评论回复
9
airwill| | 2013-1-14 12:12 | 只看该作者
推荐楼主去看一看这一帖:  https://bbs.21ic.com/icview-286228-1-1.html

使用特权

评论回复
10
bruceding| | 2013-1-14 13:04 | 只看该作者
Private Sub Text1_Change()
If ComPort.PortOpen = True Then
Text1.Text = ComPort.Input
End If

这样接收?用text change触发?

建议先用串口大师接收看看,以判断到底是单片机还是上位机的问题。

使用特权

评论回复
11
T_X_T| | 2013-1-14 16:07 | 只看该作者
上位机用MFC弄的

使用特权

评论回复
12
眼不见心不烦| | 2013-1-29 14:57 | 只看该作者
你这个上位机的VB程序 不需要MScomm这个控件吗 我看你的VB工程里面好像没有用啊

使用特权

评论回复
13
加油吧小鱼儿| | 2013-1-29 21:14 | 只看该作者

使用特权

评论回复
14
fengjiex| | 2013-8-6 09:09 | 只看该作者
不知楼主“trdata”这个数组是什么意思?

使用特权

评论回复
15
qzc13457| | 2013-8-6 09:58 | 只看该作者
先用串口助手调好了再写上位机

使用特权

评论回复
16
xiaolong2013| | 2014-5-30 16:07 | 只看该作者
很不错

使用特权

评论回复
17
fbzsn| | 2015-4-8 22:44 | 只看该作者
谢谢分享!学习学习。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1

帖子

0

粉丝