文档库 最新最全的文档下载
当前位置:文档库 › 基于Matlab和AVR单片机的串行数据通信设计

基于Matlab和AVR单片机的串行数据通信设计

基于Matlab和AVR单片机的串行数据通信设计
基于Matlab和AVR单片机的串行数据通信设计

基于Matlab和AVR单片机的串行数据通信设计

摘要:介绍了基于matlab和avr单片机通过pc机进行通信的方法。通过matlab下的通信类serial类元件库实现串行通信,并利用avr单片机对采集到的数据进行相应处理。

关键词:串行通信; serial类对象; avr单片机; matlab串行通信

serial communication based on matlab and avr

yi lei, nie huanhuan, liu renping

(north china university of technology, beijing, 100144, china)

abstract: the authors present in this paper an approach for serial communication based on matlab and avr through pc and explain how to achieve the serial communication based on the component library of matlab and act respectively according to the data which the mcu collects.

key words: serial communication; serial class object; mcu of avr; serial communication of matlab

0 引言

matlab是mathworks公司开发的一种科学计算软件。matlab运行稳定、可靠、使用方便,是广大科研人员进行科学研究的得力助手。matlab不仅具有强大的科学计算功能,还具有满足一般要求的数据

采集以及界面设计开发等功能[1]。

串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度的通信方法。它只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。

目前常用的串行通讯协议有rs-232、rs-422和rs-485等。

从matlab 6.0版本开始,软件中增加了设备控制箱(instrument control toolbox)功能,提供了对rs-232/rs-485通信标准的串口通信的正式支持。利用该工具箱的serial类及fopen、fread等函数,能可靠地进行实时串行通信。根据matlab的设备控制箱功能,matlab产生的数据,例如图像数据、音频数据等,通过串口输出作为传输的数据源,并可通过控制电路由avr单片机实现。这种方法将matlab的数据运算与单片机的数据处理有机结合起来,具有一定的实际意义[2]。

1 matlab的串口通信原理

对于系统的串口,在matlab中以serial类的形式提供了支持。当用指令建立一个串口对象(句柄)后,对串口的硬件操作可以以文件操作的软件方式来完成,该方法比较简单。

matlab提供了对串口进行打开、关闭、以及串口参数设置等操作的一系列函数。利用这些函数可以选择串口号、设置串口通信参数,例如波特率、数据位、停止位、校验位等。

matlab对串口的控制主要通过以下几个步骤[3]。

⑴为应用程序创建串口对象,需要用到的函数为

s=serial(‘com1’):创建com1串口对象,并以s标识。其中串口的属性使用系统默认值。

⑵创建串口com1后,打开串口需要用到的函数为

fopen(s):打开com1串口。

⑶设置串口的属性参数,需要用到的函数为

props=set(s,‘propertyname’,propertyvalue,…):设置正确的串口通信参数。

通过定义串口对象的属性, 就能定义串口的通信模式,也可以了解串口的状态。串口对象几个比较重要的属性如下。

baudrate:定义传输波特率,常用的波特率有1200、2400、4800、9600、19200、115200等,缺省值为9600;

databits:定义数据帧的比特位数;

parity:定义校验方式;

stopbits:定义数据停止位。

⑷从串口读数据或者向串口写数据,也就是接收或者发送数据。需要用到的函数和参数有以下[4]。

fread(s):以二进制通信方式读取串口数据。

fwrite(s):以二进制通信方式向串口写数据。

fprintf(s, ‘ id’):以文本通信方式向串口输出字符串‘id’,

写操作以同步方式进行。

id=fscanf(s):以文本通信方式向串口读入字符串‘id’,并且保存在变量id中。

⑸关闭串口并且释放串口对象占用的存储空间。需要用到的函数有以下。

fclose(s):关闭串口。

delete(s):释放串口对象占用的内存空间。

clear s:释放串口对象在matlab工作区中占用的存储空间。

用matlab实现对串口的读写操作,单片机可以通过串口接收matlab传来的数据,并且对数据作出处理。

2 avr对串口数据进行处理

以下实验是通过matlab对串口写数据后,单片机对传到串口的数据进行处理的过程。整个系统的结构图如图1所示。

[pc机

模块][max232a

电平转换][avr

单片机

模块]

图1 系统结构图

2.1 基于matlab的上位机通讯

