搜档网
当前位置:搜档网 › 基于单片机的MODBUS通信接口设计全解

基于单片机的MODBUS通信接口设计全解

基于单片机的MODBUS通信接口设计全解
基于单片机的MODBUS通信接口设计全解

实验室

开放实验

题目:基于DSP2407单片机的MODBUS通信接口设计院系名称:

专业班级:

学生姓名:

学号:

指导教师:

目录

摘要 (3)

1 绪论 (4)

2 设计方案 (4)

2.1 方案概述 (5)

2.2 方案论证 (5)

2.3 MODBUS协议 (6)

3 硬件电路设计 (7)

3.1 最小系统电路 (7)

3.2 单片机电源电路 (8)

3.3 报警控制电路 (9)

3.4 通讯电路 (10)

4 总体设计方案 (11)

4.1 主程序设计 (11)

4.2串口中断处理设计 (12)

4.3 CRC计算及校验设计 (13)

4.4 数据帧处理模块 (14)

心得体会 (16)

参考文献 (17)

附录一部分程序代码 (18)

摘要

在机械、化工、纺织等行业,随着生产规模的不断扩大,以及对生产过程集中监控的迫切要求,现场总线技术应运而生,并成为了当今测控领域研究的热点之一。Modbus协议作为现场总线的一种,以其开发成本低,简单易用等诸多优点己被工业领域广泛接受。信号测量作为工业中重要的测量参数之一,本课题选择了信号测量作为测量的对象,并设计了基于Modbus协议的信号测量测控节点。

本设计采用TC1047A传感器采集现场信号测量,由DSP320IF2407单片机进行AD转换和Modbus协议通讯。通讯的物理层采用RS232接口,并增加了光电隔离、抗雷击和短路保护等功能。最后实现了单个节点和PC机的Modbus协议通讯,并通过控制蜂鸣器和继电器来模拟工业现场控制。本文分别从硬件和软件上阐述了该信号测量测控节点的实现方法。

[关键词] 信号测量测控 Modbus协议 RS232 DSP320IF2407

1 绪论

随着计算机技术和网络技术的发展,工业参数的数字采集促进了现场总线技术的发展,目前现场总线已经从当初的4-20mA电流信号升级为数字信号,发展成为全数字通讯,解决了现场信号远距离高速传送的问题,而且提高了抗干扰性能,增加了系统配置的灵活性,节省了硬件投资,是未来生产自动化和过程控制的发展方向。目前,较有影响的总线有:Modbus,CAN,LonWorks,Profibus等。采用RS485标准总线技术对现场数据进行采集、管理,相对于CAN,LonWorks,Profibus等现场总线系统而言,具有结构简易、成本低廉、硬软件支持丰富、安装方便,且与传统的DCS兼容,与现场仪表接口简单,系统实施容易等特点,因而RS485总线系统在一定时间内仍是中小控制系统的主要形式。

信号测量测控模块作为一种重要的设备,在诸多工业生产过程中得到了广泛应用。自70年代以来,由于工业过程控制的需要,特别是微电子技术和计算机技术的迅猛发展,国外信号测量测控发展迅速,并在智能化、自适应等方面取得显著成果。在这方面,以口本、美国、德国、瑞典等国的技术领先,生产出了很多商品化的、性能优异的信号测量测控器及仪器仪表,并在各行业广泛应用。目前,国外信号测量测控系统及仪表正朝着高精度、智能化、小型化等方面快速发展。

基于单片机的Modbus协议产品一般由单片机芯片为核心和外围辅助逻辑元器件组成,它充分利用单片机的硬件资源和软件资源,同时合理配置特定的功能元器件来实现产品的功用,外围元器件一部分是用来实现通讯的串行接口元件,具有电平转换的功能,这使得Modbus产品具有组成工业网络的能力;另一部分是功能器件,如:数模转化器、模数转化器、LED显示器等,能够实现很多的特定功能。由于产品的硬件构成比较简单,性能比较稳定,功能比较强且造价比较低成为该产品的主要特点,在国内使用的Modbus产品大部分是国外产品,国内很少有独立的知识产权,这是Modbus产品在国内的现状。

本设计实现了单节点与PC机的Modbus协议的通讯,通过单片机的功能模块进行AD采集,数码管显示,蜂鸣器报警和继电器控制,通过串口以RTU帧的格式和上位机通讯,实现节点上传信号测量AD值和上位机控制节点的I/O的功能。

2 设计方案

2.1 方案概述

本方案采用精密信号测量电压转换器TC1047作为采集现场环境信号测量的传感器,单片机选用性价比较高的DSP320IF2407。外部电压基准源为REF3325作为2.5V 电压基准。8位拨码开关用来设置Modbus协议节点的ID号。RS232通讯电路实现节点和PC的Modbus通讯,并在调试时作为ISP烧录程序的接口。RS485电路实现节点与节点之间的Modbus通讯接口。由于节点是在工业现场进行远距离布线,所以在设计RS485总线电路时特别增加了电路抗电磁干扰和防雷电等措施。数码管电路用来显示现场信号测量。在现场信号测量超过设定的阈值时,蜂鸣器进行报警,并且通过控制继电器来控制阀门等现场的执行器。单片机系统的具体框图如图2.1所示:

图2.1 单片机系统框图

2.2方案论证

本设计中,通讯的物理层包括RS232电路和RS485电路两部分。RS232主要是单节点与PC机的通讯,其通讯速率预设低于9600b/s,距离小于15米,适用于户内布线,电磁干扰较小,所以采用DB-9连接器及MAX232电压转换电路即可实现其稳定工作。RS485电路适用于节点之间的通讯,其通讯速率预设低于1Mb/s,距离小于1000米,适用于户外布线,这就存在雷击、浪涌等电磁干扰,有时还会出现RS485信号线与电力线短路的情况,所以在设计RS485电路时,要求有抗雷击、抗浪涌冲击以及过压保护等功能。在设计硬件电路时,本人查阅了相关技术文档,并经过论证,最后确定采用瞬变电压抑制二极管、自恢复保险丝以及钳位电路等来实现上述功能。具体电路见后面章节详细介绍。

由于本通讯采用了Modbus协议及CRC校验,可以保证数据链路层和应用层数据

传输的可靠性。

2.3MODBUS协议

2.31 MODBUS概述

Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给IDA (Interface for Distributed Automation,分布式自动化接口)组织,并成立了Modbus-IDA组织,为Modbus今后的发展奠定了基础。在我国,Modbus已经成为国家标准GB/T19582-2008。据不完全统计:截止到2007年,Modbus的节点安装数量已经超过了1000万个。

Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。

