基于单片机的配电房温湿度测控系统设计.doc

上传人:仙人指路1688 文档编号:4144951 上传时间:2023-04-07 格式:DOC 页数:41 大小:519.50KB
返回 下载 相关 举报
基于单片机的配电房温湿度测控系统设计.doc_第1页
第1页 / 共41页
基于单片机的配电房温湿度测控系统设计.doc_第2页
第2页 / 共41页
基于单片机的配电房温湿度测控系统设计.doc_第3页
第3页 / 共41页
基于单片机的配电房温湿度测控系统设计.doc_第4页
第4页 / 共41页
基于单片机的配电房温湿度测控系统设计.doc_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《基于单片机的配电房温湿度测控系统设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的配电房温湿度测控系统设计.doc(41页珍藏版)》请在三一办公上搜索。

1、基于单片机的配电房温湿度测控系统设计摘 要为保证电气设备在配电房的安全运行,设计了一个基于ATC89C51单片机作为控制器的温湿度测控系统,本文首先介绍了系统的总体方案设计,然后详细介绍了各部分硬件及软件的设计,硬件部分包括串行通信电路、系统电源、人机交互界面、控制部分及输出部分。软件部分采用汇编语言进行编写,给出了详细的流程图及部分子程序的设计。实践表明,该系统工作稳定,抗干扰能力强,具有良好的性价比和应用价值,能实现自动控制、手动控制和报警功能,并且对于其它领域的温湿度测控系统的设计也有着较高的参考价值。关键词:温湿测控;ATC89C51;配电房ABSTRACTDesign of Temp

2、erature and Humidity measurement and Control system based on ATC89C51 is for the purpose of guaranteeing electric equipment run safely in the switching house .First we give the general plan of the design . Detailed techniques will be presented to describe every part of the design of the hardare and

3、software.For the hardware, it includes the serial communication circuit、the system power supply、the human-computer interaction interface、the control system and the output part. For the software, we use assemble language and give detailed flow chart and some designs of subprogram .The practice showed

4、 that the system works stabilization well anti-interfere,high performance price ratio and application value,has auto-control、Manual control、alarming bare implemented in the system and also available for reference to design of other fields of Temperature and Humidity measure and control system instru

5、ctionsKEY WORDS : temperature and humidity measure and control, ATC89C51, The Switching House目录摘 要I目录II第一章 绪论1第二章 系统总体设计2第三章系统硬件设计33.1 系统电源设计33.2 信号采集变换部分33.3 信号处理部分43.4 串口通信电路53.5 人机交互界面63.6 输出部分83.7 系统硬件部分的抗干扰设计9第四章 系统软件设计104.1主程序104.2 A/D采样子程序114.3 温湿度控制子程序124.4 动态显示子程序154.5 键盘子程序174.6 串口通信协议194.

6、6.1 单片机的通信程序194.6.2 PC机发送和接收数据的程序设计224.7 软件部分的抗干扰的设计25第五章 结论26致谢27参考文献28第一章 绪论配电房内的温湿度指数严重影响着供电设备的安全运行,在电力装置中,由于温度过高、过低,使元器件失效或环境湿度过大等引起的漏电现象时有发生。多年来,对于这种在配电房工作状态下温、湿度需要同时控制的复杂的辨识问题,一直未能很好解决,有的方案在硬件系统设计方面的技术水平非常高,但是关于软件流程方面讨论的不够详细;有的方案则将重点论述在软件的流程及子程序设计方面,但是在实际的硬件设计方面略显粗糙;还有的方案在软硬件方面都加以了讨论,但是对于问题的实用

7、性讨论不强。基于以上各种原因,开发了以ATC89C51单片机为控制器的温湿度测控系统,分硬件部分和软件部分分辨详细论述该系统,硬件方面采样使用上海适科机电设备科技公司生产的T295工业分体耐压高温温湿度传感器,通过外接ADC0809转换芯片实现模数转换,采用动态显示方式驱动4个七段数码管,交替显示温度和湿度信息,同时采用采用非独立的4X4矩阵键盘设置工作模式与设定所需要的温湿度值,可大大减轻单片机的工作量,通过整流滤波稳压电路给系统供电,通讯部分采用串口通信电路与上位机相连,输出部分采用固态继电器ACSSR连接电热丝与风扇进行输出,同时回路里装有电气隔离部分、抗干扰环节、报警部分和自动手动控制

