简单串口通讯_参数设置

简单串口通讯_参数设置
简单串口通讯_参数设置

using System;

using System.Collections.Generic;

using https://www.360docs.net/doc/ec7287687.html,ponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace 串口通讯

{

public partial class frmDataExchange : Form

{

public frmDataExchange()

{

InitializeComponent();

}

private void frmDataExchange_Load(object sender, EventArgs e)

{

int index;

int count = 1;

for (int i = 1; i <= 10; i++)

{

this.cboxCOM.Items.Add("COM" + i);

}

for (int i = 1; i < 10; i++)

{

index = count * 300;

this.cboxBaudRate.Items.Add(index);

count *= 2;

}

this.cboxCOM.SelectedIndex = 0;

this.cboxBaudRate.SelectedIndex = 0;

this.txtSend.Enabled = false;

this.txtRecieve.Enabled = false;

this.btnSend.Enabled = false;

}

private void cboxCOM_SelectedIndexChanged(object sender, EventArgs e)

{

this.spDataExchange.PortName = this.cboxCOM.Text;

}

private void cboxBaudRate_SelectedIndexChanged(object sender, EventArgs e) {

this.spDataExchange.BaudRate = int.Parse(this.cboxBaudRate.Text);

}

private void btnOpen_Click(object sender, EventArgs e)

{

try

{

if (btnOpen.Text == "打开串口")

{

btnOpen.Text = "关闭串口";

this.spDataExchange.Open();

MessageBox.Show("已经打开串口");

this.txtSend.Enabled = true;

this.txtRecieve.Enabled = true;

this.txtSend.Enabled = true;

}

else

{

btnOpen.Text = "打开串口";

this.spDataExchange.Close();

MessageBox.Show("已经关闭串口");

}

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

private void btnSend_Click(object sender, EventArgs e)

{

try

{

if (txtSend.Text == string.Empty)

{

MessageBox.Show("输入的字符串不能为空");

txtSend.Focus();

}

else

{

this.spDataExchange.WriteLine(txtSend.Text);

txtSend.Text = "";

txtSend.Focus();

}

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

private void spDataExchange_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

{

txtRecieve.Text += spDataExchange.ReadExisting();

}

}

}

RS232串口通信详解

RS232串口通信详解(引脚定义,电气特性,传输格式,接收过程,单片机晶振,RS485,RS422) 通信原理知识2010-01-03 20:53 阅读1 评论0 字号:大中小RS232串口通信详解(引脚定义,电气特性,传输格式,接收过程,单片机晶振,RS485,RS422) 串口是计算机上一种非常通用的设备通信协议。 --------------------------------- 串口的引脚定义: 信号方向来 9芯 缩写描述 自 1调制解调器CD载波检测 2调制解调器RXD接收数据 3PC TXD发送数据 4PC DTR数据终端准备好 5GND信号地 6调制解调器DSR通讯设备准备好 7PC RTS请求发送 8调制解调器CTS允许发送 9调制解调器RI响铃指示器

两个串口连接时,接收数据针脚与发送数据针脚相连,彼此交叉,信号地对应相接即可。 --------------------------------- 串口的电气特性: 1)RS-232串口通信最远距离是50英尺 2)RS232可做到双向传输,全双工通讯,最高传输速率20kbps 3)RS-232C上传送的数字量采用负逻辑,且与地对称 逻辑1:-3 ~-15V 逻辑0:+3~+15V 所以与单片机连接时常常需要加入电平转换芯片: --------------------------------- 串口通信参数: a)波特率:RS-232-C标准规定的数据传输速率为每秒50、75、 100、150、300、600、1200、2400、4800、9600、19200波特。 b)数据位:标准的值是5、7和8位,如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位);扩展的ASCII码是0~255(8位)。 c)停止位:用于表示单个包的最后一位,典型的值为1,1.5和2位。由于数是在传输线上定时的,并且每一

8251串行通讯实验

安徽师范大学数计学院实验报告 专业名称11计科 课程微机原理 实验名称串行通信实验姓名 学号110704012