当在Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

Modbus具有以下几个特点:

(1)标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus 的产品超过600种。

(2)Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。

(3)Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。

2.32 MODBUS通信协议

控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。典型的主设备:主机和可编程仪表。典型的从设备:可编程控制器。

主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus 协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。

从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和错误检测域。如果在消息接收过程中发生错误,或从设备不能执行其命令,从设备将建立错误消息并把它作为回应发送出去。

控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus 网络通信。用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。

3硬件电路设计

3.1.最小系统电路

DSP320IF2407系列单片机是宏晶科技生产的单时钟的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051。其内部集成MAX810专用复位电路,2路PWM,8路高速10位AD转换,工作电压5.5V至3.3V,工作频率范围0至35MHz,通用I/O口44个,复位后为准双向口/弱上拉,可设置成准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力可达到20mA,但整个芯片最大不超过55mA,有看门狗功能,有8路10位精度ADC,转换速度可达250K/S,内部有60K字节的Flash程序存储器。选用DSP320IF2407单片机完全可以满足本设计需求。单片机最小系统如图3.1所示:

图3.1 单片机最小系统

3.2单片机电源电路

为了给单片机系统提供稳定可靠的电源,本设计采用国半公司的LM22680系列稳压器电路。LM22680提供了作为降压开关稳压器应有的一切有源功能,具有优良的线性与负载调节特性,可以驱动电流高达2A的负载。其通过使用一个低导通电阻的N沟道金属氧化物半导体场效应管获得超过90%的高效率,并提供了一种简易的整体设计手段,可将使用的外部元器件减少到最低限度。开关时钟频率由内部工作在500kHz 固定频率的振荡器提供,也可以通过一个外部电阻进行调节,或者与高达1 MHz的外部时钟同步,另外也可以设置让多个稳压器自同步,工作在同一开关频率。LM22680系列产品具有内置热关断和限流功能,而且有一个使能控制输入端,可使稳压器休眠至静态电流为25微安的待机状态。通过选择合适的外部软启动电容器可实现可调软启动特性。LM22680的其它主要特征如下:

(1)宽广的输入电压范围:4.5V至42V

(2)低等效串联阻抗的陶瓷电容器即可稳定工作

(3)输出电压可调,输出低至1.285V

(4)±1.5 %反馈参考精度

(5)500 kHz的开关频率,且在200 kHz至1 MHz之间可调

(6)工作结点信号测量范围为-40°C至125°C

对于LM22680_ADJ,输出电压应该直接连到FB引脚上,不需要电阻分压器就可实现1.285V的输出电压,其它输出电压可以利用一个电阻分压器实现。官方推荐电阻R1和R2之和的最大值不超过10 kΩ,以保证高输出电压的精确度。在本电源电路中采用510Ω和1.5KΩ,输出5.06V电压。单片机系统电源电路如图3.2所示:

图3.2 单片机系统电源电路

3.3报警控制电路

信号测量测控节点的设计不仅要对现场信号测量进行数据上传,还要对现场进行简单的报警和控制,如当信号测量达到预设的阈值时,蜂鸣器要进行报警,以提示现场人员,并通过控制继电器,实现对现场的设备进行简单的控制。蜂鸣器是一种采用直流电压供电的电子讯响器,主要分为压电式与电磁式两种类型。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后,多谐振荡器起振,输出 1.5kHZ至2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成,当接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性的振动发声。本系统的设计采用电磁式蜂鸣器,通过DSP320IF2407单片机的I/O口进行控制,P1.3口具有PWM输出功能,可以进行频率的设置,从而让蜂鸣器发出不同频率的声音,蜂鸣器报警电路如图3.3所示:

图3.3 蜂鸣器报警电路

3.4通讯电路

为实现现场组网控制和方便上位机完成现场数据采集和各种控制任务,该设计提供了两种通信接口:RS485接口和RS232接口。RS232主要用来实现一对一的通信方式,即信号测量测控节点和上位机的通讯,而RS485则可用来完成节点组网通信。其中RS232通讯电路采用MAX232芯片,它是专门为电脑的RS232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。具体RS232通讯电路如图3.4所示:

图3.4 RS232通讯电路

4总体设计方案

4.1 主程序设计

基于Modbus信号测量测控节点的程序设计要实现五大功能:第一,主机和从机之间串口通讯功能;第二,要完成命令报文的解析和信息提取功能;第三,实现MODBUS协议规定的主要的读、写功能;第四,实现在通讯过程中循环冗余检测功能;第五,单片机采集信号测量;第六,数码管显示信号测量功能。

在信号测量检测中,选用单片机ADC通道1,配置转换精度为8位,速度为420个时钟周期。由于信号测量的变化速率较慢,为了节约CPU资源,采用前后台操作,在后台中每隔100ms进行一次AD采集。

在实际的调试当中发现单片机刚上电或复位时,AD刚开始采集的数值是错误的,在本设计中采取的方法是丢弃前50次采集的AD值,这样可以保证第一次拿到的AD值是正确的,从而不会出现因复位而误报的情况。并且结合热敏电阻变化特性及实际环境信号测量变化的情况,本设计采用了5个队列深度的均值滤波,以减小误差。

节点软件设计的重点有:CRC校验,MODBUS协议功能实现,AD采集程序程序,串口初始化及中断处理程序,定时器中断处理程序,单片机执行程序。软件设计选用的编译环境为经典的Keil uVision2 IDE。其中C语言具有丰富的库函数,具有程序编写简单,可读性强,维护性好,也具有直接对硬件进行操作的特点,生成目标代码的质量高,且有较好的可移植性,所以选用C语言进行编程。

图4.1为主函数程序流程图:

4.2串口中断处理设计

单片机与外界通讯主要通过串口,无论是接收还是发送消息,都是经过串口来实现,在执行通讯任务时必须进行串口的初始化,初始化程序设计主要是波特率的设计,在串行通信中,收发双方的波特率必须一致。51单片机串口可有4

种工作方式,在本设计中设定串口为工作方式1为8位异步收发,波特率由T0

循环冗余校验(CRC) 域为两个字节,包含一个二进制16 位值。附加在报文后面的CRC 的值由发送设备计算。接收设备在接收报文时重新计算CRC 的值,并将计算结果于实际接收到的CRC值相比较。如果两个值不相等,则为错误。

CRC 的计算,开始对一个16位寄存器预装全1。然后将报文中的连续的8位子节对其进行后续的计算。只有字符中的8个数据位参与生成CRC 的运算,起始位,停止位和校验位不参与CRC 计算。

