搜档网
当前位置:搜档网 › arduino串口通信

arduino串口通信

arduino串口通信
arduino串口通信

Arduino的串行通信

刚开始看到引脚读写函数的时候觉得很鸡肋,还不如以前端口直接赋值简单。但是继续往下看Arduino提供的通讯函数就发现真的是要比以前方便多了...

上次把键盘做好,现在要把键盘按下的信息通过串口发给PC,如果以前用单片机自己来写串口程序做,对有基础的人来说其实也不难...但是如果用Arduino来做,会发现简直是傻瓜操作,合适初学者,也合适有基础的懒人...

先了解一下相关的一些串口通信函数:

Serial.begin(int speed)

初始化串口比特率函数,直接输入相应的数值就把串口通信的寄存器设置为对应的比特率了,够傻瓜吧..当然,可以使用的值也不是随便设的,一般4800 9600 14400……等等

Serial.available()

串口输入数据读取前的判断函数,返回值为1 串口buff中有数据0 串口buff中无数据或者数据已经读取出来过。经常if(Serial.available())来询问监视串口。

Serial.read()

从串口buff中读取数据进来..比如infomaition = Serial.read(); 则buff中的数据会赋值给infomaition变量Serial.print(data)

把data从串口把数据发送出去...

注意的是使用找个函数的时候可以有几种发送方法:

1 Serial.print(data)

这样的话Arduino会把data发送成字符串ASCII出去。如int data = 79 ; Serial.print(data) ;那串口发送出去的就是string"79" 的ASCII..

2 Serial.print(data,DEC)

这样发送的是data的10进制字符串。如int data = 79; Serial.print(data,DEC); 那串口发出去的就是string"79"

3 Serial.print(data,HEX)

这样发送的是data的16进制字符串。如int data = 79; Serial.print(data,HEX); 那串口发出去的就是string"4F"

4 Serial.print(data,OCT)

这样发送的是data的8进制字符串。如int data = 79; Serial.print(data,OCT); 那串口发出去的就是string"117"

5 Serial.print(data,BIN)

这样发送的是data的二进制字符串。如int data = 79; Serial.print(data,BIN); 那串口发出去的就是string"1001111"

6 Serial.print(data,BYTE)

这样是把data作为ASCII码对应的字符后发送。如int data = 79; Serial.print(data,BYTE); 那串口发出去的就是string"O"

Serial.println(data)

功能类似上面的发送函数,也是把数据发送出去,不同的是发送的数据后面带上换行符号

有了上面的这些函数,就可以轻松的和PC进行串口通讯了。现在做个实验:先根据键盘按下的按键向PC 发送对应的键值,然后PC接受到键值做相应的判断处理后将结果返回给Arduino执行。

因为要检查出按键的具体键值,上次用来实验输入输出的键盘代码是不能用了。这次键盘的原理和上次一样,先行扫描,然后读取4条列线,如果有按键按下则把扫到的键值从串口发送出去。

先定义变量:

int KeyOPin =2; int KeyIPin =6; int LedPin = 13;

int i ; int n;

int key = 0; int ldkey = 0; int press = 0;

int reg = 1;

int ASCII[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'} ;

初始化Arduino:

void setup()

{

Serial.begin(9600);

for(i=0;i<4;i++) pinMode((KeyOPin + i), OUTPUT);

for (i=0;i<4;i++) pinMode(( KeyIPin + i), INPUT);

pinMode( LedPin, OUTPUT);

}

循环执行扫描、对比和确认发送数据

void loop()

{

reg = 1;

for (i=0;i<4;i++)

{

for (n=0;n<4;n++)

{

if((reg>>n)&1) digitalWrite(KeyOPin+n , HIGH);

else digitalWrite(KeyOPin+n , LOW);

}

for (n=0;n<4;n++)

{

if(digitalRead(KeyIPin + n))

{ key = key | (1<<(4+n)); key = key | reg ; } }

reg = reg << 1;

}

if (key & 0xf0)

{

if (key!=oldkey) { press = 1; oldkey = key ; }

}

else oldkey = 0;

if (press)

{

Serial.print(tab[key/16],BYTE);

Serial.print(tab[key%16],BYTE);

}

press = 0;

key = 0;

}

把程序编译后烧进Arduino,然后把按下Arduino编程软件的Serial Monitor按钮,在代码窗口下面就会显示出串口监视器的串口,在下拉列表中把波特率改为9600即我们设置的通信波特率。然后按下键盘上的按钮,就能在窗口中看到对应的键值被发送过来了。

PS:因为不需要是实现检测长按或者点按,所以平时无按键的0x00不会发送过来,如果一个按钮未放开按下新按钮则会发送组合键值过来,PC做相应初判断处理。

把程序编译后烧进Arduino,然后把按下Arduino编程软件的Serial Monitor按钮,在代码窗口下面就会显示出串口监视器的串口,在下拉列表中把波特率改为9600即我们设置的通信波特率。然后按下键盘上的按钮,就能在窗口中看到对应的键值被发送过来了。

PS:因为不需要是实现检测长按或者点按,所以平时无按键的0x00不会发送过来,如果一个按钮未放开按下新按钮则会发送组合键值过来,PC做相应初判断处理。

Arduino 语法手册函数部分

Arduino 语法手册函数部分 摘自:函数部分 数字 I/O pinMode() 描述 将指定的引脚配置成输出或输入。详情请见digital pins。 语法 pinMode(pin, mode) 参数 pin:要设置模式的引脚 mode:INPUT或OUTPUT 返回 无 例子 ledPin = 13 语法 noTone(pin) 参数 pin: 所要停止产生声音的引脚 返回 无 shiftOut() shiftOut() 描述 将一个数据的一个字节一位一位的移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。 注意:如果你所连接的设备时钟类型为上升沿,你要确定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin, LOW)。 注意:这是一个软件实现;Arduino提供了一个硬件实现的SPI库,它速度更快但只在特定脚有效。 语法 shiftOut(dataPin, clockPin, bitOrder, value) 参数 dataPin:输出每一位数据的引脚(int)

