zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    java.lang.OutOfMemoryError: Java heap space解决方法
    深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
    CSS中.和#区别
    斯坦福数据挖掘之LSH的应用
    N个元素的集合划分成互斥的两个子集的数目
    JDBC小结
    初识Java反射机制
    关于Java中重载的若干问题
    吐槽
    Tomcat
  • 原文地址:https://www.cnblogs.com/mandel/p/3577567.html
Copyright © 2011-2022 走看看