RS232串口

 一般个人计算机上都有两个串口。COM1和COM2。这两个串口就是RS232串口。

 232有25芯和9芯串口之分。串口使用ASCII码字符传输,通信使用三根线完成。地线,发送线,和接收线。一根用来发送一根接受,其他线用来握手。

 232串口常用参数设置:

 1.波特率

   用来表示传输速率。即每秒中传输的位数。9600波特率就是每秒传输9600bit数据。波特率与传输距离成反比。波特率越高传输距离越短。

2.数据位

 如果使用标准ASCII码,那么没个数据包是7位,对应到一个字节,应把最高位设置为0.再加上开始停止位,奇偶校验位。一个数据包形式为:开始位.数据0,数据1,数据2……数据7,校验位,停止位。当传输的数据是扩展的ASCII码时,数据位就设置为8位。

3.停止位

 用于表示单个数据包的最后一位。典型值1,1.5,2位。

4.奇偶校验位

  奇偶校验是一种检验但马传输正确性的方法。根据一组二进制数位中的1和0的个数进行校验。

比如:

奇校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如:
1 0110,0101
0 0110,0101
偶校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为偶数,如:
1 0100,0101
0 0100,0101

 

其他的:

 1.RS232传输速率

  RS-232-C标准规定的数据传输速率为50、75、100、150、300、600、1200、2400、4800、9600、19200、38400波特

  按9600波特率来说, 1个起始位 8个数据位 1个停止位,9600/10=960Bytes,每秒钟数据量不超过960字节

 

2.RS232传输距离

 RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的d电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。

3.9芯RS232串口

4.TTL232和RS232C的区别

 逻辑电平不同:TTL232的0是用0v表示。1是用5V表示。RS232的0是用+3V到+15V表示,1是用-3V到-15V表示。

 5.TTL232和RS232如何转换

  很多单机片的串口是TTL串口,电源电压一般是5V,如果要互联的话必须要做转换。通常用Max232芯片


Code:

 1  public partial class Form1 : Form
  2     {
  3         public Form1()
  4         {
  5             InitializeComponent();
  6         }
  7 
  8         SerialPort sp = null;
  9         Thread t = null;
 10         private void Form1_Load(object sender, EventArgs e)
 11         {
 12             Init();
 13         }
 14 
 15         private void Init()
 16         {
 17             cboCOMPort.Items.Clear();
 18             string[] strs = SerialPort.GetPortNames();
 19 
 20             if (strs != null)
 21             {
 22                 cboCOMPort.Items.AddRange(strs);
 23                 cboCOMPort.SelectedIndex = 0;
 24             }
 25             else
 26             {
 27                 MessageBox.Show("无串口");
 28             }
 29 
 30             cboBaudRate.Items.Add("9600");
 31             cboBaudRate.Items.Add("19200");
 32             cboBaudRate.Items.Add("38400");
 33             cboBaudRate.Items.Add("43000");
 34             cboBaudRate.Items.Add("56000");
 35             cboBaudRate.Items.Add("57600");
 36             cboBaudRate.Items.Add("115200");
 37             cboBaudRate.SelectedIndex = 0;
 38 
 39             cboStopBits.Items.Add("0");
 40             cboStopBits.Items.Add("1");
 41             cboStopBits.Items.Add("1.5");
 42             cboStopBits.Items.Add("2");
 43             cboStopBits.SelectedIndex = 1;
 44 
 45             cboDataBits.Items.Add("8");
 46             cboDataBits.Items.Add("7");
 47             cboDataBits.Items.Add("6");
 48             cboDataBits.Items.Add("5");
 49             cboDataBits.SelectedIndex = 0;
 50 
 51             cboParity.Items.Add("");
 52             cboParity.Items.Add("奇校验");
 53             cboParity.Items.Add("偶校验");
 54             cboParity.SelectedIndex = 0;
 55 
 56 
 57         }
 58 
 59         private void btnOpen_Click(object sender, EventArgs e)
 60         {
 61             sp = new SerialPort();
 62             sp.PortName = cboCOMPort.Text.Trim();
 63             sp.BaudRate = Int32.Parse(cboBaudRate.Text.Trim());
 64             float f = Convert.ToSingle(cboStopBits.Text.Trim());
 65             if (f == 0) sp.StopBits = StopBits.None;
 66             else if (f == 1) sp.StopBits = StopBits.One;
 67             else if (f == 2) sp.StopBits = StopBits.Two;
 68             else if (f == 1.5) sp.StopBits = StopBits.OnePointFive;
 69             sp.DataBits = Convert.ToInt16(cboDataBits.Text.Trim());
 70             string s = cboParity.Text.Trim();
 71             if (s.CompareTo("") == 0) sp.Parity = Parity.None;
 72             else if (s.CompareTo("奇校验") == 0) sp.Parity = Parity.Odd;
 73             else if (s.CompareTo("偶校验") == 0) sp.Parity = Parity.Even;
 74             else sp.Parity = Parity.None;
 75 
 76             sp.ReadTimeout = -1;
 77 
 78             try
 79             {
 80                 sp.Open();
 81                 sp.DataReceived+=new SerialDataReceivedEventHandler(sp_DataReceived);
 82                 btnOpen.Enabled = false;
 83                 btnClose.Enabled = true;
 84 
 85                 this.tbReceive.AppendText(sp.ReadExisting());
 86             }
 87             catch (Exception ex)
 88             {
 89                 MessageBox.Show("打开串口失败:" + ex.Message);
 90             }
 91         }
 92 
 93         private void btnSend_Click(object sender, EventArgs e)
 94         {
 95             if (sp.IsOpen)
 96             {
 97                 try
 98                 {
 99                     sp.WriteLine(tbSend.Text.Trim());
100                 }
101                 catch (Exception ex)
102                 {
103                     MessageBox.Show("发送失败:" + ex.Message);
104                 }
105             }
106             else
107             {
108                 MessageBox.Show("串口未打开");
109                 return;
110             }
111         }
112 
113         private void cboCOMPort_SelectedIndexChanged(object sender, EventArgs e)
114         {
115             btnOpen.Enabled = true;
116             btnClose.Enabled = false;
117         }
118 
119         private void btnClose_Click(object sender, EventArgs e)
120         {
121             try
122             {
123                 sp.Close();
124                 btnClose.Enabled = false;
125                 btnOpen.Enabled = true;
126             }
127             catch (Exception ex)
128             {
129                 MessageBox.Show("关闭失败" + ex.Message);
130                 return;
131             }
132         }
133 
134         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
135         {
136             if (sp != null && sp.IsOpen) sp.Close();
137             if (t != null && t.IsAlive)
138                 t.Abort();
139         }
140 
141         public void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
142         {
143             string readString = sp.ReadExisting();
144             this.Invoke(new Action(delegate {
145                 tbReceive.Text += readString+" ";
146             }));
147         }
148 
149     }
View Code

 

 

posted on 2014-03-02 23:51  象山  阅读(1251)  评论(0编辑  收藏  举报

导航