8、开关,能够完美电气隔离,增强系统的抗干扰能力,提高系统的预警能力,并且能实现系统的自动功能与手动功能的快速切换。软件方面采用汇编语言进行编写,单片机与上位机直接通过Turbo语言实现通讯,为较好的实现对温湿度偏差的控制与调节,采用PID控制算法来实现对偏差的调节,具有原理简单,易于实现,结构典型,参数整定方便,鲁棒性强,适用面广和效果显著等特点,特别适用于对象动态特性不完全掌握、得不到精确数学模型、难以用控制理论进行分析和综合的场合。PC机与AT89C51单片机的串行通信程序由两部分组成,一部分是PC机的通信程序,另一部分是单片机的通信程序。对于软件部分的抗干扰设计也给出了较为详细的设计方法。

9、此次关于配电房温湿度测控系统的设计既是对已有的关于此类设计的学习与继承,更希望能够对配电房的安全保护与正常运行做出更高层次的保障作用。通过此次设计,我对自动控制理论有的许多全新的认识,同时对于许多实际问题的看法有了更深刻的体会。由于时间因素和个人水平的局限性,本设计不可避免的存在许多不足之处。恳请广大老师和同学予以指正。第二章 系统总体方案设计由于该系统在配电房内运行及设计上的要求,硬件部分选用ATMEL公司生产的ATC89C51单片机作为控制器,硬件系统由温湿度采集部分、模数转换与处理部分、动态显示部分、系统电源部分、RS232串行总线通信、继电器输出部分、报警部分及自动手动控制部分组成。系

10、统硬件结构框图如图2.1所示: 图2.1 系统硬件结构框图系统的软件设计采用汇编语言,对单片机进行编程实现各项功能。本软件为了实现温度、湿度显示,报警,A/D转换和对温湿度的控制等功能,采用主程序调用各个子程序来实现相应的功能的方法。系统上电复位后,将调用初始化程序对单片机的端口初始化,将需要使用的内存单元进行清零,然后自动采样后调用A/D转换子程序并显示当前温湿度值,当有键按下时,进入中断,运行中断程序,将温、湿度上下限的初值写入内存单元,并且显示在动态显示部分上。然后系统调用A/D转换子程序,将T295温湿度传感器电路输出的模拟信号转换为数字信号,将数字信号读入单片机,每次将读入的数据与上

11、、下限进行判断,以决定是否调用报警和调温、调湿子程序,并且在此过程中实时显示当前温湿度值。如果高于温度上限,系统启动报警功能及排风扇,加快室内外的空气对流,达到迅速降温的目的;如果高于湿度上限,系统也启动报警功能予以报警,并启动加热丝,使室内温度迅速上升,当温度上升一定值时,启动排风扇,将室内的高湿度空气排到室外,达到降低湿度的目的。第三章系统硬件设计3.1 系统电源设计电源是整个控制系统最重要的能源供应部分,电源的好坏直接影响整个系统能否正常稳定运行,系统电源如图3.1所示,由于T295温湿度感器要求的供电电源24VDC15%,故220VAC经过变压后产生24VAC,经过整流滤波后引出A、B

12、两端用来给T295温湿度传感器供电,同时经过三端稳压管7805实现稳压,稳压后成为+5V的电源输出,+5V为89C51等单电源芯片供电。 图3.1 系统电源图3.2 信号采集变换部分信号采集变换部分的硬件电路如图3.2所示,T295温湿度传感器产生的模拟量信号05VDC经过滤波后送入ADC0809的IN0口进行模数转换,本系统的干扰信号主要是50Hz的交流电源,采用常用的RC滤波电路即可将50Hz的工频信号滤除掉,由频率f=1/(2RC),通过计算可得R=510,C=10F。IN1IN7口接地,对于ADC0809部分,利用ADC0809转换器三态输出锁存功能,直接与8255的总线相连接。把AD