CRC 的生成过程中,每个 8位字符与寄存器中的值异或。然后结果向最低有效位方向移动1位,而最高有效位位置充零。然后提取并检查LSB:如果LSB 为1,则寄存器中的值与一个固定的预置值异或;如果LSB 为 0,则不进行异或操作。

这个过程将重复直到执行完8 次移位。完成最后一次(第8 次)移位及相关操

作后,下一个8位字节与寄存器的当前值异或,然后又同上面描述过的一样重复8 为

数据帧处理是整个系统的核心部分,在现场总线技术中有着至关重要的作用。所以要好好读懂理解Modbus的各个功能对应的帧格式,理解其含义和本质,然后才能找到对应信息去对其相应的处理。

根据ModBus协议,其ASCII 模式数据帧格式如表4.4所示

表4.4 ASCII模式数据帧

编码系统:16 进制,ASCII 字符0-9,A-F

起始符位“:”,终止符为0X0D,0X0A;

在数据帧处理过程中,首先判断数据帧是否完整,然后判断是不是发给本从机。

对完整数据帧进行LRC校验,LRC 校验正确的帧执行下面的处理步骤,否则丢弃该帧,并通知上位机重发数据。帧处理的前提除了LRC 校验正确,还需要确保地址位正确。在前提条件满足的情况下才能提取功能位和数据位。根据功能位确保要执行的功能。并执行相关功能。在具体功能中提取实现功能所需的数据位。然后上位机

心得体会

通过此次课程设计,我更进一步地熟悉了单片机的结构及掌握了单片机的工作原理和其具体的使用方法,了解了单片机程序设计与特点,同时也更加深入的掌握了52 系列单片机的相关知识。并且我懂得了单片机程序设计的基本思路,增强了实践动手能力。除此以外,我还深深地认识到严谨、认真的科学态度在科学实验中发挥的重要作用。

对于这次课设,我是把它当做一个项目来做,所以一开始就抱着很负责很严谨的态度去面对。这也是我在大学以来第一次去用52单片机去调试一个关于串口的协议,也是算我亲自写的最长的程序了,所以很有感慨。将一个复杂的工程分成若干个基本模块进行分步设计和测试,最后将这些模块连接起来是本实验基本的设计思想。从老师刚布置这个题目,感觉这个好难啊,从来没有接触过啊,到自己亲手去查资料,去写成程序,去一步一步解决问题,去实现基本功能,去实现附加功能,感觉自己成长了不少。一个东西刚开始接触可能会觉的有难度,但是自己亲手认真去作,一个一个解决问题,到最后会发现其实这个大的难题也没有什么。

这次我学到的最多的不是单片机知识,不是Modbus协议,是这种过程,这种态度,这种方法,和这种感觉。同样自己还有很多方面的不足有待于改善,所以,我要更加的努力去学习,更加静下心去完善自己。

参考文献

[1] 张友德,赵志英,涂时亮.单片微型机原理、应用与实验(第五版). 复旦大学出版社,2006.

[2] 朱大奇,邬勤文,袁芳. 单片机原理、应用与实验. 科学出版社,2009.

[3] 李朝青.单片机原理及接口技术. 北京航空航天大学出版社,2005.

[4] 张凤登.现场总线技术及应用. 科学出版社,2008.

[5] 何立民. 单片机应用技术选编[M].北京:北京航空大学出版社,1998.

[6] 常健生.检测与转换技术[M].北京:机械工业出版社,1997.

[7] 凌志浩.智能仪表原理与设计技术[M].上海:华东理工大学出版,2003.

[8] 谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2005.

[9] 康华光.电子技术基础(模拟部分) [M].北京:高等教育出版社,1987.

附录一部分程序代码

#include

#include "crc16.h"

#define LedPort P0 //段选段P0

#define LedCtrl P2 //位选段P2

#define HIG_BJ 210

typedef struct

{

unsigned char state;

unsigned char buf[15];

unsigned char RecCunt;

unsigned char SendCunt;

unsigned char TimerCunt;

}RECBUF;

RECBUF RecBuf; //

unsigned char MAddr;//Modbus节点地址

sbit JDQ = P2^1;

sbit SPEAK = P2^0;

//数码管段码显示:0~f,不亮

unsigned char code LED_Disp[] = {0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09, 0x11,0x63,0x61,0x71,0x91};

unsigned char LED_value;//数码管显示值

unsigned char DisBuff[4];

unsigned char AD1_Res; //AD1转换结果

unsigned char AD_buf[5];//AD1转换结果缓冲区

unsigned char AD_value;//滤波后的AD值

unsigned char old_AD_value;//上次的AD值

unsigned char T_value; //信号测量值

unsigned char BJnum; //报警次数

unsigned char PC_Ctrl;

unsigned char JD_Ctrl;

unsigned char maxADvalue;//最大AD值

unsigned char minADvalue;//最小AD值

unsigned char nowstatus; //当前状态

unsigned char oldstatus; //上次状态

unsigned int timer05scount;

unsigned char timer05sok;

unsigned int timer005scount;

unsigned char timer005sok;

unsigned int timer001scount;

unsigned char timer001sok;

/************************************

功能:延时的函数

************************************/

void mDelay(unsigned char mtime)

{

for(; mtime > 0; mtime--)

{

unsigned char j = 100;

while(--j);

}

}

void collect_ADvalue()

{

if(ADC_CONTR & 0x10)

{

ADC_CONTR = ADC_CONTR & 0x80;//关AD启动

mDelay(1);

AD1_Res = ADC_RES;//读通道1的AD值

mDelay(1);

ADC_CONTR = 0x81;

mDelay(1);

ADC_CONTR = ADC_CONTR|0x08;//开AD启动

mDelay(1);

}

}

/**********************************

功能:均值滤波函数

**********************************/

void lvbo()

{

unsigned char i;

unsigned int sum,temp;

sum = 0;

AD_buf[4] = AD1_Res;

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

{

AD_buf[i] = AD_buf[i+1];

}

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

sum += AD_buf[i];

temp = sum / 5;

AD_value = (unsigned char)temp;

old_AD_value = AD_value;

T_value = AD_value;

}

/**********************************

功能:报警次数计算函数

**********************************/

void baojing()