用matlab以查询方式的进行异步串行通信的主要代码为:

s=serial(‘com1’);%创建com1串口对象,并以s标示

s.baudrate=9600;%波特率为9600

s.stopbits=1;%设置停止位

fopen(s);%打开com1串口

fwrite ( s , ‘16’, ‘uchar’);%向s写十进制数16

fclose (s);%断开串口com1与s的相连

delete (s);%从内存中删除串口对象s

clear s;%从matlab工作区中清除串行接口对象s

2.2 基于avr单片机的下位机通讯

单片机系统处于下位机状态,等待matlab 传来的命令。当串口接收到数据后,按照协议对数据进行分析(这里使用的是avr单片机中的mega8系列)。对串行数据进行处理的软件处理流程图如图2所示[5]。

本设计来源于机器人语音识别项目。利用pc机识别语音信号后,让机器人将做出相应的动作。

实现过程为:matlab做出语音识别后输出一个值,单片机根据这个值所对应的数据,来写端口值进而驱动电机,电机的转动带动机器人四肢的转动,从而实现目标。

[开始][串行口初始化

设置相关寄存器] [接受缓存为空?][接收pc机

发送信号] [是否为握手信号

0xffh?][开始通信][单片机处理过程][结束] [y][n] [n][y]

图2 avr单片机下位机流程图

3 结束语

本文所采用的串行通信方式为查询方式,因此系统的实时性不是很好。在实际运用中,可以选择matlab所提供的instrcallback(s)回调函数以实现良好的实时性。另外本文所述单片机驱动的是电机,有兴趣的读者可以驱动其他外设。

参考文献:

[1] 王战军,沈明.基于matlab gui的串口通信编程实现[j].现代电子技术,2010.9:39~44

[2] 李俊华.基于matlab的红外串行通信研究[j].现代电子技术,2011.3:59~65

[3] 张立材.基于matlab环境的串行数据通信[j].微计算机信息,2004.3:100~101

[4] 孙希延,纪元法,施浒立.基于matlab的串口gps数据通信处理系统设计[j].仪器仪表用户,2006.6:64~65

[5] 向先波,徐国华,张琴.matlab环境下pc机与单片机的串行通信及数据处理[j].单片机与嵌入式系统应用,2004.12:27~31

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

