当前位置:文档之家› 基于串口的多机通信(聊天软件)

基于串口的多机通信(聊天软件)

基于串口的多机通信(聊天软件)
基于串口的多机通信(聊天软件)

单片机课程设计报告

基于串口的多机通信(聊天软件)

学院信息工程学院

专业信息工程

年级班别 07电子信息1班

学号

指导教师

2010年 6 月

1 设计要求:

由于实验箱没有全键盘,不能输入任意字符,因此用PC机的键盘代替。通信框图如下:

单片机1往其他单片机发送数据时,必须指定发送地址。单片机2接收数据,必须先检查地址是和自己的地址相符,地址相符才能接收数据,并把收到数据在PC机2上显示

2 设计思路

本设计的思路来自计算机网络的TCP协义的三次握手(这里用到其中的两次握手):当PC机1通过单片机1发出连接请求时(比如发送单片机2的地址),多个单片机会通过中断的方式检查接收到的地址是否与自己的地址相同,如果相同,则通信建立并接收后续发送来的数据;但单片机2不能向单片机1发送,只有当单片机2向单片机1发送请求,才能单片机1才能接收到单片机2的数据;断开连接的方式与请求连接的操作一样,在单片机间的通信协议中规定一个数据结束标志,遇到结束标志断开连接;所有数据都在PC机的串口调试软件显示(用VC编程实现)。

3 设计步骤

1,分析本设计的要求,查找可以实现预设功能的主要硬件知识,包括异步串行通信编程与中断处理等知识,并且列出程序设计的主要框架以及实现地址识别等

通信功能的协议依据。

2,根据TCP协议以及程序框架,编写相关程序,通过不断的修改与调试,搭建相应的硬件平台,实现主要通信功能。

3,运用VC++6.0编程实现串口调试软件的开发,利用vc串口通讯控件MSComm,编程实现基于对话框的聊天平台,具体界面参考QQ聊天软件。

4,硬件连接,并进行软硬件之间的相互调试,通过发现问题,分析问题,进行进一步的修改与美化,使功能得到进一步的完善。

5,实验报告,总结心得体会。

4 程序流程(含流程图及详细步骤解释)

5 操作方法

在CodeWarrior IDE环境下编写基于MC9S12XEP100硬件程序用VC++6.0制作相应的聊天界面及串口调试软件

把单片机的程序烧进硬件之后,运行程序,然后打开串口调试聊天软件,这里必须输入串口的参数和对方的地址(好友妮称),点击开始连接,连接成功后本机就可以向目标单片机发送数据信息了,若要收到对方发来的信息,对方须向本机建立连接。

6 设计过程遇到的问题

1,如何通过地址识别实现多机通信?如何解决区分命令信息与数据信息,通信建立及连续接收后续数据与通信结束等相关标志问题?

2,如何利用VC编程制作串口调试软件,主要是vc串口通讯控件MSComm的运用问题?聊天界面如何变得用户友好问题?

7 问题分析

1,结合实际通信情况,确定采用中断的接收方式实现实时通信,并为多台PC 机分配相应地址。根据已学过的多项协议知识,参照TCP协议设置相应的

通信协议建立相应的标志。

2,通过查询相关的资料,熟悉串口通讯控件MSComm的用法,通过网上的资料和相关书籍,熟悉各控建的用法,与VC的MFC基于对话框的编程编

8 问题解决思路及方法

1,中断程序如下:

__interrupt 21 void SCI1ReInt(void)

{

INT8U i;

INT8U SerialBuff[1];

extern MT; //存放接收数据的数组

DisableInterrupts; //关总中断

i = SCI1ReN(1,SerialBuff);

//等待接收1个数据

if(SerialBuff[0]=='#'){

MT=1; EnableInterrupts; return;

}

if(SerialBuff[0]=='@') MT=0;

if((i==0)&&MT) SCI0SendN(1,SerialBuff); //发送接到的数据

EnableInterrupts; //开总中断

}

通过中断的方式,中断主程序,进入中断向量,在中断向量里面进行地址识别。

程序设置了本机地址为“#”(可以为其他),如果接收到“#”,地址识别成功,把MT(通信是否建立标志)置1;根据MT标志决定是否接收后续数据信息,为数据包设置一个结束标志符“@”(可以为其它)以此决定断开通信连接与否,问题解决的关键在于通信协议的建立。

在这其还遇到一个编程的小小问题,就是MT是一个全局变量,我在主函数外面定义,但是想在中断向量里面用到这个变量,可是报出了错误,经过查资料,原来是要用extern关键字来引进这个参数!

