《单片机应用系统的设计与开发》由会员分享,可在线阅读,更多相关《单片机应用系统的设计与开发(193页珍藏版)》请在金锄头文库上搜索。
1、第9章 单片机系统的应用与开发单片机应用系统的设计与开发9.1 课程设计电脑钟的设计与制作9.2 应用系统设计实例单片温度控制系统9.3 单片机应用系统开发的一般方法9.4 单片机应用系统实用技术9.5 抗干扰设计 返回主目录第9章 单片机系统的应用与开发第9章 单片机应用系统的设计与开发9.1 课程设计电脑钟的设计与制作9.1.1 设计要求设计并制作出具有如下功能的电脑钟:(1) 自动计时,由6位LED显示器显示时、分、秒。(2) 具备校准功能,可以直接由09数字键设置当前时间 。(3) 具备定时起闹功能。(4) 一天时差不超过1秒钟。第9章 单片机系统的应用与开发9.1.2 总体方案1.
2、计时方案方案一:采用实时时钟芯片。针对计算机系统对实时时钟功能的普遍需求,各大芯片生 产厂家陆续推出了一系列的实时时钟集成电路,如DS1287、 DS12887等。这些实时时钟芯片具备年、月、日、时、分、秒 计时功能和多点定时功能,计时数据的更新每秒自动进行一次 ,不需程序干预。计算机间,程序简单。此外,实时时钟芯片 多数带有锂电池做后备电源,具备永不停止的计时功能;具有 可编程方波输出功能,可用做实时测控系统的采样信号等;有 的实时时钟芯片内部还带有非易失性RAM,可用来存放需长 期保存但有时也需变更的数据。 第9章 单片机系统的应用与开发方案二:软件控制。利用MCS-51内部的定时/计数器
3、进行中断定时,配合软件延时实现时、分、秒的计时。该方案节省硬件成本,且能 够使读者在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,因此本系统将采用软件方法实现计时。2. 键盘/显示方案对于实时时钟而言,显示显然是另一个重要的环节。如前所述,通常有两种显示方式:动态显示和静态显示。方案一:串口扩展,LED静态显示。第9章 单片机系统的应用与开发如图9.1(a)所示,该方案占用口资源少,采用串口传输实现静态显示,显示亮度有保证,但硬件开销大,电路复杂,信息刷新速度慢,比较适用于并行口资源较少的场合。方案二:8155扩展,LED动态显示。如图9.1(b)所示,该方案硬件连接简单,但动态扫描的
4、显示方式需占用CPU较多的时间,在单片机没有太多实时测控任务的情况下可以采用。第9章 单片机系统的应用与开发图9.1 显示方式框图 (a) 静态显示框图;(b) 动态显示框图第9章 单片机系统的应用与开发9.1.3 硬件设计1. 电路原理图电脑钟电路的核心是89C51单片机,其内部带有4KB的FLASH ROM,无须外扩程序存储器;电脑时钟没有大量的运算和暂存数据,现有的128B片内RAM已能满足要求,也不必外扩片外RAM。系统配备6位LED显示和43键盘,采用8155作为键盘/显示接口电路。利用8155的A口作为6位LED显示的位选口,其中,PA0PA5分别对应位LED0LED5,B口则作为
5、段选口,C口的低3位为键盘输入口,对应02行,A口同时用作键盘 第9章 单片机系统的应用与开发的列扫描口。由于采用共阴极数码管,因此A口输出低电 平选中相应的位,而B口输出高电平点亮相应的段。P1.0接蜂鸣器,低电平驱动蜂鸣器鸣叫启闹。由图9.2可见,8155的地址分配如下:控制寄存器:8000H,定义为PORTA口:8001H,定义为PORTAB口:8002H,定义为PORTBC口:8003H,定义为PORTC如果使用本书配备的实验板实现该电脑钟,需将8155地址改变为 第9章 单片机系统的应用与开发图9.2 电脑钟硬件原理图第9章 单片机系统的应用与开发控制寄存器:4400HA口:4401
6、HB口:4402HC口:4403H并通过引出的P1口外接一个蜂鸣器电路,或是用P1口上的发光二极管模拟闹钟功能。需要指出的是,实验板使用的 是8031芯片,使用外扩程序存储器EPROM2764,因此其脚必须接地。第9章 单片机系统的应用与开发2. 系统工作流程本电脑钟具备以下功能:(1) 时钟显示:6位LED从左到右依次显示时、分、秒,采用24小时计时。(2) 键盘功能:采用43键盘,包括:09 数字键,键号为00H09HC/R键 时间设定/启动计时键,键号为0AHALM键 闹钟设置/启闹/停闹键,键号为0BH(1) 时间显示:上电后,系统自动进入时钟显示,从00:00:00开始计时,此时可以
7、设定当前时间。第9章 单片机系统的应用与开发(2) 时间调整:按下C/R键,系统停止计时,进入时间 设定状态,系统保持原有显示,等待键入当前时间。按下0 9数字键可以顺序设置时、分、秒,并在相应LED管上显 示设置值,直至6位设置完毕。系统将自动由设定后的时间开始计时显示。(3) 闹钟设置/启闹/停闹:按下ALM键,系统继续计时 ,显示00:00:00,进入闹钟设置状态,等待键入启闹时 间。按下09数字键可以顺序进行相应的时间设置,并在 相应LED管上显示设置值,直至6位设置完毕。这将启动定时启闹功能,并恢复时间显示。定时时间到,蜂鸣器鸣叫 ,直至重新按下ALM键停闹,并取消闹钟设置。第9章
8、单片机系统的应用与开发9.1.4 软件设计1. 系统资源分配为方便阅读程序,先对系统的资源分配加以说明。(1) 定时器:定时器0用作时钟定时,按方式1工作,每隔100 ms溢出中断一次。(2) 片内RAM及标志位的分配与定义见表9.1。第9章 单片机系统的应用与开发地 址功 能名 称初始化值30H35 H显示缓冲区,小时、分、秒(高位 在前)DISP0DIS P500H3CH3F H计时缓冲区,时、分、秒、100 msHOUR, MIN,SEC ,MSEC00H40H42 H闹钟值寄存区,时、分、秒AHOUR, AMIN, ASECFFH50H7F H堆栈区PSW.5计时显示允许位(1:禁止,
9、0:允 许)F00PSW.1闹钟标志位(1:正在闹响,0:未 闹响)F10表9.1 电子钟控制软件片内RAM及标志位分配表第9章 单片机系统的应用与开发2. 软件流程根据上述工作流程,软件设计可分为以下几个功能模块:(1) 主程序:初始化与键盘监控。(2) 计时:为定时器0中断服务子程序,完成刷新计时缓冲区的功能。(3) 时间设置与闹钟设置:由键盘输入设置当前时间与定时启闹时间。(4) 显示:完成6位动态显示。第9章 单片机系统的应用与开发(5) 键盘扫描:判断是否有键按下,并求取键号。(6) 定时比较:判断启闹时间到否?如时间到,则启动蜂鸣器鸣叫。(7) 其它辅助功能子程序,如键盘设置、拆字
10、、合字、时间合法性检测等。下面分模块进行软件设计:(1) 主程序模块MAIN:流程图如图9.3所示。(2) 计时程序模块CLOCK:流程图如图9.4所示。第9章 单片机系统的应用与开发图9.3 主程序流程图第9章 单片机系统的应用与开发图9.4 计时程序流程图第9章 单片机系统的应用与开发如前所述,系统定时采用定时器与软件循环相结合的方法。定时器0每隔100 ms溢出中断一次,则循环中断10次延时时间为1 s,上述过程重复60次为1分,分计时60次为1小时,小时计时24次则时间重新回到00:00:00。设系统使用6 MHz的晶振,定时器0工作在方式1,则100 ms定时对应的定时器初值可由下式
11、计算得到:定时时间=(216-定时器0初值)(12/fosc)因此,定时器0初值=3CB0H,即TH0=3CH,TL0=0B0H 第9章 单片机系统的应用与开发当系统使用其它频率的晶振时,可以由上式计算相应的定时器0初值,也可以改变定时时间。例如当系统晶振为12 MHz时,同样的初值对应的定时时间为50 ms,则循环中断次数为20次时,延时时间为1 s。第一,定时器溢出产生中断请求,CPU并不一定立即响应中断,而可能需要延迟一个中断响应时间之后才能响应中断,中断响应时间大约为38个机器周期。显然,这将在定时时间中加入额外的延时时间,导致计时误差。第9章 单片机系统的应用与开发为了保证计时精度,
12、必须采取措施进行补偿。我们采用增大重装的定时器0初值的方法来减少定时器0定时时间。具体应调整为多大,一般需要通过调试来确定。经测试,定时器0重装初值设为3CB7H3CBFH可以满足精度要求。第二,时间是按十进制递增,而MCS-51单片机只有二进制加法指令,因此用加法指令计时必须进行二十进制转换。(3) 时间设置程序和闹钟定时程序模块MODIFY:流程图如图9.5所示。第9章 单片机系统的应用与开发图9.5 时间设置/闹钟定时流程图 第9章 单片机系统的应用与开发将键盘输入的6位时间值合并为3位压缩BCD码(时、分、秒)送入计时缓冲区和闹钟值寄存区,作为当前计时起始时间或闹钟定时时间。该模块的入
13、口为计时缓冲区或闹钟 值寄存区的首地址,置入R1中。程序调用一个键盘设置子程序KEYIN(如图9.6所示)来将键入的6位时间值送入键盘设置缓冲区,然后用合字子程序COMB将键盘设置缓冲区中的6位BCD码合并为3位压缩BCD码,送入计时缓冲区或闹钟值寄存区。该程序同时作为时间值合法性检测程序,若键盘输入 的小时值大于23,分和秒值大于59,则不合法,将取消本次设置,清零重新开始计时。第9章 单片机系统的应用与开发图9.6 键盘设置子程序流程图第9章 单片机系统的应用与开发图9.7 键盘扫描流程图(4) 键盘扫描程序模块KEYSCAN:流程图如图9.7所示。 第9章 单片机系统的应用与开发判断是否
14、有键按下,无键按下则循环等待;有键按下则求取键号并将键号送A累加器返回。程序中的去抖延时和循环等待延时都用DISPLAY子程序来代替,从而保证随时刷新显示。键盘扫描程序在第7章中有详细的叙述,在此不再赘述。(5) 显示程序模块DISPLAY:流程图如图9.8所示。将显示缓冲区中的6位BCD码用动态扫描方式显示。为此,必须首先将3 字节计时缓冲区中的时、分、秒压缩BCD码拆分为6字节(百位、十位分别占有1字节)BCD码,这一功能由拆字子程序SEPA来实现。第9章 单片机系统的应用与开发图9.8 显示流程图第9章 单片机系统的应用与开发需要注意的是,当按下时间或闹钟设置键后,在6位设置完成之前,应
15、显示键入的数据,而不显示当前时间。为此,我们设置了一个计时显示允许标志位F0,在时间/闹钟设置期间F0=1,不调用SEPA,即调用SEPA刷新显示缓冲区的前提条件是F0=0。(6) 定时比较程序模块ALARM:流程图如图9.9所示。将当前时间(计时缓冲区的值)与预设的启闹时间(闹钟设置寄存区的值)比较,二者完全相同时,启动蜂鸣器鸣叫,并置位闹钟标志位。返回后,待重新按下ALM键停闹,并清零闹钟标志。第9章 单片机系统的应用与开发图9.9 定时比较流程图第9章 单片机系统的应用与开发(7) 拆字程序SEPA与合字程序COMB:如前所述,拆字程序的功能是将3字节计时缓冲区中的时、分、秒压缩BCD码
16、拆分为6字节(百位、十位、个位分别占有2字节)BCD码并刷新显示缓冲区;合字程序的功能是将键盘设置缓冲区中的6位BCD码合并为3位压缩BCD码,送入计时缓冲区或闹钟值寄存区,同时检测时间值的合法性。下面给出各模块的源程序。;*主程序MAIN*第9章 单片机系统的应用与开发ORG0000HAJMP MAINORG 000BHAJMP CLOCKORG 0030HPORT EQU 8000HPORTA EQU 8001HPORTB EQU 8002H第9章 单片机系统的应用与开发PORTCEQU 8003HDISP0 EQU 30HDISP1 EQU 31HDISP2 EQU 32HDISP3 EQU 33HDISP4 EQU 34HDISP5 EQU 35HHOUR EQU 3CH第9章 单片机系统的应用与开发M