13、C0809转换器当作外部RAM单元对待,系统中ADC0809转换器的片选信号由PB0线选控制。当89C51产生WR写信号时,由一个或非门产生转换器的启动START和地址锁存信号ALE(高电平有效),同时将地址总线送出的通道地址A、B、C锁存,模拟量通过被选中的通道进入A/D转换器,并在START下降沿时开始逐位转换,当转换结束时,转换结束信号EOC变为高电平。当89C51产生RD读信号时,由一个或非门产生OE输出允许信号(高电平有效),使A/D转换结果通过8255读入89C51单片机。设89C51的晶振为12MHz,分频后ALE为2MHz,再经过D触发器分频为1MHz作为转换器的时钟信号1。

14、图3.2 信号采集变换部分 3.3 信号处理部分如图3.3所示,AT89C51的P20P23口与5045相连,X5045是在单片机系统中广泛应用的一种看门狗芯片,当单片机受到外界干扰或其它原因使程序跑飞时看门狗芯片发出复位信号使单片机复位,防止控制系统控制失效而导致意外事故发生。同时为进一步提高性能,又增加了手动复位按钮以起到彻底保护的作用。AT89C51的时钟信号由外部的晶振电路提供,采用12MHz晶振,外加两只30PF的独石电容起微调作用,使时钟脉冲频率更加准确,从而使系统按时钟节拍有条不紊地运行。为使所有的芯片都能正常工作而不受外界高频噪声干扰的影响,所有的需外加电源才能工作的芯片的电源

15、和地之间都加0.1F的去藕电容。AT89C51属于低功耗,高性能的八位单片机,它采用COMS工艺和高密度非易失性存储器(NURAM)技术,而且其输出引脚和MCS51兼容;片内的FLASH ROM允许在系统内改编程序或用常规的非易失性存储器来编程,是一种功能强,灵活性高,价格便宜合理的单片机2。由于本系统功能强,接口较多,只靠89C51自身的接口很难完成所有的接口电路,所以采用了并行接口芯片8255实现扩展,89C51与8255直接通过74LS573实现典型接法,将89C51的P0口扩展成三个接口,PA口用于连接ADC0809的数据传输口,PB0、PB1用于控制ADC0809的片选信号端EOC和

16、ADDA,PC口连入J1端,J1另一端接入动态显示部分,可轮流显示温度与湿度信息。而对于AT89C51,选定P1口为键盘接口,用于温湿度控制的设置和各种工作模式的设定,INT1实现键盘的中断控制,P25、P26实现报警功能,这些连入J2端子板,而TXD、RXD连入上位机,实现串行通信的功能。 图3.3 信号处理部分3.4 串口通信电路上位机部分采用RS-232通讯,RS-232C规定的逻辑电平与一般微处理器、单片机的逻辑电平是不一致的。因此,在实际应用时,必须把微处理器的信号电平(TTL电平)转换为RS-232电平,或者对两者进行逆转换。这两种转换是由专用电平转换芯片实现的。在本控制系统中采用

17、了MAX232芯片,该芯片内部有一个电源电压变换器,可以把输入的+5V电源电压变换成为RS-232输出电平所需的+10/-10V电压。所以,采用此芯片接口的串行通信系统只需单一的+5V电源就可以,其适应性更强,加之其价格适中,硬件接口简单,所以被广泛采用。如图3.4所示,为了提高串行总线节点的抗干扰能力,保证各节点在电气上完全隔离和独立,AT89C51的TXD和RXD分别通过高速光耦器6N137与串口芯片MAX202的T2IN和R2OUT相连。电平转换芯片MAX202采用典型接法,其T2OUT与R2IN分别连接两个5的电阻起限流作用,用于保护串口芯片MAX202,通过限流电阻与上位机相连。为防