clockPin:时钟脚,当dataPin有值时此引脚电平变化(int) bitOrder:输出位的顺序,最高位优先或最低位优先 value: 要移位输出的数据(byte) 返回 无 shiftIn() 描述 将一个数据的一个字节一位一位的移入。从最高有效位(最左边)或最低有效位(最右边)开始。对于每个位,先拉高时钟电平,再从数据传输线中读取一位,再将时钟线拉低。 注意:这是一个软件实现;Arduino提供了一个硬件实现的SPI库,它速度更快但只在特定脚有效。 语法 shiftIn(dataPin,clockPin,bitOrder) 参数 dataPin:输出每一位数据的引脚(int) clockPin:时钟脚,当dataPin有值时此引脚电平变化(int) bitOrder:输出位的顺序,最高位优先或最低位优先 返回 读取的值(byte) pulseIn() 描述 读取一个引脚的脉冲(HIGH或LOW)。例如,如果value是HIGH,pulseIn()会等待引脚变为HIGH,开始计时,再等待引脚变为LOW并停止计时。返回脉冲的长度,单位微秒。如果在指定的时间内无脉冲函数返回。 此函数的计时功能由经验决定,长时间的脉冲计时可能会出错。计时范围从10微秒至3分钟。(1秒=1000毫秒=1000000微秒) 语法 pulseIn(pin, value) pulseIn(pin, value, timeout) 参数 pin:你要进行脉冲计时的引脚号(int)。 value:要读取的脉冲类型,HIGH或LOW(int)。 timeout (可选):指定脉冲计数的等待时间,单位为微秒,默认值是1秒(unsigned long)返回 脉冲长度(微秒),如果等待超时返回0(unsigned long) 例子 int pin = 7; unsigned long duration;

串口通信测试方法

串口通信测试方法 LELE was finally revised on the morning of December 16, 2020

串口通信测试方法 1关于串口通信的一些知识: RS-232C是目前最常用的串行接口标准,用来实现计算机和计算机之间、计算机和外设之间的数据通信。 在PC机系统中都装有异步通信适配器,利用它可以实现异步串行通信。而且MCS-51单片机本身具有一个全双工的串行接口,因此只要配以电平转换的驱动电路、隔离电路就可以组成一个简单可行的通信接口。 由于MCS-51单片机的输入和输出电平为TTL电平,而PC机配置的是RS-232C 标准串行接口,二者电气规范不一致,因此要完成PC机与单片机的数据通信,必须进行电平转换。 注明:3)RS-232C上传送的数字量采用负逻辑,且与地对称 逻辑1:-3~-15V 逻辑0:+3~+15V 所以与单片机连接时常常需要加入电平转换芯片: 2实现串口通信的三个步骤: (1)硬件连接 51单片机有一个全双工的串行通讯口,所以单片机和计算机之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如计算机的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换。我们采用了三线制连接串口,也就是说和计算机的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。 使用MAX232串口通信电路图(9孔串口接头) (2)串行通信程序设计 ①通信协议的使用 通信协议是通信设备在通信前的约定。单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。假定我们需要在PC机与单片机之间进行通信,在设计过程中,有如下约定: 0x31:PC机发送0x31,单片机回送0x01,表示选择本单片机; 0x**:PC机发送0x**,单片机回送0x**,表示选择单片机后发送数据通信正常; 在系统工作过程中,单片机接收到PC机数据信息后,便查找协议,完成相应的操作。 ②串行通信程序设计主要有微机发送接收程序和单片机发送接收程序,微机上的发送和接收程序主要采用计算机高级语言编写,如C语言,因为了能够在计算机端看到单片机发出的数据,我们必须借助一个WINDOWS软件进行观察,这里利用如下图标的一个免费计算机串口调试软件,故而这一块计算机通信的程序可不写!

C#和232串口通信方法

本例程主要讲解使用C#,实现与232串口通信。达到采集串口数据,监控,可视化处理等。 一.概述 在Visual Studio 中编写串口通讯程序,一般都使用MicrosoftCommunicationControl(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在技术广泛应用的今天,Visual 没有将此控件加入控件库,所以人们采用了许多方法在Visual 来编写串口通讯程序:第一种方法是通过采用Visual Studio 中原来的MSComm 控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET 推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计串口通讯程序。NET Framework 类库包含了SerialPort 类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,本文着重讨论了Visual Studio 的MSComm控件和SerialPort 类设计方法的异同点。 二.SerialPort常用属性、方法和事件 1.命名空间 命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using 。 2.串口的通讯参数 串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别: a.通讯端口号