8251 可编程串行口与PC 机通讯实验 一、实验目的 (1) 掌握8251 芯片的结构和编程,掌握微机通讯的编制。 (2) 学习有关串行通讯的知识。 (3) 学习PC 机串口的操作方法。 二、实验说明 1、8251 信号线 8251 是CPU 与外设或Mode 之间的接口芯片,所以它的信号线分为两组:一组是用于与CPU 接口 的信号线,另一组用于与外设或Mode 接口。 (1)与CPU 相连的信号线: 除了双向三态数据总线(D7~D0)、读(RD)、写(WR)、片选(CS)之外,还有: RESET:复位。通常与系统复位相连。 CLK:时钟。由外部时钟发生器提供。 C/D:控制/数据引脚。 TxRDY:发送器准备好,高电平有效。

TxE:发送器空,高电平有效。 RxRDY:接收器准备好,高电平有效。 SYNDET/BRKDET:同步/中止检测,双功能引脚。 (2)与外设或Mode 相连的信号线: DTR:数据终端准备好,输出,低电平有效。 DSR:数据装置准备好,输入,低电平有效。 RTS:请求发送,输出,低电平有效。 CTS:准许传送,输入,低电平有效。 TxD:发送数据线。 RxD:接收数据线。 TxC:发送时钟,控制发送数据的速率。 RxC:接收时钟,控制接收数据的速率。 2、8251 的初始化编程和状态字 8251 是一个可编程的多功能串行通信接口芯片,在使用前必须对它进行初始化编程。初始化编 程包括CPU 写方式控制字和操作命令字到8251 同一控制口,在初始化编程时必须按一定的顺序。如 下面的流程图:

51单片机串口通信,232通信,485通信,程序

51单片机串口通信,232通信,485通信,程序代码1:232通信 #include #define uchar unsigned char #define uint unsigned int uchar flag,a,i; uchar code table[]="i get"; void init() { TMOD=0X20; TH1=0XFD; TH0=0XFD; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; } void main() { init();

while(1) { if(flag==1) { ES=0; for(i=0;i<6;i++) { SBUF=table[i]; while(!TI); TI=0; } SBUF=a; while(!TI); TI=0; ES=1; flag=0; } } } void ser() interrupt 4 {

RI=0; a=SBUF; flag=1; } 代码2:485通信 #include #include"1602.h" #define uchar unsigned char #define uint unsigned int unsigned char flag,a,i; uchar code table[]="i get "; void init() { TMOD=0X20; TH1=0Xfd; TL1=0Xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1;

} void main() { init_1602(); init(); while(1) { if(flag==1) { display(0,a); } } } void ser() interrupt 4 { RI=0; a=SBUF; flag=1; } Love is not a maybe thing. You know when you love someone.

串口通信实验讲解

课程名称:Zigbee技术及应用实验项目:串口通信实验指导教师: 专业班级:姓名:学号:成绩: 一、实验目的: (1)认识串口通信的概念; (2)学习单片机串口通信的开发过程; (3)编写程序,使单片机与PC通过串口进行通信。 二、实验过程: (1)根据实验目的分析实验原理; (2)根据实验原理编写C程序; (3)编译下载C程序,并在实验箱上观察实验结果。 三、实验原理: 串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送,此时只需要一条数据线,外加一条公共信号地线和若干条控制信号线。因为一次只能传送一位,所以对于一个字节的数据,至少要分8位才能传送完毕,如图3-1所示。 图2-1串行通信过程 串行通信制式: (1)单工制式 这种制式是指甲乙双方通信时只能单向传送数据,发送方和接收方固定。 (2)半双工制式 这种制式是指通信双方都具有发送器和接收器,即可发送也可接收,但不能同时接收和发送,发送时不能接收,接收时不能发送。

(3)全双工制式 这种制式是指通信双方均设有发送器和接收器,并且信道划分为发送信道和接收信道,因此全双工制式可实现甲乙双方同时发送和接收数据,发送时能接收,接收时能发送。 三种制式分别如图3-2所示 图3-2串行通信制式 3.1硬件设计原理 CC2530有两个串行通信接口USART0和USART1,两个USART具有同样的功能,可已分别运行于UART模式和同步SPI模式。 CC2530的两个串行通信接口引脚图分布如表3-1所示 表3-1 CC2530串行通信口引脚图分布 本实验CC2530模块使用的是USART1的位置2,P1_6和P1_7。