18、止总线的电压突变,尤其是防止浪涌电压的产生,T2OUT和R2IN脚分别并联一个TVS管(D1和D2)。同时在在MAX202的T2OUT和R2IN脚两端并联PHILIPS公司的PRTR5VOU2X静电保护器件,此ESD保护器使得输入信号与地之间有极小的分布电容(1pF),防止静电干扰,避免信号失真。连个30pF的电容能有效滤除总线上的高频干扰3。由于上位机的接口属于232接口,串口通信需要使用232通讯,但是由于工业中485通讯具有良好的抗噪声干扰性,长的传输距离和多站能力等上述优点使其成为首选的串行接口并且温湿度采集部分的T295传感器也需要485通讯故在单片机与上位机之间添加485/232转

19、换芯片,转换芯片选用深圳市天地华杰科技有限公司生产的光隔离型485转换器,该RS485/232转换器能够将单端的RS-232信号透明的转换为平衡差分的RS-485或RS-422信号,同时具有自动识别RS-485/RS-422信号的功能,无需人工调拨。图3.4 串口通信电路3.5 人机交互界面在本系统中采用动态显示方式驱动4个七段数码管,交替显示温度和湿度信息。数码显示电路采用共阳级数码管,由于AT89C51单片机每个I/O口的拉电流只有12mA,采用三极管驱动,通过PC0PC3进行位选,数据通过PC4PC7输出,经过译码器74LS47转换成适合数码管显示的7段数据码。显示部分接到单片机的J1接

20、口上,其电路如图3.5所示。图3.5 动态显示部分至于键盘部分采用非独立的4X4矩阵键盘,接口为89C51的P1口,其中P10P13为输出口,P14P17为输入口。为减少单片机的工作量,采用中断式键盘,在有键被按下产生中断时中断服务程序才去扫描键盘,这样大大减轻单片机的工作量,如图3.6所示。 图 3.6 4X4矩阵键盘 当T295温湿度传感器采集到的温度值和湿度值超出控制系统设定的设定值时,并在规定的时间内没有恢复时,单片机就发出超限报警,蜂鸣器发出蜂鸣声红色发光二极管发红光,直到测量值恢复到设定值上下限范围,报警才停止。报警信号由P2.5,P2.6口控制。由于单片机的I/O输出电流只有5m

21、A,不足以驱动蜂鸣器,所以使用三极管驱动蜂鸣器,如图3.7所示。图3.7 报警电路键盘部分与报警部分都接入J1端子板,另一端接入AT89C51。3.6 输出部分 输出部分如图3.8所示,执行元件为电阻丝和风扇,其输入电压为交流220V,连接有断路器实现短路和过载保护作用,由PB2、PB3口输出控制信号,控制过零型交流SSR实现温度和湿度的控制,在控制信号端和过零型交流SSR之间添加自动/手动开关,通过控制开关可实现系统的自动和手动功能互相切换的作用。 图3.8 输出部分 固态继电器,它是一种无触点通断型电子开关,是四端有源器件,其中两个为控制输入端,另外两个为输出受控端。为了实现输入与输出的隔

22、离,器件采用高耐压的光耦合器。当输入信号有效时,主电路呈导通状态,无信号时呈阻断状态,可以实现类似电磁继电器的开关功能。SSR是将MOSFET、GTR、普通晶闸管等组合在一起与触发电路封装在一个模块中,并且驱动电路与输出电路实现电气隔离,如图3.9所示。图3.9 SSR内部结构图3.7 系统硬件部分的抗干扰设计综合以上设计中提到的抗干扰的措施和电路设计、布局、布线中需要考虑的抗干扰原则及各种常用抗干扰措施4。1.抑制干扰源抑制干扰源的常用措施如下:(1)继电器线圈增加续流二极管,消除断开线圈时产生的反电动势干扰。续流二极管会使继电器的断开时间滞后,增加稳继电器在单位时间内可动作的次数。(2)在