串行通信接收接口(LED)

串行通信接收接口(LED) 基本要求:掌握RS232串口的协议,运用DE2的串口进行接收PC的数据。波特率为9600,8位数据位,无奇偶校验,一个停止位。 硬件验证要求:在PC机通过“串行通信调试助手”软件 发送数据,DE2通过串口接收数据,完成接收数据后在LED上面进行显示。 在完成基本要求的基础上,可以通过拨码开关来选择奇偶校验的类别。 分频模块流程图: 分频模块的程序 module clk_div (clk_in,nreset,clk_out); input clk_in; input nreset; output clk_out; reg clk_out=0;

reg [8:0]cnt=0; parameter T = 217; always @(posedge clk_in or negedge nreset) begin if(nreset == 0) begin cnt <= 0; clk_out <= 0; end else if(cnt == T) begin clk_out <= ~clk_out; cnt <=0; end else cnt<=cnt+1; end endmodule 发送模块的程序: module rx(clk,nreset,rxd,data); input clk,rxd,nreset; //clk=0.1152MHz output [7:0] data; reg [3:0] t; reg [3:0] s; reg [7:0] data0; reg [7:0] data; always @(posedge clk or negedge nreset ) //baud=9600hz if(nreset ==0) begin data <= 8'h00; s <= 0; t <= 0; data0 <= 8'h00; end else begin case(s) 0:if(rxd==1) begin s<=1;t<=0;end 1:if(rxd==0) begin s<=2;t<=t+1;end 2:if(t==6)begin if(rxd==0) begin s<=3;t<=0;end

常用通讯测试工具使用

常用通讯测试工具 鉴于很多MCGS用户和技术人员对通讯测试工具并不很熟悉,本文档将针对实际的测试情况,对串口、以太网通讯调试过程中所涉及到的常用的测试软件进行相关的讲解。 1. 串口测试工具: 串口调试工具:用来模拟上下位机收发数据的串口工具,占用串口资源。如:串口调试助手,串口精灵,Comm等。 串口监听工具:用来监听上下位机串口相关操作,并截获收发数据的串口工具。不占用串口资源。如:PortMon,ComSky等。 串口模拟工具:用来模拟物理串口的操作,其模拟生成的串口为成对出现,并可被大多数串口调试和监听软件正常识别,是串口测试的绝好工具。如:Visual Serial Port等。 下面将分别介绍串口调试助手、Comm、PortMon和Visual Serial Port的使用。

1.1. 串口调试助手: 为最常用的串口收发测试工具,其各区域说明及操作过程如下: 串口状态 打开/关闭串口 十六进制/ASCII 切换 串口数据 接收区 串口参数 设置区 串口数据 发送区 串口收发计数区 发送数据功能区 保存数据功能区 操作流程如下: ? 设置串口参数(之前先关闭串口)。 ? 设置接收字符类型(十六进制/ASCII 码) ? 设置保存数据的目录路径。 ? 打开串口。 ? 输入发送数据(类型应与接收相同)。 ? 手动或自动发送数据。 ? 点击“保存显示数据”保存接收数据区数据到文件RecXX.txt。 ? 关闭串口。 注:如果没有相应串口或串口被占用时,软件会弹出“没有发现此串口”的提示。

1.2. PortMon 串口监听工具: 用来监听上下位机串口相关操作,并截获收发数据的串口工具。不占用串口资源, 但在进行监听前,要保证相应串口不被占用,否则无法正常监听数据。 连接状态 菜单栏 工具栏 截获数据显示区 PortMon 设置及使用: 1). 确保要监听的串口未被占用。 如果串口被占用,请关闭相应串口的应用程序。比如:要监视MCGS 软件与串口1设备通讯,应该先关闭MCGS 软件。 说明:PortMon 虽不占用串口资源,但在使用前必须确保要监听的串口未被占用,否则无法进行监视。 2). 运行PortMon,并进行相应设置。 ? 连接设置: 在菜单栏选择“计算机(M)”->“连接本地(L)”。如果连接成功,则连接状态显示为“PortMon 于\\计算机名(本地)”。如下图:

串口通信基本接线方法要点

串口通信基本接线方法 龚建伟2001.6.20 目次:1.DB9和DB25的常用信号脚说明 2.RS232C串口通信接线方法 3.串口调试中要注意的几点 目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连,以回答前段网友的咨询。 1.DB9和DB25的常用信号脚说明 2.RS232C串口通信接线方法(三线制) 首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连 ?同一个串口的接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连; ?两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口)

上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接,就能百战 百胜。 3.串口调试中要注意的几点: ?不同编码机制不能混接,如RS232C不能直接与RS422接口相连,市面上专门的各种转换器卖,必须通过转换器才能连接; ?线路焊接要牢固,不然程序没问题,却因为接线问题误事; ?串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果; ?强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。

Arduino编程语言

Arduino编程参考手册 首页 程序结构变量基本函数

程序结构 (本节直译自Arduino官网最新Reference) 在Arduino中, 标准的程序入口main函数在内部被定义, 用户只需要关心以下两个函数: setup() 当Arduino板起动时setup()函数会被调用。用它来初始化变量,引脚模式,开始使用某个库,等等。该函数在Arduino板的每次上电和复位时只运行一次。 loop() 在创建setup函数,该函数初始化和设置初始值,loop()函数所做事的正如其名,连续循环,允许你的程序改变状态和响应事件。可以用它来实时控制arduino板。 示例:

