none
掌上电脑串口接收数据如何实现? RRS feed

  • 问题

  • 最近在做PC与掌上电脑的串口通讯。
    现在能够实现掌上电脑发送数据,PC能够接收到。
    而PC发送数据,掌上电脑接收不到。
    同样的程序代码,在PC上能够实现发送和接收。
    不知原因在哪?
    请教!
    代码如下:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports;

    namespace DeviceApplication4
    {
        public partial class Form1 : Form
        {
            SerialPort ComPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
            public Form1()
            {
                InitializeComponent();
            }
         

            private void button1_Click(object sender, EventArgs e)
            {
                SendData("1");
                this.label1.Text = "我按了第一个按钮";
            }

            private void button2_Click(object sender, EventArgs e)
            {
                SendData("2");
                this.label1.Text = "我按了第二个按钮";
            }

            private void button3_Click(object sender, EventArgs e)
            {
                SendData("3");
                this.label1.Text = "我按了第三个按钮";
            }

            private void button4_Click(object sender, EventArgs e)
            {
                SendData("4");
                this.label1.Text = "我按了第四个按钮";
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                ComOpen();
                ComPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
            }
            //发送数据
            private void SendData(string s)
            {
                if (ComPort.IsOpen == true) ComPort.Close();
                try
                {
                    ComPort.Open();
                    if (ComPort.IsOpen)//检查串口是否打开
                    {

                        // 发送用户的文本到串口
                        ComPort.Write(s);

                    }

                    else
                    {
                        MessageBox.Show("可能串口没有打开!", "提示");
                    }
                }
                catch
                {

                    MessageBox.Show("出现异常请重新启动程序!", "提示");
                }
            }

            private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                // 读取缓冲区的数据
                string data = ComPort.ReadExisting();
                // 显示读取的数据到数据窗口
                updateReceiveText(data);
            }

         
            public void updateReceiveText(string msg)
            {

                this.textBox1.Invoke(new EventHandler(delegate
                    {
                        //this.textBox1.AppendText(msg);
                        this.textBox1.Text = this.textBox1.Text + msg;
                        this.textBox1.ScrollToCaret();
                    }));
            }
            private void ComOpen()
            {
                if (ComPort.IsOpen == true) ComPort.Close();

                // 打开串口
                try
                {
                    ComPort.Open();
                }
                catch
                {
                    MessageBox.Show("没有发现此串口或串口可能被占用!", "提示");
                }


            }

            private void button5_Click(object sender, EventArgs e)
            {
                this.textBox1.Text = " ";
            }
        }
    }
    2010年1月13日 12:49

答案

全部回复