23、继电器接点两端并接火花抑制电路,减小电火花影响。(3)信号输入端加滤波电路,注意电容、电感引线要尽量短。(4)电路板上每个IC要并接一个0.01uF一0.luF高频电容,以减小IC对电源的影响。注高频电容的布线。(5)单片机和大功率器件的地线要单独接地,以减小相互干扰。大功率器件尽可能在电路边缘。(6)布线时避免90度折线,减少高频噪声射。2.切断干扰传播路径切断干扰传播路径的常用措施如下:(1)充分考虑电源对单片机的影响,电源做好,整个电路的抗干扰就解决了一大半。许多单片机对电源噪声很敏感,要给单片机电源加滤波电路或稳压器,以减小电源噪声对单片机的干扰。可用100欧姆电阻代替。(2)在I/O

24、口与噪声源之间应加隔离。也可100O欧姆电阻代替。(3)注意晶振布线。晶振与单片机引脚尽量靠近,用地线把时钟区隔离起来,晶振外壳接地并固定。(4)电路板合理分区,如强、弱信号、数字、模拟信号。尽可能把干扰源(如电机,继电器)与敏感元件(如单片机)远离。(5)接地问题为了是系统能正常工作和提高转换精度而不受模拟地和数字地的干扰,需要将整个系统的接地进行处理,先将整个系统的模拟地和数字地分开接,然后通过0的电阻将模拟地和数字地接在一起。这样能滤除较大的带宽频率,如图2.11所示。 图3.10 共地接法第四章 系统软件设计根据系统所要实现的不同功能,软件部分分为主程序和子程序两部分,子程序可分为A/

25、D采样、温湿度控制、动态显示、键盘管理及串行通讯五部分,最后是对本系统中软件部分的抗干扰设计。4.1主程序图4.1 主程序流程图4.2 A/D采样子程序在进行控制时,给定值是温度值和湿度值,但在数据采集程序中,计算机采集到的是经过A/D转换后大小为0255的数字量,为了方便运算,必须把这些无量纲的数字转化为实际的温度值与湿度值,其标度变换按式4.1进行计算:=+(-)*(-)/(-) (4.1)式中- 一次测量仪表的下限;- 一次测量仪表的上限; 实际测量值; 一一 仪表下限对应的数字量; 一一 仪表上限对应的数字量;-测量值所对应的数字量。这样就可以把设定的温度值转换成数字量,在和采集到的实

26、际温度值的数字量进行比较,求出偏差,进行控制5。采样子程序流程图如图4.2所示。图4.2 采样子程序流程图4.3 温湿度控制子程序PID控制规律是广泛应用的一种控制规律,PID控制规律表示比例(proportional)-积分(integral)一微分(diferential)控制即调节器的输出与输入是比例一积分一微分的关系。这种按偏差比例(proportional)、积分(integral)、微分(derivative)PID控制,是连续系统中技术成熟,应用最广泛的控制方法,具有原理简单,易于实现,结构典型,参数整定方便,鲁棒性强,适用面广和效果显著等特点,特别适用于对象动态特性不完全掌握、

27、得不到精确数学模型、难以用控制理论进行分析和综合的场合。在过程计算机控制系统中,PID算法仍然是应用最广泛和最成功的控制算法,利用计算机运算速度快,容量大,逻辑判断功能强,软件变化等特点,不是简单地把模拟控制PID算法数字化,而是进一步发展,使其具有智能化,更适合各种生产过程的控制要求。PID控制器中的比例作用起纠正偏差的作用,其反应迅速,积分作用能清除静差,改善系统静态特性,微分作用有利于减小超调,克服震荡,提高系统的稳定性,加快系统过渡过程的作用,但对过程或测量噪声很敏感。微分作用的引进改善了系统动态特性。但也容易引进高频干扰,在控制算法中,采用实际微分或加上低通滤波,将使控制性能显著改善