单片机串口通信C程序及应用实例

一、程序代码 #include//该头文件可到https://www.360docs.net/doc/ec7287687.html,网站下载#define uint unsigned int #define uchar unsigned char uchar indata[4]; uchar outdata[4]; uchar flag; static uchar temp1,temp2,temp3,temp; static uchar R_counter,T_counter; void system_initial(void); void initial_comm(void); void delay(uchar x); void uart_send(void); void read_Instatus(void); serial_contral(void); void main() { system_initial(); initial_comm(); while(1) { if(flag==1) { ES = 0; serial_contral(); ES = 1; flag = 0; } else read_Instatus(); } } void uart_send(void) { for(T_counter=0;T_counter<4;T_counter++) { SBUF = outdata[T_counter]; while(TI == 0);

TI = 0; } T_counter = 0; } uart_receive(void) interrupt 4 { if(RI) { RI = 0; indata[R_counter] = SBUF; R_counter++; if(R_counter>=4) { R_counter = 0; flag = 1; } } } void system_initial(void) { P1M1 = 0x00; P1M0 = 0xff; P1 = 0xff; //初始化为全部关闭 temp3 = 0x3f;//初始化temp3的值与六路输出的初始值保持一致 temp = 0xf0; R_counter = 0; T_counter = 0; } void initial_comm(void) { SCON = 0x50; //设定串行口工作方式:mode 1 ; 8-bit UART,enable ucvr TMOD = 0x21; //TIMER 1;mode 2 ;8-Bit Reload PCON = 0x80; //波特率不加倍SMOD = 1 TH1 = 0xfa; //baud: 9600;fosc = 11.0596 IE = 0x90; // enable serial interrupt TR1 = 1; // timer 1 RI = 0; TI = 0; ES = 1; EA = 1; }

串口通信的接线方法

目前较为常用的串口有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

单片机串行通信实验

单片机实验报告 实验名称:串行通信实验 姓名:高知明 学号:110404320 班级:通信3 实验时间:2014-6-11 南京理工大学紫金学院电光系

一、实验目的(四号+黑体) 1、理解单片机串行口的工作原理; 2、学习使用单片机的TXD\RXD口; 3、了解MAX232芯片的作用; 二、实验原理 MCS-51单片机内部集成有一个UART,用于全双工方式的串行通信,可以发送、接收数据。他有两个相互独立的接收、发送缓冲器,这两个缓冲器同名(SBUF),共用一个地址号(99H)。发送缓冲器只能写入,不能读出,接受缓冲器只能读出,不能写入。要发送的字节数据直接写入发送缓冲器。SBUF=a;当UART接收到数据后,CPU从接收缓冲器中读取数据,a=SBUF;串行口内部有两个移位寄存器,一个用于串行发送,一个用于串行接收。定时器T1作为波特率发生器,波特率发生器的溢出信号昨接受或发送移位寄存器的位移时钟。TI与RI分别为发送完数据的中断标志,用来想CPU发中断请求。 三、实验内容 1、发送信号 1)C51程序: #include void main(void) { SCON=0X40; //设置串口为接受,REN=0 PCON=0; //波特率不倍频 REN=1; TMOD=0X20; //启动定时器1的方式2 TH1=0XFD; TL1=0XFD; //初值:0XFD TR1=1; //启动定时器1 while(1) {SBUF='U'; while(!TI); TI=0; //发送中断清0 }} 2)硬件图:

2、接受装置: 1)C51程序: #include char s[32]; void main(void) { char a,b=0; SCON=0X40; //设置串口为接受,REN=0 PCON=0; //波特率不倍频 REN=1; TMOD=0X20; //启动定时器1的方式2 TH1=0XFD; TL1=0XFD; //初值:0XFD TR1=1; //启动定时器1 a=32; for(;b

Qt编写串口通信程序