2,问题3与4的解决思路与方法:在MFC中进行串口通讯最简单的方法可以在对话框中使用MSCOMM控件,MSComm通信控件提供了一系列标准通信命令的接口。根据查找资料自学制作界面与串口调试软件所需要的相关控件知识不断调试与改善美化,主要是各个控件之间事件消息的传递,这几是在软件开发时遇到的最大的难关,消息的传递要对整个类和程序都要十分熟悉,编程时逻辑性一定要强。特别的地方在于,在本调试软件中可以输入昵称,发送消息时可以在本地回显,具体界面如下:

9 心得体会:

做单片机课程设计,的确有很多的体会和感想。我们不仅加深了对单片机理论的理解,特别是体现在应用上,对单片机的认识有所改变。

同组的同学有私事希望在星期五前把整个设计完成,我们比别的组付出更多的努力,从查书,编写程序,硬件电路与连接等,都集中精神去做,发现学单片机的动手能力要求很高,如果没有这个设计过程,根本无法了解单片机理论与实践结合的东西。当把硬件结果做出来后,老师说要自己做串口的调试软件时,我们都晕了,因为一点底都没有,没办法上网查资料,熬了两天的夜,用VC++对话框编写出来了一个软件,而且还经过界面美化,功能实现,在测试程序时,遇到的问题我们都能讨论并得出相应的解决方法,我觉得这就是团队的优势,从硬件到软件,一步步分析解决问题,理论的知识也越来越清楚,理解得越来越透。

通过这次实践使我们更深刻的体会到了理论联系实际和团队精神的,我们会在今后的学习工作中会更加的注重实际,从调试中学习解决问题。

参考文献

[1]嵌入式系统-使用HCS12微控制器的设计与应用王宜怀、刘晓升编著北京航空航天大学出版社

[2]面向对象程序设计潭浩强编著清华大学出版社

[3]C语言程序设计潭浩强编著清华大学出版社

[4]Visual C++ 实用教程周进朱训林张宏林编著人民邮电出版社

基于单片机的数据串口通信研究

龙源期刊网 https://www.doczj.com/doc/b31275556.html, 基于单片机的数据串口通信研究 作者:蒋信 来源:《电子技术与软件工程》2016年第06期 摘要科技的发展日新月异,机电一体化的发展对自动化系统的可靠性提出了更高的要 求,在这样的背景下,单片机在工业控制领域的应用越来越广泛也越来越重要。基于以上,本文从通信过程、显示设计、键盘接口等方面研究了基于单片机的数据串口通信。 【关键词】单片机数据串口通信研究 在计算机控制领域中,计算机与外设数据之间的通信主要依靠单片机来实现,单片机的串口功能能够实现数据的传输以及分析,这就属于串口通信,可以预见的是,单片机的数据串口通信将会得到更广泛的应用,单片机之间的通信也有赖于其数据串口通信功能。基于以上,本文简要研究了基于单片机的数据串口通信。 1 串口通信的实现方式 设备在实现通信的过程中,必须树立一个信息接发双方都认可的通信方式,只有这样才能够保证信息在传送的过程中不发生冲突,才能够实现设备之间的通信,对于串口通信来说,主要有以下两种方式。 1.1 异步通信方式 异步通信方式实现的过程中,数据传输方式为独立字节的形式,不同的字节前端有着不同的起始信号,不同字节的后端则会有不同的终止信号,起始信号只能是一个,而终止信号可以是一个也可以是多个。数据传输过程中,字节进行移动,一个字节的迁移过程表示一个字节的传输过程,传输之前使用起始信号进行传输,传输结束之后使用终止信号将传输线调回标准状态,一个字节传输完毕后进行下一个字节的传输,字节传输有着连续性,这就是异步传输方式。由于没一个字节都要附加起始信号信息和终止信号信息,因此异步传输方式的效率较低,但异步通信方式容许一定程度的频率漂移,有着一定的误差缓冲作用。 1.2 同步通信方式 同步通信方式指的是将所有字符和字节连接在一起进行传输的一种通信方式,多个字符相互连接组成数据块,在数据块前增加同步字符,以同步字符作为传输起始信号,在传输后增加校验字符,以校验字符作为传输终止信号,以此来校验传输过程中的错误和误差,数据块中的各个字符之间没有间隔,相较于异步通信方式来说,其传输效率较高,但其对于信息接收端和信息发送端的同步性要求较高,因此硬件的复杂程度也就更高。 2 基于单片机的数据串口通信

AVR单片机串口多机通讯程序

