用Java?哈,为什么不用汇编?要不C都比Java好呀

解决方案 »

  1.   

    利用Java实现串口全双工通讯
    http://www-900.ibm.com/developerWorks/cn/java/joy-comm/index.shtml
      

  2.   

    这里还有个例子
    IMU.java (主程序)
           ReadBuffer.java (从缓冲区读取一个消息)
           ReadSerial.java (读取串口数据并放入缓冲区)
           SerialBuffer.java (缓冲区)
           WriteSerial.java (不断的往串口送星号'*')测试程序:       SendCom.java (将一个数据文件往串口发送)
           SEND.TXT (供测试用的数据文件)在这个通讯程序中使用了一个简单的协议,既不同的消息之间用星号'*'作为分隔。这个程序中的问题是ReadSerial进程和WriteSerial进程不能够同时启动,出错信息是不能够打开串口,因为同样一个串口不能够同时被打开两次(在ReadSerial中声明了FileReader测试程序:       SendCom.java (将一个数据文件往串口发送)
           SEND.TXT (供测试用的数据文件)在这个通讯程序中使用了一个简单的协议,既不同的消息之间用星号'*'作为分隔。这个程序中的问题是ReadSerial进程和WriteSerial进程不能够同时启动,出错信息是不能够打开串口,因为同样一个串口不能够同时被打开两次(在ReadSerial中声明了FileReader和在WriteSerial中声明了FileWriter)。这样是不能够实现全双工通讯的。不知道有没有做过的大侠能够讲讲处理的办法。/*
    *
    * IMU.java 1.0
    * Main Program for Serial Communication
    *
    * Created: March 27, 2001
    *
    * Author : Qingye Jiang (John)
    * American GNC Corporation
    * 888 Easy St, Simi Valley CA 93065-1812
    *
    * Contact: (805) 582-0582 (Tel), (805) 582-0098 (Fax)
    [email protected]
    *
    */import java.io.*;class IMU
    {
           public static void main(String[] args)
           {
                   //TO DO: Add your JAVA codes here               File ComPort = new File("COM1");       SerialBuffer SB = new SerialBuffer();
           ReadSerial r1 = new ReadSerial(SB, ComPort);
           ReadBuffer r2 = new ReadBuffer(SB);
           WriteSerial r3 = new WriteSerial(ComPort);       r1.start();
           r2.start();
           r3.start();
       }
    }/*
    *
    * ReadBuffer.java 1.0
    * Program to Read the Serial Buffer
    *
    * Created: March 27, 2001
    *
    * Author : Qingye Jiang (John)
    * American GNC Corporation
    * 888 Easy St, Simi Valley CA 93065-1812
    *
    * Contact: (805) 582-0582 (Tel), (805) 582-0098 (Fax)
    [email protected]*
    */import java.io.*;public class ReadBuffer extends Thread
    {
       private SerialBuffer ComBuffer;   public ReadBuffer(SerialBuffer SB)
       {
           ComBuffer = SB;
       }   public void run()
       {
                   String Msg;       while (true)
           {
                   Msg = ComBuffer.GetMsg();
                   System.out.println(Msg);
           }   }
    }/*
    *
    * ReadSerial.java 1.0
    * Program to read characters from the serial port and put it
    * to the buffer
    *
    * Created: March 27, 2001
    *
    * Author : Qingye Jiang (John)
    * American GNC Corporation
    * 888 Easy St, Simi Valley CA 93065-1812
    *
    * Contact: (805) 582-0582 (Tel), (805) 582-0098 (Fax)
    *       [email protected]
    *
    */import java.io.*;public class ReadSerial extends Thread
    {
       private SerialBuffer ComBuffer;
       private File ComPort;   public ReadSerial(SerialBuffer SB, File Port)
       {
           ComBuffer = SB;
           ComPort = Port;
       }   public void run()
       {
                   int c;
                   try
                   {
                           FileReader in = new FileReader(ComPort);while (true)
               {
                   c = in.read();
                   ComBuffer.PutChar(c);
               }
                   try
                   {
                           FileReader in = new FileReader(ComPort);
                   while (true)
               {
                   c = in.read();               ComBuffer.PutChar(c);
               }
           } catch (IOException e) {}
       }
    }
    /*
    *
    * SerialBuffer.java 1.0
    * Class that implements the serial buffer
    *
    * Created: March 27, 2001
    *
    * Author : Qingye Jiang (John)
    *   American GNC Corporation
    * 888 Easy St, Simi Valley CA 93065-1812
    *
    * Contact: (805) 582-0582 (Tel), (805) 582-0098 (Fax)
    [email protected]*
    */public class SerialBuffer
    {
       private String Content = "";
       private String CurrentMsg, TempContent;
       private boolean available = false;   public synchronized String GetMsg()
       {
           int SepMark;       if ((SepMark = Content.indexOf('*')) == -1)
           {
                   available = false;
                   while (available == false)
                   {
                   try
                   {
                       wait();
                   } catch (InterruptedException e) { }
                   }
                   SepMark = Content.indexOf('*');
           }       CurrentMsg = Content.substring(0, SepMark);
           TempContent = Content.substring(SepMark+1);
           Content = TempContent;
           notifyAll();
           return CurrentMsg;
       }   public synchronized void PutChar(int c)
       {
           Character d = new Character((char) c);
           Content = Content.concat(d.toString());
           if (c == '*')
           {
                   available = true;
           }
           notifyAll();
       }
    }
    /*
    *
    * WriteSerial.java 1.0
    * Program to send a character to the serial port
    *
    * Created: March 27, 2001
    *
    * Author : Qingye Jiang (John)
    * American GNC Corporation
    * 888 Easy St, Simi Valley CA 93065-1812
    *
    * Contact: (805) 582-0582 (Tel), (805) 582-0098 (Fax)
    [email protected]
    *
    */import java.io.*;public class WriteSerial extends Thread
    {
       private SerialBuffer ComBuffer;
       private File ComPort;   public WriteSerial(File Port)
       {
           ComPort = Port;
       }   public void run()
       {
                   int c;
                   try
                   {
                           FileWriter out = new FileWriter(ComPort);
                   while (true)
               {
                   out.write('*');
               }
           } catch (IOException e)
           {
                   System.out.println(e.getMessage());
           }
       }
    }
    import java.io.*;public class SendCom
    {
       public static void main(String[] args)
       {               File OutFile = new File("SEND.TXT");
                   File ComPort = new File("COM2");               int c;               try
                   {
                           FileReader in = new FileReader(OutFile);
                           FileWriter out = new FileWriter(ComPort);
                           while ((c = in.read()) != -1)
                                   out.write(c);
                           in.close();
                           out.close();
                   } catch (IOException e) {}       }
    }SEND.TXT*This is a sample of the data file for program testing. *It should be in the same directory as the SendCom.class file.*When you run this sample program, connect your COM1 and COM2 with a
    serial cable so that you can test this program on one machine. If
    you have two machines, you can connect the two machine via a serial
    cable and test it. Modified the definition of ComPort in the program
    if necessary. *Thank you for testing this program. If you have any suggestions please
    kindly let me know. *