大家好:
我用VS2005弄的串口程序,每次发18个数,我短路串口线后,测试时发现在ARM板WINCE下程序出错,如果每次发一个发送接收正常,每次发2个数就不行,但在PC机上运行时,每次发18个数,发送接收都正常.不知是怎么回事,希望大家指点一下.我也觉得是平台不同所致,但具体情况就不知道了.以下是代码:
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 clz
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int sum2 = 0;
int clz = 0;
int clz1 = 0;
int count_timer = 18;
private void button1_Click(object sender, EventArgs e)
{
//start send timer2.Enabled = true;
timer1.Enabled = true; } private void button2_Click(object sender, EventArgs e)
{
//stop send
timer2.Enabled = false;
timer1.Enabled = false;
textBox2.Text = "共发送" + d; textBox1.Text = "共收到" + b;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{ } private void textBox2_TextChanged(object sender, EventArgs e)
{ } private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int data = 0;
int sum3 = 0;
for (int i = 0; i < count_timer; i++)
{
data= serialPort1.ReadByte();
sum3 = sum3+data-48; data = serialPort1.ReadByte();
}
sum2 = sum3; ; b = b + 1;
serialPort1.Close();
} private void timer1_Tick(object sender, EventArgs e)
{
textBox1.Text = " 收到" + sum2;
} private void timer2_Tick(object sender, EventArgs e)
{
serialPort1.Open();// serialPort2.Open();
int sum1 = 0; for (int i = 0; i < count_timer; i++)
{
a = a + 1; if (a == 10) { a = 0; }
sum1 = sum1 + a;
serialPort1.WriteLine(a.ToString());
}
d = d + 1;
textBox2.Text = " 发送" + sum1; label1.Left -= 8;
if (label1.Right < 0) { label1.Left = this.Width; } } private void Form1_Load(object sender, EventArgs e)
{ serialPort1.PortName = "COM1";
serialPort1.BaudRate = 19200;
serialPort1.ReadTimeout = 5000;
serialPort1.ReceivedBytesThreshold = 18;
serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
} private void label1_ParentChanged(object sender, EventArgs e)
{ }
}
}
我用VS2005弄的串口程序,每次发18个数,我短路串口线后,测试时发现在ARM板WINCE下程序出错,如果每次发一个发送接收正常,每次发2个数就不行,但在PC机上运行时,每次发18个数,发送接收都正常.不知是怎么回事,希望大家指点一下.我也觉得是平台不同所致,但具体情况就不知道了.以下是代码:
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 clz
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int sum2 = 0;
int clz = 0;
int clz1 = 0;
int count_timer = 18;
private void button1_Click(object sender, EventArgs e)
{
//start send timer2.Enabled = true;
timer1.Enabled = true; } private void button2_Click(object sender, EventArgs e)
{
//stop send
timer2.Enabled = false;
timer1.Enabled = false;
textBox2.Text = "共发送" + d; textBox1.Text = "共收到" + b;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{ } private void textBox2_TextChanged(object sender, EventArgs e)
{ } private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int data = 0;
int sum3 = 0;
for (int i = 0; i < count_timer; i++)
{
data= serialPort1.ReadByte();
sum3 = sum3+data-48; data = serialPort1.ReadByte();
}
sum2 = sum3; ; b = b + 1;
serialPort1.Close();
} private void timer1_Tick(object sender, EventArgs e)
{
textBox1.Text = " 收到" + sum2;
} private void timer2_Tick(object sender, EventArgs e)
{
serialPort1.Open();// serialPort2.Open();
int sum1 = 0; for (int i = 0; i < count_timer; i++)
{
a = a + 1; if (a == 10) { a = 0; }
sum1 = sum1 + a;
serialPort1.WriteLine(a.ToString());
}
d = d + 1;
textBox2.Text = " 发送" + sum1; label1.Left -= 8;
if (label1.Right < 0) { label1.Left = this.Width; } } private void Form1_Load(object sender, EventArgs e)
{ serialPort1.PortName = "COM1";
serialPort1.BaudRate = 19200;
serialPort1.ReadTimeout = 5000;
serialPort1.ReceivedBytesThreshold = 18;
serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
} private void label1_ParentChanged(object sender, EventArgs e)
{ }
}
}
解决方案 »
- 实达(start)打印机控制
- 一 个页面的前台textbox1.text的数据 怎么传到另一个页面的后台页面(CS文件
- 写一个C#程序测试调用方法的时间
- winform启动时怎样先显示窗体,然后再加载窗体中表格的内容?
- C#关于数据库操作(新手SQL2000)
- 如何写出一个好的技术文档??
- 如何将WindowsForm中dataGrid中的数据导入Excel文件???
- 怎么从Clipboard保存未知格式数据,在用户程序使用Clipboard后恢复原数据
- 菜鸟求救,关于Web中对话框的问题
- 报表中碰到的几个棘手的问题?
- 检测.Net Framework运行环境
- gridview导出excel2007,中文乱码
这个我在PC机上运行了,收发都对,只是一到ARM上就完了,实在是搞不懂了.
把时钟去了,手动发也一样.
三个串口都试过了,全不行,会不会是设置呢,我是新建 --项目--Vc#--智能设备--WINCE ---设备应用程序