单片机通信技术应用实例:基于STC15W系列单片机(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-09 14:17:44

点击下载

作者:周长锁,王旭

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

单片机通信技术应用实例:基于STC15W系列单片机

单片机通信技术应用实例:基于STC15W系列单片机试读:

前言

随着信息化的发展和物联网概念的提出,单片机由原来主要解决产品的智能化问题,转变为现在还要解决产品的网络化问题,而要实现网络化,就要根据具体情况采用合适的通信技术。

掌握单片机通信技术是电子产品设计开发人员的基本要求,要想设计出好的产品,还需要对应用该产品的行业有较深入的理解,清楚产品的现状与不足、发展趋势和功能需求等信息,通过行业的专业知识与单片机技术的结合,才能更好地应用单片机的通信技术。

STC15W系列单片机是抗干扰性能优良的国产单片机,其中STC15W4K系列有4个串口,适合工控产品使用,尤其适合通信协议转换方面的产品使用。同时,STC15W4K系列单片机有容量为4KB的RAM,远超同类8位单片机几百字节RAM的配置,达到了ARM处理器的水平,能替代ARM处理器在网络通信中的应用,性价比高,开发出的产品也具有竞争力。

本书共分9章,其中第1~6章介绍单片机串口通信编程技巧和串口扩展蓝牙、WiFi、GPRS通信接口的应用;第7~8章介绍单片机SPI接口及其扩展为网络接口和CAN接口的应用;第9章介绍单片机2模拟IC总线的应用。各章节的具体内容安排如下。

第1章介绍单片机串口通信基本知识和编程技巧。实例内容为简易读卡开锁电路设计,示范了射频读卡模块(RFID技术)的应用。

第2章介绍电话线路来电显示识别技术,包括FSK和DTMF两种来电显示解码电路与单片机的接口技术。实例内容为电话来电显示装置设计,通过该实例学习单片机自编通信协议与上位机的通信数据处理过程,实例提供上位机VB6程序源码。

第3章介绍蓝牙模块的应用。实例内容为手机蓝牙接口示波器设计,通过该实例学习单片机通过蓝牙与手机的通信数据处理过程,实例提供手机Android程序源代码。

第4章介绍单片机串口转RS485总线通信的应用。实例内容为RS485接口温度传感器设计,讲解了Modbus-RTU通信规约的实现方法。

第5章介绍GPRS模块的应用。实例1是用单片机控制GTM900B收发短信,学习用短信传输数据和实现远程控制。实例2是用车辆GPS定位及微信远程控制装置设计,讲解如何通过“贝壳物联”实现手机微信对车辆定位信息的读取及对车辆电路的控制。

第6章介绍WiFi模块的应用。实例内容是WiFi遥控小车电路设计,实例提供手机Android程序源码。

第7章介绍单片机SPI接口及其扩展为网络接口和CAN接口的应用。实例1是基于W5500的串口服务器设计;实例2是USB转CAN调试工具设计。

第8章介绍以太网Modbus-TCP协议实现方法。实例通过电度表集中抄表装置设计,讲解了电度表DL/T645通信协议和一种集中抄表解决方案。2

第9章介绍单片机模拟IC总线和模拟韦根协议的应用,讲解红外2温度传感器、实时时钟、OLED显示屏的IC总线通信过程。

为方便读者测试学习,本书提供实例C程序和上位机、手机上的测试程序下载,读者可以登录www.hxedu.com.cn(华信教育资源网)查找本书后免费下载。

由于编著者理论知识有限,书中的错误和不妥之处在所难免,殷切期望广大读者给予指正。编著者第1章STC15W 系列单片机串口通信本章讲解如何设置单片机的串口通信参数,如何用串口中断功能提高单片机的运行效率;然后介绍串口调试软件的使用及辅助串口程序的开发调试;最后通过一个小制作,带领读者熟悉串口通信电路的开发过程。1.1单片机串口相关寄存器的设置1.1.1 主要串口通信参数

串口只有在参数一致的情况下才能正常通信,主要的参数有波特率、停止位、校验位,可选的波特率有1200、2400、4800、9600、19 200、38 400、115 200等,停止位可选1位或2位,校验位可选无校验(n)、偶校验(e)和奇校验(o)。例如,常见的串口通信参数可表示为:9600,n,8,1,其中9600代表波特率9600bps,n代表无校验,8代表8个数据位,1代表1个停止位。

图1-1是不同波特率串口时序对比图,输出同样字符“12”的时序波形一致,区别就是每个数据位的间隔不同,9600bps每个数据位间隔约0.104ms,8个数据位加上前面1个起始位和后面1个停止位,总周期约1ms,也就是说,当波特率为9600时,每发送1个字节约需1ms;同理,当波特率为1200时,每发送1个字节约需8.3ms。图1-1 不同波特率串口时序对比图

当使用校验位时,每个字节会含11个数据位,不同校验设置时的串口输出波形对比见图1-2。测试时发出的数据字符是“12”,十六进制数据为0x31、0x32,先发送1位起始位0,然后是8位数字位,低位在前,有校验时再发送1位校验位,校验位是根据前面8位数据位算出来的,最后发送停止位1。图1-2 不同校验设置时的串口输出波形对比图1.1.2 STC15W系列单片机串口特点

1.串口可在不同引脚间切换

此功能限于引脚数为16及以上的单片机。图1-3是单片机STC15W201S不同封装引脚示意图,SOP16封装的单片机STC15W201S 根据寄存器的设定,串口可以在[P3.0/RxD,P3.1/TxD]和[P3.6/RxD_2,P3.7/TxD_2]间切换,这样的设计优点有两个:一是[P3.0/RxD,P3.1/TxD]只作为编程口,程序运行时切换到[P3.6/RxD_2,P3.7/TxD_2],这样编程和运行互不影响;二是可以分时切换,当两个串口用,提高了单片机引脚利用效率和灵活性。SOP8封装的单片机串口引脚[P3.0/RxD,P3.1/TxD]就只能既用来编程又用来运行了,此时从电路上就要考虑外部接线是否会影响编程,如影响编程可以考虑加跳线帽或拨码开关实现切换。图1-3 单片机STC15W201S不同封装引脚示意图

2.串口1可设置为中继广播方式

串口1的RxD端收到数据能同步输出到TxD端,这种功能可以用于一对多通信;但是由于主机只能发送数据,所以这个功能不常用。

3.STC15W4K系列单片机有4个串口

单片机外围模块大多都是通过串口与单片机进行通信的。当某个项目需要多个串口时,普通单片机只能通过扩展电路的方式来增加串口,如CH432系列单片机就是利用SPI接口实现串口扩展的。而STC15W4K系列单片机本身支持4个串口,与扩展串口相比,在满足单片机与多外围模块之间通信要求的同时,也简化了程序代码。

4.奇偶校验位不能自动添加

这是STC15W系列单片机的一个缺点。一般单片机使能奇偶校验后,校验位是自动生成、自动添加的。STC15W系列单片机的奇偶校验位能自动生成到寄存器PSW,发送数据时需要编程添加到SCON寄存器,具体使用方法见以后的代码。实际使用中尽量避免使用奇偶校验,一般多在通信协议中设置校验字节来保证数据的正确性。1.1.3 单片机STC15W201S串口相关寄存器设置

STC单片机的程序下载软件的附加功能非常实用,有定时器、波特率计算功能,还有封装引脚位和范例程序等功能,方便使用。图1-4就是计算串口波特率的界面截图,选好参数后,单击“生成C代码”按钮即可自动生成串口初始化代码。图1-4 计算串口波特率的界面截图

使用串口通信时,单片机的系统频率最好使用11.0592MHz或其整数倍值,如22.1184MHz,此时波特率最为准确,误差理论上为零。当选为12MHz时误差为0.16%,感觉上不是很好,实际上也不影响通信准确性,一般认为误差在4.5%以内是允许的。

STC15W系列单片机的串口波特率发生器一般都占用定时器2;对于STC15W4K系列4串口单片机,4个串口可以都使用定时器2,但此时波特率必须一致,如果波特率不一致就必须使用不同的定时器,串口1可以用定时器1,串口3可以用定时器3,串口4可以用定时器4。

定时器初值计算公式如下:

当系统频率MAIN_Fosc=11 059 200Hz,波特率Baudrate1=9600时,T2H=0xFE,T2L=0xE0。1.2串口中断发送与接收的C程序

在一些单片机资料的示范程序中,有用串口中断和不用串口中断的,但多数串口中断功能使用得不对,没有充分利用中断的作用。1.2.1 不用串口中断发送字符串的C程序

程序源代码如下:

不用串口中断发送字符串时,每发送1个字节数据都要等其发送完再发送下一个字节数据,当发送数据量较大时,单片机在等待时间上耗时过长,这对于复杂的程序是不允许的,单片机还有很多任务要执行,这时就要使用串口中断功能。1.2.2 不正确的中断发送字符串C程序

程序源代码如下:

以上代码虽然使用了串口中断功能,但只是用中断功能清除了标志位。总体来看,无论程序是在发送字符串时,还是阻塞在发送和等待上,CPU都无法执行别的任务。1.2.3 正确的串口中断发送与接收C程序

程序源代码如下:

以上是一段较完整的程序,比较复杂,只看注释可能理解不了,详细解释如下:#include语句声明头文件时,文件名用的是双引号,代表头文件在程序所在文件夹内;声明库函数时,文件名用的是尖括号,代表库函数在系统文件夹内,后面的strlen(s)计算字符串长度函数属于函数库内函数。接着定义了发送、接收缓冲区和有关状态位,接收数据的处理方式是按帧接收,即认为连续的一组数为一帧数据,中间间断20ms(这个值要根据波特率调整)及以上就判为此帧数据接收完毕,要对数据进行解析,再收到数据就是下一帧数据了,接收数据的过程用的是中断接收,当接收完成通过新数据标志位通知主程序进行处理。发送数据的处理方式是将要发送数据写入发送缓冲区,定义好发送数据量,发送第一个数据,余下的数据主程序就不管了,都在中断程序中自动执行。主程序中每秒发送“Hello world!”字符串,秒计时是靠定时中断完成的,主程序只是检测是否到1s和是否有新数据进来,如果到1s就发送,如果有新数据就处理,这样主程序的响应速度就快了,还可以添加别的任务让其执行。1.3上位机串口调试软件使用

当设计的电路需要单片机和外部设备串口通信时,通常的做法是先拿到外部设备,收集设备串口通信参数和通信协议,然后用串口调试软件进行通信测试,测试完成后再考虑单片机编程;单片机编程后也不急于和设备通信,先用串口调试软件和单片机进行通信测试,通过串口调试软件查看通信代码是否正确,最后才把单片机和串口设备连接起来统一调试。1.3.1 常见USB转串口集成电路简介

要使用串口调试软件,就要和相关硬件配合,串口现在已不是计算机的标准配置,需要用USB转串口芯片虚拟出串口。常用的集成电路有PL2303、CH341T、CP2102,其中PL2303价格便宜,CH341T支持转RS485,CP2102体积小,不需要外部晶振,成品的电路板市面上很多。这里介绍自制的一种USB转串口电路,见图1-5。图1-5 USB转串口电路

图1-5所示电路使用了CH341T,因为其外部接RS485集成电路扩展出了RS485通信总线,能和仪表、变频器和综合保护器等有RS485接口的设备通信;电路设计中加了一个切换开关,方便用串口的TTL电平接口对单片机下载程序和调试。1.3.2 串口调试软件使用方法

串口调试软件有很多种,各有特色,本书中有关串口调试都使用STC单片机的程序下载软件里自带的串口调试软件。STC单片机程序下载软件界面见图1-6。图1-6 STC单片机程序下载软件界面

软件界面分左右2个区域,左侧为常规的程序下载界面,使用时选对使用的单片机型号,当计算机USB接口接入USB转串口芯片后,串口号会显示接入的设备名和系统自动分配的串口号,如果当前显示的不是要下载程序的设备,可单击“扫描”或单击下拉列表选择要使用的USB转串口设备。单击“打开程序文件”,选择要下载的文件,然后看硬件选项,一般不需修改,单击“下载/编程”,等提示下载成功就完成了下载,单片机直接进入运行状态。右侧区域为功能区,选择“串口助手”就出现串口调试助手界面,使用时先选择好串口号和串口参数,再单击“打开串口”就可以使用了。接收缓冲区和发送缓冲区可根据需要选择文本模式或HEX(16进制)模式,随时可以切换。1.4简易读卡开锁电路设计

射频识别(Radio Frequency Identification,RFID)应用范围越来越广,主要用于门禁、设备或物品电子标识,设计相关产品时如无特殊需求,可直接选用成熟的RFID读卡模块。需要注意的是读卡模块种类较多,和不同的标签配套使用,应根据实际使用条件选用。射频标签按频率分主要有125kHz、13.56MHz和915MHz,其中125kHz、13.56MHz标签的识别距离为5cm左右(和读卡模块与使用环境有关);915MHz标签的识别距离可达10m左右,在车辆识别方面用得较多。1.4.1 两种射频读卡模块测试

1.125kHz射频识别模块RDM6300

射频识别模块RDM6300接线图见图1-7,测试时P1接5V电源,TxD接USB转串口电路板的RxD,模块只发送数据,故RxD不用接线,P2外接铜线圈,P3接LED指示。串口通信参数为9600,n,8,1。图1-7 射频识别模块RDM6300接线图

测试过程:模块接好铜线圈、5V电源和串口通信线,计算机侧接好USB转串口电路,打开串口调试工具,选择波特率为9600,数据区选文本模式,当标签靠近铜线圈,进入识别范围时,LED指示灯闪烁,串口调试软件间断不停收到标签识别数据“”,每秒约收到5次。

2.13.56MHz射频识别模块CM031

射频识别模块CM031接线图见图1-8,电源为3.3V,线圈印制到电路板四周,支持双向通信,可读写识别卡不同存储区域数据。可发送通信命令使模块进入休眠状态,通过IN引脚下降沿信号唤醒模块工作,Out引脚低电平指示有识别标签进入读卡区,串口通信波特率9600~115200分挡可调,调节方法为改变JP1、JP2跳线状态,JP1、JP2都短接时波特率为115200。图1-8 射频识别模块CM031接线图

测试过程:模块接好3.3V电源和串口通信线,计算机侧接好USB转串口电路,打开串口调试工具,选择波特率为115200,数据区选HEX模式,当标签靠近识别模块,进入识别范围时,模块有卡指示灯亮,Out引脚变低电平,此时用串口调试软件发送“BA 02 01 B9”,会收到“BD 08 01 00 EE 21 52 AA 01 82”,代表ID码为“EE 21 52 AA”。

发送数据中:

● BA—数据头标识;

● 02—数据长度,从下一个数据到结尾;

● 01—命令码;

● B9—校验码,前面数据的XOR校验。

收到数据中:

● BD—数据头标识;

● 08—数据长度,从下一个数据到结尾;

● 01—命令码,1字节;

● 00—命令执行状态,00表示执行成功;

● EE 21 52 AA—ID识别码;

● 01—第2个01表示标签类型;

● 82—校验前面数据的XOR校验。

门禁读卡器是固定的,人员拿外形是钥匙扣或卡的识别标签去刷;对于较重的物体是把识别标签贴到物体上;还有巡更用的识别标签也是贴到固定位置,需要手持读卡器去扫,这种情况下要注意如果识别标签是贴到金属表面的,需要选用“抗金属标签”。1.4.2 简易读卡开锁电路原理图

这里介绍的简易读卡开锁电路只是一个试验电路,其原理图见图1-9。使用RDM6300读卡模块,外接配套的铜线圈,串口数据输出至单片机STC15W201S的RxD引脚,单片机收到识别标签ID号后检索内部数据库,有该ID号则从P5.5引脚输出高电平信号,持续5秒,通过继电器接点接通开锁电路。LED1指示读到识别标签,LED2指示卡有效,输出开锁信号。图1-9 简易读卡开锁电路原理图

STC单片机的端口有4种状态:准双向、推挽、仅为输入和开漏。作为A/D转换的引脚设为仅为输入,其余的一般设为准双向,需要高电平驱动输出的设为推挽,有外部上拉的可设为开漏。电路中用单片机的P5.5引脚驱动开锁继电器,高电平有效;P5.5引脚要设为推挽输出。为防止P5.5引脚低电平时由于LED2的反向截止作用使Q1不能可靠关断,在其基极加1个下拉电阻R3。1.4.3 读卡开锁的C程序

程序源代码如下:

该程序框架和1.2节的串口通信测试程序基本相同,只是加了RFID识别库,把授权能开锁的识别标签ID保存在里面,串口接收功能在中断程序中实现,主程序检测是否有新数据,有就拿来和识别库对比,有相同的就输出开锁信号,5s后关闭。程序下载后,先用串口调试软件测试,分别模拟发送不同识别ID号,测试单片机动作情况是否符合预设逻辑,最后连接单片机和读卡模块,用不同识别标签测试。成品读卡开锁电路还需加入动态修改RFID识别库等功能,方便更换和增加“钥匙”。第2章电话来电显示装置设计将电话来电号码传到计算机上显示,配合计算机内数据库,在显示号码的同时能显示与电话号码有关联的资料,这种功能较早用到客服行业。后期加了电话线路状态判断、拨号解码等功能,这样在计算机侧软件就可以记录打入或拨出的号码和时间,同时用声卡实现自动录音,双击记录会播放该记录对应的录音,这种电话来电显示装置的用途变得更广泛了。2.1来电显示解码集成电路

来电显示数据格式有FSK和DTMF两种,以FSK为主,部分小型交换机采用DTMF格式。用单片机和模拟电路能实现解码,但外围电路复杂,占用单片机资源较多,很少采用这种方式,多使用专用解码集成电路和单片机配合解码。下面介绍常用的DTMF解码集成电路HM9270D和FSK解码集成电路HT9032D的应用。2.1.1 DTMF解码集成电路HM9270D

HM9270D内部功能框图见图2-1,从引脚IN+、IN-输入信号,解码后从引脚Q1~Q4输出;芯片时钟频率用3.58(3.579 545)MHz;电路电源受PWDN控制,高电平时休眠,低电平时工作;逻辑转换控制外接阻容元件;引脚INH内部有下拉电阻,低电平时能解1633Hz高频组的编码,高电平时只解数字码和*、#码;TOE为锁存控制;StD端当解出码时输出高电平脉冲。图2-1 HM9270D内部功能框图

DTMF解码又称双音多频解码,用4种低频频率和4种高频频率交叉组合,组成16种编码,DTMF逻辑表见表2-1。单片机编程时要根据表格中的对应关系,将检测到的Q1~Q4值转为对应的码,根据StD端的变化,每个下降沿解1次码,最后把码连在一起发送给上位机。表2-1 DTMF逻辑表(频率单位:Hz)2.1.2 FSK解码集成电路HT9032D

图2-2为HT9032参考接线图,电源电压为5V,引脚TIP、RING是信号输入端,解码后数据从引脚DOUT输出给单片机,外部时钟3.58MHz与单片机共用,内部供电受单片机控制。图2-2 HT9032参考接线图

主叫识别信息在第一次振铃和第二次振铃之间由交换机发送到开通来电显示业务的被叫用户电话上,这样平时单片机控制引脚PDWN为高电平,HT9032D不工作;当单片机采集到第一次振铃信号后,拉低引脚PDWN,使能HT9032D开始采集来电信息;当第二次振铃时再把引脚PDWN变为高电平,禁止HT9032D工作。解码时序图见图2-3。图2-3 HT9032D解码时序图

HT9032D引脚DOUT输出的来电信息是串口数据,通信波特率为1200bps,每字节的起始位是1,结束位是0,中间8位是信息,无奇偶检验。检测到的来电数据信息格式由于交换机的设定会使用表2-2和表2-3所列格式之一,单片机编程时要将两种数据格式都考虑在内。表2-2 HT9032数据格式1表2-3 HT9032数据格式2续表2.2电话来电显示装置电路原理

电话来电显示装置电路原理图见图2-4,由信号隔离、电话线路状态判断、DTMF解码、FSK解码、单片机、USB转串口单元组成。2.2.1 信号隔离

电路板外部接口有电话线路、计算机的USB接口和声卡,这两部分需要隔离,隔离不好的现象是电话有严重杂音,同时无法解码。隔离电路分交流信号隔离和直流信号隔离,图2-4中的电容C11和隔离变压器T1组成交流信号隔离电路,隔离后的信号分别进入FSK解码电路、DTMF解码电路和计算机声卡音频录音电路;直流信号的隔离由光耦U5完成。电话线路上有振铃信号时会出现100V左右的交流电压,电容C11和三极管Q1、Q2的耐压至少要达到160V。2.2.2 电话线路状态判断

从电话线路电压变化看电话有挂机、振铃、摘机3种状态,挂机状态线路电压为DC45V左右,振铃状态线路电压为AC100V(频率25Hz)左右,摘机状态线路电压为DC10V左右。

线路状态判断电路由整流桥D1、电阻R1~R5、三极管Q1~Q2和光耦U5组成,整流桥的作用是极性变换,电话接线时不分正负极,需要用整流桥保证后面电路的极性不变。振铃信号是交流信号,经过整流桥变为直流脉冲,相当于全波整流,脉冲频率是交流信号频率的2倍即50Hz。挂机状态线路电压高,R1和R2分压后能使三极管Q1导通,三极管Q2截止,光耦U5输出截止,STA端为高电平。摘机后线路电压降低,三极管Q1截止,三极管Q2导通,光耦U5导通,拉低STA端为低电平。同理,当线路为振铃状态时,STA端为50Hz脉冲信号。

单片机用外部中断INT1对STA端脉冲计数,主程序中检测SAT端电平,当检测到STA端变低时,延时100ms。如果100ms内脉冲计数大于3,判为振铃状态;如果计数小于3且STA端仍为低电平判为摘机状态;在摘机状态时检测到STA端变高,延时100ms后STA端仍为高电平,判为挂机状态。图2-4 电话来电显示装置电路原理图2.2.3 DTMF解码

U4(HM9270D)引脚PWDN接地,始终处于工作状态;外接3.58MHz晶振,时钟信号经电容C8提供给U3使用;锁存端TOE接电源正极时不锁存,输出数据随输入变化,信号处理部分外接电路按HM9270D数据手册参考电路连接,实测HM9270D解码输出波形见图2-5;INH端内部有下拉电阻,未接线时为低电平,能解所有码。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载