28、。PID控制器的数学模型可以用下式表示: u(t)= e(t)+ (4.2)式中u(t)-控制器的输出;比例系数; -积分时间常数; -微分时间常数;e(t) 偏差,e(t)=SP-PV,S P和PV分别为被控参数的设定值和实际值。在以微处理机为硬件核心的控制系统当中,由于以采样周期对输入和输出状态进行实时采样,故它是离散时间控制系统。在离散控制系统中,PID控制器采用差分方程表示。若选采样周期为T,将式3.2进行离散化处理,可得差分方程为 u(n)=e(n)+e(n)-e(n-1) =e(n)+e(n)-e(n-1)式中u(n)为本次PID算法的控制输出;e(n)为本次采样所得的偏差信号;e

29、(n-1)为上次采样所得的偏差信号; 为积分常数 ;=为微分常数; = 式4.2为位置式PID算式。从式4.2中可以看到,每次的控制输出都与系统过去的所有状态有关,它需要对偏差e进行不断的累加,从而增大了计算机的计算量和存储量,而且当给定值变更时,容易产生积分失控,发生阀门冲击和超调。为了弥补这一缺陷,目前计算机控制系统中的PID控制常用增量式算法,PID控制常用增量式算法如下:(n)=u(n)-u(n-1)=e(n)-e(n-1)+e(n)+e(n)-2e(n-1)+e(n-2) =(+)e(n)+(-2)e(n-1)+e(n-2) =e(n)+e(n-1)+e(n-2) 其中 =+ =-2

30、 =在计算机控制系统中,采样周期T一般是恒定的,所以在确定了、和之后,仅需在内存中依次存放三个采样周期的偏差值,即可求出控制增量。采用增量式算法不仅简化了运算过程,而且还具有如下优点:(1)算式中没有累加项,不会发生积分失控,也不易产生超调。(2)由于控制输出是控制值的增量,所以当系统出现故障时影响范围就小,也较容易实现自动/手动切换。(3)可以在程序中设置条件判断,当PID算式输出的控制增量超过允许范围时,限制输出的变化幅度,从而减小对被控系统的冲击。由于增量式算式给出的是每个采样周期中控制输出的变化量,所以必须通过一个积分环节才能得到实际位置的控制给定。在应用中,可采用步进电机作为阀门的驱

31、动元件,计算机将增值转换成向正方向或负方向的步进脉冲给出。如果执行器是位置型的,计算机应采用式4.3给出控制输出值: u(n)=u(n-1)+u(n-1) (4.3) 增量式PID控制算法流程图如图4.3所示: 图4.3 PID控制算法流程图4.4 动态显示子程序 本系统设计时采用的是4个七段共阳级数码管动态显示温湿度信息,正常显示时G脚接+5V,各发光二极管是否点亮取决于aSP各引脚上是否是低电平0V,共阳极所需字形码如下: “0” C0H “1” F9H “2” A4H “3” B0H “4” 99H “5” 92H “6” 82H “7” F8H “8” 80H “9” 90H “A”

32、88H “b” 83H “C” C6H “d” A1H “E” 86H “F” 8EH “” 7FH由于显示的数字09的字形码没有规律可循,只能采用查表的方式来完成所需要求。按着数字09的顺序,把每个数字的笔段代码按顺序排序建立的表格如下所示:TABLE DB C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H系统工作后通过PC0PC3进行位选,数据通过PC4PC7输出,经过译码器74LS47转换成适合数码管显示的7段数据码。位选选定后的LED显示程序流程图如图4.4所示:图4.4 显示子程序流程图 汇编子程序:ORG 0000H START: MOV R1, #0

33、0H NEXT: MOV A, R1 MOV DPTR, #TABLE MOVC A,A+DPTR MOV P0, A LCALL DELAY INC R1 CJNE R1, #10, NEXT LJMP START DELAY: MOV R5, #20 D2: MOV R6, #20 D1: MOV R7, #248 DJNZ R7, $ DJNZ R6, D1 DJNZ R5, D2 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END 4.5 键盘子程序键盘部分采用非独立的4X4矩阵键盘,接口为89C51的P1口,其中P10P