控制语句 if if,用于与比较运算符结合使用,测试是否已达到某些条件,例如一个输入数据在某个范围之外。使用格式如下: 该程序测试value是否大于50。如果是,程序将执行特定的动作。换句话说,如果圆括号中的语句为真,大括号中的语句就会执行。如果不是,程序将跳过这段代码。大括号可以被省略,如果这么做,下一行(以分号结尾)将成为唯一的条件语句。

圆括号中要被计算的语句需要一个或多个操作符。 if...else 与基本的if语句相比,由于允许多个测试组合在一起,if/else可以使用更多的控制流。例如,可以测试一个模拟量输入,如果输入值小于500,则采取一个动作,而如果输入值大于或等于500,则采取另一个动作。代码看起来像是这样:

else中可以进行另一个if测试,这样多个相互独立的测试就可以同时进行。每一个测试一个接一个地执行直到遇到一个测试为真为止。当发现一个测试条件为真时,与其关联的代码块就会执行,然后程序将跳到完整的if/else结构的下一行。如果没有一个测试被验证为真。缺省的else语句块,如果存在的话,将被设为默认行为,并执行。 注意:一个else if语句块可能有或者没有终止else语句块,同理。每个else if分支允许有无限多个。

串口通信的接线方法

目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422、RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。 1、DB9和DB25的常用信号脚说明 2、RS232C串口通信接线方法(三线制) 首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连同一个串口的接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连; 两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口) 图2 上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接,就能百战百胜。 3、串口调试中要注意的几点: 不同编码机制不能混接,如RS232C不能直接与RS422接口相连,市面上专门的各种转换器卖,必须通过转换器才能连接; 线路焊接要牢固,不然程序没问题,却因为接线问题误事;

串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果; 强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。 RS232C标准串口接线方法 (第二版) 检验仪器与微机的通讯主要是以RS232C标准接口为主,而串口的接线方法也有一定的标准,在此谈谈几种常用的串口接法,仅作参考: 一、标准接法 1、9对9(包括9针对9孔,9孔对9孔,9针对9针): 说明:以下的孔、针指串口线两端的串口,不过2、3有可能不交换 2-------------3 3-------------2 4-------------6 5-------------5 6-------------4 7-------------8 8-------------7 2、9对25(包括9孔对25孔,9孔对25针) 2-------------3 (备注:2、3有可能不交换) 3-------------2 4-------------6 5-------------7 6-------------20 7-------------5 8-------------4

串行通信接口标准详解

