做过类似的串口通信,代码供参考
SENT
Java code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->package GPS;
/******************************************
* 程序文件名称:SendComm.java
* 功能:从串行口COM1中发送数据
******************************************/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.comm.*; //可以使用开源的RXTX
class S_Frame extends Frame implements Runnable,ActionListener
{
/*检测系统中可用的通讯端口类 */
static CommPortIdentifier portId;
/*Enumeration 为枚举型类,在util中 */
static Enumeration portList;
OutputStream outputStream;
/*RS-232的串行口 */
SerialPort serialPort;
Thread readThread;
Panel p=new Panel();
TextField in_message=new TextField("打开COM1,波特率9600,数据位8,停止位1.");
TextArea out_message=new TextArea();
Button btnOpen=new Button("打开串口, 发送数据");
Button btnClose=new Button("关闭串口, 停止发送数据");
byte data[]=new byte[10240];
/*设置判断要是否关闭串口的标志*/
boolean mark;
/*安排窗体*/
S_Frame()
{ super("串口发送数据");
setSize(200,200);
setVisible(true);
add(out_message,"Center");
add(p,"North");
p.add(btnOpen);
p.add(btnClose);
add(in_message,"South");
btnOpen.addActionListener(this);
btnClose.addActionListener(this);
} //R_Frame() end
/*点击按扭打开串口.*/
public void actionPerformed(ActionEvent event) {
if (event.getSource()==btnClose){
serialPort.close(); //关闭串口
mark=true; //用于中止线程的run()方法
in_message.setText("串口COM1已经关闭,停止发送数据.");
}
else { mark=false;
/*从文本区按字节读取数据*/
data=out_message.getText().getBytes();
/*打开串口*/
start();
in_message.setText("串口COM1已经打开,正在每2秒钟发送一次数据.....");
}
} //actionPerformed() end
/*打开串口,并调用线程发送数据*/
public void start(){
/*获取系统中所有的通讯端口 */
portList=CommPortIdentifier.getPortIdentifiers();
/* 用循环结构找出串口 */
while (portList.hasMoreElements()){
/*强制转换为通讯端口类型*/
portId=(CommPortIdentifier)portList.nextElement();
if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL){
if (portId.getName().equals("COM2")) {
/*打开串口 */
try {
serialPort = (SerialPort) portId.open("ReadComm", 2000);
}
catch (PortInUseException e) { }
/*设置串口输出流*/
try {
outputStream = serialPort.getOutputStream();
}
catch (IOException e) {}
} //if end
} //if end
} //while end
/*调用线程发送数据*/
try{
readThread = new Thread(this);
//线程负责每发送一次数据,休眠2秒钟
readThread.start();
}
catch (Exception e) { }
} //start() end
/*发送数据,休眠2秒钟后重发*/
public void run() {
/*设置串口通讯参数*/
try {
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
}
catch (UnsupportedCommOperationException e) { }
/*发送数据流(将数组data[]中的数据发送出去)*/
try {
outputStream.write(data);
}
catch (IOException e) { }
/*发送数据后休眠2秒钟,然后再重发*/
try { Thread.sleep(2000);
if (mark)
{return; //结束run方法,导致线程死亡
}
start();
}
catch (InterruptedException e) { }
} //run() end
} //类S_Frame end
public class sentData
{public static void main(String args[])
{ S_Frame S_win=new S_Frame();
S_win.addWindowListener(new WindowAdapter()
{public void windowClosing(WindowEvent e)
{System.exit(0); }
});
S_win.pack();
}
}
GET
Java code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->package GPS;
/******************************************
* 程序文件名称:ReadComm.java
* 功能:从串行口COM1中接收数据
******************************************/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.comm.*;
class R_Frame extends Frame implements Runnable,ActionListener,SerialPortEventListener
{
/* 检测系统中可用的通讯端口类 */
static CommPortIdentifier portId;
/* Enumeration 为枚举型类,在java.util中 */
static Enumeration portList;
InputStream inputStream;
/* 声明RS-232串行端口的成员变量 */
//////////////////////////////////
//////////////////////////////////
SerialPort serialPort;
Thread readThread;
String str="";
TextField out_message=new TextField("上面文本框显示接收到的数据");
TextArea in_message=new TextArea();
Button btnOpen=new Button("打开串口");
/*建立窗体*/
R_Frame()
{
super("串口接收数据");
setSize(200,200);
setVisible(true);
btnOpen.addActionListener(this);
add(out_message,"South");
add(in_message,"Center");
add(btnOpen,"North");
} //R_Frame() end
/*点击按扭所触发的事件:打开串口,并监听串口. */
public void actionPerformed(ActionEvent event)
{
/*获取系统中所有的通讯端口 */
portList=CommPortIdentifier.getPortIdentifiers();
/* 用循环结构找出串口 */
////////////////////////////////////////////////////
///////////////////////////////////////////////////////
System.out.print("正在搜索端口.....");
while (portList.hasMoreElements()){
/*强制转换为通讯端口类型*/
portId=(CommPortIdentifier)portList.nextElement();
if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL){
if (portId.getName().equals("COM2")) {
try {
System.out.print("\n找到端口");
serialPort = (SerialPort) portId.open("ReadComm", 20);
out_message.setText("已打开端口COM1 ,正在接收数据..... ");
}
catch (PortInUseException e) {System.out.print("\n无法找到"); }
/*设置串口监听器*/
try {
serialPort.addEventListener(this);
}
catch (TooManyListenersException e) { System.out.println("!!!!!");}
/* 侦听到串口有数据,触发串口事件*/
serialPort.notifyOnDataAvailable(true);
} //if end
} //if end
} //while end
readThread = new Thread(this);
readThread.start(); //线程负责每接收一次数据休眠20秒钟
} //actionPerformed() end
/*接收数据后休眠20秒钟*/
public void run() {
try {
Thread.sleep(200);
}
catch (InterruptedException e) { }
} //run() end
/*串口监听器触发的事件,设置串口通讯参数,读取数据并写到文本区中*/
public void serialEvent(SerialPortEvent event) {
/*设置串口通讯参数:波特率、数据位、停止位、奇偶校验*/
try {
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
}
catch (UnsupportedCommOperationException e) {}
byte[] readBuffer = new byte[20];
try {
inputStream = serialPort.getInputStream();
}
catch (IOException e) {}
try {
/* 从线路上读取数据流 */
while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
} //while end
str=new String(readBuffer);
/*接收到的数据存放到文本区中*/
in_message.append(str+"\n");
}
catch (IOException e) { }
} //serialEvent() end
} //类R_Frame end
public class getData
{
public static void main(String args[])
{
//////////////////////////
Enumeration en = CommPortIdentifier.getPortIdentifiers();
CommPortIdentifier portId1;
while (en.hasMoreElements())
{
portId1 = (CommPortIdentifier) en.nextElement();
/*如果端口类型是串口,则打印出其端口信息*/
if (portId1.getPortType() == CommPortIdentifier.PORT_SERIAL)
{
System.out.println(portId1.getName());
}
}
///////////////////////////
/* 实例化接收串口数据的窗体类 */
R_Frame R_win=new R_Frame();
/* 定义窗体适配器的关闭按钮功能 */
R_win.addWindowListener(new WindowAdapter()
{public void windowClosing(WindowEvent e)
{System.exit(0); }
});
R_win.pack();
}
}
分享到:
相关推荐
总的来说,这个实验旨在帮助你理解51单片机的串口通信机制,掌握基本的串行通信编程技巧,并能应用到实际项目中去。通过这个实验,你将不仅了解串口通信的基本原理,还能增强你的动手能力和问题解决能力。
串口通信,又称为串行通信,是通过一条数据线依次发送和接收数据的通讯方式。在M218中,串口通信通常使用RS-232、RS-485或RS-422标准,这些标准定义了电压等级、数据速率和接口引脚配置。在TM218串口通信中,我们...
串口通讯,也称为串行通信,是指数据逐位按顺序进行传输的方式。通常,串口使用RS-232、RS-485或USB等接口标准,常见的应用包括连接打印机、GPS接收器、Modem等硬件设备。在C#中,System.IO.Ports命名空间提供了...
QNX下的串口通信,在实际的机器上测试了一下,发现可以连续的发送数据。
RS232是串行通信接口标准,常用于设备间的通信,例如连接摄像头。在这个Demo中,Android设备通过RS232接口向摄像头发送指令,控制其拍摄、预览等功能。这通常涉及到串口的配置参数,如波特率、数据位、停止位和校验...
VB串行通信试验程序.rar VB使用mscom控件实现PC机与单片机串口通信.rar VB写的串口通信分析程序源码.rar VB写的串口通信,发送和接收实例.rar VB写的串口通讯,通过串口对单片机进行控制.rar VB写的串口通讯软件,...
串口通信,也称为串行通信,是一种数据传输方式,它将数据一位一位地顺序传输,通常包括发送和接收两部分。相比于并行通信,串口通信需要的硬件资源较少,但传输速度相对较慢。在单片机应用中,常见的串口标准有UART...
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。(至于再详细,自己百度) 串口应用: 工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串口...
串口通信,也称为串行通信,是数据逐位按顺序进行传输的一种通信方式。与并行通信相比,串口通信只需要较少的信号线,因此成本较低,但传输速度相对较慢。常见的串口标准有RS-232、RS-485和USB串口等。 在C++中实现...
056、VB串行通信试验程序 057、VB的MODEM通信源代码,智能化水电远端数据读取系统 058、VB的串口源程序,包括串口的配置界面,接收功能和发送功能 059、VB访问串口,并读取电子秤上显示的数据 060、VB和西门子S7-300 ...
微机原理实验中的PC机串行通讯是计算机科学和技术领域中的一个重要实践环节,它涉及到串行通信的基本原理、接口芯片8250的工作机制以及PC机串行口的连接方法。这个实验旨在加深对这些知识的理解,并通过实际操作提升...
ASP.NET 网页串口通讯(ActiveX)是一种在Web应用中实现串行通信的技术。串口通讯,也称为串行接口通信,是计算机硬件之间传输数据的一种常见方式,通常用于连接各种设备,如打印机、扫描仪或GSM模块等。在ASP.NET中...
串口通讯,也称为串行通信,是计算机硬件之间通过串行数据线进行信息传输的方式。在C#中,`System.IO.Ports`命名空间提供了`SerialPort`类,用于处理串口操作。这个类提供了一系列的方法和属性,如`Open()`用于打开...
基于51单片机的串口通信...1、甲乙单片机采用奇偶校验,进行方式3串行通信; 2、甲机将“电子科学”显示码依次发送给PC机,乙机将接收的数据用LCD显示出来; 3、甲乙机采用RS232串口通讯协议,利用MAX232芯片实现通信。
山特UPS串口通讯协议 山特UPS串口通讯协议是山特公司出品的单进单出UPS串口通讯协议,用于实现集中监控管理。该协议规定了电源设备产品在设计、制造中应遵循的通讯协议,适用于厦门科华电子有限公司(集团企业)...
串口通讯,全称为串行通信接口,是计算机间或计算机与其他设备之间进行数据传输的一种方式。在VB中,串口通讯通常通过Microsoft的MSComm控件来实现。MSComm控件提供了一套完整的事件和属性,可以方便地进行串口设置...
串口通信,全称为串行通信,是一种古老但依然广泛应用的数据传输方式,尤其在嵌入式系统和设备间通信中占据重要地位。Android系统作为移动设备操作系统,有时也需要与外部设备,如电脑或其他硬件模块,进行串口通信...
串口通信,也称为串行通信,是指数据以串行方式一位一位地传输。与并行通信相比,串行通信所需的硬件资源较少,但传输速度相对较慢。在个人计算机上,串口通常指的是RS-232接口,它定义了数据线、控制线以及相应的...
2. **串口通信基础**:串口通信,也称为串行通信,是指数据以位(bit)为单位,逐位进行发送和接收。常见的串口包括COM1、COM2等,通过串口参数(如波特率、数据位、停止位、校验位)设置实现不同设备间的数据交换。...
串口通讯是一种串行通信协议,与并行通信相比,它通过单一的数据线逐位地传输信息,因此需要较少的物理连接。串口通讯通常包括两个基本的信号线:TX(发送)和RX(接收)。设备通过这些线路将数据一位一位地发送出去...