{

if((T_value < HIG_BJ)&&(oldstatus == 0))

{

BJnum++;

nowstatus = 1;

}

if((T_value > HIG_BJ)||(T_value == HIG_BJ)) nowstatus = 0;

if(T_value < HIG_BJ)

{

JDQ = 0;

SPEAK = 0;

JD_Ctrl = 1;

}

if((T_value > HIG_BJ)&&(PC_Ctrl == 0))

{

JDQ = 1;

SPEAK = 1;

JD_Ctrl = 0;

}

oldstatus = nowstatus;

}

功能:主函数

*******************/

void main()

单片机课程设计(温度控制系统)

温度控制系统设计 题目: 基于51单片机的温度控制系统设计姓名: 学院: 电气工程与自动化学院 专业: 电气工程及其自动化 班级: 学号: 指导教师:

2015年5月31日 摘要: (3) 一、系统设计 (3) 1.1 项目概要 (3) 1.2设计任务和要求: (4) 二、硬件设计 (4) 2.1 硬件设计概要 (4) 2.2 信息处理模块 (4) 2.3 温度采集模块 (5) 2.3.1传感器DS18b20简介 (5) 2.3.2实验模拟电路图 (7) 2.3.3程序流程图 (6) 2.4控制调节模块 (9) 2.4.1升温调节系统 (9) 2.4.2温度上下限调节系统 (8) 2.43报警电路系统 (9) 2.5显示模块 (12) 三、两周实习总结 (13) 四、参考文献 (13) 五、附录 (15)

5.1原理图 (15) 摘要: 在现代工业生产中,温度是常用的测量被控因素。本设计是基于51单片机控制,将DS18B20温度传感器实时温度转化,并通过1602液晶对温度实行实时显示,并通过加热片(PWM波,改变其占空比)加热与步进电机降温逐次逼近的方式,将温度保持在设定温度,通过按键调节温度报警区域,实现对温度在0℃-99℃控制的自动化。实验结果表明此结构完全可行,温度偏差可达0.1℃以内。 关键字:AT89C51单片机;温控;DS18b20 一、系统设计 1.1 项目概要 温度控制系统无论是工业生产过程,还是日常生活都起着非常重要的作用,过低或过高的温度环境不仅是一种资源的浪费,同时也会对机器和工作人员的寿命产生严重影响,极有可能造成严重的经济财产损失,给生活生产带来许多利的因素,基于AT89C51的单片机温度控制系统与传统的温度控制相比具有操作方便、价价格便宜、精确度高和开展容易等优点,因此市场前景好。

单片机课程设计完整版样本

课程设计( 论文) 课程名称单片机 题目名称简易密码锁的设计学院高等技术学院 专业班级高1 1 0 9 学号3869 学生姓名刘欢 指导教师胡立强 11月28 日 目录

一,任务目的 (3) 二,任务要求 (3) 三,电路与元器件 (4) 四,程序设计 (5) 五,程序运行测试 (6) 六,任务小结 (7) 七,心得体会 (8) 八,参考文献 (9) 1.任务目的

经过对具有四个按键输入和一个数码管显示的简易密码锁的设计与制作, 让读者理解C语言中数组的基本概念和应用技术, 并初步了解单片机与键盘和LED数码管的接口电路设计及编程控制方法。 2.任务要求 在一些智能门控管理系统, 需要输入正确的密码才能开锁。基于单片机控制的密码锁硬件电路包括三部分: 按键、数码显示和电控开锁驱动电路, 三者的对应关系如图表3.16所示。 表3.16 简易密码锁状态 简易密码锁的基本功能如下: 4个按键, 分别代表数字0,1,2,3: 密码在程序中事先设定, 为0-3之间的一个数字; 上电复位后, 密码锁初始状态为关闭, 密码管显示符号”—”; 当按下数字键后, 若与事先设定的密码相同, 则数码管显示字符”P”, 打开锁, 3秒后恢复锁定状态, 等待下一次密码的输入, 否则显示字符”E”持续3秒, 保持锁定状态并等待下次输入。 3.电路与元器件 根据任务要求, 用一位LED数码管作为显示器件, 显示密码锁的状态信息, 数码管采用静态连接方式; 4个按键连接到P0口的低四位

P0.0-P0.3引脚, 设P0.0连接数字”0”按键、P0.1连接数字”1”按键, 依次类推; 锁的开、关电路用P3.0控制的一个发光二极管代替, 发光二极管点亮表示锁打开, 熄灭表示锁定。根据以上分析, 采用如图3.21所示的连接电路。 图3.21 简易密码锁电路 简易密码锁电路所需元器件清单如表3.17所示。 元器件名称参数数量元器件名 称 参数数量 插座DIP40 1 电阻103 1 单片机AT89SC51 1 电解电容22UF 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

第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

单片机35个实例

1.闪烁灯 1.实验任务 如图4.1.1所示:在端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的端口用导线连接到“八路发光二极管指 示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为秒,相对于微秒来说,相差太大, 所以我们在执行某一指令时,插入延时程序,来达到我们的要 求,但这样的延时程序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒 机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7 =248时,延时10ms,以此为基本的计时单位。如本实验要求 秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET

(2).输出控制 如图1所示,当端口输出高电平,即=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当端口输出低 电平,即=0时,发光二极管L1亮;我们可以使用SETB 指 令使端口输出高电平,使用CLR 指令使端口输出低电平。5.程序框图 如图4.1.2所示 图4.1.2 6.汇编源程序 ORG 0 START: CLR LCALL DELAY SETB LCALL DELAY LJMP START DELAY: MOV R5,#20 ;延时子程序,延时秒 D1: MOV R6,#20 D2: MOV R7,#248

单片机课程设计题目汇总(全)范文

单片机课程设计题目汇总(一) 说明:为便于同学提前探讨开发思路,自学相关内容,特将本课程设计的可选题目发给大家。本次题目为其一部分,稍后会有另一部分。鼓励大家自己设计题目。 要求:每个小组2-3人,每个题目最多限两个小组选;课程设计考核内容包括:C51源程序;现场显示结果;设计报告文档(文档的格式稍后公布,请注意查收)。 一、基于单片机的电子时钟设计 设计内容:1、用LCD液晶作为显示设备(30分) 2、可以分别设定小时,分钟和秒,复位后时间为:00:00:00 (30分) 3、能实现日期的设置,年、月、日(30分) 4、其他创新内容(10分)如:闹钟功能;显示星期;整点音乐 报时等。 提示:用专用时钟芯片DS1302。 图示: 二、基于单片机的交通灯显示系统(一) 设计内容:1、东西方向、南北方向均有红、黄、绿三种信号灯;(30分) 2、带紧急制动按钮,按钮按下,所有方向亮红灯;再次按下, 恢复正常显示(20分) 3、夜间模式按钮按下,所有方向显示黄灯闪烁(20分) 4、实时提醒绿灯亮的剩余时间(30分) 图示: 三、基于单片机的交通灯显示系统(二) 设计内容:1、东西干道和南北干道的通行分左行、右行、直行,其中左行、右行固定15秒;直行固定30秒(40分) 2、信号灯分绿灯(3种)、红灯、黄灯,每次绿灯换红灯时,黄 灯亮3秒钟。(30分) 3、东西干道和南北干道交替控制,每次干道绿灯交替时,有3 秒钟所有干道的交通灯都是黄灯闪烁3秒钟,提示已经进入路口的车辆迅速通过。(30分)

