Malay
颜色选择
阳光橙
深夜黑
天空蓝
葡萄紫
薄荷绿
深海蓝
首页
论坛
佳礼报道
新闻
搜索
18018
查看
105
回复

电脑串行端口(serial port) 和单晶片通讯

[复制链接]

楼主: fritlizt       显示全部楼层   阅读模式

发表于 11-4-2010 02:01 PM | 显示全部楼层
回复 60# xkore

Delegate Sub _TextBoxMsg(ByVal Text As String)

Private Sub _TextBox(ByVal Text As String)
    TextBox1.Text = Text
End Sub

Private Sub ToTextBox(ByVal Text As String)
    Dim Str As _TextBoxMsg = New _TextBoxMsg(AddressOf _TextBox)
    Me.Invoke(Str, New Object() {Text})
End Sub

'确保串口缓冲区是有资料的
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If (SerialPort1.ReadBufferSize > 1) Then
        ToTextBox(SerialPort1.ReadChar)
    End If
End Sub

'开启串口,timer1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If SerialPort1.IsOpen = False Then
        SerialPort1.Open()
        Timer1.Enabled = True
    End If
End Sub




_TextBoxMsg,_TextBox,ToTextBox 这3个组合是解决textbox显示更新资料的方法。。。
Timer1就是处理串口接收和文字显示驱动。。。。。


这下谜团解开了吧。。。。


这些都是沿着你的思路,而改编的。。。。


以这个方法来做是有缺陷的,textbox显示串口资料都是非最新。。。。。

你可以做个测试。。。。

当timer 中断是 SerialPort1.ReadBufferSize 的count 是多少。。。。。

评分

参与人数 1积分 +5 收起 理由
fritlizt + 5 热心解答。

查看全部评分

回复

使用道具 举报

楼主
 楼主| 发表于 11-4-2010 07:44 PM | 显示全部楼层
回复 61# wkloh


   

高手。
希望你能继续热心。 帮忙需要的人。 我一个人settle不到。 +_+"
还希望能把这个贴交给你打理打理。
回复

使用道具 举报

楼主
 楼主| 发表于 11-4-2010 07:46 PM | 显示全部楼层
回复 60# xkore


   

不错, 至少有自己试试看,才把问题抛出来。 好过一来就把问题抛出来, 功课也没做的贴。
回复

使用道具 举报

楼主
 楼主| 发表于 11-4-2010 10:28 PM | 显示全部楼层
本帖最后由 fritlizt 于 11-4-2010 10:53 PM 编辑

回复 59# xkore


   

楼主。 请给我看你的firmware.单看software看不出什么
想看看你mcu怎么给你电脑data.
顺便把你的vb source code放上来看看。
否则的话只是看你的timer sub很难断定是什么问题。
回复

使用道具 举报

楼主
 楼主| 发表于 11-4-2010 11:16 PM | 显示全部楼层
回复 60# xkore


   

等楼主的firmware和vb source code.
和wkloh打了赌。 嘻嘻。

wkloh认为你的问题时因为event trigger关系, 导致textbox不能显示最新data. 他提出了解决方法。
他的解决方法也是有缺陷。担保读到,不过未必是最新。

我的看法是, 你的mcu给data 太快了。 你用read char.由于read char一次只能read一个byte.如果在interrupt其间你的mcu给你100个data,这样你的vb就要interrupt100次才能read到最新data.如此类推, 如果mcu一直来。 你的vb就要read到天亮才能read到现在的data。我没有提供solution.不过最简单, 不是最好的。 就是在readchar前clear serialport input buffer,再用readchar来收你mcu的data。我觉得如果用wkloh的方法, 我觉得不能solve你的case,而且会是一样的状况。

所以我和wkloh下了100分做赌注。。。。。。。。。。。楼主快点浮上来。。。!!!!!!
回复

使用道具 举报

发表于 12-4-2010 02:10 PM | 显示全部楼层
xkore,快些把你的firmware和vb source code放上来。。。。。

我在等版主给我加一百分!!!!
回复

使用道具 举报

发表于 13-4-2010 04:53 PM | 显示全部楼层
这是最simple 的 transmit program

                org 0h

                mov tmod,#20h
                mov th1,#-3
                mov scon,#50h
                setb tr1

               
                mov p1,#0ffh
start:        mov a,p1
               
               
                mov sbuf,a
here:                jnb ti,here
                clr ti
                jmp start
回复

使用道具 举报

发表于 13-4-2010 04:58 PM | 显示全部楼层
VB 的如#57

也许readchar 前真的该clear buffer..
迟些再试看看!!
回复

使用道具 举报

发表于 14-4-2010 10:48 PM | 显示全部楼层
终于进入正题。 电脑串行端口(serial port) 和单晶片通讯.

之前是loopback testing,send什么, 收到什么 ...
fritlizt 发表于 6-3-2010 02:14 PM


想问你一个问题。。。为什么MCU要用10Mhz的OSC??。。。
回复

使用道具 举报

发表于 15-4-2010 10:25 AM | 显示全部楼层
我还有一个问题。。。我build的时候fail。。。
是那个include USART.h有问题。。。好像是locat不到file。。。
我是用mplab,PIC16F887的。。。。include pic18cxxx 哪里我换成include pic.h。。。
哪里错?。。还是需要那个USART的external file?。。我要去哪里拿哦?。。
回复