组态王与单片机多机串口通信的设计 1 引言 随着工业化要求提高,分布式系统发展以及控制设备与监控设备之间通讯需要,组态软件设计的监控系统逐步普及。现在组态软件繁多,比如KingVieW(组态王>、MCGS、W inCC等。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采用二线与四线平衡传输方式,二线制可实现真正的多点双向通信,但需要在传输线上接电阻(约120 Ω>。

单片机双机之间的串行通信设计

专业方向课程设计报告 题目:单片机双机之间的串行通信设计

单片机双机之间的串行通信设计 一.设计要求: 两片单片机利用串行口进行串行通信:串行通信的波特率可从键盘进行设定,可选的波特率为1200、2400、4800和9600bit/s。 二、方案论证: 方案一:以两片51单片机作为通信部件,以4*4矩阵键盘作为数据输入接口,通过16个不同键值输入不同的信息,按照51单片机的方式3进行串口通信,从机采用中断

方式接收信息并按照通信协议改变波特率或者用I/O口输出、CD4511译码、数码管显示相关数据,整个系统的软件部分采用C语言编写。 方案二:整个系统的硬件设计与方案一样,但是通信方式采用方式一进行通信,主从机之间的访问采用查询方式,数据输出直接由单片机的译码程序输出译码数据,同时软件编写采用汇编语言。 两种方式从设计上来说各有特色,而且两种方式都应该是可行的。方案一中按照方式三通信可以输出九位数据而方式一只能输出八位数据,但就本题的要求来说方式一就可以了。主从机之间的交流采用中断方式是一种高效且保护单片机的选择,但是相比之下本人对查询方式的理解更好一些。数码管的显示若采用CD4511译码则直接输出数据就可以了,但是这样会增加硬件陈本,而且单片机的资源大部分都还闲置着,所以直接编写一段译码程序是比较好的做法。另外在软件编写上,采用C语言在后续设计中对硬件的考虑稍少一些,换言之采用汇编可以使自己对整个通信过程及单片机的部分结构有更清晰地认识所以综合考虑采用方案二。 三、理论设计: 采用AltiumDesigner绘制的原理图(整图)

本系统主要包括五个基本模块:单片机最小系统(包括晶振电路、电源、复位电路及相关设置电路)、4*4矩阵键盘、功能控制电路、数据显示电路、波特率更改指示电路。 本设计的基本思路是通过控制口选择将要实现的功能,然后矩阵键盘输入数据,单片机对数据进行处理(加校验码、设置功能标志位),然后与从机握手,一切就绪之后后就开始发送数据,然后从机对接收数据校验,回发校验结果,主机根据校验结果进行下一步动作,或者重发,或者进入下一 数据的发送过程,然后按照此过程不段循环,直到结束。 晶振电路提供脉冲,加上复位电路,将 EA接入高电电平选择片内程序存储器。 这是一个单片机能够工作的最低设置。

第7章PIC单片机串行口及串行通信技术.pdf

第7章PIC18FXX2串行口及串行通信技术 ?教学目标 串行通信基本知识 串行口及应用 PIC18FXX2与PC机间通信软件的设计

本章知识点概要 ? 1.什么是串行通信,串行通信有什么优点? ? 2.串行通信协议 ? 3.什么是波特率? ? 4.PIC18FXX2中的串行口工作方式及应用 ? 5.PIC18FXX2点对点通信 ?针对PIC18FXX2串行口而言,概括为以下问题: 1、波特率设计,初始化SPBRG 2、设定通信协议(工作方式选择,SYNC) 3、如何启动PIC18FXX2接收、发送数据? 4、如何检查数据是否接收或发送完毕?

7.1 7.1 串行通信基本知识串行通信基本知识 ?在实际工作中,计算机的CPU 与外部设备之间常常要进行信息交换,一台计算机与其他计算机之间也要交换信息,所有这些信息交换均可称为通信。 ?通信方式有两种,即并行通信和串行通信。 ?采用哪种通信方式?----通常根据信息传送的距离决定例如,PC 机与外部设备(如打印机等)通信时,如果距离小于30 m ,可采用并行通信方式;当距离大于30 m 时,则要采用串行通信方式。PIC18FXX2单片机具有并行和串行二种基本通信方式。

并行通信 ?并行通信是指数据的各 位同时进行传送(发送 或接收)的通信方式。 ?优点:传送速度快; ?缺点:数据有多少位, 就需要多少根传送线。 ?例如,右图PIC18FXX2 单片机与外部设备之间 的数据传送就属于并行 通信。

串行通信 ?串行通信是指数据一位(bit)一位按顺序传送的通信方式。?优点:只需一对传输线(利用电话线就可作为传输线),大大降低了传送成本,特别适用于远距离通信; ?缺点:传送速度较低。假设并行传送N位数据所需时间为T,那么串行传送的时间至少为N*T,实际上总是大于N*T。 接收设备发送设备 D2 D1 D0 D3 D7 D6 D5 D4

基于51单片机的串口通讯系统课程设计论文

引言 人类社会已经进入信息化时代,信息社会的发展离不开电子产品的进步。单片机的出现使人类实现利用编程来代替复杂的硬件搭建电路,它靠程序运行,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性! 单片机应用的主要领域非常广,智能化家用电器、办公自动化设备商业营销设备、工业自动化控制、智能化仪表、智能化通信产品、汽车电子产品、航空航天系统和国防军事、尖端武器等领域。 单片机应用的意义不仅在于它的广阔围及所带来的经济效益,更重要的意义在于,单片机的应用从根本上改变了控制系统传统的设计思想和设计方法。以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。以前自动控制中的PID调节,现在可以用单片机实现具有智能化的数字计算控制、模糊控制和自适应控制。这种以软件取代硬件并能提高系统性能的控制技术称为微控技术。随着单片机应用的推广,微控制技术将不断发展完善。 电路的集成化不仅对硬件电路的设计相关,与电路的布局同样相关。印刷版的出现使得电路产品更加规,体积更小。Protel99se是一款专业的绘制电路及印刷版的软件,近年来的不断升级使得其功能更加完善,出现了Altium Designer 、Protel DXP等升级版本。

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

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通信在实际工作中的应用围也将越来越广。本文所介

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.

第06章单片机串行通信系统习题解答

第6章单片机串行通信系统习题解答 一、填空题 1.在串行通信中,把每秒中传送的二进制数的位数叫波特率。 2.当SCON中的M0M1=10时,表示串口工作于方式 2 ,波特率为 fosc/32或fosc/64 。 3.SCON中的REN=1表示允许接收。 4.PCON 中的SMOD=1表示波特率翻倍。 5.SCON中的TI=1表示串行口发送中断请求。 6.MCS-51单片机串行通信时,先发送低位,后发送高位。 7.MCS-51单片机方式2串行通信时,一帧信息位数为 11 位。 8.设T1工作于定时方式2,作波特率发生器,时钟频率为,SMOD=0,波特率为时,T1的初值为 FAH 。 9.MCS-51单片机串行通信时,通常用指令 MOV SBUF,A 启动串行发送。 10.MCS-51单片机串行方式0通信时,数据从引脚发送/接收。 二、简答题 1.串行口设有几个控制寄存器它们的作用是什么 答:串行口设有2个控制寄存器,串行控制寄存器SCON和电源控制寄存器PCON。其中PCON中只有的SMOD与串行口的波特率有关。在SCON中各位的作用见下表: 2.MCS-51单片机串行口有几种工作方式各自的特点是什么 答:有4种工作方式。各自的特点为:

3.MCS-51单片机串行口各种工作方式的波特率如何设置,怎样计算定时器的初值 答:串行口各种工作方式的波特率设置: 工作方式O :波特率固定不变,它与系统的振荡频率fosc 的大小有关,其值为fosc/12。 工作方式1和方式3:波特率是可变的,波特率=(2SMOD/32)×定时器T1的溢出率 工作方式2:波特率有两种固定值。 当SM0D=1时,波特率=(2SM0D/64)×fosc=fosc/32 当SM0D=0时,波特率=(2SM0D/64)×fosc=fosc/64 计算定时器的初值计算: 4.若fosc = 6MHz ,波特率为2400波特,设SMOD =1,则定时/计数器T1的计数初值为多少并进行初始化编程。 答:根据公式 N=256-2SMOD ×fosc /(2400×32×12)= ≈243 =F3H TXDA: MOV TMOD,#20H ;置T1定时器工作方式2 MOV TL1,#0F3H ;置T1计数初值. MOV TH1,#0F3H B f B f N OSC SMOD OSC SMOD ??-=???-=384225612322256

单片机与PC机串口通讯设计

第一章串口通讯的系统组成与原理 1.1 系统组成及通讯原理 1.1.1 系统构成 一、MSP430F149功能简介: 本设计选用的主要芯片为MSP430F149,该单片机属于德州仪器公司MSP430F14X/16X FLASH 系列。该系列是一组工业级超低功耗的微控制器,运行环境温度为-40~+85 摄氏度工作电压范围 1.8~3.6V,MSP430 单片机之所以有超低的功耗,是因为其在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处。由于具有16位RISC(精简指令集)结构,16位寄存器和常数寄存器,MSP430 达到了最大的代码效率。数字控制的振荡器提供快速从所有低功耗模式苏醒到活动模式的能力时间少于6ms。MSP430F149有较高的处理速度,在8MHz 晶体驱动下指令周期为125 ns。另外它带有两个16 位定时器(带看门狗功能)、速度极快的8 通道12 位A/D 转换器(ADC)(带内部参考电压、采样保持和自动扫描功能)、一个内部比较器和两个通用同步/异步发射接收器、48个I/O口(均可独立控制)的微处理器结构。硬件乘法器提高了单片机的性能并使单片机在编码和硬件上可兼容[3]。这些特点保证了可编制出高效率的源程序。 二、系统构成 1、系统框图 系统构成如图1-1所示,由上位机(即工业控制计算机)、通讯接口和下位机3部分组成。上位机选用的是工控机,智能终端由单片机MSP430F149和外围传感器放大电路等构成(本设计部涉及该部分的设计)。单片机与PC 机之间通信方式为串行异步方式(UART),下位机采用中断方式进行与上位机的数据交换,上位机采用按时查询方式对各串口进行读写操作。单片机MSP430要想与PC 串口连接或者其它带有串口的终端设备连接,接口电路部分必须要进行EIA-RS-232-C 与MSP430 电平和逻辑关系的转换[4]。本设计将采用MAX3221芯片,完成3V~5V 电平与串口电平的双向转换。

基于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单片机串行接口的结构如下:

51单片机实现的485通讯程序

51单片机实现的485通讯程序 #ifndef __485_C__ #define __485_C__ #include #include #define unsigned char uchar #define unsigned int uint /* 通信命令*/ #define __ACTIVE_ 0x01 // 主机询问从机是否存在 #define __GETDATA_ 0x02 // 主机发送读设备请求 #define __OK_ 0x03 // 从机应答 #define __STATUS_ 0x04 // 从机发送设备状态信息 #define __MAXSIZE 0x08 // 缓冲区长度 #define __ERRLEN 12 // 任何通信帧长度超过12则表示出错uchar dbuf[__MAXSIZE]; // 该缓冲区用于保存设备状态信息uchar dev; // 该字节用于保存本机设备号 sbit M_DE = P1^0; // 驱动器使能,1有效 sbit M_RE = P1^1; // 接收器使能,0有效

void get_status(); // 调用该函数获得设备状态信息,函数代码未给出 void send_data(uchar type, uchar len, uchar *buf); // 发送数据帧 bit recv_cmd(uchar *type); // 接收主机命令,主机请求仅包含命令信息 void send_byte(uchar da); // 该函数发送一帧数据中的一个字节,由send_data()函数调用void main() { uchar type; uchar len; /* 系统初始化*/ P1 = 0xff; // 读取本机设备号 dev = (P1>>2); TMOD = 0x20; // 定时器T1使用工作方式2 TH1 = 250; // 设置初值 TL1 = 250; TR1 = 1; // 开始计时 PCON = 0x80; // SMOD = 1 SCON = 0x50; // 工作方式1,波特率9600bps,允许接收 ES = 0; // 关闭串口中断 IT0 = 0; // 外部中断0使用电平触发模式 EX0 = 1; // 开启外部中断0

PC机与单片机串行通信

课程名称:监控系统课程设计 设计题目:PC机与单片机串行通信 院系:基础课部 专业:茅以升班 年级:2003级 姓名:吴汇梅 指导教师:吕老师陈老师 西南交通大学峨眉校区 2006年12月22日

课程设计任务书 专业:茅以升班姓名:吴汇梅学号20030533 开题日期:2006年9 月16 日完成日期:2006年12月22 日题目:PC机与单片机的串行通信 一、设计的目的 串行通信技术是单片机系统开发中常用的技术之一,串行口也是单片机常规内部集成的功能。设计PC机与单片机进行串行通信硬件电路及软件流程,本设计通过定时器来设定通信的波特率,通过设置几个寄存器来设定工作方式。PC机与单片机之间则由RS-232C接口相连。 二、设计的内容及要求 1、查阅资料,学习PC与一个或多个单片机串口通信设计; 2、硬件设计,给出原理框图,并简要介绍各组成部分; 3、软件设计,给出程序流程图和程序清单,并说明各部分程序要实现; 4、总结,结出结论 三、指导教师评语 四、成绩 指导教师(签章) 2006.年12月28日

1 设计意义 单片机由于性价比高、使用灵活等优点而广泛应用于各种电子系统、自动 控制系统,但是存储容量小。处理的数据量不大。为了克服这一缺点,可以将单 片机连接到PC机上,由单片机采集数据,然后将数据汇总到PC机,再进行各种数 据处理。单片机与PC机之间的通讯是其中的关键技术之一,PC机与单片机间一般 采用的是串行通信,由于51系列单片机中一般集成了双全工的串行端口,只要配 以电平转换的驱动电路、隔离电路就可组成一个简单可行的通信接口。 2 硬件设计 2.1 整体设计 在PC系统中都装有异步通信适配器,利用它可以实现异步串行通信。适配器的核心元件是可编程的intel8251芯片,它使PC有能力与其他具有RS-232标准的接口的计算机或设备进行通信,而MCS-51单片机本身具有一个双全工的串行口,因此只要配上电平转换电路就可以和RS-232接口组成一个简单的通信通道。 简单的PC与单片机通信只要3根线就可以了,单片机的TXD、RXD与PC的RXD、TXD 分别相连,连接地线。由于51系列单片机的串行口使用的是TTL电平,因此在PC和单片机间要有RS-232电平转换电路,图1所示为PC与单片机的通信图。 图1 PC机与单片机的通信图 2.2 芯片选择 (1)MCS-51单片机[1] MCS-51单片机内部具有一个采用UART工作方式的全双工的串行通信接口。该接口不仅可以同时进行数据的接受和发送,也可以作为同步移位寄存器使用。该接口有4种工作方式,其中字符格式有8位、10位、11位,并可以以不同的波特率工作。 1〉串行口的内部结构 MCS-51单片机的串行接口结构如图2所示:

单片机双机之间的串行通信设计

单片机双机之间的串行通 信设计 Prepared on 24 November 2020

专业方向课程设计报告题目:单片机双机之间的串行通信设计单片机双机之间的串行通信设计 一.设计要求: 两片单片机利用串行口进行串行通信:串行通信的波特率可从键盘进行设定,可选的波特率为1200、2400、4800和9600bit/s。 二、方案论证: 方案一:以两片51单片机作为通信部件,以4*4矩阵键盘作为数据输入接口,通过16个不同键值输入不同的信息,按照51单片机的方式3进行串口通信,从机采用中断方式接收信息并按照通信协议改变波特率或者用I/O口输出、CD4511译码、数码管显示相关数据,整个系统的软件部分采用C语言编写。 方案二:整个系统的硬件设计与方案一样,但是通信方式采用方式一进行通信,主从机之间的访问采用查询方式,数据输出直接由单片机的译码程序输出译码数据,同时软件编写采用汇编语言。 两种方式从设计上来说各有特色,而且两种方式都应该是可行的。方案一中按照方式三通信可以输出九位数据而方式一只能输出八位数据,但就本题的要求来说方式一就可以了。主从机之间的交流采用中断方式是一种高效且保护

单片机的选择,但是相比之下本人对查询方式的理解更好一些。数码管的显示若采用CD4511译码则直接输出数据就可以了,但是这样会增加硬件陈本,而且单片机的资源大部分都还闲置着,所以直接编写一段译码程序是比较好的做法。另外在软件编写上,采用C语言在后续设计中对硬件的考虑稍少一些,换言之采用汇编可以使自己对整个通信过程及单片机的部分结构有更清晰地认识所以综合考虑采用方案二。 三、理论设计: 采用AltiumDesigner绘制的原理图(整图) 本系统主要包括五个基本模块:单片机最小系统(包括晶振电路、电源、复位电路及相关设置电路)、4*4矩阵键盘、功能控制电路、数据显示电路、波特率更改指示电路。 本设计的基本思路是通过控制口选择将要实现的功能,然后矩阵键盘输入数据,单片机对数据进行处理(加校验码、设置功能标志位),然后与从机握手,一切就绪之后后就开始发送数据,然后从机对接收数据校验,回发校验结果,主机根据校验结果进行下一步动作,或者重发,或者进入下一数据的发送过程,然后按照此过程不段循环,直到结束。 单片机最小系统:接上电源和地,

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

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

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

河南机电高等专科学校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]中的数据送给从机。 二、硬件设计 单片机串行通信功能 计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。 51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。51单片机串行接口的结构如下:

基于51单片机串行通信的无线发射极和接收机设计

基于51单片机串行通信的无线发射极和接收机设计---- 1 概述 1.1 课题的目的、背景和意义 最近几年来,由于无线接入技术需求日益增大,以及数据交换业务(如因特 网、电子邮件、数据文件传输等)不断增加,无线通信和无线网络均呈现出指数增 加的趋势。有力的推动力无线通信向高速通信方向发展。然而,工业、农业、车载 电子系统、家用网络、医疗传感器和伺服执行机构等无线通信还未涉足或者刚刚涉 足的领域,这些领域对数据吞吐量的要求很低,功率消耗也比现有标准提供的功率 消耗低。此外,为了促使简单方便的,可以随意使用的无线装置大量涌现,需要在 未来个人活动空间内布置大量的无线接入点,因而低廉的价格将起到关键作用。为 降低元件的价格,以便这些装置批量生产,所以发展了一个关于这种网络的标准方案。Zigbee就是在这一标准下一种新兴的短距离、低功耗、低数据传输的无线网 络技术,它是一种介于无线标记技术和蓝牙之间的技术方案。 对于这种短距离、低功耗、低数据传输无线技术,它不仅在工业、农业、军 事、环境、医疗等传统领域有着巨大的应用价值,未来应用中还可以涉及人类日常 生活和社会生产活动的所有领域。由于各方面的制约,这种技术的大规模商业应用 还有待时日,但已经显示出了非凡的应用价值,相信随着相关技术的发展和推进, 一定会得到更广泛应用。 1.2国内外无线技术相关现状及Zigbee现状 无线通信从固定方式发展为移动方式,移动通信发展至今大约经历了五个阶段: 第一阶段为20年代初至50年代初,主要用于舰船及军有,采用短波频及电子 管技术,至该阶段末期出现才出现150MHVHF单工汽车公用移动电话系统MTS。

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

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

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

两个单片机之间的串行通信

两个单片机之间的串行通信 一、设计要求 在某个控制系统中有U1、U2这两个单片机,U1单片机首先将P1端口指拨开关数据载入SBUF,然后经由TXD将数据传送给U2单片机,U2单片机将接收数据存入SBUF,再由SBUF载入累加器,并输出至P1端口,点亮相应端口的LED。 二、实验所需元器件 三、电路原理图: 两个单片机之间的串行通信电路图

四、程序设计 这两个单片机均工作在半工状态,U1将P1端口的状态通过TXD发半空给U2,而U2接收U1的数据,然后控制P1端口的LED显示。因此,需编写两个不同的程序,其程序流程图如下所示:

五、C语言程序: U1的C语言程序: #include "reg51.h" #define uint unsigned int #define uchar unsigned char void send(uchar state) { SBUF=state; while(TI==0); TI=0; } void SCON_init(void) { SCON=0x50; TMOD=0x20; PCON=0x00; TH1=0xfd; TL1=0xfd; TI=0; TR1=1; ES=1; } void main() { P1=0xff; SCON_init(); while(1) { send(P1); } } U2的C语言程序: #include "reg51.h" #define uint unsigned int #define uchar unsigned char uchar state; void receive() { while(RI==0) state=SBUF; RI=0; } void SCON_init(void) { SCON=0x50; TMOD=0x20; PCON=0x00; TH1=0xfd; TL1=0xfd; RI=0; TR1=1; } void main() { SCON_init(); while(1) { receive(); P1=state; } } 六、调试与仿真:

51单片机与上位机串口通信程序设计

51单片机与上位机串口通信程序设计 1. 发送:向总线上发命令 2. 接收:从总线接收命令,并分析是地址还是数据。 3. 定时发送:从内存中取数并向主机发送. 经过调试,以上功能基本实现,目前可以通过上位机对单片机进行实时控制。程序如下: //这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 //和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的 #include< reg51.h> #include< stdio.h> #include< string.h> #define INBUF_LEN 4 //数据长度 unsigned char inbuf1[INBUF_LEN]; unsigned char checksum,count3 , flag,temp,ch; bit read_flag=0; sbit cp=P1^1; sbit DIR=P1^2; int i; unsigned int xdata *RAMDATA; /*定义RAM地址指针*/ unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ; void init_serialcomm(void) { SCON=0x50; //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收 PCON=0x00; ES=1;

TMOD=0x21; //定时器工作于方式2,自动装载方式TH0=(65536-1000)%256; TL0=(65536-1000)/256; TL1=0xfd; TH1=0xfd; ET0=1; TR0=1; TR1=1; // TI=0; EA=1; // TI=1; RAMDATA=0x1F45; } void serial () interrupt 4 using 3 { if(RI) { RI=0; ch=SBUF; TI=1; //置SBUF空 switch(ch) { case 0x01 :printf("A"); TI=0;break; case 0x02 :printf("B"); TI=0;break; case 0x03 :printf("C"); TI=0;break; case 0x04 :printf("D"); TI=0;break; default :printf("fg"); TI=0;break; } }

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

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

基于A789C51单片机的双机串行通信课程设计 一、总体设计 1设计目的 1.通过设计相关模块充分熟悉A789C51单片机的最小系统的组成和原理; 2.通过软件仿真熟悉keil和proteus的配合使用; 3.通过软件编程熟悉A789C51的CA789C51编程规范; 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.A789C51单片机串行通信功能

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

(1)数据缓冲器(SBUF) 接受或发送的数据都要先送到SBUF缓存。有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。 (2)串行控制寄存器(PCON) SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下: SM0,SM1:串行接口工作方式选择位,这两位组合成00,01,10,11对应于工作方式0、1、2、3。串行接口工作方式特点见下表

单片机串行通信实验报告

单片机实验报告(三) 实验名称:串行通信 姓名:张昊 学号:110404247 班级:通信2班 时间:2013.11 南京理工大学紫金学院电光系 一、实验目的 1、理解单片机串行口的工作原理;

2、学习使用单片机的TXD、RXD口; 3、了MAX232解芯片的作用。 二、实验原理 计算机与其外部设备之间进行数据交换称为通信。通信的基本方式可分为并行通信和串行通信两种。并行通信中数据至少有8路,可以同时将一个字节的8位二进制代码发送到对方。串行通信用两根传输线进行数据的传输,一次只能发送一位二进制。 串行通信技术根据传送的编码格式不同,可分为同步通信和异步通信两种方式: 1、同步方式:数据以数据块为单位传送。在开始传送前用同步字符来指示,并由时钟来实现发送端和接收端同步。 2、异步方式:数据时不连续传送的。以字符为单位进行传送。被传送字节分为:起始位、数据位、校验位和停止位,称为一帧。 常用格式: a、1bit起始位+8bit数据位+无校验位+1bit停止位 b、1bit起始位+8bit数据位+1位偶校验位+1bit停止位 串行通信技术根据数据流动方向分为三种方式: 1、单工通信:数据流动方向是固定的,数据只能由一方发送到另一方。 2、半双工通信:数据的流动方向是双向的,但一时刻,数据只能在一个方向流动。 3、全双工通信:允许数据在两个方向流动,即通信双方的数据发送和接收是同时的。 串行口控制寄存器SCON的格式如下: D7 D6 D5 D4 D3 D2 D1 D0

SM0、SM1:由软件置位或清零,用于选择串行口四种工作方式。 SM2:多机通信控制位。在方式2和方式3中,如SM2=1,则接收到的第9位数据(RB8)为0时不启动接收中断标志RI(即RI=0),并且将接收到的前8位数据丢弃;RB8为1时,才将接收到的前8位数据送入SBUF,并置位RI,产生中断请求。当SM2=0时,则不论第9位数据为0或1,都将前8位数据装入SBUF中,并产生中断请求。在方式0时,SM2必须为0。 REN:允许串行接收控制位。若REN=0,则禁止接收;REN=1,则允许接收,该位由软件置位或复位。 TB8:发送数据D8位。在方式2和方式3时,TB8为所要发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:TB8=0为数据,TB8=1为地址;也可用作数据的奇偶校验位。该位由软件置位或复位。 RB8:接收数据D8位。在方式2和方式3时,接收到的第9位数据,可作为奇偶校验位或地址帧或数据帧的标志。方式1时,若SM2=0,则RB8是接收到的停止位。在方式0时,不使用RB8位。 TI:发送中断标志位。在方式0时,当发送数据第8位结束后,或在其它方式发送停止位后,由内部硬件使TI置位,向CPU请求中断。CPU在响应中断后,必须用软件清零。此外,TI也可供查询使用。 RI:接收中断标志位。在方式0时,当接收数据的第8位结束后,或在其它方式接收到停止位的中间由内部硬件使RI置位,向CPU请求中断。同样,在CPU响应中断后,也必须用软件清零。RI也可供查询使用。 电源控制寄存器PCON的格式如下: D7 D6 D5 D4 D3 D2 D1 D0 PCON的最高位SMOD是串行口波特率系数控制位。SMOD=1时,波特率增大一倍。其余各位与串行口无关。 波特率设置: 串行口的4种工作方式对应着三种波特率模式。 对于方式0,波特率是固定的,为fosc/12。 对于方式2,波特率由振荡频率fosc和SMOD(PCON.7)所决定。其对应公式为 波特率=2SMOD×fosc/64。当SMOD=0时,波特率为fosc/64;当SMOD=1时,波特率为fosc/32。 对于方式1和方式3,波特率由定时器/计数器T1的溢出率和SMOD决定,即由下式确定: 波特率=2SMOD×定时器/计数器T1溢出率/32 三、实验内容 #include"reg51.h"

相关文档
相关文档 最新文档