几种串行通信接口标准详解 在数据通信、计算机网络以及分布式工业控制系统中,经常采用串行通信来交换数据和信息。1969年,美国电子工业协会(EIA)公布了RS-232C作为串行通信接口的电气标准,该标准定义了数据终端设备(DTE)和数据通信设备(DCE)间按位串行传输的接口信息,合理安排了接口的电气信号和机械要求,在世界范围内得到了广泛的应用。但它采用单端驱动非差分接收电路,因而存在着传输距离不太远(最大传输距离15m)和传送速率不太高(最大位速率为20Kb/s)的问题。远距离串行通信必须使用Modem,增加了成本。在分布式控制系统和工业局部网络中,传输距离常介于近距离(<20m=和远距离(>2km)之间的情况,这时RS-232C(25脚连接器)不能采用,用Modem又不经济,因而需要制定新的串行通信接口标准。 1977年EIA制定了RS-449。它除了保留与RS-232C兼容的特点外,还在提高传输速率,增加传输距离及改进电气特性等方面作了很大努力,并增加了10个控制信号。与RS-449同时推出的还有RS-422和RS-423,它们是RS-449的标准子集。另外,还有RS-485,它是RS-422的变形。RS-422、RS-423是全双工的,而RS-485是半双工的。 RS-422标准规定采用平衡驱动差分接收电路,提高了数据传输速率(最大位速率为10Mb/s),增加了传输距离(最大传输距离1200m)。 RS-423标准规定采用单端驱动差分接收电路,其电气性能与RS-232C几乎相同,并设计成可连接RS-232C和RS-422。它一端可与RS-422连接,另一端则可与RS-232C连接,提供了一种从旧技术到新技术过渡的手段。同时又提高位速率(最大为300Kb/s)和传输距离(最大为600m)。 因RS-485为半双工的,当用于多站互连时可节省信号线,便于高速、远距离传送。许多智能仪器设备均配有RS-485总线接口,将它们联网也十分方便。 串行通信由于接线少、成本低,在数据采集和控制系统中得到了广泛的应用,产品也多种多样 一.RS-232-C详解 串行通信接口标准经过使用和发展,目前已经有几种。但都是在RS-232标准的基础上经过改进而形成的。所以,以RS-232C为主来讨论。RS-323C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在0~20000b/s范围内的通信。这个标准对串行通信接口的有关问题,如信号线功能、电器特性都作了明确规定。由于通行设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信接口中广泛采用。 在讨论RS-232C接口标准的内容之前,先说明两点: 首先,RS-232-C标准最初是远程通信连接数据终端设备DTE(Data Terminal Equipment)与数据通信设备DCE(Data Communication Equipment)而制定的。因此这个标准的制定,并未考虑计算机系统的应用要求。但目前它又广泛地被借来用于计算机(更准确的说,是计算机接口)与终端或外设之间的近端连接标准。显然,这个标准的有些规定及和计算机系统是不一致的,甚至是相矛盾的。有了对这种背景的了解,我们对RS-232C 标准与计算机不兼容的地方就不难理解了。 其次,RS-232C标准中所提到的“发送”和“接收”,都是站在DTE立场上,而不是站在DCE的立场来定义的。由于在计算机系统中,往往是CPU和I/O设备之间传送信息,两者都

工业控制--串口通讯方法(精)

工业控制--串口通讯方法(WINAPI实现)介绍介绍工业控制领域利用串口和外围设备进行通讯。正文前言:总所周之,利用串口进行数据通讯在在通讯通讯领域重占有着重要的地位。利用RS232-RS485进行数据信号的采集和传递是VC 编程的又一大热点。串口通讯在通讯软件重有着十分广泛的应用。如电话、传真、视频和各种控制等。在各种开发工具中间,VC由于功能强大和灵活,同时也得到了Microsoft的最大支持,所以在一般进行涉及硬件操作的通讯编程重,大都推荐使用VC作为开发工具。然而工业控制串口通讯这个又不同于一般的串口通讯程序,因为控制外围设备传送的大都是十六进制数据(BYTE类型),所以,为了提高程序的运行稳定性,我们在编写程序进行通讯时可以不考虑传送BYTE类型数 据的工作。串口通讯目前流行的方法大概有两种:一是利用Microsoft提供的CMSCOMM控件进行通讯,不过现在很多程序员都觉应该放弃这种方式。二是利用WINAPI函数进行编程,这种编程的难度最高,要求你要掌握很多的API函 数。三是利用现在网络上面提供的一些串口通讯控件进行编写,比如CSerial类等。程序实现:我在经过许多的项目的开发和实践中发现,采用WIN API函数进行串口的开发能够给程序员很大的控件,并且程序运也很稳定。所以我将与串口接触的函数进行封装,然后在各个工程中进行调用,效果还是比较好的,现将各个函数和调用方法列举出来,希望对各位有所帮助。一、设置串口相关工作 #define MAXBLOCK 2048 #define XON 0x11 #define XOFF 0x13 BOOL SetCom(HANDLE &m_hCom, const char *m_sPort, int BaudRate, int Databit, CString parity, CString stopbit { COMMTIMEOUTS TimeOuts; ///串口输出时间超时设置 DCB dcb; ///与端 口匹配的设备 m_hCom=CreateFile(m_sPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL; // 以重叠方式打开串口 if(m_hCom==INVALID_HANDLE_VALUE { AfxMessageBox("设置串口部分,串口打开失败"; /////重叠方式异步通信(INVALID_HANDLE_VALUE)函数失败。return FALSE; } SetupComm(m_hCom,MAXBLOCK,MAXBLOCK; //设置缓冲区memset(&TimeOuts,0,sizeof(TimeOuts; TimeOuts.ReadIntervalTimeout=MAXDWORD; // 把间隔超时设为最大,把总超时设为0将导致ReadFile立即返回并完成操作

ARDUINO入门及其简单实验7例

ARDUINO入门及其简单实验(7例) (1) 1. Arduino硬件开发平台简介 (1) 1.1 Arduino的主要特色 (2) 1.2 Arduino的硬件接口功能描述 (3) 1.3 Arduino的技术性能参数 (3) 1.4 电路原理图 (4) 2. Arduino软件开发平台简介 (5) 2.1 菜单栏 (5) 2.2 工具栏 (6) 2.3 Arduino 语言简介 (6) 3. Arduino开发实例中所用部分器件 (8) 1. LED简介 (8) 2. 光敏电阻简介 (9) 3. 直流电机简介 (9) 4. 电位器简介 (10) 4. Arduino平台应用开发实例 (10) 4.1【实作项目一】利用LED作光敏电阻采样实验 (10) 4.2【实作项目二】利用PWM信号控制LED亮度 (12) 4.3【实作项目三】单键控制一只LED的亮灭 (15) 4.4【实作项目四】利用PWM控制直流电机转速 (17) 4.5【实作项目五】利用电位器手控LED亮度 (19) 4.6【实作项目六】控制LED明暗交替 (21) 4.7【实作项目七】利用光敏电阻控制LED的亮灭 (23) ARDUINO入门及其简单实验(7例) 1. Arduino硬件开发平台简介 Arduino硬件是一块带有USB的I/O接口板(其中包括13条数字I/O引脚,6通道模拟输出,6通道模拟输入),并且具有类似于Java、C语言的集成开发环境。Arduino 既可以扩展一些外接的电子元器件,例如开关、传感器、LED、直流马达、步进马达或其他输入、输出装置;Arduino也可以独立运行,成为一个可以跟交互软件沟通的接口装置,例如:Flash、Processing、Max/MSP、VVVV或其他互动软件。Arduino 开发环境IDE全部开放源代码,可以供大家免费下载、利用,还可以开发出更多激发人们制作欲望的互动作品。

串口通信测试方法

串口通信测试方法 1 关于串口通信的一些知识: RS-232C是目前最常用的串行接口标准,用来实现计算机和计算机之间、计算机和外设之间的数据通信。 在PC机系统中都装有异步通信适配器,利用它可以实现异步串行通信。而且MCS-51单片机本身具有一个全双工的串行接口,因此只要配以电平转换的驱动电路、隔离电路就可以组成一个简单可行的通信接口。 由于MCS-51单片机的输入和输出电平为TTL电平,而PC机配置的是RS-232C 标准串行接口,二者电气规范不一致,因此要完成PC机与单片机的数据通信,必须进行电平转换。 注明:3)RS-232C上传送的数字量采用负逻辑,且与地对称 逻辑1:-3 ~-15V 逻辑0:+3~+15V 所以与单片机连接时常常需要加入电平转换芯片: 2 实现串口通信的三个步骤: (1)硬件连接 51单片机有一个全双工的串行通讯口,所以单片机和计算机之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如计算机的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换。我们采用了三线制连接串口,也就是说和计算机的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。 使用MAX232串口通信电路图(9孔串口接头) (2)串行通信程序设计 ①通信协议的使用 通信协议是通信设备在通信前的约定。单片机、计算机有了协议这种