4、其他创新内容。(10分) 图示: 四、基于单片机的波形发生器设计 设计内容:1、设计一款能产生3种以上波形的波形发生器(30分) 2、设计波形选择按钮(采用3个独立按键)(10分) 3、点阵显示波形图案(20分) 4、能同时输出两种波形(30分) 5、显示频率(10分) 图示: 五、基于单片机的LED点阵广告牌设计 设计内容:1、能显示不同字符、图形的LED点阵广告牌(30分) 2、用独立按键控制不同字符的切换效果(如闪烁、静止、平移) (30分) 3、可通过串口从电脑下载更新需要显示的字符(30分) 4、其他创新功能(10分) 图示:略 六、基于单片机的篮球计分器设计 设计内容:1、设计LCD显示篮球比分牌(30分) 2、通过加分按钮可以给A队或B队加分(20分) 3、设计对调功能,A队和B队分数互换,意味着中场交换场地。 (20分) 4、显示比赛倒计时功能(20分) 5、创新内容:如显示第几小节(10分) 显示: 七、基于单片机的电子贺卡设计 设计内容:1、设计基于单片机的伴奏乐曲(30分)

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.

7个基于STM32单片机的精彩设计实例

7个基于STM32单片机的精彩设计实例,附原理图、代码等相关资料 STM32单片机现已火遍大江南北,各种教程资料也是遍布各大网站论坛,可谓一抓一大把,但大部分都差不多。今天总结了几篇电路城上关于STM32的制作,不能说每篇都是经典,但都是在其他地方找不到的,很有学习参考意义的设计实例。尤其对于新手,是一个学习stm32单片机的“活生生”的范例。 1、STM32与FPGA强强联合,实现完整版信号发生器 话说之前看过作者的另外一个作品,是STM32和FPGA实现的示波器,当然感觉不做。现在作者又推出了信号发生器。重点是TFT触屏来控制波形,相当于一个终端,STM32用来通信,起到了FPGA和TFT之间的纽带作用。最后波形输出作者使用了巴特沃斯滤波器,让输出的波形更加干净。虽然以高端的信号发生器无法比拟,但是用于平时信号输出使用时足够了。 2.采用STM32单片机基于uCOS II系统控制VS1053B语音芯片制作的MP3播放器 一看到uCOS II,就觉得是个高级货,绝对不是一般的小打小闹。该制作耗时半年能完成制作,不得不佩服作者的坚持。这个使用了VC1053B音频模块,TFT液晶显示,还是用了NRF24L01无线模块(暂时没明白这个无线如何使用的),最后作者还很细心的提供了理论指导,方便大家制作。 3.使用OV7670让STM32转身变成照相机(附原理图、代码源文件) 经常使用STM32的同学有没有做过照相机呢?虽说在智能手机遍布的时代,正经相机也要束之高阁了。但是能使用STM32做个相机,拿出去拍个照也是非常拉风的。这个相机使用了ST32F103C8T6(ST32F103C8T6数据手册),摄像头用的是OV7670,带SD卡和触摸屏2.4寸,整体尺寸和卡片机差不多。 4.基于STM32的手机WIFI 控制四轴飞行器设计 我们平时看到的四轴飞行器多是遥控手柄控制的,给你推荐的这个是手机通过wifi就可以控制了,重点在作者还提供了安卓版本的app,直接安装就可以控制飞行器了,当然前提是要根据作者提供的原理图、pcb、代码做出个飞行器了。对APP感兴趣的朋友不妨写写ios 版本的。 5、使用STM32F103RC实现数字万用表设计,具备常用功能 作为电子工程师,最经常用到的就是万用表,可以很少人知道万用表里面的结构、测电压的过程。现在就有人用STM32F103(STM32F103数据手册)做了个数字万用表,只有三个常用功能:测电压(0-50v),测电阻(1k-390k),短路档,使用了LCD5110显示数据,大家不妨动动手开发其他功能。 6、基于RFID技术、以STM32为终端的智能小区管理系统 话说现在高档小区越来越多,对小区的智能化管理也在日渐智能化。这个设计就使用了当下很火的wifi智能控制。系统由多个智能服务终端和系统服务器所组成。智能服务终端就是一个基于STM32的完备系统,涵盖了室内环境监测、高温火警GSM报警、A卡管理助手、天气助手、用户电子账单、万年历、小区意见反馈等功能。

单片机课程设计报告书模板

. .. . .. .. 西南科技大学 2011级微机原理与接口技术 课程设计报告 课题名称微机原理与接口技术 姓名 学号 院、系、部制造科学与工程学院 专业 指导教师 2014年月日

目录 一、绪言 (1) 二、系统设计 (1) 2.1系统整体流程图 (1) 2.2日历时钟的控制方案论证 (1) 2.3单片机的选择方案论证 (2) 2.4键盘选择方案论证 (2) 2.5显示模块的选择方案论证 (2) 2.6模块的选择方案论证 (2) 三、硬件电路设计 (2) 3.1日历时钟的控制电路图 (2) 3.2行列式键盘的设计 (3) 3.3数码管显示电路的设计 (3) 3.4蜂鸣器驱动电路的设计 (4)

3.5主要元器件选择 (4) 四、程序流程图 (5) 五、c语言程序设计 (5) 六、日历时钟的控制器仿真 (19) 6.1K e i l调试 (19) 6.2P r o t e u s调试 (19) 七、结束语 (20) 八、参考文献 (21) 1、绪言 近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。电子时钟是现代社会中的主要计时工具之一,广泛应用于手机,电脑,汽车等社会生活需要的各个方面,及对时间有要求的场合。本设计采用AT89C51单片机作为主要核心部件,附以上电复位电路,时钟电路及按键调时电路组成。数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。

串行通信技术-模拟信号转换接口