34、13为输出口,P14P17为输入口,并且为减少单片机工作量,采用中断式键盘,在有键被按下产生中断时中断服务程序才去扫描键盘,这样大大减轻单片机的工作量。16个键分成两类:一是数字键09,共十个;二是功能键6个。CPU扫描键盘时可以通过程序读取被按键的行首键号和列值,并求出被按键的键号(即地址偏移量),被按键的键号N=行首键号+列值,然后通过查表4.1即可知道什么键被按下6。其中在键值表中,数字键对应的键值必小于10H,功能键的键值是大于或者等于10H的。因此CPU判断当被按键的键值小于10H时,则转数字键处理程序;若被按键的键值大于或者等于10H,通过键值表很快转入相应按键的处理程序。 表4.

35、1 键值表地址偏移量键值行首键号列值按键00H01H00H00H101H02H00H01H202H03H00H02H303H0AH00H03HLOCK04H04H01H00H405H05H01H01H506H06H01H02H607H0BH01H03HSET08H07H02H00H709H08H02H01H80AH09H02H02H90BH0CH02H03HCLR0CH00H03H00H00DH0DH03H01H.0EH0EH03H02HTAB0FH0FH03H03HYES在按下某个键时,被按键的弹簧总会有轻微抖动,这种抖动常常会持续10ms左右,CPU在按键抖动期间扫描键盘必然会得到错误的行

36、首键号和列值,因此,设计时使CPU在检测到有键按下时延时20ms再进行列向扫描。同时用户在操作的时候常常因不小心按下一个以上的按键,使系统发生窜键,CPU处理窜键的原则是把最后放开的按键作为被认作的真正被按的键。CPU在处理发生在两个不同列上的窜键时,可以预先设定一个窜键标志寄存器。窜键标志寄存器在列扫描前清零,在列扫描期间用于记录被按键个数,故发生窜键是窜键标志寄存器中的值必定大于01H。因此,CPU在列扫描时必须不以发现第一个被按键为满足,而是继续完成对所有列的一遍扫描,并在该列扫描结束后,根据窜键标志寄存器来判断是否窜键,如未发现窜键,则本次扫描的行首键号和列值就是被按键的行首键号和列值

37、;如果发生窜键,则CPU不断进行列扫描,就可以获取最后放开键的行首键号和列值。键盘子程序流程图如图4.5下:开始返回在03h行?延时12ms去抖动列值计数器r0清零列扫描列扫描左移1位读行值被按键在本列?列值计数器r0加“1”扫完一遍?A全“1”有键按下在01h行?在02h行?在00h行? 图4.5 键盘子程序流程图 4.6 串口通信协议 PC机与AT89C51单片机的串行通信程序由两部分组成,一部分是PC机的通信程序,另一部分是单片机的通信程序。这两部分所作的工作虽然侧重点不同,但它们要做的工作是对应的。一个发送时,另一个一定接收:反之,一个接收时,另一个一定发送,而且对应发送和接收的字符要

38、相等,否则失去通信的意义。因此,为了保证数据通信的可靠性,需要制定一定的通讯协议使双方遵守。通讯协议如下:(1) PC机与单片机都可发送和接收。(2) PC机与单片机的通信波特率均为2400b/s.(3) 帧格式为:1位起始位,8位数据位,1位可编程的第9位(此位为发送和接收地址/数据的标志位),1位停止位。(4) 数据通信采用累加和校验方法。(5) 采用查询方式通信。(6) 为了保证数据的可靠性和有效性,采用PC机主动联络单片机地址码,单片机在收到本机地址码后,回送本机地址;PC机在接收到同样的地址码后,确认两方握手成功,然后再开始传送数据。(7) 为了避免PC机出现死循环,要有容错处理。如

39、超时出错退出,按任一键退出等。4.6.1 单片机的通信程序按照通信协议约定,单片机要对串口和定时器初始化。首先,由于定时器T1为波特率发生器,设置T1作于模式2,则应向TMOD寄存器送初值20H。系统采用的8051芯片的振荡频率为12MHz晶振,故定时器T1初值为: X=256- 其中式=12MHz, SMOD=0,特率=2400b/s,则X243=0F3H,所以,(TH1)= (TL1) =0F3H,然后对串口SCON进行初始化。因为,约定帧格式为11位,设串口工作方式为方式3,即向SCON寄存器写入11100000B=0E0H,其中,SM2=1,REN=0, RI=0。当传送地址帧时,置S