约定,通信双方才能明白对方的意图,以进行下一步动作。假定我们需要在PC 机与单片机之间进行通信,在设计过程中,有如下约定:

测试电脑的串口是否是好的最完整最可靠的方法就是连接一个真实的串口通信线路

测试电脑的串口是否是好的 最完整最可靠的方法就是 连接一个真实的串口通信线 路(总5页) -CAL-FENGHAI.-(YICAI)-Company One1 -CAL-本页仅作为文档封面,使用请直接删除

测试电脑的串口是否是好的最完整最可靠的方法就是连接一个真实的串口通信线路,2 端用相应软件,如串口调试助手之类的,相互发送发送数据,看另外一端是否能正常接收! 当然,也可以简单的单台机器测试,即短接串口的 2、3 两针,用相应软件,如串口调试助手,发送数据,看能否回显发送的数据 串口测试工具使用说明之一——串口调试工具 回复 6|人气 1387|收藏|打印|推荐给版主 分享文章到: ye_w 个人主页给TA发消息加TA为好友发表于:2010-09-30 19:52:48 楼主 使用串口实现网络通讯,不仅仅需要熟悉控制双方的指令和相关的协议,而且还需要善于使用串口测试工具。在串口测试工具中,最常用的就是串口调试工具。这个串口调试工具网络上一大把,大家百度一下就能下载到(包括我逐步发布的调试工具,都不会提供资源,请大家直接去网络上查找),常用的包括:串口调试助手,串口精灵,Comm等。我也一直使用串口调试助手,下面就是用图形并茂的方式来介绍,请大家指出不足,以便共同进步。 串口调试助手,网络上的版本也有不少,我截2个不同版本的图,但本质没有区别 版本一 怎样测试串口和串口线是否正常? 一步:把串口线或者USB转串口线插到计算机上。 二步:打开串口调试助手 接着选择串口,串口线和USB转串口的端口号查看路径: 电脑上--右键--属性--硬件--设备管理器-端口(COM和LPT),点 开端口前面的+号查看即可。 注释:1、USB-SERIAL CH340(COM4)就是USB转串口的端口号 2、通讯端口(COM1)是计算机原来自带的端口号 第三步:设置串口调试助手(见下图) 1、串口:COM4是和串口线或者USB转串口线在上述路径中查看到的端口号。 2、发送的字符/数据:图片上输入的是59,你可以随便输入2位数字。 3、其余设置按照下图。

第十五课 Arduino 教程-- Arduino IO函数

第十五课Arduino I/O函数 Arduino板上的引脚可以配置为输入或输出。我们将在这些模式下解释引脚的功能。重要的是要注意,大多数Arduino模拟引脚可以按照与数字引脚完全相同的方式进行配置和使用。 引脚配置为INPUT Arduino引脚默认配置为输入,因此在使用它们作为输入时,不需要使用 pinMode()显式声明为输入。以这种方式配置的引脚被称为处于高阻抗状态。输入引脚对采样电路的要求非常小,相当于引脚前面的100兆欧的串联电阻。 这意味着将输入引脚从一个状态切换到另一个状态所需的电流非常小。这使得引脚可用于诸如实现电容式触摸传感器或读取LED作为光电二极管的任务。 被配置为pinMode(pin,INPUT)的引脚(没有任何东西连接到它们,或者有连接到它们而未连接到其他电路的导线),报告引脚状态看似随机的变化,从环境中拾取电子噪音或电容耦合附近引脚的状态。 上拉电阻 如果没有输入,上拉电阻通常用于将输入引脚引导到已知状态。这可以通过在输入端添加上拉电阻(到5V)或下拉电阻(接地电阻)来实现。10K电阻对于上拉或下拉电阻来说是一个很好的值。 使用内置上拉电阻,引脚配置为输入 Atmega芯片内置了2万个上拉电阻,可通过软件访问。通过将pinMode()设置为INPUT_PULLUP可访问这些内置上拉电阻。这有效地反转了INPUT模式的行为,其中HIGH表示传感器关闭,LOW表示传感器开启。此上拉的值取决于所使用的微控制器。在大多数基于AVR的板上,该值保证在20kΩ和50kΩ之间。在Arduino Due上,它介于50kΩ和150kΩ之间。有关确切的值,请参考板上微控制器的数据表。 当将传感器连接到配置为INPUT_PULLUP的引脚时,另一端应接地。在简单开关的情况下,这会导致当开关打开时引脚变为高电平,当按下开关时引脚为低电平。上拉电阻提供足够的电流来点亮连接到被配置为输入的引脚的LED。如果项目中的LED似乎在工作,但很昏暗,这可能是发生了什么。 控制引脚是高电平还是低电平的相同寄存器(内部芯片存储器单元)控制上拉电阻。因此,当引脚处于INPUT模式时,配置为有上拉电阻导通的引脚将被开启;如果引脚通过