A VR单片机串口多机通讯程序 [日期:2010-09-01 ] [来源:本站原创作者:admin] [字体:大中小] (投递新闻) 在多机通信过程中,所有设备的RS232接口是并在通信线上的,其中只能有一个设备为主机,其他为从机,通信由主机发起。数据帧一般采用1位起始位、9位数据位,其中第9位(RXB8)被用作为表征该帧是地址帧还是数据帧。当帧类型表征位为“1”时,表示该帧数据为一个地址帧;当帧类型表征位为“0”时,表示这个帧为一个数据帧。 在A VR中,通过设置从机的UCSRA寄存器中标志位MPCM,可以使能USART接收器对接收的数据帧进行过滤的功能。如果使能了过滤功能,从机接收器对接收到的那些不是地址信息帧的数据帧将进行过滤,不将其放入接收缓冲器中,这在多机通信中有效的方便了从机MCU处理数据帧程序的编写(同标准51 结构相比)。而发送器则不受MPCM位设置的影响。 多机通信模式允许多个从机并在通信线路上,接收一个主机发出的数据。通过对接收到的地址帧中的地址进行解码,确定哪个从机被主机寻址。如果某个从机被主机寻址,它将接收接下来主机发出的数据帧,而其它的从机将忽略数据帧,直到再次接收到一个地址帧。(从机地址是由各个从机自己的软件决定的)。 对于在多机通信系统中的主机MCU,可以设置使用9位数据帧结构(UCSZ=7)。当发送地址帧时,置第9位为“1”;发送数据帧时,置第9位为“0”。在这种情况下,从机也必须设置成接收9位数据帧结构。 多机通信方式的数据交换过程如下: 1)设置所有从机工作在多机通信模式(MPCM=1)。 2) 通信开始是由主机先发送一个地址帧,如8位数据为0X01(1号从机地址),第9位=“1”,呼叫1号从机。 3)所有从机都接收和读取该主机发出的地址帧。在所有从机的MCU中,RXC标志位被置位,表示接收到地址帧。 4)每一个从机MCU读UDR寄存器,并判断自己是否被主机寻址。如果被寻址,清UCSAR寄存器中的MPCM位,等待接收数据;否则保持MPCM为“1”,等待下一个地址帧的接收(该步应由用户软件处理实现): A)作为1号从机的MCU处理过程为:收到地址帧后,判定读取UDR数据0X01为自己的地址,将MPCM位置“0”,接收之后所有主机下发的数据帧,直到下一个地址帧为止。 B)其它从机MCU的处理过程:收到地址帧后,判定读取UDR数据0X01不是自己的地址,将MPCM位置“1”,这样他们将忽略主机随后发送的数据帧,直到主机再次发送地址帧。 5)当被寻址的从机MCU接收完最后一个数据帧后,将MPCM位置位,等待下一个地址帧的出现(该步也应由用户软件处理实现),然后从步骤2开始重复。 [转]例子; 通讯规则: 1:时钟7.3728 MHz/波特率9600/9个数据位/奇校验/1个停止位/硬件多机通讯功能/ 2:通讯连接采用硬件MAX485,双向单工

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.

C语言串口通信助手代码

该程序全部由C写成没有C++ 更没用MFC 完全是自娱自乐给需要的人一个参考 #include "stdafx.h" #include #include "resource.h" #include "MainDlg.h" #include #include #include HANDLE hComm;//用于获取串口打开函数的返回值(句柄或错误值)OVERLAPPED m_ov; COMSTAT comstat; DWORD m_dwCommEvents;

TCHAR cRecs[200],cSends[100]; //接收字符串发送字符串 char j=0,*cCom; //接收用统计数据大小变量端口选择 BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE; } /*系统初始化函数*/ BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { HWND hwndCombo1=GetDlgItem(hwnd,IDC_COMBO1); ComboBox_InsertString(hwndCombo1,-1,TEXT("COM1")); ComboBox_InsertString(hwndCombo1,-1,TEXT("COM2"));

基于单片机的串口通信模块设计

1 绪论 1.1 研究背景 通信是指不同的独立系统利用线路互相交换数据,它的主要目的是将数据从一端传送到另一端,实现数据的交换。在现代工业控制中,通常采用计算机作为上位机与下层的实时控制与监测设备进行通讯。现场数据必须通过一个数据收集器传给上位机,同样上位机向现场设备发命令也必须通过数据收集器。串行通信因其结构简单、执行速度快、抗干扰能力强等优点,已被广泛应用于数据采集和过程控制等领域。 计算机与外界的信息交换称为通信。基本的通信方式有并行通信和串行通信两种。串行通信是指一条信息额各位数据被逐位按顺序传送的通信方式。串行通信的特点是:数据位传送,按位顺序进行,最少只需要一根传输线即可完成,成本低但传送速度快,串行通信的距离可以从几米到几千米。 随着计算机技术尤其是单片微型机技术的发展,人们已越来越多地采用单片机来对一些工业控制系统中如温度、流量和压力等参数进行监测和控制。PC机具有强大的监控和管理能力,而单片机则具有快速及灵和的控制特点,通过PC 机的RS-232串行接口与外部设备进行通信,是许多测控系统中常用的一种通信解决方案。而随着USB接口技术的成熟和使用的普及,由于USB 接口有着 RS-232(DB-9)串口无法比拟的优点,RS-232(DB-9)串口正在逐步地为USB 接口所替代。而在现在的大多数笔记本电脑中,出于节省物理空间和用处不大等原因,RS-232(DB-9)串口已不再设置,这就约束了基于RS-232(DB-9)串口与PC 机联络的单片机设备的使用围。当前USB接口逐步取代RS-232(DB-9)串口已是大势所趋,单片机同计算机的USB通信在实际工作中的应用围也将越来越广。本文所介