微机原理与应用实验报告6 实验9 串行通信技术 实验10A 模拟信号转换接口 实验报告

实验九串行通信技术 一、实验目的 1. 了解异步串行通信原理; 2. 掌握MSP430异步串行通信模块及其编程方法; 二、实验任务 1. 了解MSP430G2553实验板USB转串口的通信功能,掌握串口助手的使用 (1)利用PC机的串口助手程序控制串口,实现串口的自发自收功能 为实现PC串口的自发自收功能,须现将实验板上的扩展板去下,并将单片机板上的BRXD和BTXD用杜邦线进行短接,连接图如下所示: 由此可以实现PC串口的自收自发功能。 (2)思考题:异步串行通信接口的收/发双方是怎么建立起通信的 首先在异步通信中,要求接收方和发送方具有相同的通信参数,即起始位、停止位、波特率等等。在满足上面条件的情况下,发送方对于每一帧数据按照起始位数据位停止位的顺序进行发送,而接收方则一直处于接受状态,当检测到起始位低电平时,看是采集接下来发送方发送过来的数据,这样一帧数据(即一个字符)传送完毕,然后进行下一帧数据的接受。这样两者之间就建立起了通信。 2. 查询方式控制单片机通过板载USB转串口与PC机实现串行通信 (1)硬件连接图

(2)C语言程序 采用SMCLK=1.0MHz时,程序如下:

其中SMCLK=1MHz,波特率采用的是9600,采用低频波特方式,则N=1000000/9600=104.1666…,故UCA0BR1=0,UCA0BR0=104,UCBRS=1; 当采用外部晶振时,时钟采用默认设置即可,程序如下:

也是采用了低频波特率方式,所以关于波特率设置的相关计算和上面是一样的。 (3)思考:如果在两个单片机之间进行串行通信,应该如何设计连线和编程? 由于在上面的连线中将单片机上的P1.2和BRXD相连,P1.1和BTXD相连,所以若要在两个单片机之间进行通信,首先应该将两个单片机的P1.2和P1.1交叉相连,并根据上面的程序进行相同的关于端口和波特率相关的设置即可实现两个单片机之间的通信。 3. (提高)利用PC机RS232通信接口与单片机之间完成串行通信 (1)硬件连接图 在实验时,采用了将PC机的串口com1直接连接至MSP430F149的孔型D9连接器上,G2553单片机的输出引脚P1.1和P1.2分别与F149单片机上的URXD1和UTXD1相连接,连接图如下所示:

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

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

MCS-51单片机串行口工作方式与波特率计算举例

MCS-51单片机串行口工作方式与波特率计算举例 1)方式0 方式0是外接串行移位寄存器方式。工作时,数据从RXD串行地输入/输出,TXD 输出移位脉冲,使外部的移位寄存器移位。波特率固定为fosc/12(即,TXD每机器周期输出一个同位脉冲时,RXD接收或发送一位数据)。每当发送或接收完一个字节,硬件置TI=1或RI=1,申请中断,但必须用软件清除中断标志。 实际应用在串行I/O口与并行I/O口之间的转换。 2)方式1 方式1是点对点的通信方式。8位异步串行通信口,TXD为发送端,RXD为 接收端。一帧为10位,1位起始位、8位数据位(先低后高)、1位停止位。波特率由T1或T2的溢出率确定。 在发送或接收到一帧数据后,硬件置TI=1或RI=1,向CPU申请中断;但必须用软件清除中断标志,否则,下一帧数据无法发送或接收。 (1)发送:CPU执行一条写SBUF指令,启动了串行口发送,同时将1写入 输出移位寄存器的第9位。发送起始位后,在每个移位脉冲的作用下,输出移位寄存器右移一位,左边移入0,在数据最高位移到输出位时,原写入的第9位1的左边全是0,检测电路检测到这一条件后,使控制电路作最后一次移位,/SEND 和DATA无效,发送停止位,一帧结束,置TI=1。 (2)接收:REN=1后,允许接收。接收器以所选波特率的16倍速率采样RXD 端电平,当检测到一个负跳变时,启动接收器,同时把1FFH写入输入移位寄存器(9位)。由于接、发双方时钟频率有少许误差,为此接收控制器把一位传送时间16等分采样RXD,以其中7、8、9三次采样中至少2次相同的值为接收值。接收位从移位寄存器右边进入,1左移出,当最左边是起始位0时,说明已接收8位数据,再作最后一次移位,接收停止位。此后: A、若RI=0、SM2=0,则8位数据装入SBUF,停止位入RB8,置RI=1。

大学生单片机课程设计心得体会

大学生单片机课程设计心得体会 本页是网最新发布的《大学生单片机课程设计心得体会》的详细范文参考文章,好的范文应该跟大家分享,希望大家能有所收获。 大学生单片机课程设计心得体会 作为一名自动化专业的大学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。 在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。 接下来的4月,我意外的接到系学生工作处主管陈老师来电,说我系承办了院校园文化艺术节的南方擂台知识抢答竞赛,而学校又没有抢答器,要我组织几个学生做一个抢答器。我当时想,那好啊,做抢答器不难。以前有用与非门做过,于是我便爽

快的答应了陈老师,并保证没有问题,保质保量完成。当是可能是我想得太简单了,抢答器不就八个按键一个数码管显示不就完了么,把最先抢到的组别显示出来。可是到主任给我们提要求的时候才发现抢答器要实现我功能远不只这么多,倒计时、蜂鸣提示、范规报警、电子计分器,这些我都没有考虑进来。主任也说了,这是一次院级的比赛,电子系做的东西要拿的出手,要做就做点样子出来。我想也好,虽有点难度,但符合我喜欢挑战难度的性格。我说行!这个活我做了! 接到任务开始布属,我把计分电路分了出去由其它几个同学做,我专攻抢答部分。由于没有独立设计电路的经验,刚开始得一步步慢慢深入,正好我会PROTEUS。软硬件的调度都靠它完成,这样可以省很多的时间。做抢答器,我们花了一个月的时间,没日没夜的调试程序(当时单片机课程还没学到定时器中断,还得一边自学。)做PCB板,采购元器件,安装,调试,运行。那时,他们的计分电路也做好了,用了16个数码管做显示。我们将计分和抢答电路板及数码管安装在了事先木制的外壳上,进行整体调试。记得那时正赶上五一放假,而五月8号就是比赛了。我们都没有休息,将工作间从实验室搬到了寝室。那段时间虽然辛苦,但很充实,每个人收获都特别大。 为了让自己的编程水平能进一步提高,我将自己编写的程序发到了论坛里与大家共享,并下载网友们的程序进行分析。电子钟程序、液晶密码锁程序、跑马灯程序、大屏幕点阵屏程序、上