测试电脑的串口是否是好的 最完整最可靠的方法 就是 连接一个真实 的串口通信线路

测试电脑的串口是否是好的最完整最可靠的方法就是连接一个真实的串口通信线路,2 端用相应软件,如串口调试助手之类的,相互发送发送数据,看另外一端是否能正常接收! 当然,也可以简单的单台机器测试,即短接串口的2、3 两针,用相应软件,如串口调试助手,发送数据,看能否回显发送的数据 串口测试工具使用说明之一——串口调试工具 回复 6 | 人气1387 | 收藏 | 打印 | 推荐给版主 分享文章到: ye_w 个人主页给TA发消息加TA为好友发表于:2010-09-30 19:52:48 楼主 使用串口实现网络通讯,不仅仅需要熟悉控制双方的指令和相关的协议,而且还需要善于使用串口测试工具。在串口测试工具中,最常用的就是串口调试工具。这个串口调试工具网络上一大把,大家百度一下就能下载到(包括我逐步发布的调试工具,都不会提供资源,请大家直接去网络上查找),常用的包括:串口调试助手,串口精灵,Comm等。我也一直使用串口调试助手,下面就是用图形并茂的方式来介绍,请大家指出不足,以便共同进步。 串口调试助手,网络上的版本也有不少,我截2个不同版本的图,但本质没有区别 版本一 怎样测试串口和串口线是否正常 一步:把串口线或者USB转串口线插到计算机上。 二步:打开串口调试助手

接着选择串口,串口线和USB转串口的端口号查看路径: 电脑上--右键--属性--硬件--设备管理器-端口(COM和LPT),点 开端口前面的+号查看即可。 注释:1、USB-SERIAL CH340(COM4)就是USB转串口的端口号 2、通讯端口(COM1)是计算机原来自带的端口号 第三步:设置串口调试助手(见下图) 1、串口:COM4是和串口线或者USB转串口线在上述路径中查看到的端口号。 2、发送的字符/数据:图片上输入的是59,你可以随便输入2位数字。 3、其余设置按照下图。

三菱_FX系列PLC串口通讯配置方法

WebAccess 与三菱 FX系列PLC串口通讯配置方法 WebAccess三菱FX系列驱动支持以下型号PLC:FX, FX0, FX0N, FX1N,FX2N,FX1S等。FX系列PLC与上位机软件的通讯方式分为:RS232与RS485两种模式,默认通讯参数如下:波特率:9600,数据位:7位,停止位:1位,奇偶校验:偶校验,下面分别从两个方面进行配置说明: 一、RS232方式通讯 通常情况下,三菱FX系列PLC通过编程口(PS/2)与上位机软件进行RS232模式通讯,此时PLC中不需要做特殊配置,只需在WebAccess中将PLC对应的通讯参数匹配即可。步骤如下: 1、添加通讯端口 图1 添加通讯端口 数据流控(Flow Control):Rts、Dtr握手协议 当使用RS232/RS485转换器进行通讯连接时,数据流控信号将根据该转换器的流 控功能来决定。有些RS232/RS485转换器不需要软件做任何类型的握手协议,而有些 则需要软件进行Rts信号握手协议。强烈建议用户选择具有自动流控的RS232/RS485 转换器。 2、添加设备

图2 设备参数配置 单元号:实际PLC的串行地址号,即Device ID。单个PLC可以默认0进行通讯。 3、添加IO点 根据下图中的“参数”栏选择合适的参数类型(模拟量、数字量)和相应的转换代码。 图3 添加IO点

表1

二、RS485方式通讯 为便于远距离通讯,三菱FX2N系列PLC通过FX2N-485-BD模块实现RS485方式与WebAccess软件通讯,安装FX2N-485-BD需设置PLC的D8120寄存器,请参照《FX通讯用户手册》。FX2N-485-BD通讯模块如下图: FX2N-485-BD模块安装位置图: 图4 FX2N-485-BD模块及接线图 (1)三菱PLC配置方法步骤 1、FXGP/WIN-C编程软件配置方法 使用FXGP/WIN-C编程软件来进行串行口设置。用SC-09编程电缆连接电脑与PLC,在“PLC”下拉菜单中选择“串行口设置(D8120)” 图5 FXGP/WIN-C编程软件串口通讯参数配置 如下图所示,在“硬件”下拉框中选择“RS-485”,在“控制线”下拉框中选择“H/W mode”。

Arduino BLE 函数库中文

