基于CC2541蓝牙模块与单片机的串口通信
摘要
蓝牙技术作为一种无线数据与语音通信的开放性全球规范,可提供低功耗、短距离的无线空中接口,在各种固定与移动设备之间实现无线通信。在移动通信、无线数据采集、无线遥控与遥测、计算机网络及自动控制等多种领域,蓝牙技术都有着广泛的应用。蓝牙协议规范具有多个层次,完整的蓝牙协议栈的开发是一项很复杂的工程,而在大多数嵌入式应用中,只是需要实现基本的无线数据传输功能,并不需要实现全部的蓝牙协议栈。针对此类应用,若是能提供一套实用的蓝牙无线接口、实现一个通用的无线数据传输模块,就可以比较有效地缩短开发周期,降低开发成本。蓝牙通讯最初设计初衷是方便移动电话(手机)与配件之间进行低成本、低功耗无线通信连接,现在已经成为IEEE802.15标准,得到全球上万家厂商支持。
本文通过对美国德州仪器半导体公司(TI)开发的CC2541蓝牙模块与51单片机搭建电路实现无线通信技术。BLE(Bluetooth Low Energy),蓝牙 4.0 标准里的一个子集,蓝牙 4.0 分为两部分,一个是能够兼容传统蓝牙的高速部分,另外就是这里的BLE,的两大显著特点:BLE功耗低,速率低。所以你就别打算用BLE 来做音频传输或者文件传输了,目前BLE最大的传输速率只能达到4~5K 字节/每秒。BLE 协议栈,蓝牙4.0 里的BLE,只是一个协议规范,而BLE 协议栈则是该协议的代码实现。蓝牙组织SIG,只负责制定协议,而协议如何实现,则需要各个芯片公司完成。可以这样理解,BLE 协议栈是芯片公司预先编好的源码或者库。
关键词:蓝牙单片机通信BLE4.0
一.绪论
1.背景介绍
蓝牙技术的最初倡导者是五家世界著名的计算机和通信公司:爱立信Ericsson、国际商用机器IBM、英特尔Intel、诺基亚NoMa和东芝Toshiba。1998年5月,以爱立信为首,此五家IT巨人共同提出了一种近距离无线数字通信的技术标准,目标是实现最高传输速率可达1Mb/s(有效传输速率为720Kb/s),最大传输距离为10m的无线通信技术,即蓝牙技术,并成立了国际化组织蓝牙SIG(SpecialInterest Group),致力于蓝牙规范的制定和蓝牙技术在全球范围内的推广。
蓝牙通信有很多优点,首先是低功耗,以BLE 4.0为例,一节钮扣电池在静态工作状态可以支持一年;其次是低成本,TI公司的CC2540蓝牙SOC方案芯片出售价仅1美元,可以让人们低廉使用蓝牙技术;再次是开放性,2.4GHz的频段全球开放,没有政府监管;最后是适合时代潮流,现在是手机的时代,蓝牙技术本来就为它而生。
蓝牙4.0协议是2010年6月由SIG(Special Interest Group)发布的最新标准,它有2种模式:BLE(Bluetooth low energy)只能与4.0协议设备通信,适应节能且仅收发少量数据的设备(如家用电子);BR/EDR(Basic Rate / Enhanced Data Rate),向下兼容(能与3.0/2.1/2.0通信),适应收发数据较多的设备(如耳机)。
目前,苹果公司的iPhone 4S、iPhone 5、miniPad和iPad 3;小米手机2;三星公司的Galaxy SIII和Note II;HTC ONE系列等移动设备都支持蓝牙4.0 CC2540/CC2541,美国德州仪器半导体公司(简称TI)的BLE 芯片,TI 实现的BLE
协议栈同样是ble 协议的代码实现,这些BLE 代码正是运行在CC2540/CC2541 芯片上,简单的说CC254x 就是一颗带有蓝牙功能的51 单片机,其他单片机有的资源,例如定时器,UART,SPI,ADC,GPIO,USB(CC2540 专有),I2C(CC2541 专有)等等,CC254x 也都有,而BLE 协议栈也就是一些复杂一点的C 语言源码
2.硬件设备
CC254x 的应用非常广,三种金典应用:1 串口透传,2 穿戴式设备,3PC 上的BLE 适配器,这样就对应了三种设备,带有带串口的SmartRF 开发板(用来开发大部分的应用),带有三轴加速度计的Keyfob 防丢器开发板(用来开发穿戴式设备),最后是CC2540USBdongle,可以直接插在USB 口上(开发BLE 适配器或者虚拟串口等应用)。而且TI 的BLE 协议栈例程,也是建立在这三种设备上。
2.1 SmartRF 开发板
SmartRF 开发板兼容TI 官方的SmartRF05EB 开发板,TI 的BLE 协议栈里提供的大部分例程,均基于该开发板创建,我们除了升级了LCD 为12864 外,其余完全兼容,TI 协议栈例程可以直接在我们的SmartRF 上运行,这一点非常重要,因为TI 经常有版本更新或者新的例程出来。
2.2 Keyfob 开发板
Keyfob 开发板带有一个三轴加速度计和一个蜂鸣器,除了可以开发防丢器外,还有更多的想象空间:计步器、运动检测等等。和SmartRF 开发板一样,采用的也是底板分离的设计,核心板和SmartRF 相同(Keyfob默认发CC2541 核心板,CC2541 版本的keyfob 资源更多)。Keyfob 的反面有一个型号为CR2032 的纽扣电池座。我们采用的电池座和TI 的Sensortag开发板的质量一样,厚实、耐用。
2.3 CC-Debugger 仿真器
CC254x 不支持串口下载,所以只能通过CC-Debugger 烧写,除了烧写功能,也可以在IAR 开发软件里,通过CC-Debugger 连接芯片在线调试你开发的程序,单步运行、打断点等,所以又叫仿真器。TI 官方开发板配套使用的全部是CC-Debugger 仿真器
3.软件环境
IAR for 8051 开发环境,Flash Programmer 固件烧写软件
二.CC2541芯片的特性参数
CC2541 是一款针对蓝牙低能耗以及私有2.4GHz 应用的功率优化的真正片
载系统(SoC) 解决方案。它使得使用低总体物料清单成本建立强健网络节点成为可能。CC2541 将领先RF 收发器的出色性能和一个业界标准的增强型8051 MCU、系统内可编程闪存存储器、8kBRAM 和很多其它功能强大的特性和外设组合在一起。CC2541 上CC2541 非常适合应用于需要超低能耗的系统。这由多种不同的运行模式指定。运行模式间较短的转换时间进一步使低能耗变为可能。
如果CC2540 上的USB 未启用并且CC2541 上的I2C/ 额外I/O 未启用,那么CC2541 与CC2540 在6mm x 6mm 方形扁平无引脚(QFN) 40 封装内引脚兼容。与CC2540 相比,CC2541 提供更低RF 流耗。CC2541 没有CC2540 所具有的USB 接口,并在TX模式中提供较低的最大输出功率CC2541 还增加了1 个HW I2C 接口。
CC2541 与CC2533 优化RF4CE IEEE 802.15.4 SoC引脚兼容。CC2541 有2 个不同的版本:分别具有128kB 和256kB 闪存的的CC2541F128/F256。
1特性
(1)射频
–2.4GHz蓝牙符合低能耗规范和私有的RF 片载系统
–支持250kbps,500kbps,1Mbps,2Mbps 的制器内核数据速率
–出色的链路预算,不使用外部前段而支持长距离应用
–高达0dBm 的可编程输出功率
–出色的接收器灵敏度(1Mbps 时为- 94dBm),可选择性,和阻挡性能
–适合于针对符合世界范围内的无线电频率调节系统:ETSI EN 300 328 和EN 300 440 2 类
(欧洲),FCC CFR47 15 部分(美国),和ARIB STD-T66(日本)
(2)布局
–极少的外部组件
–提供参考设计支持
–6mm ×6mm 方形扁平无引脚(QFN)-40 封装
–与CC2540 引脚兼容(当不使用USB 或者I2C 时)(ADC)
(3)低功率
–工作模式RX 低至:17.9mA
–工作模式TX (0 dBm):18.2mA
–功率模式1(4μs 唤醒):270μs
–功率模式2(睡眠定时器打开):1μs
–功率模式3(外部中断):0.5μs
(4)工作模式下TPS62730兼容低功率
–RX 低至:14.7mA(3V 电源)
–TX (0 dBm):14.3 mA(3V 电源)
(5)微控制器
–具有代码预取功能的高性能和低功率8051 微控制器内核
–系统内可编程闪存,128 或者256 KB
–在所有功率模式下具有保持功能的8KB RAM
–支持硬件调试
–扩展基带自动化,包括自动确认和地址解码
–所有功率模式中对所有相关寄存器的保持
(6)外设
–功能强大的 5 通道直接内存访问(DMA)
–通用定时器(1 个16 位,2 个8 位)
–红外(IR) 生成电路
–具有捕捉功能的32kHz 睡眠定时器
–精确数字接收到的数字信号强度指示器(RSSI)支持
–电池监视器和温度感应器
–含8 通道和可配置分辨率的12 位模数转换器(ADC)
–高级加密标准(AES) 安全协处理器
–2 个功能强大的支持几个串行协议的通用异步接收发器(UART)
–23 个通用I/O 引脚(21 ×4mA,2 ×20mA)
–I2C 接口
–2 个具有LED 驱动功能的I/O 引脚
–安全装置定时器
–集成的高性能比较器
(7)开发工具
–CC2541 评估模块工具包(CC2541EMK)
–CC2541 小型开发工具包(CC2541DK-MINI)
–SmartRF?软件
–提供IAR 嵌入式Workbench?
2.软件特性
(1)符合针对单模式蓝牙低能耗(BLE) 解决方案的符合蓝牙4.0 协议的堆栈器–完全功率优化堆栈,包括控制器和主机
–GAP - 中心设备,外设,或者广播器(包括组合角色)
–属性协议(ATT) / 通用属性配置文件(GATT) –客户端和服务器
–L2CAP 说明
(2)示例应用和配置文件
–针对GAP 中心和外围作用的一般应用
–距离临近,加速计,简单关键字,和电池GATT 服务
–BLE 软件栈内支持更多应用
(3)多重配置选项
–单芯片配置,允许应用运行在CC2541 上
–用于运行在一个外部微处理器接口
–BTool - 用于评估、开发和测试的视窗(Windows) PC 应用
3.应用范围
?2.4GHz蓝牙低能耗系统
?私有的2.4 GHz 系统
?人机接口器件(键盘,鼠标,遥控)
?体育和休闲设备1 个HW I2C 接口。
?移动电话附件
?消费类电子产品
4.含有TPS62730的CC2541
?TPS62730是一款具有旁通模式的2MHz 降压转换器
?延长电池寿命高达20%
?在所有工作模式下减少的电流
?30nA 旁通模式电流以支持低功率模式
?RF 性能并未改变
?小型封装允许小型解决方案尺寸
?CC2541 可控
三.基于单片机的蓝牙硬件接口设计
1.单片机C8051简介
微控制器(MCu)是蓝牙应用系统的核心,它的选择将直接影响到系统的性能。C8051F120是Cygnal公司的一种与8051兼容的高速SOC单片机,它具有高速CIP.51内核、灵活的I/O交叉开关、先进的时钟系统、JTAG系统调试接口以及多源复位系统它性能卓越,内核采用流水线结构,速度可达100MIPS,比普通的51快40倍,而且在资源丰富、体积小、功耗低、集成度高且调试方便。
下面列出了它的一些主要特性:
(1)高速、流水线结构的8051兼容的CIP.51内核;
(2)真正8位500ksps的ADC,带PGA和8通道模拟多路开关;
(3)2周期的16×16的乘法和累加引擎;
(4)8448(8K+256)字节的片内RAM;
(5)可寻址64K字节地址空间的外部数据存储器接口;
(6)硬件实现的SPI、SMBus/12C和两个UART串行接El[10l;
(7)5个通用的16位定时器;
(8)具有6个捕捉/比较模块的可编程计数器/定时器阵列;
(9)FLASH存储器具有在系统中重新编程能力,可用于非易失性数据存储,并允许现场更新固件;
(10)片内JTAG调试电路允许非侵入式(不占用片内资源)、全速、在系统测试;(11)可在工业温度范NI(.45"C一+85。c)N用2.7V~3.6V的电压工作。(12)C8051F120为100脚TQFP封装。
2.单片机与蓝牙模块的连接
目前,最流行的HCI是通过通用异步收发器(UART)和通信串行总线(USB)连接的。其中UART通常更受青睐,因为其性能和数据吞吐率水平与USB接口相当,且传输协议较为简单,减少了软件开销,是一种更为经济高效的硬件解决方案。
①蓝牙模块电源线
蓝牙模块的电压管理器共有4个输入,分别是Vcc(12)、MASTER(28)、SW(27)和SW1(23)。Vcc提供电源电压,典型值是3.3V;MASTER(28)为UART提供一个独立的电源回路,可以与单片机逻辑接口相同,可以连接到Vcc;SW(27)信号控制内部电压稳压器导通或关断。将Vcc(12)、MASTER(28)、SW(27)和SW1(23)连接在一起使用时,不需要考虑蓝牙模块的加电顺序。
图1:蓝牙模块的外围电路
②数据线和信号线
单片机C8051F120具有两个UART,在此选用UART0。在编程时候可通过交叉开关设置,将UART0分配到两个管脚上,例如P3.1(TXD)和P3.0(RXD),分别与蓝牙模块的RXD和TXD相连。另外,单片机端需另外分配两个管脚,例如P1.2和P1.3,分别作为流量控制信号CTS和RTS,分别与蓝牙模块的RTS和CTS相连。若CTS为1则允许对方发送,若CTS为0则禁止对方发送。
图2:单片机的外围电路
③蓝牙模块天线
蓝牙模块ANT管脚连接到50欧的天线,天线的电压驻波比小于2:1。
在本课题的实验板的设计中,单片机和蓝牙模块是焊接在一个PCB板上的。由于蓝牙模块采用平面封装,而且引脚很密集,要想直接焊接到PCB板上很困难,而且天线也很难焊接上去。因而自行设计了一个辅助电路板,先将蓝牙模块焊接到此辅助电路板上,然后将要用到的蓝牙模块的部分引脚引出来,通过插座将蓝牙模块连接到PCB板上,这样就使得蓝牙模块的装卸变得很方便。辅助电路板引出的管脚有GND.地线、VCC.3.3V、数据收发线RXD和TXD、流控线RTS和CTS、使能信号线.EN、复位信号线.RESET,其中BT EN即图3中的ON信号,实际应用中将它与VCC接在一起,其他的与单片机相连。
图3:CC2541与单片机的连接电路
四.软件设计
单片机通过UART控制蓝牙模块时,最底层的数据传输是通过UART实现的。因而需要实现单片机UART接口函数来完成最基本的字节级的数据发送和接收。UART即通用异步通信接收发送器,它是一种同步/异步传输的串行接口,工作在同步传输的为半双工方式,而工作在异步传输的为全双工方式。单片机的UART 用一个SFR(且I]SBUF)的地址可以访问发送寄存器和接收寄存器,并允许在
软件尚未读取前一个接收字节的情况下,开始接收第2个输入数据字节。C8051F120的UART工作模式有模式O、模式1、模式2、模式3共4种,其中模式0是同步半双工方式,其余全为异步全双工方式。
相关程序如下:
#include
#include
#include
unsigned char tmp;
unsigned int c=0;
sbit led1=P2^0; //指示灯0
sbit led2=P2^1; //指示灯1
sbit led3=P2^3; //指示灯3
void init(); //串口初始化
void send(unsigned char a); //单字节发送函数
void ctrl(); //接收处理函数
void main()
{
init();
while(1)
{
if(RI==1) //是否有数据到来
{
RI = 0;
tmp = SBUF; //暂存接收到的数据
ctrl();
}
}
}
void init() //串口初始化
{
ES=0; //关中断
SCON = 0x50; // REN=1允许串行接受状态,串口工作模式1,10
//位UART(1位起始位,8位数据位,1位停止位,
//无奇偶校验),波特可变
TMOD = 0x20; //定时器1工作于方式2,8位自动重载模式,用
//于产生波特率
TH1=TL1=0xFD; //波特率9600 (本次测试采用晶振为11.0592)
PCON &= 0x7f; //波特率不倍增
TR1 = 1; //定时器1开始工作,产生波特率
//发送标志位置1
TI=0; //接收标志位置0
RI=0;
EA=0;
ES=1;
led1=0; //初始化设置3个指示灯全亮
led2=0;
led3=0;
}
void send(unsigned char a) //单字节数据发送
{
//注意:若单片机TXD(P3.1)无上拉能力,必须在P3.1端接上拉电阻。本次测试需要接上拉电阻
TI=0;
SBUF=a;
while(TI==0);
TI=0;
if(c%2) //发送指示灯标志,每接收一次,此灯亮灭交替led3=1;
else
led3=0;
c++;
}
void ctrl() //接收处理函数
{
switch(tmp)
{
case '1':
led1=1; //收到字符1,指示灯0灭
send(tmp);
break;
case '2': //收到字符2,指示灯1灭led2=1;
send(tmp);
break;
case '3': //收到字符3,指示灯0、1亮led1=0;
led2=0;
send(tmp);
break;
case '4': //收到字符4,指示灯0、1灭led1=1;
led2=1;
send(tmp);
break;
case '5': //收到字符5,指示灯3亮
led3=0;
send(tmp);
break;
default: //其他,灯全灭
led1=1;
led2=1;
led3=1;
send(tmp);
}
}
五.总结
通过此次课程设计,使我更加扎实的掌握了有关单片机和微处理器方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
虽然这次课程是那么短暂的2周时间,我感觉到这些天我的所学胜过我这一学期所学,这次任务原则上是设计,其实就是一次大的作业,是让我对课本知识的巩固和对基本理论知识的熟悉和应用,期间遇到了不少问题和困难,使我做事的耐心和仔细程度得以提高。课程设计是培训学生运用本专业所学的理论知识和专业知识来分析解决实际问题的重要教学环节,是对三年所学知识的复习和巩固。同样,也促使了同学们的相互探讨,相互学习。因此,我们必须认真、谨慎、踏
实、一步一步的完成设计。课程设计是一个重要的教学环节,通过课程设计使我们了解到一些实际与理论之间的差异。通过课程设计不仅可以巩固专业知识,为以后的工作打下了坚实的基础,而其还可以培养和熟练使用资料,运用工具书的能力,把我们所学的课本知识与实践结合起来,起到温故而知新的作用。课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门设计课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。
总之,这次课程设计使我收获很多、学会很多、比以往更有耐心很多。感谢学校及老师给我们这次课程设计的机会,最真挚的感谢我们的辅导老师,在设计过程中,老师精心的辅导和不厌其烦地的态度才使得我们以顺利的完成这次设计,他那无私的奉献的精神照耀着我们对学习的热爱,同时也增加我们对知识的追求和欲望度。
龙源期刊网 https://www.sodocs.net/doc/8317869443.html, 基于单片机的数据串口通信研究 作者:蒋信 来源:《电子技术与软件工程》2016年第06期 摘要科技的发展日新月异,机电一体化的发展对自动化系统的可靠性提出了更高的要 求,在这样的背景下,单片机在工业控制领域的应用越来越广泛也越来越重要。基于以上,本文从通信过程、显示设计、键盘接口等方面研究了基于单片机的数据串口通信。 【关键词】单片机数据串口通信研究 在计算机控制领域中,计算机与外设数据之间的通信主要依靠单片机来实现,单片机的串口功能能够实现数据的传输以及分析,这就属于串口通信,可以预见的是,单片机的数据串口通信将会得到更广泛的应用,单片机之间的通信也有赖于其数据串口通信功能。基于以上,本文简要研究了基于单片机的数据串口通信。 1 串口通信的实现方式 设备在实现通信的过程中,必须树立一个信息接发双方都认可的通信方式,只有这样才能够保证信息在传送的过程中不发生冲突,才能够实现设备之间的通信,对于串口通信来说,主要有以下两种方式。 1.1 异步通信方式 异步通信方式实现的过程中,数据传输方式为独立字节的形式,不同的字节前端有着不同的起始信号,不同字节的后端则会有不同的终止信号,起始信号只能是一个,而终止信号可以是一个也可以是多个。数据传输过程中,字节进行移动,一个字节的迁移过程表示一个字节的传输过程,传输之前使用起始信号进行传输,传输结束之后使用终止信号将传输线调回标准状态,一个字节传输完毕后进行下一个字节的传输,字节传输有着连续性,这就是异步传输方式。由于没一个字节都要附加起始信号信息和终止信号信息,因此异步传输方式的效率较低,但异步通信方式容许一定程度的频率漂移,有着一定的误差缓冲作用。 1.2 同步通信方式 同步通信方式指的是将所有字符和字节连接在一起进行传输的一种通信方式,多个字符相互连接组成数据块,在数据块前增加同步字符,以同步字符作为传输起始信号,在传输后增加校验字符,以校验字符作为传输终止信号,以此来校验传输过程中的错误和误差,数据块中的各个字符之间没有间隔,相较于异步通信方式来说,其传输效率较高,但其对于信息接收端和信息发送端的同步性要求较高,因此硬件的复杂程度也就更高。 2 基于单片机的数据串口通信
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通信,程序代码1:232通信 #include
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
} 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.
//以下程序都是在VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。 //程序在关键的位置添加了注释。 /****************************************************************************** * * 实验名: 串口实验 * 使用的IO : P2 * 实验效果: 将接收到发送回电脑上面。 * 注意: ******************************************************************************* / #include
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采用二线
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、如果在电脑上发送以$开始的字符串,则将整个字符串原样返回(字符串长度不是固定的)。
河南机电高等专科学校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缓存。有两个,一个缓存,另一个接受,
《工业控制计算机》!""#年$%卷第%期&’机串口与多个单片机红外无线通信的实现 周文举山东枣庄师专计算机系 (!%%$(")&’机与一台或多台单片机的通信系统中的数据通讯一般 采用的是串行通信方式。串行通信可采用有线与无线两种方式,作者根据单片机串行通信原理、脉冲编码调制)&’*+技术和红外无线通信技术,开发设计了单片机编解码红外无线通信接口。用该接口构成的多机通信系统,由于采用红外线为传输介质,而不是电缆线和电磁波,所以特别适用于那些不适合或不方便架设电缆线及电磁干扰较强的工作环境。本文就利用红外技术实现&’机与多台单片机无线串行通信的实现作一介绍。 !多机通信原理 在多机数据通信系统中,&’机与单片机之间的数据通信采 用一对多的主从模式,利用波长为,#"!-的远红外波通信。其原理示意图如图$。主机为&’机,从机选择*’./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 一、程序代码 #include 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; } C51单片机和电脑串口通信电路图与源码 51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。 串口通讯的硬件电路如上图所示 在制作电路前我们先来看看要用的MAX232,这里我们不去具体讨论它,只要知道它是TTL和RS232电平相互转换的芯片和基本的引脚接线功能就行了。通常我会用两个小功率晶体管加少量的电路去替换MAX232,可以省一点,效果也不错,下图就是MAX232的基本接线图。 按图7-3加上MAX232就可以了。这大热天的拿烙铁焊焊,还真的是热气迫人来呀:P串口座用DB9的母头,这样就可以用买来的PC串口延长线进行和电脑相连接,也可以直接接到电脑com口上。 为了能够在电脑端看到单片机发出的数据,我们必须借助一个WINDOWS软件进行观察,这里我们利用一个免费的电脑串口调试软件。本串口软件在本网站https://www.sodocs.net/doc/8317869443.html,可以找到 软件界面如上图,我们先要设置一下串口通讯的参数,将波特率调整为4800,勾选十六进制显示。串口选择为COM1,当然将网站提供的51单片机实验板的串口也要和电脑的COM1连接,将烧写有以下程序的单片机插入单片机实验板的万能插座中,并接通51单片机实验板的电源。 实验单片机与PC机串口通信(C51编程)实验 要求: 1、掌握串行口的控制与状态寄存器SCON 2、掌握特殊功能寄存器PCON 3、掌握串行口的工作方式及其设置 4、掌握串行口的波特率(bondrate)选择 任务: 1、实现PC机发送一个字符给单片机,单片机接收到后即在个位、十位数码管上进行显示,同时将其回发给PC机。要求:单片机收到PC机发来的信号后用串口中断方式处理,而单片机回发给PC机时用查询方式。 采用软件仿真的方式完成,用串口调试助手和KEIL C,或串口调试助手和PROTEUS分别仿真。 需要用到以下软件:KEIL,VSPDXP5(虚拟串口软件),串口调试助手,Proteus。 (1)虚拟串口软件、串口调试助手和KEIL C的联调 首先在KEIL里编译写好的程序。 打开VSPD,界面如下图所示:(注明:这个软件用来进行串口的虚拟实现。在其网站上可以下载,但使用期为2周)。 左边栏最上面的是电脑自带的物理串口。点右边的addpair,可以添加成对的串口。一对串口已经虚拟互联了,如果添加的是COM3、COM4,用COM3发送数据,COM4就可以接收数据,反过来也可以。 接下来的一步很关键。把KEIL和虚拟出来的串口绑定。现在把COM3和KEIL绑定。在KEIL中进入DEBUG模式。在最下面的COMMAND命令行,输入 modecom39600,0,8,1 %分别设置com3的波特率、奇偶校验 位、数据位、停止位 assigncom3 (以上参数设置注意要和所编程序中设置一致!) 打开串口调试助手 可以看到虚拟出来的串口COM3、COM4,选择COM4,设置为波特率9600,无校验位、8位数据位,1位停止位(和COM3、程序里的设置一样)。打开COM4。 现在就可以开始调试串口发送接收程序了。可以通过KEIL发送数据,在串口调试助手中就可以显示出来。也可以通过串口调试助手发送数据,在KEIL中接收。 实验实现PC机发送一个字符给单片机,单片机接收到后将其回发给PC机。在调试助手上(模拟PC)发送数据,单片机收到后将收到的结果回送到调试助手上。 2、以下在Proteus和串口调试助手实现的结果: 将编译好的HEX程序加载到Proteus中,注意这里需要加上串口模块,用来进行串行通信参数的设置。 点击串口,可以对串口进行设置: 用串口调试助手发送数据,即可看到仿真结果。 实验参考程序源文件在exp2-comm文件夹中。 基于AT89C51单片机的双机串行通信设计 姓名:杨应伟 学号:100110061 专业:机械设计制造及其制动化 班级:机电二班 前言 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域随着计算机技术的发展及工业自动化水平的提高, 在许多场合采用单机控制已不能满足现场要求,因而必须采用多机控制的形式,而多机控制主要通过多个单片机之间的串行通信实现。串行通信作为单片机之间常用的通信方法之一, 由于其通信编程灵活、硬件简洁并遵循统一的标准, 因此其在工业控制领域得到了广泛的应用。 在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。 在通信过程中,使用通信协议进行通信。在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。 串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。在通信过程中,使用通信协议进行通信。 毕业设计(论文)课题:单片机与PC机串口通信实现 学生: 孙波系部: 通信工程 班级: 通信1301 学号: 2013120325 指导教师: 童华 装订交卷日期: 2016年x月x日 装订顺序: (1)封面(2)毕业设计(论文)成绩评定记录(3)标题、中文摘要及关键词(4)正文(5)附录(6)参考文献 毕业设计(论文)成绩评定记录表 注:1.此表适用于不参加毕业答辩学生的毕业设计(论文)成绩评定; 2.平时成绩占40%、卷面评阅成绩占60%,在上面的评分表中,可分别按40分、60分来量化评分,二项相加所得总分即为总评成绩,总评成绩请转换为优秀、良好、中等、及格、不及格五等级计分。 教务处制 重庆电子工程职业学院 毕业设计(论文)开题报告 系别通信工程专业通信技术班级通信1301 学生姓名孙波学号2013120325 指导教师童华 一、毕业设计的内容和意义: 目前,随着计算机和微电子技术的高速发展,单片机在国民经济的各个领域的智能化控制中得到了非常广泛的应用。单片机已成为信息处理、物联网络、通信设备、工业控制、家用电器等各个领域不可缺少的智能部件。在一些工业控制中,经常需要以单片机作为下位机执行对被控对象的直接控制,以PC机为上位机完成复杂的数据处理,组成主从式控制系统。 为了提高系统管理的先进性,计算机工业自动控制和监测系统越来越多的采用主从式系统。较为常见的形式是由一台做管理用的上位机计算机(主机)和一台直接参与控制检测的下位机单片机(从机)构成的主从式系统,主机和从机之间以通讯的方式来协调工作。主机的作用一是向从机发送各种命令及参数;二是要及时收集、整理和分析从机发回的数据,供进一步的决策。从机被动的接收、执行主机发 单片机实验报告 实验名称:串行通信实验 姓名:高知明 学号: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单片机串口通信C程序及应用实例
C51单片机和电脑串口通信电路图
实验单片机与PC机串口通信
基于51单片机的双机串行通信课程设计 1000110061
单片机与PC机串口通信实现正文
单片机串行通信实验