3532|5

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

以下是我的程序,调不通 [复制链接]

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;
using System.Threading;

namespace TestSerialPort
{
    public partial class frmTESTSerialPort : Form
    {
        //实例化串口对象(默认:COM1,9600,e,8,1)                        
        SerialPort myserialPort = new SerialPort();

        //串口控件初始化
        public frmTESTSerialPort()
        {
            InitializeComponent();
        }

        //窗口载入
        private void frmTESTSerialPort_Load(object sender, EventArgs e)
        {
            //更改参数
            myserialPort.PortName = "COM1 ";
            myserialPort.BaudRate = 9600;
            myserialPort.Parity = Parity.None;
            myserialPort.DataBits = 8;
            myserialPort.StopBits = StopBits.One;
            myserialPort.ReadBufferSize = 4096;
            //上述步骤可以用在实例化时调用SerialPort类的重载构造函数
            //SerialPort serialPort = new SerialPort("COM1 ", 9600, Parity.None, StopBits.One);
        }

        //开启串口
        private void button1_Click(object sender, EventArgs e)
        {
            //打开串口(打开串口后不能修改端口名,波特率等参数,修改参数要在串口关闭后修改)
            if (myserialPort.IsOpen == false)
            {
                myserialPort.Open();
                MessageBox.Show("串口开启成功");
            }
        }

        //发送数据
        private void button2_Click(object sender, EventArgs e)
        {
            //发送数据
            SendStringData(myserialPort);
        }

        //发送字符串数据
        private void SendStringData(SerialPort serialPort)
        {
            serialPort.Write(txtSend.Text);
        }

        //发送二进制数据
        private void SendBytesData(SerialPort serialPort)
        {
            byte[] bytesSend = System.Text.Encoding.Default.GetBytes(txtSend.Text);
            serialPort.Write(bytesSend, 0, bytesSend.Length);
        }

        //接收\读取数据
        public void button3_Click(object sender, EventArgs e)
        {
            //同步阻塞接收数据线程
            Thread threadReceive = new Thread(new ThreadStart(SynReceiveData));
            threadReceive.Start(serialPort);
            //也可用异步接收数据线程
            //Thread   threadReceiveSub   =   new   Thread(new   ParameterizedThreadStart(AsyReceiveData));
            //threadReceiveSub.Start(serialPort);
        }

        //同步阻塞读取
        private static void SynReceiveData(object serialPortobj)
        {
            MessageBox.Show("同步阻塞读取线程启动");
            SerialPort serialPort = (SerialPort)serialPortobj;
            System.Threading.Thread.Sleep(0);
            try
            {
                //阻塞到读取数据或超时(这里为1分钟)
                serialPort.ReadTimeout = 60000;
                int bytesRead = serialPort.BytesToRead;
                byte[] bytesData = new byte[bytesRead];
                for (int i = 0; i <= bytesRead - 1; i++)
                {
                    bytesData = Convert.ToByte(serialPort.ReadByte());
                }
                txtReceive.Text = txtReceive.Text + System.Text.Encoding.Default.GetString(bytesData, 0, bytesRead);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                //处理超时错误
            }
        }

        //异步读取
        private void AsyReceiveData(object serialPortobj)
        {
            SerialPort serialPort = (SerialPort)serialPortobj;
            System.Threading.Thread.Sleep(500);
            try
            {
                txtReceive.Text = txtReceive.Text + serialPort.ReadExisting();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                //处理错误
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            if (myserialPort.IsOpen == true)
            {
                myserialPort.Close();
                MessageBox.Show("串口关闭成功");
            }
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }
               
    }

    static class Program
    {
        static void Main()
        {
            Application.Run(new frmTESTSerialPort());
        }
    }
}

最新回复

各位大侠,还望不吝赐教   详情 回复 发表于 2007-11-5 11:00
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
LZ这样问问题估计回的人不会很多
你不能让别人帮你调程序吧
你说调不通,在哪个地方调不通啊,自己首先定位一下啊,才能有的放矢啊
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
楼主不想说说是什么环境、实现什么功能、具体的问题是什么吗?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
想写一个类似 串口调试助手 那样
能不断地从PC的串口接收接收数据,并且实时显示的小程序。
请各位大哥大侠帮忙。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 
我的目的是开发一个:wince 程序
能实时从串口接收设备。
开发环境是:vs2005
采用的语言环境:c#。

因为是初涉此行,c#也不太熟悉。
所以先不考虑wince和PC的区别,先写个PC下的程序,再想法往WINCE移植

 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
各位大侠,还望不吝赐教
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表