Qt编写串口通信程序图文详解 (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自己改动。) 在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类。我们可以去 https://www.360docs.net/doc/ec7287687.html,/projects/qextserialport/files/ 进行下载,也可以去下载我上传到网上的: https://www.360docs.net/doc/ec7287687.html,/bbs/read.php?tid=22847 下载到的文件为:qextserialport-1.2win-alpha.zip 其内容如下图: 我们在windows下只需要使用其中的6个文件: qextserialbase.cpp和qextserialbase.h,qextserialport.cpp和qextserialport.h,win_qextseri alport.cpp和win_qextserialport.h 如果在Linux下只需将win_qextserialport.cpp和win_qextserialport.h 换为posix_qextserialpo rt.cpp和posix_qextserialport.h即可。 第一部分: 下面我们将讲述编程的详细过程,这里我们先给出完整的程序,然后到第二部分再进行逐句分析。 1.打开Qt Creator,新建Qt4 Gui Application,工程名设置为mycom,其他使用默认选项。(注意:建立的工程路径不能有中文。) 2.将上面所说的6个文件复制到工程文件夹下,如下图。

串口通讯通信协议技术

串口通讯—通信协议 所谓通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程,它属于ISO'S OSI七层参考模型中的数据链路层。 目前,采用的通信协议有两类:异步协议和同步协议。同步协议又有面向字符和面向比特以及面向字节计数三种。其中,面向字节计数的同步协议主要用于DEC公司的网络体系结构中。 一、物理接口标准 1.串行通信接口的基本任务 (1)实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不同串行通信方式下的数据格式化的任务。在异步通信方式下,接口自动生成起止式的帧数据格式。在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。 (2)进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。因此串并转换是串行接口电路的重要任务。 (3)控制数据传输速率:串行通信接口电路应具有对数据传输速率——波特率进行选择和控制的能力。 (4)进行错误检测:在发送时接口电路对传送的字符数据自动生成奇偶校验位或其他校验码。在接收时,接口电路检查字符的奇偶校验或其他校验码,确定是否发生传送错误。 (5)进行TTL与EIA电平转换:CPU和终端均采用TTL电平及正逻辑,它们与EIA采用的电平及负逻辑不兼容,需在接口电路中进行转换。 (6)提供EIA-RS-232C接口标准所要求的信号线:远距离通信采用MODEM时,需要9根信号线;近距离零MODEM方式,只需要3根信号线。这些信号线由接口电路提供,以便与MODEM或终端进行联络与控制。 2、串行通信接口电路的组成 为了完成上述串行接口的任务,串行通信接口电路一般由可编程的串行接口芯片、波特率发生器、EIA 与TTL电平转换器以及地址译码电路组成。其中,串行接口芯片,随着大规模继承电路技术的发展,通用的同步(USRT)和异步(UART)接口芯片种类越来越多,如下表所示。它们的基本功能是类似的,都能实现

串行口通信实验 单片机实验报告

实验六串行口通信实验 一、实验内容 实验板上有RS-232接口,将该接口与PC机的串口连接,可以实现单片机与PC机的串行通信,进行双向数据传输。本实验要求当PC机向实验板发送的数字在实验板上显示,按实验板键盘输入的数字在PC机上显示,并用串口助手工具软件进行调试。 二、实验目的 掌握单片机串行口工作原理,单片机串行口与PC机的通信工作原理及编程方法。 三、实验原理 51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通信。进行串行通讯信要满足一定的条件,比如电脑的串口是RS232电平(-5~-15V为1,+5~+15V为0),而单片机的串口是TTL电平(大于+2.4V为1,小于- 0.7V为0),两者之间必须有一个电平转换电路实现RS232电平与TTL电平的相互转换。 为了能够在PC机上看到单片机发出的数据,我们必须借助一个Windows软件进行观察,这里我们可以使用免费的串口调试程序SSCOM32或Windows的超级终端。 单片机串行接口有两个控制寄存器:SCON和PCON。串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。在这种方式下,数据为8位,只能从RXD端输入输出,TXD端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12。由软件置位串行控制寄存器(SCON)的REN位后才能启动,串行接收,在CPU将数据写入SBUF寄存器后,立即启动发送。待8位数据输完后,硬件将SCON寄存器的T1位置1,必须由软件清零。 单片机与PC机通信时,其硬件接口技术主要是电平转换、控制接口设计和远近通信接口的不同处理技术。在DOS操作环境下,要实现单片机与微机的通信,只要直接对微机接口的通信芯片8250进行口地址操作即可。WINDOWS的环境下,由于系统硬件的无关性,不再允许用户直接操作串口地址。如果用户要进行串行通信,可以调用WINDOWS的API 应用程序接口函数,但其使用较为复杂,可以使用KEILC的通信控件解决这一问题。 四、实验电路 [参考学习板说明书P27]