40、M2=1;当传送数据帧时,置SM2=0。在本系统中,10个数据为一组,即发送方一次发送10个数据,接受方也接受10个数据。在程序设计中,数据是一一帧一帧的发送,也是一帧一帧的接受。单片机接受和发送一组数据程序框图如图4.6、图4.7所示。YY接受一个字符(累加和)=累加和?发送00H返回N发送0FFH发送地址码 0F1H设置数据传送方式设置数据指针=60H,计数器初值=0,计数器初值=10接受一个字符存入RAM并加入累加和数据指针加1计数器-1=0 ? N开始设置地址并传送接受地址码=0F1H?YN图4.6 单片机接受一组数据程序框图 YYN开始设置地址并传送接受地址码=0F1H?发送地址码

41、0F1h设置数据传送方式设置数据指针=40H,计数器初值=0,计数器初值=10发送一个字符数据指针加1计数器-1=0 ? 发送累计和=00H?返回YNN取一个数并求累加和图4.7 单片机发送一组数据程序框图 4.6.2 PC机发送和接收数据的程序设计本系统的PC机通信程序部分采用Turbo语言编写,它可以直接对PC机中UART8250中各寄存器进行操作。PC机有两个串行通信接口COMI和COM2。可编程串行异步通信控制器(UART)8250是PC机串行通信接口电路的核心,通过对8250的编程,可以控制串行数据传送格式和速度。若选COM1,则8250各寄存器地址为3F8H-3FEH;而选COM2

42、,则8250各寄存器地址为2F8H-2FEH。现选COM2作为单片机的串行通信接口。按照通信协议,在主程序中对8250各寄存器作如下初始化:(1) 首先向通信线路控制寄存器(2FBH)送80H,即寻址波特率除数寄存器。(2) 紧跟着向两个波特率除数锁存器(LSB和MSB)送一个除数,其计算方法为:除数=1843200=(16X波特率)=0030H(3) 则波特率除数锁存器的(2F9H)=00H。波特率除数锁存器的(2F8H)=30H,其中1.8432MHz为8250使用频率。(4) 按数据帧格式约定,向通信线路控制寄存器(2FBH)送一个00101011B,即符合1个起始位,8个数据位,1个停

43、止位,控制检验位(即第9位数据)为1时,作为地址帧的发送和接收标志。如要发送和接收数据帧时,则应将00111011B写入通信线路控制寄存器(2FBH)中,即控制检验位(第9位数据)为0。(5) 还要将中断允许寄存器(2F9H)置00H,以禁止中断,从而符合查询方式通信。将8250各寄存器初始化后,就可以通过读取并判断状态寄存器(2FDH)中的D5位(发送保持寄存器空)是否为1,来决定是否将要发送的数据写入发送保持寄存器(2F8H),为了避免PC机出现死循环,在进入循环之前,先读取一个时间T1,进入循环后,每循环一次读一次当时的时间T2,并判断此T2与T1两时间的差,如超过2秒,则不再读取状态,

44、而显示超时出错并退出。同单片机接受和发送数据一样,都是一帧一帧进行的,为此也把一帧一帧的数据传送变成子程序,以便在一组数据的传送和接受中调用,PC机传送和接受一组数据的程序框图如图4.8、图4.9所示。开始NY=0?发送一个字符打开T1.TXT设置数据传送方式=0F1H?NY设置地址并传送发送地址码0F1H接收回送地址计数器初值=0从文中取一个字符并累加N计数器+110 ? Y发送累加和接受回送码文件指针回退10返回 图4.8 PC机传送一组数据的程序框图NNYYYN开始设置地址并传送=0F1H?设置数据传送方式打开R1.TXT计数器初值=0接受一个字符数据指针加1计数器+110 ? 接受一个字符并求累加和=累加和?返回文件指针回退10发送地址码0F1H接收地址码接受字符并求累加和发送00H发送0FFH

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号