使用道具 举报

发表于 18-4-2010 12:30 PM | 显示全部楼层
我和fritliz打赌竟然输了。。。

xkore 面对的问题是。。。textbox1不能显示串口最新接受到的资料。serial input buffer 没有清除造成的。


我用stm32 MCU 做了个小实验,代码如下:

while (1)
{
          printf("%c",a);
        if(a<255)a++;
        else
        {
                a=0;
        }
  }

之前vb.net用的serialport1.readbuffersize是不对的,换成serialport1.bytestoread。。

VB.net 代码:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If SerialPort1.IsOpen = False Then
            SerialPort1.Open()
            Timer1.Enabled = True
        End If
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If (SerialPort1.BytesToRead > 1) Then
            Dim data(SerialPort1.BytesToRead) As Byte
            SerialPort1.Read(data, 0, data.Length)
            Label1.Text = data.Length - 1
            'ToTextBox(Convert.ToInt16(data(SerialPort1.BytesToRead - 1)).ToString)
            TextBox1.Text = Convert.ToInt16(data(data.Length - 2)).ToString
        End If

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If SerialPort1.IsOpen = True Then
            SerialPort1.Close()
            Timer1.Enabled = False
        End If
    End Sub

此方法的运用,只限在于资料非event回传形式。

评分

参与人数 1积分 +25 收起 理由
fritlizt + 25 热心解答。

查看全部评分

回复

使用道具 举报

发表于 19-4-2010 08:59 PM | 显示全部楼层
xkore,你试用过我发上来的VB.net 代码了吗!!!!!!!


给点反应好吧!!!!!!!
回复

使用道具 举报

发表于 19-4-2010 09:04 PM | 显示全部楼层
回复 69# RudeRabbit

不同MCU有不同OSC要求,请查阅你所选用的芯片手册。。。。。。
回复

使用道具 举报

楼主
 楼主| 发表于 21-4-2010 06:35 PM | 显示全部楼层
回复 71# wkloh


   
老大果然有科学家精神。虽然答案和你推测的有点出入,还是加分给你了。热心解答。 有讨论才会进步。。。。。
没有的话论坛就会很闲了。。。嘻嘻。

那个那个 xkore几时上来试试看啊???????
花儿都谢了啊。。。。。。。
回复

使用道具 举报

楼主
 楼主| 发表于 21-4-2010 06:37 PM | 显示全部楼层
回复 70# RudeRabbit


   

c18是给18f series的pic mcu. 16f不能。。。。
你要用其他编译器。hitech, ccs c等的。
回复

使用道具 举报

发表于 22-4-2010 08:31 AM | 显示全部楼层
本帖最后由 wkloh 于 22-4-2010 08:34 AM 编辑

我看 xkore 还在绞尽脑汁把vb。net串口资料显示到ASP.net网页上!!!!


在 “软件研发专区 » 网页研发” 不小心看到的!!!!!!

不过在此希望xkore能积极上来,不然的话关心你的进展的人心会慢慢冷却哦!
回复

使用道具 举报

发表于 18-5-2010 11:11 PM | 显示全部楼层
回复  RudeRabbit


   

c18是给18f series的pic mcu. 16f不能。。。。
你要用其他编译器。hitech ...
fritlizt 发表于 21-4-2010 06:37 PM


我是用hitech的。。。我找的example和学校给的tutorial都试了。。。就是给我同一个error。。。
building fail。。。。can't open include file "usart.h": No such file or directory


有谁可以帮帮我啊。。。
回复

使用道具 举报

楼主
 楼主| 发表于 19-5-2010 08:17 AM | 显示全部楼层
回复 77# RudeRabbit


   

hitech 和mplab c18不一样。 你可能要找hitech的tutorial.
不一样的compiler写法也可能稍微有点不一样, 虽然都是c programming.
这给贴是c18教学。
如果可以, 换去c18也不错,免费。 加上很多microchip library都是以c18作为基础的。
回复

使用道具 举报

发表于 19-5-2010 10:18 AM | 显示全部楼层
回复  RudeRabbit


   

hitech 和mplab c18不一样。 你可能要找hitech的tutorial.
不一样的compi ...
fritlizt 发表于 19-5-2010 08:17 AM



这点我也发觉到很多教学都是PIC18的。。。其实有考虑想换。。。
可是有必要吗?。。而却我也不是很清楚要用PIC18的那个IC。。。

哦。。我那个问题解决了。。。可是现在新的问题是connect了hyper terminal。。。没有东西出来。。。
还不知道是program还是connection问题。。
回复

使用道具 举报

楼主
 楼主| 发表于 19-5-2010 02:10 PM | 显示全部楼层
回复 79# RudeRabbit


   

很难回答你必要吗。
看你要怎样的mcu.能符合你要做到的东西就可以了。
用pic16也是可以很好的完成任务。 看什么任务而以。
pic16我都用ccsc,不错, built in library非常丰富。简略很多麻烦的low level程序的编写 。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册 | 登入

本版积分规则

 WeChat
 CARI App
Get it FREE Google play
 Instagram
cari_malaysia
FOLLOW
- 版权所有 © 1996-2019 Cari Internet Sdn Bhd 佳礼网络有限公司 (483575-W) -
Private Cloud provided by IPSERVERONE
0.177148s Gzip On
快速回复 返回顶部 返回列表