java串口通讯程序

java串口通讯程序 1、下载java Communications api开发包。| 是Sun公司提供的,用于开发平台独立的通讯应用程序的扩展API。 2、将拷贝入C:\j2sdk1.4.2_04\bin 3、将拷贝入C:\j2sdk1.4.2_04\jre\lib\ext 4、将拷贝入C:\j2sdk1.4.2_04\jre\lib 5、编译文件 import .*; import .*; import .*; public class CommTest{ public static void main(String[] args){ SerialPort serialPort=null; DataOutputStream doutput=null; InputStream inputStream; CommPortIdentifier portId=null; String messageString="hello \n"; try{ portId=("COM1"); }catch(NoSuchPortException ne) { "ne"); (); } try{ serialPort=(SerialPort) ("TestComm", 5); OutputStream output = (); doutput=new DataOutputStream(output); inputStream = (); }catch(PortInUseException ex) { "ex"); (); }catch(IOException ie) { "ie"); (); //(); } try { (9600, , , ; } catch (UnsupportedCommOperationException e) {} } try { ()); } catch (IOException e) {}

串口通信的基本知识

串口通信的基本知识 串口通信的基本概念 1,什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手? 1,什么是串口? 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus 或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS- 232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配: a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB 设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII 码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对

用C编写的RS232串口通信程序