备注: Arduino Function: BLEPeripheral.connected() (缺失) Arduino BLE 函数库 描述 蓝牙低功耗(BLE)协议从蓝牙规范版本4.0开始。虽然以前的规范只允许制作一种无线UART,但该版本允许更智能的资源使用。结果是适用于大多数具有限制能量需求的芯片的低功率通信。BLE协议由多个角色组成。BLE节点可以作为外设,中央,广播和观察者。 广播角色周期性地发送具有数据的广告包。它不支持建立连接。理论上,广播机构的角色可以用于仅发射机的无线电。 观察者角色收听来自广播对等体的广告数据包中嵌入的数据。 中心是能够建立到对等体的多个连接的设备。中心角色始终是连接的发起者,并且基本上允许设备进入网络。 外设使用广告包来允许中心找到它,并且随后建立与之的连接。BLE协议经过优化,至少在处理能力和内存方面要求极少的外设实现资源。 中央和外围设备不得与客户端和服务器错误。他们之间没有联系。中央和外围设备可以是客户机,服务器或两者,具体取决于应用

数据结构 BLE数据结构分层组成。属性是定义的最小数据实体。属性被分组到服务中,每个服务可以包含零个或多个特征。这些特征又可以包括零个或多个描述符。 每个服务,特征和描述符都由UUID标识。 通用唯一标识符(UUID)是保证(或具有高概率)的全局唯一的128位(16字节)数字。您可以定义自己的UUID或使用标准的UUID。 每个属性都可以有权限。 权限是指定可以对每个特定属性执行哪些操作以及具体安全要求的元数据。 广告包(广播包) 广告包是周边中心知道可用的方式。在广告包中有关于外设的主要信息。广告包长度为31字节,并且必须符合减少内部有效信息数量的特定格式。如果中心想要进一步的信息,它可以发送一个扫描请求来请求另一个称为扫描响应的数据包,以便拥有其他31字节的信息。如果您没有足够的数据传输,并且31字节(或62个最终)广告数据包就足够了,您可以实现广播者角色并传输数据,而无需建立连接。如果您有更多的数据要传输,则必须执行外设角色进行传输。 有关广告包的进一步信息可以在此链接中找到,其中包含对此参数的基本介绍。 更多信息 在本节中,我们尝试简要介绍BLE标准。然而,BLE标准比这更广泛。如果你想加深一些争论,那里是链接到BLE标准规范: https://https://www.sodocs.net/doc/6016466330.html,/specifications/bluetooth-core-specification 有关BLE的其他有用信息及其在nRF52上的工作方式可以在北欧半导体网站上找到:https://https://www.sodocs.net/doc/6016466330.html,/index.jsp 北欧还提供了一个有用的应用程序,通过BLE与您的板进行交互。使用此应用程序可以读写特性并调试BLE通信: https://https://www.sodocs.net/doc/6016466330.html,/eng/Products/Nordic-mobile-Apps/nRF-Connect-for -mobile-previously-called-nRF-Master-Control-Panel 相关功能

RS-485串行接口标准

RS-485串行接口标准 1、平衡传输 RS-485数据信号采用差分传输方式,也称作平衡传输,它使用一对双绞线,将其中一线定义为A,另一线定义为B,通常情况下,发送驱动器A、B之间的正电平在+2~+6V,是一个逻辑状态,负电平在-2~6V,是另一个逻辑状态。另有一个信号地C,在RS-485中还有一“使能”端,而在RS-422中这是可用可不用的。“使能”端是用于控制发送驱动器与传输线的切断与连接。当“使能”端起作用时,发送驱动器处于高阻状态,称作“第三态”,即它是有别于逻辑“1”与“0”的第三态。 接收器也作与发送端相对的规定,收、发端通过平衡双绞线将AA与BB对应相连,当在收端AB之间有大于+200mV的电平时,输出正逻辑电平,小于-200mV时,输出负逻辑电平。接收器接收平衡线上的电平范围通常在200mV至6V之间。 2、RS-485电气规定 由于RS-485是从RS-422基础上发展而来的,所以RS-485许多电气规定与RS-422相仿。如都采用平衡传输方式、都需要在传输线上接终接电阻等。RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信,而采用四线连接时,与RS-422一样只能实现点对多的通信,即只能有一个主(Master)设备,其余为从设备,但它比RS-422有改进,无论四线还是二线连接方式总线上可多接到32个设备。 RS-485与RS-422的不同还在于其共模输出电压是不同的,RS-485是-7V至+12V之间,而RS-422在-7V至+7V之间,RS-485接收器最小输入阻抗为12k剑 鳵S-422是4k健; 旧峡梢运礡S-485满足所有RS-422的规范,所以RS-485的驱动器可以用在RS-422网络中应用。 RS-485与RS-422一样,其最大传输距离约为1219米,最大传输速率为10Mb/s。平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能使用规定最长的电缆长度。只有在很短的距离下才能获得最高速率传输。一般100米长双绞线最大传输速率仅为1Mb/s RS-485需要2个终接电阻,其阻值要求等于传输电缆的特性阻抗。在矩距离传输时可不需终接电阻,即一般在300米以下不需终接电阻。终接电阻接在传输总线的两端。 在MCU之间中长距离通信的诸多方案中、RS-485因硬件设计简单、控制方便、成本低廉等优点广泛应用于工厂自动化、工业控制、小区监控、水利自动报测等领域、但RS-485总线在抗干扰、自适应、通信效率等方面仍存在缺陷、一些细节的处理不当常会导致通信失败甚至系统瘫痪等故障、因此提高RS-485总线的运行可靠性至关重要、 1 RS-485接口电路的硬件设计

相关主题