组态王与单片机多机串口通信的设计

组态王与单片机多机串口通信的设计 发布: 2011-8-18 | 作者: —— | 来源:ranhaiyang| 查看: 300次| 用户关注: 1 引言随着工业化要求提高,分布式系统发展以及控制设备与监控设备之间通讯需要,组态软件设计的监控系统逐步普及。现在组态软件繁多,比如KingVieW(组态王)、MCGS、WinCC等。KingView 软件基于Microsoft Windows XP,NT/2000操作系统.具有友好的人机操作界面、强大的IO设备端口驱动能力,可与各种PLC、智能仪表、智能模块、板卡、变频器等实时通讯。由于在检测大量模拟量的工业现场使用PLC与组态软件通讯势必增加产品成 1 引言 随着工业化要求提高,分布式系统发展以及控制设备与监控设备之间通讯需要,组态软件设计的监控系统逐步普及。现在组态软件繁多,比如KingVieW(组态王)、MCGS、WinCC 等。KingView软件基于Microsoft Windows XP,NT/2000操作系统.具有友好的人机操作界面、强大的IO设备端口驱动能力,可与各种PLC、智能仪表、智能模块、板卡、变频器等实时通讯。由于在检测大量模拟量的工业现场使用PLC与组态软件通讯势必增加产品成本。而单片机接口丰富,与A/D转换模块组合可以完成相同的工作,并且系统可靠、成本低。 2 组态王与单片机的串口通讯方法 目前,组态王与单片机的通信多是通过动态数据交换(DDE)或通过自己开发通讯驱动程序完成。DDE是Windows平台上的一个完整的通信协议,组态王通过该协议与其他应用程序交换数据。但不可靠和非实时。而自己开发通讯驱动程序会带来设计困难,增加系统开发周期,可行性不高。组态王专门提供一种与单片机多机串口通信方法,可满足大多数系统需求。 3 PC机与单片机的硬件接口电路 图1为上位PC机与下位单片机80C51的连接电路。PC机与单片机本身都自带串行通讯接口,但由于在分布式系统中PC机与各单片机的分布不集中,不能利用RS-232通讯传输,只能改用RS-485。RS-485采用差分式传输信号,最大传输距离为1 219 m.最大传输速率为10 Mb/s.对同时出现的两条信号线A、B的干扰有较强的抑制能力。当两条线绞在一起时,被通信各种分布参数耦合过来的干扰信号可平均地分配到这两条线上,因此对RS-485的差分式传输线路而言,用双绞线可获得较强的抗干扰能力。RS-485采用二线

单片机串口通信的发送与接收(可编辑修改word版)

51 单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。 当串行发送完毕后,将在标志位TI 置1,同样,当收到了数据后,也会在RI 置1。无 论RI 或TI 出现了1,只要串口中断处于开放状态,单片机都会进入串口中断处理程序。在中断程序中,要区分出来究竟是发送引起的中断,还是接收引起的中断,然后分别进行处理。 看到过一些书籍和文章,在串口收、发数据的处理方法上,很多人都有不妥之处。 接收数据时,基本上都是使用“中断方式”,这是正确合理的。 即:每当收到一个新数据,就在中断函数中,把RI 清零,并用一个变量,通知主函数, 收到了新数据。 发送数据时,很多的程序都是使用的“查询方式”,就是执行while(TI ==0); 这样的语句来 等待发送完毕。 这时,处理不好的话,就可能带来问题。 看了一些网友编写的程序,发现有如下几条容易出错: 1.有人在发送数据之前,先关闭了串口中断!等待发送完毕后,再打开串口中断。 这样,在发送数据的等待期间内,如果收到了数据,将不能进入中断函数,也就不会保存的这个新收到的数据。 这种处理方法,就会遗漏收到的数据。 2.有人在发送数据之前,并没有关闭串口中断,当TI = 1 时,是可以进入中断程序的。 但是,却在中断函数中,将TI 清零! 这样,在主函数中的while(TI ==0);,将永远等不到发送结束的标志。 3.还有人在中断程序中,并没有区分中断的来源,反而让发送引起的中断,执行了接收 中断的程序。 对此,做而论道发表自己常用的方法: 接收数据时,使用“中断方式”,清除RI 后,用一个变量通知主函数,收到新数据。 发送数据时,也用“中断方式”,清除TI 后,用另一个变量通知主函数,数据发送完毕。 这样一来,收、发两者基本一致,编写程序也很规范、易懂。 更重要的是,主函数中,不用在那儿死等发送完毕,可以有更多的时间查看其它的标志。 实例: 求一个PC 与单片机串口通信的程序,要求如下: 1、如果在电脑上发送以$开始的字符串,则将整个字符串原样返回(字符串长度不是固定的)。