void main() { delayms(100); init(); //初始化系统 delayms(100); init_wdt(); //初始化看门狗 while(1) { while(!RI_0) //是否收到数据 { clr_wdt(); } RI_0=0; //清除接收中断标志 buffer=S0BUF; if(buffer==0x5a) //检测祯头0 start0=1; if(buffer==0x54) //检测祯头1 start1=1; if(buffer==0x5a) //检测祯尾0 end0=1; if(buffer==0xfe) //检测祯尾1 end1=1; if((start0==1)&(start1==1)) { buff[i]=buffer; //从祯头1开始存储数据 i++; } if((end0==1)&(end1==1)) //是否已经接收祯尾 { count=i; //数据长度为count个 i=1; if((buff[2]==0x03)&(count==107)) //是否422指令 { buff[0]=0x5a; //重填祯头0 buff[count-4]=0; //校验和清零 for(k=2;k<(count-4);k++) //计算校验和 { buff[count-4]+=buff[k]; } for(k=0;k

S0BUF=buff[k]; while(!TI_0); //等待发送完成 TI_0=0; //清除发送中断标志 } reset(); } else if((buff[2]==0x05)&(count==7)) //是否AD测试指令 { sendad(); reset(); } else if((buff[2]==0x18)&(count==7)) //是否发送时序信号指令 { sendpaulse(); reset(); } else //如果接收错误,则恢复各标志位为初始状态以便下次接收 { reset(); } } } } void reset() { start0=0; //祯头祯尾标志位清零 start1=0; end0=0; end1=0; for(k=0;k

单片机与pc串口通信程序及电路图

单片机与pc串口通信程序及电路图 单片机与pc串口通信程序及电路图 #include #define BUFFERLEGTH 10 //----------------------------------------------------------------- void UART_init(); //串口初始化函数 void COM_send(void); //串口发送函数 char str[20]; char j; //------------------------------------------------------------------- void main(void) { unsigned char i; UART_init(); j=0; //初始化串口 for(i = 0;i }; while(1); } //------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // 函数名称:UART_init()串口初始化函数 // 函数功能:在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s // 串口接收中断允许,发送中断禁止 //-------------------------------------------------------------------------------------------------- void UART_init() { //初始化串行口和波特率发生器

51单片机与蓝牙串口通信程序

#include #include #include #include "LCD1602.h" #include "matrix_key.h" #define uint unsigned int #define uchar unsigned char #define Nop() _nop_() sbit P10 = P1^0; /*定义独立对地按键端口*/ sbit P11 = P1^1; /*定义独立对地按键端口*/ sbit P12 = P1^2; /*定义独立对地按键端口*/ sbit P13 = P1^3; /*定义独立对地按键端口*/ //shift键 bit shift_flag; bit call_flag ; bit CallIn_flag=0; bit reci_flag; bit reci_flag1; sbit sled_en_port = P3^6; /*定义数码管数据锁存器控制端口*/ sbit led_en_port = P2^5; /*定义发光二极管数据锁存器控制端口*/ sbit ds1302_en_port = P2^2; /*定义时钟的选片脚*/ uchar CallIn_Num[15];//={"00000000000"}; uchar CallOut_Num[15]={" "}; uchar m=0; //拨号指针 uchar temp='?'; uchar code clr[16]={" "}; uchar code lcd_table[16] = {"Ky: Cm: Re: "}; //uchar send_buff[15]; uchar reci_buff[15]={" "}; uchar z; //接收缓冲区指针 uchar time;//定时器中断次数 uchar code mun_to_char[]={"0123456789ABCDEF"}; /*1MS为单位的延时程序*/ void init(); void send(uchar cc); void send_f(uchar ccc); void interrupt_pro(); void key_pro(); void call_out();

串口通信协议程序

串口通信协议程序 主机程序: /* 主机主要处理 : 主—>从 1.给从机发送命令 2.给从机发送数据 3.命令从机向主机发送数据 从—>主由中断程序处理根据从机发送过来的请求类型 0.请求主机发送命令(包括主到从的1,2命令) 1.请求主机接收数据 2,3保留 */ #include #include #define uchar unsigned char #define uint unsigned int #define slav1_addr 0x01 #define slav2_addr 0x02 #define COMEND 0 #define REC_DATE 1 //主机向从机发送多数据命令高四位为1111,所以其他命令高四位不能为1111 #define cmd_X 0x12 #define cmd_rec_data 0x11 sbit signal=P3^2; uchar temp_addr,num,rec,style,re_addr; uchar buf[20]; uchar rec_data[10];

void delay(unsigned int i) { while(i--); } void init_uart(void) { TMOD=0x20; //定时器方式2--8位reload模式 TH1=0xfd; TL1=0xfd; PCON=0; //波特率不加倍 SCON=0xf0; //方式三 TB8=1; //发送地址时第九位为1 SM2=1; //接收到第九位为1时才能接收数据 TR1=1; //要在设置scon后开定时 ES=1; //开中断 EA=1; } //发送命令 void uart_send_cmd(uchar addr,uchar cmd)//uchar *date) { while(signal==0); //检查总线是否被占 signal=0; //占用总线 EA=0;//关中断 do {

常用通讯测试工具使用

常用通讯测试工具 鉴于很多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 于\\计算机名(本地)”。如下图:

实验1 串行通信实验

计算机通讯网络 随堂实验报告 学院计算机与电子信息学院 专业电子信息工程班级电信08 -1班 姓名程跃斌学号 08034030117 指导教师左敬龙 实验报告评分:_______

实验一串行通信实验 一.实验目的: 1.认识计算机具有串行通信的功能。 2.理解串行通信中数据位、校验位的关系。 3.能利用软件开发具有串行通信功能的程序。 二.实验原理: 计算机上的 机来说是发送数据,对另一台机就是接收数据,所以收、发数据线要换接。连接方法如下。 9芯对9芯串口 A机B机 2●←→●3 3●←→●2 5●←→●5 三.实验仪器: 计算机两台,串行通信电缆一条。 四.实验步骤: 步骤一:认识计算机上的串口,并将串口通信电缆正确的接在两台计算机上; 步骤二:通过windows已有的程序“超级终端”(打开方法:程序——附件——通信——超级终端)通过串行电缆初步认识计算机具有串行通信的功能; 步骤三:修改连接参数,测试建立的连接是否可以正常通信,如果出现异常,分析产生的原因; 步骤四:自己编程实现串口通信。在任何编程语言平台下都可以实现串口通信。同学们可根据自己熟悉的语言来编制串口通信程序。 实验程序流程图:

五.实验数据与分析: COM1参数设置:在这个对话框中,可以选择通信双方采用的通信速率、数据位的个数、奇偶校验位、停止位和可以使用的流量控制方法。不管设置什么参数,必须保证两台计算机的所有参数相同,而且数据传输速率不能超过115200bit/s。设置参数完毕后,单击“确定”按钮。 图1 COM1参数设置 通信双方可以互相发送一些字符。在缺省情况下,发送端发送的字符在本地不会显示。如果希望使用本地回显功能,则单击“文件”菜单,选择“属性”命令,在打开的窗口中选择“设置”选项卡,并单击“ASCII码设置”,打开如图2所示的对话框;选中“本地显示键 入的字符(E)”复选框,返回到超级终端窗口中,再发送一些字符,观察结果。

MFC实现对串口通信的编写

在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据通信任务。 实际工作中利用串口完成通信任务的时候非常之多。已有一些文章介绍串口编程的文章在计算机杂志上发表。但总的感觉说来不太全面,特别是介绍32位下编程的更少,且很不详细。笔者在实际工作中积累了较多经验,结合硬件、软件,重点提及比较新的技术,及需要注意的要点作一番探讨。希望对各位需要编写串口通信程序的朋友有一些帮助 一.串行通信的基本原理 串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从 CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。 在Windows环境(Windows NT、Win98、Windows2000)下,串口是系统资源的一部分。 应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。 串口通信程序的流程如下图: 二.串口信号线的接法 一个完整的RS-232C接口有22根线,采用标准的25芯插头座(或者9芯插头座)。25芯和9芯的主要信号线相同。以下的介绍是以25芯的RS-232C为例。 ①主要信号线定义: 2脚:发送数据TXD; 3脚:接收数据RXD; 4脚:请求发送RTS; 5脚:清除发送CTS; 6脚:数据设备就绪DSR;20脚:数据终端就绪DTR;8脚:数据载波检测DCD; 1脚:保护地; 7脚:信号地。 ②电气特性: 数据传输速率最大可到20K bps,最大距离仅15m. 注:看了微软的MSDN 6.0,其Windows API中关于串行通讯设备(不一定都是串口RS-232C或RS-422或RS-449)速率的设置,最大可支持到RS_256000,即256K bps! 也不知道到底是什么串

串口通信协议程序

主机程序: /* 主机主要处理: 主—>从 1.给从机发送命令 2.给从机发送数据 3.命令从机向主机发送数据 从—>主由中断程序处理根据从机发送过来的请求类型 0.请求主机发送命令(包括主到从的1,2命令) 1.请求主机接收数据 2,3保留 */ #include #include #define uchar unsigned char #define uint unsigned int #define slav1_addr 0x01 #define slav2_addr 0x02 #define COMEND 0 #define REC_DATE 1 //主机向从机发送多数据命令高四位为1111,所以其他命令高四位不能为1111 #define cmd_X 0x12 #define cmd_rec_data 0x11 sbit signal=P3^2; uchar temp_addr,num,rec,style,re_addr; uchar buf[20]; uchar rec_data[10]; void delay(unsigned int i) { while(i--); } void init_uart(void) { TMOD=0x20; //定时器方式2--8位reload模式 TH1=0xfd; TL1=0xfd; PCON=0; //波特率不加倍 SCON=0xf0; //方式三 TB8=1; //发送地址时第九位为1 SM2=1; //接收到第九位为1时才能接收数据

TR1=1; //要在设置scon后开定时 ES=1; //开中断 EA=1; } //发送命令 void uart_send_cmd(uchar addr,uchar cmd)//uchar *date) { while(signal==0); //检查总线是否被占 signal=0; //占用总线 EA=0;//关中断 do { do { SBUF=addr; //发送从机地址 while(TI!=1); TI=0; } while(RI!=1); //一直等待从机响应 //while循环里可加入出错处理temp_addr=SBUF; RI=0; } while(temp_addr!=addr); //一直等到从机回应的地址相同 //while循环里可加入出错处理 TB8=0; //发送数据第9位为0 // SM2=0; // 接收到第九位为1时才置位RI //每次一个数据 SBUF=cmd; while(TI!=1); TI=0; TB8=1; // SM2=1; RI=0; TI=0; //不处理期间发生的中断 EA=1; signal=1; //释放总线 }

相关文档
最新文档