51单片机串口通信编程 如何监测总线内是否有数据

从串口读数据 - 怎样监听或者拦截串口上的数据
  从串口读数据
  从串口COM11发送的数据最终将到达与其连通的串口COM21,如果COM21处于可用状态,则到达的数据将被缓存,等待程序的读取。从串口读入数据有多种模式,本文将介绍&轮询模式&和事件监听模式。
  &轮询模式&是指程序(线程)每隔固定的时间就对串口进行一次扫描,如果扫描发现串口中有可用数据,则进行读取。Com21PollingListener类使用&事件监听模式&读取串口COM21接收到的数据:
  Com21PollingListener.java
  package com.serialPort.
  import java.io.IOE
  import java.io.InputS
  import javax.comm.CommPortI
  import javax.comm.NoSuchPortE
  import javax.comm.PortInUseE
  import javax.comm.SerialP
  * Com21PollingListener类使用&轮训&的方法监听串口COM21,
  * 并通过COM21的输入流对象来获取该端口接收到的数据(在本文中数据来自串口COM11)。
  public class Com21PollingListener {
  public static void main(String[] args){
  //1.定义变量
  CommPortIdentifier com21 =//未打卡的端口
  SerialPort serialCom21 =//打开的端口
  InputStream inputStream =//端口输入流
  //2.获取并打开串口COM21
  com21 = CommPortIdentifier.getPortIdentifier(&COM21&);
  serialCom21 = (SerialPort) com21.open(&Com21Listener&, 1000);
  //3.获取串口的输入流对象
  inputStream = serialCom21.getInputStream();
  //4.从串口读入数据
  //定义用于缓存读入数据的数组
  byte[] cache = new byte[1024];
  //记录已经到达串口COM21且未被读取的数据的字节(Byte)数。
  int availableBytes = 0;
  //无限循环,每隔20毫秒对串口COM21进行一次扫描,检查是否有数据到达
  while(true){
  //获取串口COM21收到的可用字节数
  availableBytes = inputStream.available();
  //如果可用字节数大于零则开始循环并获取数据
  while(availableBytes 》 0){
  //从串口的输入流对象中读入数据并将数据存放到缓存数组中
  inputStream.read(cache);
  //将获取到的数据进行转码并输出
  for(int j = 0;j 《 cache.length && j 《 availableB j++){
  //因为COM11口发送的是使用byte数组表示的字符串,
  //所以在此将接收到的每个字节的数据都强制装换为char对象即可,
  //这是一个简单的编码转换,读者可以根据需要进行更加复杂的编码转换。
  System.out.print((char)cache[j]);
  System.out.println();
  //更新循环条件
  availableBytes = inputStream.available();
  //让线程睡眠20毫秒
  Thread.sleep(20);
  }catch(InterruptedException e){
  e.printStackTrace();
  }catch (NoSuchPortException e) {
  //找不到串口的情况下抛出该异常
  e.printStackTrace();
  } catch (PortInUseException e) {
  //如果因为端口被占用而导致打开失败,则抛出该异常
  e.printStackTrace();
  } catch (IOException e) {
  //如果获取输出流失败,则抛出该异常
  e.printStackTrace();
  &事件监听模式&是为串口注册一个事件监听类,当有数据到达串口的时候就会触发事件,在事件的响应方法中读取串口接收到的数据。Com21EventListener类使用&事件监听模式&读取串口COM21接收到的数据:
  Com21EventListener.java
  package com.serialPort.
  import java.io.IOE
  import java.io.InputS
  import java.util.TooManyListenersE
  import javax.comm.CommPortI
  import javax.comm.NoSuchPortE
  import javax.comm.PortInUseE
  import javax.comm.SerialP
  import javax.comm.SerialPortE
  import javax.comm.SerialPortEventL
  * Com21EventListener类使用&事件监听模式&监听串口COM21,
  * 并通过COM21的输入流对象来获取该端口接收到的数据(在本文中数据来自串口COM11)。
  * 使用&事件监听模式&监听串口,必须字定义一个事件监听类,该类实现SerialPortEventListener
  * 接口并重写serialEvent方法,在serialEvent方法中编写监听逻辑。
  public class Com21EventListener implements SerialPortEventListener {
  //1.定义变量
  CommPortIdentifier com21 =//未打卡的端口
  SerialPort serialCom21 =//打开的端口
  InputStream inputStream =//输入流
  //2.构造函数:
  //实现初始化动作:获取串口COM21、打开串口、获取串口输入流对象、为串口添加事件监听对象
  public Com21EventListener(){
  //获取串口、打开窗串口、获取串口的输入流。
  com21 = CommPortIdentifier.getPortIdentifier(&COM21&);
  serialCom21 = (SerialPort) com21.open(&Com21EventListener&, 1000);
  inputStream = serialCom21.getInputStream();
  //向串口添加事件监听对象。
  serialCom21.addEventListener(this);
  //设置当端口有可用数据时触发事件,此设置必不可少。
  serialCom21.notifyOnDataAvailable(true);
  } catch (NoSuchPortException e) {
  e.printStackTrace();
  } catch (PortInUseException e) {
  e.printStackTrace();
  } catch (IOException e) {
  e.printStackTrace();
  } catch (TooManyListenersException e) {
  e.printStackTrace();
  //重写继承的监听器方法
  @Override
  public void serialEvent(SerialPortEvent event) {
  //定义用于缓存读入数据的数组
  byte[] cache = new byte[1024];
  //记录已经到达串口COM21且未被读取的数据的字节(Byte)数。
  int availableBytes = 0;
  //如果是数据可用的时间发送,则进行数据的读写
  if(event.getEventType() == SerialPortEvent.DATA_AVAILABLE){
  availableBytes = inputStream.available();
  while(availableBytes 》 0){
  inputStream.read(cache);
  for(int i = 0; i 《 cache.length && i 《 availableB i++){
  //解码并输出数据
  System.out.print((char)cache[i]);
  availableBytes = inputStream.available();
  System.out.println();
  } catch (IOException e) {
  e.printStackTrace();
  //在main方法中创建类的实例
  public static void main(String[] args) {
  new Com21EventListener();
  读写程序的联合运行
  串口能接收到数据的前提是该串口处于打开(可用)状态,如果串口处于关闭状态,那么发送到该串口的数据就会丢失。所以在实验的过程中,如果使用铜线连接同一个串口的引脚2和引脚3,一定要注意的是千万不能在向串口发送完数据之后关闭该串口,然后再次打开串口去读取数据,一定要让串口始终处于打开状态直到程序运行结束。
关注电子发烧友微信
有趣有料的资讯及技术干货
下载发烧友APP
打造属于您的人脉电子圈
关注发烧友课堂
锁定最新课程活动及技术直播
本文主要介绍了usb接口类型有哪些_usb接口类型大全。usb是连接计算机系统与外部设备的一种串口总...
小编带你认知主板上的主要芯片。时钟芯片需要和14.318MHz的晶振连接在一起,为主板上的其他部件提...
本文开始介绍了USB接口的工作原理和优点,其次详细的介绍了串口划分标准和并口的区别以及并口的主要特点...
与串行通信相对的是并行通信。数据传输一般都是以字节传输的,一个字节8个位。拿一个并行通信举例来说,也...
I/O接口的功能是负责实现CPU通过系统总线把I/O电路和外围设备联系在一起,按照电路和设备的复杂程...
工业控制中,各设备的信号采集和监控只靠串口总线难以实现扩展,要将现场控制网络和信息网络相连,就需要解...
甲机向乙机发送控制命令字符,甲机同时接收乙机发送的数字,并显示在数码管上。
Wi-Fi模块又名串口Wi-Fi模块,属于物联网传输层,功能是将串口或TTL电平转为符合Wi-Fi无...
本文主要介绍了labview串口接收数据以及labview串口被动接收数据仿真设置。串口接收程序:当...
本文主要对labview串口数据解析进行了分析。首先需要调用VISAConfigureSerialP...
本文在对LabVIEW的VISA与单片机之间信息传送的理论研究基础上,针对串口发送的数据信息,设计了...
本文主要介绍了labview串口数据是如何保存的。程序中串口数据可以直观的显示在前面板上并保存下来,...
本文主要介绍了matlab串口数据采集,matlab功能强大,串口操作也很简单,通过以下几个实例你就...
本文主要介绍了python串口接收数据。其中涉及了Python使用线程来接收串口数据,以及pytho...
本文主要介绍了几种python串口编程实例。Python是纯粹的自由软件, 源代码和解释器CPyth...
本文介绍了ch340驱动安装教程:USB转串口驱动安装、驱动安装及硬件链接、上位机软件安装教程。CH...
本文介绍了CH340g使用说明详解,H340可以用于升级原串口外围设备,或者通过USB总线为计算机增...
本文介绍了usb转串口ch340电路图,USB转串口的RXD引脚与单片机的TXD引脚相连,USB转串...
不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率:波特率就是每秒传...
采用UART接口,支持串口透明数据传输模式,并且具有多模安全能力。内置TCP/IP协议栈和IEEE8...
 STM32 是一款基于ARM Cortex-M3内核的32位MCU,主频最高可达72M。最近因为要...
串口可以配置成用DMA的方式接收数据,不过DMA需要定长才能产生接收中断,如何接收可变长度的数据呢?...
GeneralPurposeInputOutput(通用输入/输出)简称为GPIO,或总线扩展器,人...
标准串口引脚2是RX,引脚3是TX,(即九针串口的2号引脚连接的是主控芯片的RXD引脚,3号引脚连接...
最近刚开始玩ESP8266这个模块,主要是用在两个ESP8266之间的通信上,进行数据的传输。主要是...
VK3214是UARTTM接口的4通道UART器件。VK3214实现UART桥接/扩展4个串口(UA...
一个嵌入式工程师,无论你做硬件还是软件都会接触到串口、COM口、TTL、RS232、RS485这些概...
1. 何谓串口? 串口几乎为所有计算机的装置通讯协议标准。请别与通用串行总线 (Universal ...
本文在探讨传统数据收发不足之后,介绍如何使用带FIFO的串口来减少接收中断次数,通过一种自定义通讯协...
不经常接触电脑的朋友可能会很多一些电脑小知识不理解,今天编辑在电脑爱好者QQ群中就发现有朋友问了一个...
串行通信接口标准经过使用和发展,目前已经有几种。但都是在RS-232标准的基础上经过改进而形成的。所...
说点题外话,为了感觉“专业”一点,以后不要再说给单片机“装程序”了,专业点的说法应该是烧写程序,或者...
通信,按照传统的理解就是信息的传输与交换。对于单片机来说,通信则与传感器、存储芯片、外围控制芯片等技...
  玩stm32也有一段时间了,对串口中断接受和DAM方式发送总一下总结,但是本节只讲述串口中断接受...
广东佛山,日讯,广东高云半导体科技股份有限公司(以下简称“高云半导体”)今天宣布推...
arm处理器是英国Acorn有限公司设计的低功耗成本的第一款RISC微处理器。全称为Acorn RI...
串口、COM口是指的物理接口形式(硬件)。而TTL、RS-232、RS-485是指的电平标准(电信号...
本文为您提供Dm500串口刷机软件img镜像文件下载安装包,Dm500串口软件刷机详细教程,让你使用...
在51单片机的学习过程中,我们经常会发现中断、计数器/定时器、串口是学习单片机的难点,对于初学者来说...
提出一种数据打包的方法, 使得相同的数据量占用较少的存储空间, 并可提高传输效率。
热敏打印必须与相应的控制板配合。由于进口原装控制板价格昂贵,功耗高,且不支持汉字打印。将详细阐述基于...
PCI Express是新一代能够提供大量带宽和丰富功能以实现令人激动的新式图形应用的全新架构。PC...
笔者为了通过Internet读取只有RS-232串口的传感器中数据,基于S3C4510B设计了一个串...
全球领先的EEPROM存储器供应商意法半导体率先发布针对密集型数据写应用的2-Mbit串口EEPRO...
本设计方案巧妙地应用arm串口通信奇偶校验功能,实现了9位方式的多机通信,并在相关课题中成功应用,而...
散列DMA设计的高速串口驱动技术
1& 概& 述由于串口在电报通信、工控和数据...
LPC2364的串口转网口专用协议卡的研制方案
摘要:给出了采用LPC2364芯片为处理器,并利用...
三种单片机模拟串口方法介绍
模拟串口就是利用51的两个输入输出引脚如P1.0和P1.1,置1或0分...
用8位单片机实现串口-以太网转换器
单片机或微控制器(MCU)(也称为嵌入式系统)已经在各个领域...
组态王与单片机多机串口通信的设计
1 引言&&& 随着工业化要求提高...
1.SP2338简介SP2338串口扩展芯片能将普通的51系列单片机的一个串口扩展为三个独立的全双工...
at89s52串口电路图
Abstract: The Dallas Semiconductor DS80C320 and ot...
Abstract: This application note looks at the new s...
采用芯片PL2303制作的USB转串转换器
该东东采用了一片USB转换芯片
如何使用AT89C51的串口和电脑的串口进行通信原理与实验
串口通讯对单片机而言意义重大,不但可以...
在讨论RS-232C接口标准的内容之前,先说明两点:
 首先,RS-232-C标准最初是远程...
串口接线图
目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(&lt...
串口针脚定义有9针和25针:
25针串口定义
9针串口接线
9针串口接线图&&
9针串口引脚定义 25针串口引脚定义
pc计算机与单片机串口通信源程序
下面是一个单片机与PC机通信的程序,pc机程序用c语言来编写,单...
串口管脚定义图:
下面是详细介绍:
  9针串行口的针脚功能: 
/*定义为中断方式串口处理*/#define INTERSENDSTR/*不为8032系列芯片 */...
max232 串口电路
串口调试助手源程序
1.建立项目&&
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-串口通信原理汇总_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
串口通信原理汇总
阅读已结束,下载本文需要
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩2页未读,
定制HR最喜欢的简历
你可能喜欢【图文】串行通信与现场总线 - 副本_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
串行通信与现场总线 - 副本
阅读已结束,下载本文到电脑
定制HR最喜欢的简历
你可能喜欢璇锋暀宸ヤ笟浠ュお缃

我要回帖

更多关于 串口通信数据格式 的文章

 

随机推荐