51单片机串口max232通信程序

//工作晶振为11.0592MHz,否则出现返回值错误,一个字节的发送 #include #define uchar unsigned char #define uint unsigned int uchar a,flag; uchar table[]={"very good "}; //-----------初始化定时器和串口- void inital_timer1() { TMOD=0X20; //必须使用定时器1,串口使用规定 TH1=0Xfd; //定时器1,工作方式2,8位自动重装 TL1=0Xfd; //高8位与低8位数值必须相同 TR1=1; //定时器1允许位 REN=1; //串口使能 SM0=0; //串口工作方式设置,工作方式1 SM1=1; ES=1; //串口中断使能 EA=1; // 总中断使能 } //----------串口中断--------- void gorpe() interrupt 4 { RI=0; //接受中断标志位,硬件置1,必须软件置0 a=SBUF; // 特殊功能寄存器 flag=1; // 检测标志位 } //-----接收数据,并向上位机作出反应(即发送返回数据)--- void display() { uchar i; if(flag==1) { ES=0; //关闭串口中断,接下来要发送数据,否则发送完一个数据仍会产生中断,产生死循环 for(i=0;i<10;i++) { SBUF=table[i]; while(!TI); //判断是否发送完成 TI=0; //发送中断标志位 } SBUF=a; while(!TI); TI=0;

MCS-51单片机串行接口

第七章MCS-51单片机串行接口 第一节串行通信的基本概念 (一)学习要求 1.掌握串行通信的基本概念。 2. 掌握异步通信和同步通信的区别。 (二)内容提要 一:基本概念及分类 串行通信是将数据的各位一位一位地依次传送。适合于计算机之间、计算机与外部设备之间的远距离通信。 串行通信从传输方式分为: 单工方式、半双工方式、全双工方式。 从接收方式来说,串行通信有两种方式: 异步通信方式、同步通信方式。 二:串行口的功能 MCS-51单片机中的异步通信串行接口能方便地与其他计算机或传送信息的外围设备(如串行打印机、CPU终端等)实现双机、多机通信。 串行口有4种工作方式,见表7-1。方式0并不用于通信,而是通过外接移位寄存器芯片实现扩展并行I/O接口的功能。该方式又称为移位寄存器方式。方式1、方式2、方式3都是异步通信方式。方式1是8位异步通信接口。一帧信息由10位组成,其格式见图7-2a。方式1用于双机串行通信。方式2、方式3都是9位异步通信接口、一帧信息中包括9位数据,1位起始位,1位停止位,其格式见图7-2b。方式2、方式3的区别在于波特率不同,方式2、方式3主要用于多机通信,也可用于双机通信。 表7-1 (三)习题与思考题 1、什么是并行通信?什么是串行通信?各有何优缺点? 答:并行通信指数据的各位同时传输的通信方式,串行通信是指各位数据逐位顺序传输的通信方式。 2、什么是异步通信?什么是同步通信?各有何优缺点? 3、什么是波特率?某异步串行通信接口每分钟传送1800个字符,每个字符由11位组成,请计算出传送波特率。 第二节MCS-51串行接口的组成 (一)学习要求

单片机课程设计

《单片机原理及实训教程》 课程设计 设计题目单片机智能流水灯控制器 院系电子电气工程学院 班级 12级电气(一)班 姓名侯东伟学号 2012481015 设计地点实验楼 指导教师翟红程职称副教授 指导教师签字 设计日期 14年6月16——14年6月22

目录 封面-------------------------------1 目录-------------------------------2 前言-------------------------------3 一、设计要求及M C S-51单片机简介-----------4 二、硬件组成-----------------------5 三、电源提供系统-------------------6 四、程序流程图---------------------7 五、晶振延时计算-------------------8 六、源程序-------------------------8 七、元件清单---------------------10 结束语----------------------------11 参考文献---------------------------11

前言 自计算机问世以来,单片机技术在社会各领域中得到了广泛的应用。在流水灯控制系统中,单片机更是取代了由齿轮调节延迟时间的旧式市发展速度,成为日后此系统中的核心部分。由于单片机具有一些突出的优点:体积小、重量轻、电源单一、功耗低;功能强、价格低;数据大都在单片机内部传送,运行速度快、抗干扰能力强、可靠性高,所以单片机被广泛的应用于测控系统、数据采集、智能仪器仪表、机电一体化产品、智能接口、计算机通信以及单片机的多级系统等领域。 本文主要用的是单片机,课题名称为单片机智能流水灯控制。通过本课题的设计以后,使我了解到了单片机的许多方面的应用。本课程设计介绍了一种由MCS-89C51集成块编程实现的控制电路,它完成了单片机流水灯控制功能,并给出了具体的硬件电路和相应的程序。这种控制电路可靠性,灵活性高,使用范围广,特别适合中小城市的交通灯、霓虹灯等的应用。而且,它对其他类似系统的开发具有一定的借鉴意义。 通过本次实训实习,使我掌握了一定的电子产品设计、制作技能和调试技术,巩固电子技术的理论知识,锻炼和提高自己的动手能力和综合运用知识解决实际问题的能力及实践动手能力。 关键词:LED 单片机控制系统流水灯

单片机设计实例

应用程序设计实例 浙江海洋学院楼然苗6.1 闪烁LED小灯的设计 6.2 六位数码管时钟电路的设计 6.3 LED广告显示电路的设计 6.4 8路输入模拟信号的数值显示电路 6.5 单键学习型遥控器的设计 6.6 十六路遥控电路的设计 6.7 遥控码的仿真应用设计 6.8 自行车里程\速度计的设计 6.9 自动往返行驶小汽车的设计 6.10 遥控小汽车的设计 6.11 汽车行驶信息的发送与接收

;************; ;亮灯控制程序; ;************; ; ;************; ;中断入口程序; ;************; ; ORG 0000H LJMP START ORG 0003H RETI ORG 000BH RETI ORG 0013H RETI ORG 001BH RETI ORG 0023H RETI ; ;************; ; 初始化程序 ; ;************; ; CLEAR: RET ; ;************; ; 主程序 ; ;************; ;