单片机串口通信协议程序

#include #include #define R55 101 #define RAA 202 #define RLEN 203 #define RDATA 104 #define RCH 105 //#define unsigned char gRecState=R55; unsigned char gRecLen; unsigned char gRecCount; unsigned char RecBuf[30]; unsigned char gValue; void isr_UART(void) interrupt 4 using 1 { unsigned char ch; unsigned char i; unsigned char temp; if (RI==1) { ch=SBUF; switch(gRecState) { case R55: // wait 0x55 if (ch==0x55) gRecState=RAA; break;

case RAA: if (ch==0xaa) gRecState=RLEN; else if (ch==0x55) gRecState=RAA; else gRecState=R55; break; case RLEN: gRecLen=ch; gRecCount=0; gRecState=RDATA; break; case RDATA: RecBuf[gRecCount]=ch; gRecCount++; if (gRecCount>=gRecLen) { gRecState=RCH; } break; case RCH: temp=0; for(i=0;i

c语言串口通信范例

一个c语言的串口通信程序范例 分类:技术笔记 标签: c语言 串口通信 通信程序 it 最近接触一个项目,用HL-C1C激光位移传感器+易控组态软件完成生产线高度跳变检测,好久没有接触c c#,一些资料,找来做个记录,也许大家用的着 #include #include #include #include #define COM232 0x2f8 #define COMINT 0x0b #define MaxBufLen 500 #define Port8259 0x20 #define EofInt 0x20 static int comportaddr; static char intvectnum; static unsigned char maskb; static unsigned char Buffer[MaxBufLen]; static int CharsInBuf,CircIn,CircOut; static void (interrupt far *OldAsyncInt)();

static void interrupt far AsyncInt(void); void Init_COM(int ComPortAddr, unsigned char IntVectNum, int Baud, unsigned char Data, unsigned char Stop, unsigned char Parity) { unsigned char High,Low; int f; comportaddr=ComPortAddr; intvectnum=IntVectNum; CharsInBuf=0;CircIn=0;CircOut=0; f=(Baud/100); f=1152/f; High=f/256; Low=f-High*256; outp(ComPortAddr+3,0x80); outp(ComPortAddr,Low); outp(ComPortAddr+1,High); Data=(Data-5)|((Stop-1)*4); if(Parity==2) Data=Data|0x18; else if(Parity==1) Data=Data|0x8; outp(ComPortAddr+3,Data); outp(ComPortAddr+4,0x0a);

基于51单片机的双机串行通信

河南机电高等专科学校2015-2016学年第1学期通信实训报告 系别:电子通信工程系 班级:xxxxxx 学号:13xxxxxxxxx 姓名:xxxxxxx 2015年12月

基于51单片机的双机串行通信 摘要:串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。在通信过程中,使用通信协议进行通信。 关键字:通信双机 一、总体设计 1设计目的 1.通过设计相关模块充分熟悉51单片机的最小系统的组成和原理; 2.通过软件仿真熟悉keil和proteus的配合使用; 3.通过软件编程熟悉51的C51编程规范; 4.通过实际的硬件电路搭设提高实际动手能力。 2.设计要求: 两片单片机之间进行串行通信,A机将0x06发送给B机,在B机的数码管上静态显示1,B机将0~f动态循环发送到A机,并在其数码管上显示。 3.设计方案: 软件部分,通过通信协议进行发送接收,A机先送0x06(B机数码管显示1)给B机(B机静态显示),当从机接收到后,向B机发送代表0-f的数码管编码数组。B收到0x06后就把数码表TAB[16]中的数据送给从机。 二、硬件设计

1.51单片机串行通信功能 计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。 51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。51单片机串行接口的结构如下: 图1.AT89C51(52) (1)数据缓冲器(SBUF) 接受或发送的数据都要先送到SBUF缓存。有两个,一个缓存,另一个接受,

PC机串口与多个单片机红外无线通信的实现

《工业控制计算机》!""#年$%卷第%期&’机串口与多个单片机红外无线通信的实现 周文举山东枣庄师专计算机系 (!%%$(")&’机与一台或多台单片机的通信系统中的数据通讯一般 采用的是串行通信方式。串行通信可采用有线与无线两种方式,作者根据单片机串行通信原理、脉冲编码调制)&’*+技术和红外无线通信技术,开发设计了单片机编解码红外无线通信接口。用该接口构成的多机通信系统,由于采用红外线为传输介质,而不是电缆线和电磁波,所以特别适用于那些不适合或不方便架设电缆线及电磁干扰较强的工作环境。本文就利用红外技术实现&’机与多台单片机无线串行通信的实现作一介绍。 !多机通信原理 在多机数据通信系统中,&’机与单片机之间的数据通信采 用一对多的主从模式,利用波长为,#"!-的远红外波通信。其原理示意图如图$。主机为&’机,从机选择*’./0$系列单片机,在&’机上用12345675328(9"编制一个主程序,负责发送从机地址、控制命令和从站之间的信息传输及调度,从站则负责收集现场信息,进行一定的数据处理,根据主站的要求返回数据,并执行主站发出的命令。主站&’机与从站之间的信息交换是通过*.’:--控件来实现。在采用主从式多机串行通信系统中,从机不主动发送命令或数据,一切都由主机控制。并且在一个多机通信系统中,只有一台&’机作为主机,各从机之间不能直接相互通讯,即使有信息交换也必须通过主机转发。由于发送和接收共用同一物理信道因此在任意时刻只允许一台从机处于发送状态,其余的从机不能发送。只有被主机呼叫的从机才能占用总线, 对主机做出应答。 图$&’机与一单片机串行通信 每台从机均分配有一个唯一的从机地址,主机与从机通信时,主机先呼叫某从机地址,唤醒被叫从机后,主、从两机之间进行数据交换,而未被呼叫的从机则继续进行各自的工作。主机发送的信息可以传到多个从机或指定的从机,各从机发送的信息只能被主机接收。单片机通过对多机通信控制位.*!进行置位和复位来控制正确接收地址和数据信号,在返回数据时通过设 ;7<为"或$来区别返回的是数据还是地址。只有正确地完成 了接收和发送任务,才能触发有效的;=,>=信号,进而完成下一步的通信。接收时,检测>=是否建立起来,当>=为高电平,表示接收完毕。发送时,检测;=是否建立起来,当;=为高电平时说明 发送已经完成。而在主机上也要设立相应的多机通信机制,这一任务是通过改变*.’:--控件的.?@@2AB 属性中的奇偶校验位来实现的。发送和接收地址时置奇偶校验位为*,则主机在发送地址过程中发送的第,位;7<为$,而在接收地址时,只有接收到的第,位>7<为$时才能引起’:--CD?A@属性的变化,从而触发EA’:--事件;发送和接收数据时,置该位为.。则主机在发送数据过程中发送的第,位;7<为",而在接收数据时,只有接收到的第,位>7<为"时才能引起’:--CD?A@属性的变化,从而触发EA’:--事件。 在本设计中主机微机发送字符与接受字符均采用查询方式,发送前先读取通信或状态寄存器,查询发送保持寄存器空否?接收前先读取通信或状态寄存器,查询一帧数据收完否?从机采用中断方式,即接收到地址帧后就进行串行口中断申请,’&F 响应后, 进入中断服务程序。在通信协议中规定:"单片机以方式G 进行通信,一帧数据的第,位为“$”,代表地址帧,为“"”,代表数据帧。#设定通信波特率为,(""HI3;$地址帧为"$JKLLJ 代表!00台从机地址。%""J 是以地址帧形式发送的一条对所有从机起作用的控制命令,命令各从机恢复.*!M$,等待接收状态。 为了实现多机通信,所有发射电路的振荡频率和所有的接收电路的振荡频率都必须调整一致,为保证正常通信,防止自己发自己接,数据传送方向必须为半双工传送,收发器在发射时,必须屏蔽自己的接收中断,发射结束后再开放中断。 多机通信过程为: $)主机*.’:--的属性.?@@2AB3M “,("",*,<,$”,所有从机的.*!M$,处于地址帧接收状态。 !) 主机发送一帧地址信息,其中包含<位地址,第,位为“$”,与所需的从机进行联络。 G ) 从机接收到地址信息后,各自将其与自己的地址相比较;对于地址相符的从机使>=M",;7

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

一、程序代码 #include//该头文件可到https://www.doczj.com/doc/b31275556.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; }

c语言串口通信范例

c语言串口通信范例 This manuscript was revised by the office on December 22, 2012

一个c语言的串口通信程序范例 标签:分类: 最近接触一个项目,用HL-C1C激光位移传感器+易控组态软件完成生产线高度跳变检测,好久没有接触c c#,一些资料,找来做个记录,也许大家用的着 #include <> #include <> #include <> #include <> #define COM232 0x2f8 #define COMINT 0x0b #define MaxBufLen 500 #define Port8259 0x20 #define EofInt 0x20

static int comportaddr; static char intvectnum; static unsigned char maskb; static unsigned char Buffer[MaxBufLen]; static int CharsInBuf,CircIn,CircOut; static void (interrupt far *OldAsyncInt)(); static void interrupt far AsyncInt(void); void Init_COM(int ComPortAddr, unsigned char IntVectNum, int Baud, unsigned char Data, unsigned char Stop, unsigned char Parity) { unsigned char High,Low; int f; comportaddr=ComPortAddr; intvectnum=IntVectNum; CharsInBuf=0;CircIn=0;CircOut=0; f=(Baud/100);

C语言串口通信-源代码

#include #include #include #include #define COM232 0x2f8 #define COMINT 0x0b #define MaxBufLen 500 #define Port8259 0x20 #define EofInt 0x20 static int comportaddr; static char intvectnum; static unsigned char maskb; static unsigned char Buffer[MaxBufLen]; static int CharsInBuf,CircIn,CircOut; static void (interrupt far *OldAsyncInt)(); static void interrupt far AsyncInt(void); void Init_COM(int ComPortAddr, unsigned char IntVectNum, int Baud, unsigned char Data, unsigned char Stop, unsigned char Parity) { unsigned char High,Low; int f; comportaddr=ComPortAddr; intvectnum=IntVectNum; CharsInBuf=0;CircIn=0;CircOut=0; f=(Baud/100); f=1152/f; High=f/256; Low=f-High*256; outp(ComPortAddr+3,0x80); outp(ComPortAddr,Low); outp(ComPortAddr+1,High); Data=(Data-5)|((Stop-1)*4); if(Parity==2) Data=Data|0x18; else if(Parity==1) Data=Data|0x8; outp(ComPortAddr+3,Data);

基于51单片机的双机串行通信课程设计 1000110061

基于AT89C51单片机的双机串行通信设计 姓名:杨应伟 学号:100110061 专业:机械设计制造及其制动化 班级:机电二班

前言 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域随着计算机技术的发展及工业自动化水平的提高, 在许多场合采用单机控制已不能满足现场要求,因而必须采用多机控制的形式,而多机控制主要通过多个单片机之间的串行通信实现。串行通信作为单片机之间常用的通信方法之一, 由于其通信编程灵活、硬件简洁并遵循统一的标准, 因此其在工业控制领域得到了广泛的应用。 在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。 在通信过程中,使用通信协议进行通信。在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。 串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。在通信过程中,使用通信协议进行通信。

单片机与PC机串口通信实现正文

毕业设计(论文)课题:单片机与PC机串口通信实现 学生: 孙波系部: 通信工程 班级: 通信1301 学号: 2013120325 指导教师: 童华 装订交卷日期: 2016年x月x日 装订顺序: (1)封面(2)毕业设计(论文)成绩评定记录(3)标题、中文摘要及关键词(4)正文(5)附录(6)参考文献

毕业设计(论文)成绩评定记录表 注:1.此表适用于不参加毕业答辩学生的毕业设计(论文)成绩评定; 2.平时成绩占40%、卷面评阅成绩占60%,在上面的评分表中,可分别按40分、60分来量化评分,二项相加所得总分即为总评成绩,总评成绩请转换为优秀、良好、中等、及格、不及格五等级计分。 教务处制

重庆电子工程职业学院 毕业设计(论文)开题报告 系别通信工程专业通信技术班级通信1301 学生姓名孙波学号2013120325 指导教师童华 一、毕业设计的内容和意义: 目前,随着计算机和微电子技术的高速发展,单片机在国民经济的各个领域的智能化控制中得到了非常广泛的应用。单片机已成为信息处理、物联网络、通信设备、工业控制、家用电器等各个领域不可缺少的智能部件。在一些工业控制中,经常需要以单片机作为下位机执行对被控对象的直接控制,以PC机为上位机完成复杂的数据处理,组成主从式控制系统。 为了提高系统管理的先进性,计算机工业自动控制和监测系统越来越多的采用主从式系统。较为常见的形式是由一台做管理用的上位机计算机(主机)和一台直接参与控制检测的下位机单片机(从机)构成的主从式系统,主机和从机之间以通讯的方式来协调工作。主机的作用一是向从机发送各种命令及参数;二是要及时收集、整理和分析从机发回的数据,供进一步的决策。从机被动的接收、执行主机发

基于单片机C#串口通信

基于C#与单片机串口通信的投票器 李浩东20093101004 周守悦20093101012 一.作品的设计概述 我们知道每年每个班都需要班委换届,有很多同学积极参加竞选,然而每一次竞选投票都是大家拿出一张纸,然后再纸上写上自己心目中班委的名字,然后交给监票读票记票,这个过程不仅大大浪费了大家的宝贵时间,还有可能出现漏票等情况,体现不了公平公正公开。 本设计是通过按钮给班委竞选人投票,每个候选人都对应一个按钮,投票人如果想投票给某个人可以按下其对应按钮,每按下一次改竞选人的票数就会自动增加1,每个人只能按下一次,电脑显示屏将通过柱形图动态的呈现每个候选人获得票数竞争的情况以及通过框图显示总票数,不仅使得投票结果更加公开公正,而且也大大节省了大家的时间。本设计的创新点是通过柱形图动态显示整个投票过程,而不是直接显示到最后投票结果,更加体现公正公开。 二.作品的设计与分析 1.主要功能与分析 主要使用单片机和PC机之间的串口通信,在单片机硬件上设置七个按键,其中四个键是用来给A,B,C,D四个人投票的,这四个按键每按下一次就自动增1,记录这四个按键按下的总次数num1,num2,num3,num4,并把四个数按顺序不断循环通过串口发给PC机,PC 机通过串口把这些数据存储下来,并读出来,通过C#编程,把这四个人所获得的总票数在picturebox控件上面的柱形图动态呈现出来,通过time控件,不断更新这个人所获得的票数,让投票人通过柱形图更加形象直观的看出每个被投票人的竞争情况,同时在柱形图下方有着这四个人获得总票数的真实数目。还有一个按键是票数清零,如果这次投票已经完成或者无效可以按下这个按键,此时A,B,C,D四个人的总票数将变成零。还有一个按键作用是停止投票,如果需要停止这次投票可以按下此键,这时候那四个投票的按键将不可用。最后一个按键的作用是继续投票,如需继续投票,可按此键。其系统设计图如下: 2.串口通信规则 单片机与PC机为了可以进行通信,必须要遵守一定的通信规则,这个共同的规则就是通信端口的初始化。通信端口的初始化有以下几项必须设置: (1)数据的传输速率 传输双方通过传输线的电压改变来交换数据,但传输线的电压改变的速度必须和接收端的接收速度保持一致,RS-232通常用于异步传输,即双方并没有一个可参考的同步时钟作为基准。由于没有一个参考时钟,双方所发送的高低电位到底代表几个位就不得而知了,

串口通信-多机通信系统 - 单片机

目录 一、题目要求与功能分析 (1) 1.1题目要求 (1) 1.2功能及整体模块分析 (1) 二方案论证 (2) 2.1设计目的 (2) 2.2设计思路 (2) 2.2.1原理分析和讨论 (2) 2.2.2题设分析 (3) 三、电路设计 (5) 3.1 整体功能框架设计 (5) 3.2 硬件电路设计 (6) 3.2.1 主机硬件电路设计 (7) 3.2.2 从机硬件电路设计 (10) 3.3软件电路设计 (12) 3.3.1 协议设计 (12) 3.3.2 主机程序流程图设计 (13) 3.3.3 从机程序流程图设计 (14) 四系统的调试与实现 (16) 4.1主机模块功能调试 (16) 4.2从机模块调试 (16) 4.3整体设计功能调试 (16) 五总结与体会 (18) 参考文献 (18) 附录 (19)

一、题目要求与功能分析 1.1题目要求 本小组的试验题目如下: 一、任务: 设计实现多台单片机系统之间的串行通信 二、基本要求(难度系数0.8): (1)设计一个主从式多机通信系统,包含1台主机和3台从机,主机和从机全部为单片机; (2)选择合适总线接口芯片,正确连接主机和从机; (3)编程实现分布式数据采集功能,主机可以获取各分机当前AD转换结果,并显示。 三、发挥部分: (1)完善通信功能。(根据完成情况加分,上限+0.2) 1.2功能及整体模块分析 随着工业化要求提高,分布式系统发展以及控制设备与监控设备之间通讯需要,多机通信系统设计的监控系统逐步普及。此多机通信系统具有友好的人机操作界面、强大的IO设备端口驱动能力,可与各种PLC、智能仪表、智能模块、板卡、变频器等实时通讯。在检测大量模拟量的工业现场使用相似的多机通讯系统;单片机接口丰富,与A/D转换模块组合可以完成相同的工作,并且系统可靠、成本低。 本次实验的目的是就是应用单片机的串口通信功能实现一个分布式采集系统。整个系统中包含一片主机和三片从机,主机的任务是实现对三片从机的AD 转换结果的采集并在数码管上显示之。这样从硬件的角度上将整个系统分为两个模块—主机模块和从机模块。主机模块中包含单片机模块、数码管显示子模块和串口电平转换子模块,从机模块则包括单片机子模块、AD转换子模块和串口电平转换子模块。就本次实验而言硬件电路的设计难点在于串口电平转换芯片MAX485的连接,而软件的设计在于串口通信协议的设定及其相互通信的过程。

相关主题
文本预览
相关文档 最新文档