START:ACALL CLEAR STAR1:MOV P3,#0FFH JNB P3.0,FUN0 JNB P3.1,FUN1 JNB P3.2,FUN2 JNB P3.3,FUN3 ;关闭按纽 JNB F0,STAR1 ;曾经有键按下F0置1 RET ; FUN0:LCALL DL10MS ;消岸抖动 JB P3.0,STAR1 WAITL0:JNB P3.0,WAITL0 ;等待键释放 SETB F0 FUN01:LCALL FUN00 LCALL STAR1 LJMP FUN01 ; FUN1:LCALL DL10MS ;消岸抖动 JB P3.1,STAR1 WAITL1:JNB P3.1,WAITL1 ;等待键释放 SETB F0 FUN10:LCALL FUN11 LCALL STAR1 LJMP FUN10 ; FUN2:LCALL DL10MS ;消岸抖动 JB P3.2,STAR1 WAITL2:JNB P3.2,WAITL2 ;等待键释放 SETB F0 FUN20:LCALL FUN22 LCALL STAR1 LJMP FUN20 ; FUN3:LCALL DL10MS ;消岸抖动 JB P3.3,STAR1 WAITL3:JNB P3.3,WAITL3 ;等待键释放 CLR F0 MOV P1,#0FFH ;关显示 LJMP STAR1 ; FUN00:MOV A,#0FEH FUN000:MOV P1,A LCALL DL05S JNB ACC.7,OUT

串口通信测试方法

串口通信测试方法 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 机与单片机之间进行通信,在设计过程中,有如下约定:

单片机课程设计题目汇总全

单片机课程设计题 目汇总全

单片机原理与接口技术课程设计题目汇总 说明:为便于同学提前探讨开发思路,特将本课程设计的可选题目发给大家。每个同学能够在以下题目中选一题。 要求:课程设计考核内容包括:源程序;设计报告文档。 一、基于单片机的电子时钟设计 设计内容:1、用LCD液晶作为显示设备(30分) 2、能够分别设定小时,分钟和秒,复位后时间 为:00:00:00(30分) 3、能实现日期的设置,年、月、日(30分) 4、其它创新内容(10分)如:闹钟功能;显示 星期;整点音乐报时等。 图示: 二、基于单片机的交通灯显示系统(一) 设计内容:1、东西方向、南北方向均有红、黄、绿三种信号灯;(30分) 2、带紧急制动按钮,按钮按下,所有方向亮红 灯;再次按下,恢复正常显示(20分) 3、夜间模式按钮按下,所有方向显示黄灯闪烁

4、实时提醒绿灯亮的剩余时间(30分) 图示: 三、基于单片机的交通灯显示系统(二) 设计内容:1、东西干道和南北干道的通行分左行、右行、直行,其中左行、右行固定15秒;直行固定30秒(40分) 2、信号灯分绿灯(3种)、红灯、黄灯,每次 绿灯换红灯时,黄灯亮3秒钟。(30分) 3、东西干道和南北干道交替控制,每次干道绿 灯交替时,有3秒钟所有干道的交通灯都是黄灯闪烁3秒钟,提示已经进入路口的车辆迅速经过。(30分) 4、其它创新内容。(10分) 图示: 四、基于单片机的波形发生器设计 设计内容:1、设计一款能产生3种以上波形的波形发生器

2、设计波形选择按钮(采用3个独立按键) (10分) 3、点阵显示波形图案(20分) 4、能同时输出两种波形(30分) 5、显示频率(10分) 图示: 五、基于单片机的LED点阵广告牌设计 设计内容:1、能显示不同字符、图形的LED点阵广告牌(30分) 2、用独立按键控制不同字符的切换效果(如闪 烁、静止、平移)(30分) 3、可经过串口从电脑下载更新需要显示的字符 (30分) 4、其它创新功能(10分) 图示:略 六、基于单片机的篮球计分器设计 设计内容:1、设计LCD显示篮球比分牌(30分) 2、经过加分按钮能够给A队或B队加分(20

7个基于STM32单片机的精彩设计实例,附原理图代码等相关资料

7个基于STM32单片机的精彩设计实例,附原理图、代码等相关资料 STM32单片机现已火遍大江南北,各种教程资料也是遍布各大网站论坛,可谓一抓一大把, 但大部分都差不多。今天总结了几篇电路城上关于STM32的制作,不能说每篇都是经典,但都是在其他地方找不到的,很有学习参考意义的设计实例。尤其对于新手,是一个学习stm32单片机的“活生生”的范例。 1、STM32与FPGA强强联合,实现完整版信号发生器 话说之前看过作者的另外一个作品,是STM32和FPGA实现的示波器,当然感觉不做。现在作者又推出了信号发生器。重点是TFT触屏来控制波形,相当于一个终端,STM32用来通信,起到了FPGA和TFT之间的纽带作用。最后波形输出作者使用了巴特沃斯滤波器,让输出的波形更加干净。虽然以高端的信号发生器无法比拟,但是用于平时信号输出使用时足够了。 it/780#/details 2.采用STM32单片机基于uCOS II系统控制VS1053B语音芯片制作的MP3播放器 一看到uCOS II,就觉得是个高级货,绝对不是一般的小打小闹。该制作耗时半年能完成制作,不得不佩服作者的坚持。这个使用了VC1053B音频模块,TFT液晶显示,还是用了NRF24L01无线模块(暂时没明白这个无线如何使用的),最后作者还很细心的提供了理论指导,方便大家制作。 circuit/796#/details 3.使用OV7670让STM32转身变成照相机(附原理图、代码源文件) 经常使用STM32的同学有没有做过照相机呢?虽说在智能手机遍布的时代,正经相机也要束之高阁了。但是能使用STM32做个相机,拿出去拍个照也是非常拉风的。这个相机使用了ST32F103C8T6,摄像头用的是OV7670,带SD卡和触摸屏2.4寸,整体尺寸和卡片机差不多。 mall.com/circuit/787#/details 4.基于STM32的手机WIFI控制四轴飞行器设计 我们平时看到的四轴飞行器多是遥控手柄控制的,给你推荐的这个是手机通过wifi就可以控制了,重点在作者还提供了安卓版本的app,直接安装就可以控制飞行器了,当然前提是要根据作者提供的原理图、pcb、代码做出个飞行器了。对APP感兴趣的朋友不妨写写ios版本的。 5、使用STM32F103RC实现数字万用表设计,具备常用功能 作为电子工程师,最经常用到的就是万用表,可以很少人知道万用表里面的结构、测电压的过程。现在就有人用stm32F103做了个数字万用表,只有三个常用功能:测电压(0-50v),测电阻(1k-390k),短路档,使用了LCD5110显示数据,大家不妨动动手开发其他功能。 .com/circuit/581#/details

相关主题