单片机原理与接口技术课程设计_第1页
单片机原理与接口技术课程设计_第2页
单片机原理与接口技术课程设计_第3页
单片机原理与接口技术课程设计_第4页
单片机原理与接口技术课程设计_第5页
已阅读5页,还剩32页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE14课程设计指导书课程名称:单片机原理与接口技术适用专业:机械电子工程机械工程学院电气工程学院

前言课程设计是单片机课程教学的最后一个环节,目的是对学生进行全面系统的训练。进行课程设计可以让学生把学过的零碎知识系统化,能够开发简单的系统,也进一步激发学生学习的热情,因此课程设计是必不少的,非常必要。但是在多年的教学实践中,我们感到一方面学生掌握的理论知识和实践知识有限;另一方面课程设计的时间有限,一般不多于两周。要想让学生在规定时间内,运用自己有限的知识去独立完成一个单片机应用系统的全部设计、制作和调试是不现实的。在两周的时间内,学生把绝大部分时间要么花在设计制作硬件电路上,要么花在编写程序上,不能掌握整个系统的全貌。事实上用课程设计时间进行的单片机系统设计不要太复杂,但要将软、硬件两部分都贯穿进去,让学生清楚地了解单片机系统的整个设计过程,培养学生设计单片机应用系统的初步能力。基于以上认识,我们将课程设计内容分为理论设计与实践操作两部分。在理论设计部分,要求根据指定的题目完成硬件与软件的设计(对学有余力的同学,该部分也可以制作实物,实验室提供条件);实践操作部分由指导老师事先设计好一块包括流水灯、交通灯、显示器、键盘、A/D、D/A等电路的单片机综合应用系统的印刷电路板,并提供必需的元器件,每位同学完成单片机综合应用系统的焊接与硬件调试,编写相关控制程序并调试通过。本指导书首先介绍了单片机应用系统的设计步骤;然后介绍了单片机综合应用系统;接着详细地介绍了用单片机控制的交通灯系统的总体设计、硬件设计与软件设计。编者目录第一章课程设计(大型作业)的教学组织 11.1性质与目的 11.2设计任务书 21.3成绩考核 21.4设计时间安排和设计步骤 2第二章单片机应用系统的设计步骤 42.1总体设计 42.2硬件设计 42.3软件设计 5第三章单片机综合应用系统 73.1系统硬件原理图与说明 73.2硬件电路焊接注意事项 73.3uVision2集成开发环境简介 12第四章单片机课程设计示例(交通灯控制) 124.1课题设计内容 124.2设计方案论证 124.3系统硬件设计 134.4系统软件设计 174.5特种车中断服务子程序 194.6算法分析 20附录一交通灯控制程序清单 21附录二单片机原理与接口技术课程设计任务书 30第一章课程设计(大型作业)的教学组织1.1性质与目的当前,理工科高等院校许多专业的教学计划都安排有单片机课程设计或大型作业。单片机课程设计应该注意软件、硬件结合和兼顾,尤其应重视动手操作的内容,做到设计与实践两者并重。课程设计的选题,可选择已完成了的真实课题,经教师裁剪增删,在符合教学、符合学生水平、符合实验室条件的情形下,供学生试设计。考虑到设计时间较短促、学生的独立工作能力还较差,且教师将同时指导整个班级,因此要学生完成的内容要精选,工作量不宜太大;学生可编组进行设计,但提倡个人有独到的见解,并应独立写出设计说明书。本教学环节的目的,大体为:(1)训练学生正确地应用单片微机,培养解决工业控制、工业检测等领域具体问题的初步能力。(2)让学生通过所做课题,“解剖麻雀”,熟悉单片微机应用系统开发、研制的过程,软硬件设计的工作方法、工作内容、工作步骤。(3)对学生进行基本技能训练,例如组成系统、编程、调试、查阅资料、绘图、编写说明书等;使学生理论联系实际,提高动手能力和分析问题、解决问题的能力。单片微机课程设计(大型作业)可利用单片机实验装置作为学生动手实践的基本装置,也可将包括流水灯、交通灯、显示器、键盘、A/D、D/A等电路的单片机综合应用系统的印刷电路板与必须的元器件提供给学生,让学生在半成品的基础上将产品完成;除此以外,还可以结合每一课题,另制作足够数量的、配套的辅助性装置,以模拟工业应用实际情况,提高课题的真实性,扩大学生的实践内容和收获。为了这一教学环节的正常开展,还应积累(或复印)一定数量的参考资料(例如芯片、元器件的手册,某些装置的使用说明,有关的期刊、参考书籍等)。在课程设计教学中,应以学生自主设计为主,充分发挥学生的自主性和创造精神。教师的指导作用主要体现在工作方法,思维方法的引导。为保证顺利完成设计院任务,应注意如下要求:认真阅读设计任务书,保质保量地完成任务书的规定的工作。在总体方案确定过程中,要求多想,多查资料,少问。程序设计时,先画框图再编程,无论是自上而下,还是自下而上,必须一步一步调试,做到可读性好,主要语句一定要写注释。硬件图用A3绘制,必须符合国家有关标准的规定。说明书要求文字通顺,简炼。不少于5000字(不算源程序)。设计的系统必须进行实验演示。1.2设计任务书设计任务书需阐明:课题的名称;课题的意义与概况;课题的具体要求与工作步骤;及进度安排;分组办法;各组应完成的任务与侧重;参考资料等情况。设计任务书样例见附录二。除书面下达外,指导教师还须作详细说明,以期真正组织好这一教学环节。为此,在初始阶段可安排一定时间的讲课。讲课时还应向学生交待:课程设计(大型作业)教学环节的性质、与毕业设计的区别;设计说明书的写法与要求;最后考核的办法与评分依据。伴随着课题的具体进展,教师应加强辅导与答疑。课程设计宜挑选典型、成熟的课题。因此,不必届届更新。为了提高这一教学环节的教学质量,除设计任务书外,另可由有经验的教师编写好教学指导书,供指导教师参考,并注意逐届总结和修改完善。1.3成绩考核本教学环节,只是对学生设计能力的初步训练,每一(或每组)学生完成的任务常不够完整,学生由做习题、回答思考题过渡到面对全面、复杂的课题,独立完成的比重也还不高。所以,在最后适当留出一些时间组织相互交流,常可使学生扩大视野、增加收获,有很好的效果;同时,也锻炼了学生正确、条理地讲述清楚技术问题的能力。本教学环节单独进行成绩考核。考核可以与上述的交流相结合,或再伴以适当提问;也可另外单独组织提问或笔试。成绩的评定应兼顾到实验动手能力;也应考虑设计说明书的质量。如时间与条件允许,应鼓励学生将自己的观点具体化,修改程序或重编程序,再通过调试,论证与完善自己的观点。以这样的内容充实到设计说明书中,即使设计不太完整,也将使说明书生色不少。在课程设计阶段,完成思考题这样的任务也可编组进行。或由教师编组,或让思考相同题目、钻研相同内容、具有相同观点的学生自由聚合成组,或两者兼顾,教师可酌情引导与决定。应提倡学生讨论、争论,培育良好的学术气氛,并组织好交流。1.4设计时间安排和设计步骤占用的时间以2周左右为宜。可以集中2周,也可分散为每周一天,连续十周(半个学期)完成。为了使安排紧凑,占用的时间勿超过两周;如教学计划十分饱满,则最短也不宜低于1周。设计步骤建议如下:1)系统工作原理:叙述完成课题设计要求的工作原理2)总体设计:叙述软、硬件部分总体设计3)硬件:系统的组成,硬件的选用,芯片的特点、功能和编址4)软件:存储单元的分配,标志位的设置,由上自下的程序框图,子程序的设计及调试。5)综合调试6)整理设计说明书(设计说明书参考目录见附录二),准备答辩。第二章单片机应用系统的设计步骤单片机的应用系统随着用途不同,它们的硬件和软件结构差别很大,但系统设计的方法和步骤基本上是相同的。一般包括总体设计、硬件设计、软件设计、仿真调试、固化程序、应用系统独立运行等步骤。课程设计由于时间安排、学生水平、实验条件等诸方面的限制,仅要求学生完成仿真调试即可。2.1总体设计2.1.1根据课题的要求确定系统的工作原理。如电脑时钟的工作原理为:每百分之一秒对计数一次,满100次秒加一,秒满60次分加一……;并在数码管上显示时、分秒当前值。如果需要还要提出相应的技术指标。如电脑时钟要求显示的最小单位为秒,还是百分之一秒;温度测量系统要求测量多少路?测量精度是多少;收银机计算金额的范围多大,最小单位是否计分;交通灯控制系统测量车流量的最大频率是多少等。2.1.2硬件和软件功能的划分系统的硬件配置和软件设计是紧密地联系在一起的,且硬件和软件具有一定的互换性。多用硬件完成一些功能,可以提高工作速度,但降低了系统的柔性。若用软件替代某些硬件功能,可增加系统的柔性,但降低系统的工作速度。因此,总体设计时,应综合考虑,合理划分硬件和软件的功能。2.2硬件设计根据总体设计要求,确定系统扩展与功能接口,设计出系统的电路原理图。2.2.1系统扩展必须首先组成最小系统,即由8031、地址锁存器和程序存储器组成。根据课题要求,在此基础上进行扩展。包括程序存储器扩展、数据存储器扩展、I/O口扩展(8155、8255、74LS164)、定时器/计数器扩展(8253)和中断控制器扩展(8259)等(若单片机内包括存储器,则可以不进行存储器扩展)。如交通灯控制系统中要求控制四个方向的红、绿、黄灯共12个,因此,需扩展I/O口,可选用8255,也可利用串入并出移位寄存器74LS164扩展2个8位输出口的接口电路。2.2.2功能接口所谓接口是CPU与外界的连接部件,以实现CPU与外部设备的最佳耦合和匹配。包括键盘、显示、A/D转换、D/A转换和打印机等。根据课题要求,选用外设,并选用合适的外围接口芯片。2.2.3系统的组成及统一编址I/O端口是CPU与I/O设备直接通信的地址。单片机系统对I/O端口是采用端口地址与存储器地址统一编址的方式,即存储器映射方式。而编址技术又分线选法和译码法。对8155、8255、0809、0832等芯片地址,学生在设计硬件时,应自行编址。2.3软件设计一个优秀的的系统的软件应具有下列特点:①软件结构清晰、简捷、流程合理。②各功能程序实现模块化、子程序化。这样,既便于调试、链接,又方便移植、修改。③程序存储区、数据存储区分配合理。④运行状态实现标志化管理。各个功能程序运行状态、运行结果以及运行要求都设置状态标志(一般用位寻址区的位)以便查询,程序的转移、运行、控制都可以通过状态标志条件来控制。⑤实现全面软件抗干扰设计。(由于条件有限,课程设计中不考虑。)软件设计一般步骤如下:2.3.1系统定义系统定义是在软件设计前,把软件承担的任务明确出来。2.3.1.1是定点数还是浮点数;是有符号数还是无符号数;是十六进制数还是BCD码。如果一个参数的变化范围有限,就可以用定点数来表示,以简化程序设计和加快运行速度。当参数的变化范围太宽时,只好采用浮点数来表示,如智能电桥中被测对象的变化范围达数量级(l~l0000),定点数是无法胜任的。若要求数据的正负之分,则考虑定义有符号数。对于自然数列,为显示方便,可以采用BCD码,如电脑时钟的时、分、秒。2.3.1.2合理定义和分配存储空间、定义标志位。资源分配的主要工作是RAM资源的分配。片外RAM的容量要比片内RAM大,通常用来存放批量大的数据,如采样数据系列。主要考虑片内RAM的分配。系统上电复位时,自动定义0区为工作寄存器,1区为堆栈,并向2区、3区延伸。如果系统前台程序要用1区、2区作为工作寄存器,就应将堆栈空间重新规划,常将堆栈安放在片内RAM的高端,如60H~7FH。在工作寄存器的8个单元中,R0和R1具有指针功能,是编程的重要角色,应充分发挥其作用,尽量避免用来做其他事情。20H~2FH这16个字节具有位寻址功能,用来存放各种软件标志、逻辑变量、位输入信息、位输出信息副本、状态变量、逻辑运算的中间结果等。当这些项目全部安排好后,保留一两个字节备用,剩下的单元才可改作其他用途。30H~7FH为一般通用寄存器,只能存入整字节信息。通常用来存放各种参数、指针、中间结果,或用作数据缓冲区。RAM资源规划好后,应列出一张RAM资源的详细分配清单,作为编程依据。为了增加可读性,便于修改,一般对分配的存储单元取名。如保存当前时间的时、分、秒取HOUR、MINI、SEC,编程时用变量名,编译时只需在前面加HOUREQU24H即可(20H为分配给小时的存储单元的地址)。2.3.2软件结构设计软件设计有两种方法:一种是自上而下,逐步细化;另一种是自下而上,先设计出每一个具体的模块(子程序),然后再慢慢扩大,最后组成一个系统。两种方法各有优缺点。自上而下的方法在前期看不到什么具体效果,对于初学者来说,心中总是不踏实。而自下而上的方法一开始就有结果,每设计并测试好一个模块,就能看到实际的效果,给人一步一个足印的感觉,能树立信心。我们建议两种方法结合运用。主程序采用自上而下的方法,将它分成若干个功能相对独立的较小的程序模块。然后再采用自下而上的方法,设计一个模块,调试一个模块,加入主程序调试;再进行下一个模块设计和调试。所以在这一步骤就是设计主程序的框架。2.3.3模块2.3.3.1建立入口条件和出口条件根据问题的定义,描述出各个输入变量的存放地址(入口条件)和各个输出变量的存放地址(出口条件)。例如输入量是经A/D转换后的8个数字量,存入在以30H为首的数据块中,输出量是这8个数字量的平均值,存放在40H中。为方便起见,用R0存放输入量数据块首地址,用R1存放输出量地址。则入口条件为R0,出口条件为R1。2.3.3.2根据问题的定义,确定算法,并绘制程序框图。注意必须确保程序框图的正确性。比如在电脑时钟中,考虑输入“分”的数据的合理性,数据必须小于60,程序框图中就不能忽视等于60如何处理,这是初学者常犯的错误。2.3.3.3在确保程序框图的正确性的前提下,才能编写程序。在编程时必须注意以下几点:①一定要严格根据框图编程。②一定要写注释。③通过编译后,只表明语法没错,并不表明逻辑正确,一定要用不同的数据对模块进行测试。完全符合预定结果,方可确认通过。④将该模块加到主控模块进行测试,如果与预定结果不符,必须查找原因,进行修改、调试。⑤必须注意随时保存调试通过的副本。以便当新程序出现故障时,随时可返回前面的正确点重新开始。2.3.4设计说明书的格式见附录四。由于设计时间紧迫,读者不要在完成全部设计后再编写设计说明书。而应在设计过程中逐步完成。一开始不可能设计出满意的主程序框图。因此,总体设计部分在完成全部设计任务后再写。而硬件部分和软件部分可以在设计过程同步完成。第三章单片机综合应用系统实践3.1系统硬件原理图与说明单片机综合应用系统电路原理图如图3-1所示,其中包括单片机最小系统、电源电路、键盘、显示器电路、流水灯电路、交通灯电路、串行接口电路、AD转换电路。单片机最小系统部分如图3-2所示。选用Phlips公司的P89V51RD2单片机作为控制核心,接上晶振与复位电路,四个八位并行口通过开关接输入/输出器件。电源电路如图3-3所示。四个八位并行口所接的上拉电阻图如图3-4所示,选用四个8*2k的排阻来实现。键盘与扬声器电路如图3-5所示。显示器电路如图3-6所示。流水灯电路如图3-7所示。交通灯电路如图3-8所示。串行接口电路如图3-9所示。AD转换电路如图3-10所示。3.2硬件电路焊接注意事项所有器件要看清位置再焊接,另外注意:1、排阻要注意方向(做标志的是公共端)2、发光二极管和整流二极管要分清阴极和阳极3、三极管注意EBC三极4、交通灯的分布要按要求焊接(分色)5、蜂鸣器有方向6、MAX232边上的两个电阻是跳线焊接成功的综合应用系统照片如附录三所示。图3-1单片机综合应用系统电路原理图图3-2单片机最小系统图3-3电源电路图3-4上拉电阻图3-5键盘与扬声器电路图3-6显示器电路图3-7流水灯电路图3-8交通灯电路图3-9串行接口电路图3-10AD转换电路3.3uVision2集成开发环境简介uVision2IDE是一个基于Window的开发平台,包含一个高效的编辑器,一个项目管理器和一个MAKE工具。uVision2支持所有的KEIL8051工具,包括C编译器,宏汇编器,连接/定位器,目标代码到HEX的转换器。uVision2通过以下特性加速嵌入式系统的开发过程:(1)

全功能的源代码编辑器。(2)

器件库用来配置开发工具设置。(3)

项目管理器用来创建和维护项目。(4)

集成的MAKE工具可以汇编,编译和连接嵌入式应用。(5)

所有开发工具的设置都是对话框形式的。(6)

真正的源代码级的对CPU和外围器件的调试器。(7)

高级GDI(AGDI)接口用来在目标硬件上进行软件调试,以及和Monitor-51进行通信。(8)

与开发工具手册和器件数据手册和用户指南有直接的链接。第四章单片机课程设计示例(交通灯控制)4.1课题设计内容对基于单片机的交通灯控制系统进行设计。所设计的系统功能为:以MCS-51系列单片机作为控制核心,在东西南北四个方向设置左拐、右拐、直行及行人4种通行指示灯,用计时器显示路口通行转换剩余时间。在出现紧急情况时,可以由交警手动实现全路口车辆禁行而行人通行状态,在特种车辆如119、120通过路口时,系统可自动转为特种车辆放行,其他车辆禁止通行状态。4.2设计方案论证根据设计内容要求,提出了如下三种方案:方案一:采用40脚、片内带8kBFlashROM的AT89S52单片机作为控制核心,采用四组高亮红绿双色二极管作为东西南北四个路口的通行指示灯,采用四组3位LED数码管作为四个路口的通行倒计时显示器,LED显示采用动态扫描方式,以节省端口数。方案一结构框图如图4-1所示,按照这种结构设计,单片机端口资源刚好满足要求。图4-1方案一:采用LED动态扫描的交通灯控制系统结构框图方案二:采用20脚、片内带2kBFlashROM的AT89C2051单片机作为控制器,左拐、右拐、直行及行人4种通行指示采用16×16点阵双色LED发光管,通行倒计时显示也采用16×16点阵LED发光管。LED点阵的列驱动采用74LS595,以实现串行端口扩展,行译码采用4/16译码器74LS154,74LS154生成16条行选通信号线,每条行线上需要较大的驱动电流,选用大功率三极管作为驱动管。方案二结构框图如图4-2所示,方案三:采用AT89C2051单片机作为控制器,左拐、右拐、直行、行人通行指示及通行倒计时指示采用单块LCD液晶点阵显示器。三种方案的特点比较如下:方案一具有电路简单,设计方便,显示亮度高,耗图4-2方案二:采用16×16点阵LED发光管设计的交通灯控制系统结构框图电较少,可靠性高等特点;方案二的图案显示逼真,单片机占用端口资源少,缺点是需要大量的硬件,电路复杂,耗电量大,不太适合于模型制作;方案三设计占用单片机的端口最少,硬件也少,耗电也最少,虽然显示图案也很精美,但由于亮度太暗,晚上还得开背光灯,不够实用。可见方案一优于其他两种方案,因此本设计选用方案一:采用LED动态扫描的方案进行设计。4.3系统硬件设计采用LED动态扫描的交通灯控制系统电路原理图如图4-3所示系统由控制模块、通行灯显示模块、时间显示模块、电源模块四部分组成。4.3.1控制模块控制模块电路如图4-4所示。主控制器采用AT89S52。AT89S52的晶振及复位电路按典型电路设计,元器件参数如图4-4中所示,晶振频率选为12MHz。P1口用于控制南北通行灯,P2口用于控制东西通行灯,P0口用于四组3位LED显示器的段码控制,P3.0~P3.2口用于3位LED显示器的位码控制。对不同城市,准备采用两种倒计时方式:对车流量较大的大城市采用120S倒计时,对中小城市采用60S倒计时。两种倒计时采用P3.6上的S2开关进行转换。在出现紧急情况时,由交警手动按S3实现全路口车辆禁行而行人通行状态。现场特种车的到来信号可以采用红外线接收器采集,使用单片机的外部中断1响应特种车的通行要求。此处采用S4按键模拟特种车的到来信号,按一下S4表示有特种车要通行,执行相应的中断服务程序。由于AT89S52使用片内的8KB的Flash程序存储器,所以片内外程序存储器选择引脚/VPP接+5V电源。4.3.2通行灯显示模块通行灯显示模块如图4-5所示(以西路口和北路口为例)。通行灯指示采用高亮共阴红绿双色发光二极管,左拐、右拐、直行及行人各一个。双色发光二极管的共阴极通过电阻接地,阳极接P1口或P2口(南北为P1口,东西为P2口),经74HC244控制。当发光电流为6mA时,限流电阻按公式R=(5-1.8)/0.006计算,取标称值为510Ω。由于通行时南北双向指示牌相同,东西双向指示牌相同,因此每个端口应具有12mA的驱动电流能力,在单片机的输出口接驱动电路74HC244,以保护单片机的输出端口。4.3.3时间显示模块通行剩余时间显示模块如图4-6所示(以北路口为例)。PAGEPAGE15图4-3采用LED动态扫描的交通灯控制系统电路原理图PAGEPAGE34路口通行剩余时间采用高亮红色7段共阳LED发光数码管显示。如用单片机吸收电流驱动,列扫描驱动使用三级管,按每段6mA电流算,全显示字型“8”时,每个数码管需6mA×8=48mA。由于时间显示每个路口相同,4组需192mA,因此设计中采用功率三极管S9012驱动。由于单片机每位段码输出口需吸收24mA电流,因此在电路设计中也使用了驱动集成块74HC244。4.3.4电源电路电源电路如图4-7所示。整个系统采用的电源电压只需+5V电压,将交流电经变压器变换为15V交流电,再用整流桥得到13.5V左右的直流电,采用不可调的3端稳压器件LM7805将电源稳定在5V直流输出。图4-4控制模块原理图图4-5通行灯输出显示模块图4-6时间显示模块电路图4-7电源电路图4-8AT89S52引脚功能4.4系统软件设计交通灯控制系统软件主要分为主程序、定时器中断服务子程序、特种车中断服务子程序三部分。4.4.1主程序主程序主要负责总体程序管理功能,包括初始化部分与人机交互设定部分。由于采用动态扫描方式显示时间,因此主程序大部分时间是调用扫描显示程序。主程序流程图如图4-9所示。P3.7=0表示按下了自动/手动转换开关。图4-9主程序流程图初始化部分主要完成内存规划,定时器的工作模式、中断方式等的设定。由于子程序调用较多,因此初始化时堆栈指针设于80H处。定时器T0、T1设为16位定时器模式,定时时间为50mS,T0为秒计时用,T1为特种车通行秒计时用。4.4.2定时器中断服务子程序定时器中断服务子程序主要用于车辆与行人的通行指示,按照通行规则,红绿灯控制转换逻辑表如表4-1所示。通行规则如下:A.车辆南北直行、各路右拐,南北向行人通行。南北向通行时间为1min(60S),各路右拐比直行滞后10S开放。B.车辆南北向左拐、各路右拐,行人禁行。通行时间为1min(60S)。C.车辆东西直行、各路右拐,东西向行人通行。东西向通行时间为1min(60S),各路右拐比直行滞后10S开放。D.车辆东西向左拐、各路右拐,行人禁行。通行时间为1min(60S)。交通灯的4种通行规则,是以给控制红绿灯端口送控制码的方式实现的。它的原理是,将按不同规则通行时的各路口的红绿灯亮灭情况转换为单片机端口控制码。红绿灯指示功能通过T0定时中断服务程序实现。表4-1路口通行方式控制码数据表南北方向端口控制功能120-110S110-70S70-60S60-10S10-0SP1.7左拐红1(亮)1(亮)1(亮)0(暗)0(暗)P1.6左拐绿0(暗)0(暗)0(暗)1(亮)1/0(提示)P1.5直行红0(暗)0(暗)0(暗)1(亮)1(亮)P1.4直行绿1(亮)1(亮)1/0(提示)0(暗)0(暗)P1.3右拐红1(亮)0(暗)0(暗)0(暗)0(暗)P1.2右拐绿0(暗)1(亮)1(亮)1(亮)1/0(提示)P1.1行人红0(暗)0(暗)0(暗)1(亮)1(亮)P1.0行人绿1(亮)1(亮)1/0(提示)0(暗)0(暗)路口控制字99H95H95H/84H66H66H/22H东西方向P2.7左拐红1(亮)1(亮)1(亮)1(亮)1(亮)P2.6左拐绿0(暗)0(暗)0(暗)0(暗)0(暗)P2.5直行红1(亮)1(亮)1(亮)1(亮)1(亮)P2.4直行绿0(暗)0(暗)0(暗)0(暗)0(暗)P2.3右拐红1(亮)0(暗)0(暗)0(暗)0(暗)P2.2右拐绿0(暗)1(亮)1(亮)1(亮)1/0(提示)P2.1行人红1(亮)1(亮)1(亮)1(亮)1(亮)P2.0行人绿0(暗)0(暗)0(暗)0(暗)0(暗)路口控制字AAHA6HA6HA6HA6H/A2H定时器T0定时溢出中断周期设为50ms,中断累计20次(即1S)时对120S倒计时单元减一操作。设计中将4种通行规则分成几种不同的亮灯方式,通过查询秒倒计时单元的数据,实现在不同的时间段给控制端口送不同的控制数据码。控制码分为5个时间段:120~110S、110~70S、70~60S、60~10S、10~0S。交通管理定时功能程序流程图如图4-10所示。图4-10交通管理定时功能程序图4-11特种车中断服务子程序流程图4.5特种车中断服务子程序将按钮S4按下,给引脚输入低电平信号来模拟特种车通过信号,此时外部中断1被触发,中断处理流程如图4-11所示。总的程序清单见附录4。4.6算法分析4.6.1本设计涉及到120~110S、110~70S、70~60S、60~10S、10~0S五段计时,首先须将它们转为16进制代码。120=7×16+8=78H110=6×16+14=6EH70=4×16+6=46H60=3×16+12=3CH10=0×16+10=0AH4.6.2T0、T1为16位定时器,由于定时时间大于8192μS,应选用工作方式1。由于晶振频率为12MHz,TCY=1μS,故有T=(65536-X)TCY=(65536-X)×1μs=50ms初值X=15536=3CB0H,即TH0=3CH,TL0=0B0H。TMOD的格式如图4-12所示。D7D6D5D4D3D2D1D0GATEC/M1M0GATEC/M1M0图4-12TMOD的格式TMOD各位的内容确定如下:由于定时器/计数器0设为定时器,选用工作方式1,所以GATE(TMOD.3)=0,C/(TMOD.2)=0,M1(TMOD.1)=0,M0(TMOD.0)=1;定时器/计数器1没有使用,相应的D7~D4为随意状态“X”。若取“X”为0,则(TMOD)=00000001B=01H4.6.3IE的格式如图4-13所示。D7D6D5D4D3D2D1D0EAET2ESET1EX1ET0EX0图4-13IE的格式IE每一位都由软件置1或清零。本设计中CPU允许中断即EA=1,定时器/计数器0中断允许位ET0及外部中断0中断允许位EX0可申请中断,即ET0=1,EX0=1,其余不允许中断,均设为0,所以IE=10000011H=83H。附录一交通灯控制程序清单基于单片机的交通灯控制系统程序清单;************************************************;;交通灯控制系统程序;;************************************************;;******************初始化部分********************TIMEEQU50H;秒计数用TIMESFREQU51H;临时寄存器CONR5EQU52H;T1秒定时计数用TIMED0EQU55H;单向最大定时时间,直行开始,人行开;始(120S)TIMED1EQU56H;各路右拐开始时间(110S)TIMED2EQU57H;前行结束提醒(70S)TIMED3EQU58H;前行结束,人行结束,左拐开始(60S)TIMED4EQU59H;左拐结束提醒TIMED5EQU5AH;左拐结束TIMED6EQU5BHTIMED7EQU5CHSNEQUP1;南北口EWEQUP2;东西口SCANEQUP3;扫描口LEDOUTEQUP0;段码口SNEWFLAGBIT09H;东西口与南北口转换标志;*************中断入口程序********************ORG0000H;程序执行开始地址LJMPSTART;跳到标号START执行ORG0003H;外中断0中断程序入口RETI;外中断0中断返回ORG000BH;定时器T0中断程序入口LJMPINTT0;跳至INTT0执行ORG0013H;外中断1中断程序入口LJMPINT11;119﹑120中断ORG001BH;定时器T1中断程序入口LJMPINTT1ORG0023H;串行中断程序程序返回RETI;****************主程序*********************;P3.6所接S2开关打开,为120秒倒计时,合上,则为60秒倒计时;P3.7所接S2开关打开,正常状态,合上,全红灯。;定时器T0﹑T1溢出周期为50ms,T0为秒计数用START:MOVSP,#80HMOVR0,#00H;清00H~8EH内存单元MOVR7,#8FHCLEARDISP:MOV@R0,#00HINCR0DJNZR7,CLEARDISPMOVTIMED0,#78H;单向最大定时时间,直行开始;人行开始MOVTIMED1,#6EH;各路右拐开始时间(110S)MOVTIMED2,#46H;前行结束提醒(70S)MOVTIMED3,#3CH;前行结束,人行结束,左拐开始;(60S)MOVTIMED4,#0AH;左拐结束提醒CLRSNEWFLAG;南北先通行标志位MOVTMOD,#01H;设T0,T1为16位定时器MOVTL0,#0B0H;50ms定时初值(T0记时用)MOVTH0,#3CH;50ms定时初值MOVTL1,#0B0H;50ms定时初值MOVTH1,#3CH;50ms定时初值JBSCAN.6,SSST;120s管理;以下为60s管理LCALLDL1MSLCALLDL1MSLCALLDL1MSJBSCAN.6,SSST;干扰MOVTIMED0,#60;单向最大定时时间,直行开始;人行开始MOVTIMED1,#55;各路右拐开始时间(55S)MOVTIMED2,#35;前行结束提醒(35S)MOVTIMED3,#30;前行结束,人行结束,左拐开始(30S)MOVTIMED4,#05;左拐结束提醒SSST:MOVTIME,TIMED0LCALLTUNBCDMOVSN,#99HMOVEW,#0AAHSETBEA;总中断开放SETBPX1SETBEX1SETBET0;允许T0中断SETBTR0;开启T0定时器MOVR4,#14H;1S定时用初值(50ms×20)MOVCONR5,#20START1:LCALLDISPLAY;调用显示子程序JNBSCAN.7,KEYFUN;手动状态SJMPSTART1;P3.7为1时跳回START1KEYFUN:LCALLDISPLAYLCALLDISPLAYJBSCAN.7,START1CLRET0CLRTR0MOVSN,#0A9H;MOVEW,#0A9MOVTIME,#00H;时间显示0LCALLTUNBCDKEYWAIT:LCALLDISPLAYJNBSCAN.7,KEYWAITKEYWAIT1:LCALLDISPLAYJNBSCAN.7,KEYWAIT1MOVTIME,TIMED0;重新开始计时初值LCALLTUNBCD CLRSNEWFLAG;南北先通行标志位SETBTR0SETBET0AJMPSTART1;*****************1s计时程序(T0定时器中断服务子程序)*****************INTT0:PUSHACC;累加器入栈保护PUSHPSW;状态字入栈保护CLRET0;关T0中断允许CLRTR0;关闭定时器T0MOVA,#0B7H;中断响应时间同步修正ADDA,TL0;低8位初值修正MOVTL0,A;重装初值(低8位修正值)MOVA,#3CH;高8位初值修正ADDCA,TH0MOVTH0,A;重装初值(高8位修正值)SETBTR0;开启定时器T0DJNZR4,OUTT00;20次中断到(1S),重赋初值MOVR4,#14HJBSNEWFLAG,INT22DECTIMEMOVA,TIMECJNEA,TIMED1,LOOP11;判断是否小于110SLOOP11:JCLOOP22;120-110MOVSN,#99HMOVEW,#0AAHLJMPOUTT0;120-110LOOP22:MOVA,TIMECJNEA,TIMED2,LOOP33;判断是否小于70SLOOP33:JCLOOP44;110-70MOVSN,#95HMOVEW,#0A6HLJMPOUTT0;110-70LOOP44:MOVA,TIMECJNEA,TIMED3,LOOP55;判断是否小于60SLOOP55:JCLOOP66;70-60MOV20H,SNCPL04HCPL00HMOVSN,20HMOVEW,#0A6HLJMPOUTT0;70-60LOOP66:MOVA,TIMECJNEA,TIMED4,LOOP77;判断是否小于10SLOOP77:JCLOOP88;60-10MOVSN,#66HMOVEW,#0A6HLJMPOUTT0;60-10LOOP88:MOVA,TIMEJZOUT88MOV20H,SNCPL06HCPL02HMOVSN,20HMOV20H,EWCPL02HMOVEW,20HLJMPOUTT0;70-60OUT88:MOVTIME,TIMED0;20初值CPLSNEWFLAGOUTT0:LCALLTUNBCDOUTT00:POPPSW;恢复状态字(出栈)POPACC;恢复累加器SETBET0;开放T0中断RETI;中断返回INT22:DECTIMEMOVA,TIMECJNEA,TIMED1,LOOP111;判断是否小于110SLOOP111:JCLOOP221;120-110MOVEW,#99HMOVSN,#0AAHLJMPOUTT01;120-110LOOP221:MOVA,TIMECJNEA,TIMED2,LOOP331;判断是否小于70SLOOP331:JCLOOP441;110-70MOVEW,#095HMOVSN,#0A6HLJMPOUTT01;110-70LOOP441:MOVA,TIMECJNEA,TIMED3,LOOP551;判断是否小于60SLOOP551:JCLOOP661;70-60MOV20H,EWCPL04HCPL00HMOVEW,20HMOVSN,#0A6HLJMPOUTT01;70-60LOOP661:MOVA,TIMECJNEA,TIMED4,LOOP771;判断是否小于10SLOOP771:JCLOOP881;60-10MOVEW,#66HMOVSN,#0A6HLJMPOUTT01;60-10LOOP881:MOVA,TIMEJZOUT881MOV20H,EWCPL06HCPL02HMOVEW,20HMOV20H,SNCPL02HMOVSN,20HLJMPOUTT01;70-60OUT881:MOVTIME,TIMED0;120S初值CPLSNEWFLAGOUTT01:LCALLTUNBCDPOPPSW;状态恢复字(出栈)POPACC;恢复累加器SETBET0;开放T0中断RETI;中断返回;**********************显示子程序******************;显示数据在70H~72H单元内,用3位LED共阳数码管显示,LEDOUT口输出段;码数据,;P3(SCAN)口作扫描控制,每个LED数码管亮1ms再逐位循环DISPLAY:MOVR1,#70H;指向显示数据首址MOVR5,#0FEH;扫描控制字初值PLAY:MOVA,R5;扫描字放入AMOVSCAN,A;从SCAN口输出MOVA,@R1;取显示表地址MOVDPTR,#TAB;取段码表地址MOVCA,@A+DPTR;查显示数据对应段码MOVLEDOUT,A;段码放入LEDOUT口LOOP6:LCALLDL1MS;显示1msINCR1;指向下一地址MOVA,R5;扫描控制字放入AJNBACC.2,ENDOUT;ACC.2=0时,一次显示结束RLA;A中数据循环左移MOVR5,A;放回R5内MOVLEDOUT,#0FFHAJMPPLAY;跳回PLAY循环ENDOUT:MOVLEDOUT,#0FFH;一次显示结束,端口复位MOVSCAN,#0FFH;端口复位RET;子程序返回TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB0FFH,88H,0BFH;共阳段码表"0","1","2","3","4","5","6","7","8","9";"不亮","A","-";***********************延时子程序*******************;1ms延时程序,LED显示程序用DL1MS:MOVR6,#14HDL1:MOVR7,#19HDL2:DJNZR7,DL2DJNZR6,DL1RET;*******************十六进制转换为BCD码的子程序*******************TUNBCD:PUSHACCPUSHPSWPUSHBMOVA,TIMEMOVB,#100DIVABMOV72H,AJNZJJ0MOV72H,#0AH;最高位为0,不点亮JJ0:MOVA,BMOVB,#10DIVABMOV71H,AJNZJJ1MOVA,72H;次高位为0,先看最高位是否为不亮SUBBA,#0AHJNZJJ1MOV71H,#0AH;最高位不亮,次高位也不亮JJ1:MOV70H,BPOPBPOPPSWPOPACCRET;*********************119,120特种车中断服务子程序****************INT11:PUSHACCPUSHPSWCLREX1CLRET0CLRTR0MOVSN,#AAH;全红灯MOVEW,#AAHMOVTIMESFR,TIME;保存道口数据MOVTIME,#0FHMOVCONR5,#20LCALLTUNBCDSETBET1SETBTR1POPPSWPOPACCRETI;******************15s计时程序(T1中断服务程序)*********************INTT1:PUSHACC;累加器入栈保护PUSHPSW;状态字入栈保护CLRET1;关T1中断允许CLRTR1;关闭定时器T1MOVA,#0B7H;中断响应时间同步修正ADDA,TL1;低8位初值修正MOVTL1,A;重装初值(低8位修正值)MOVA,#3CH;高8位初值修正ADDCA,TH1MOVTH1,A;重装初值(高8位修正值)SETBTR1;开启定时器T1DJNZCONR5,OUTT333;20次中断未到,中断退出MOVCONR5,#14H;20次中断到(1S),重赋初值DECTIMELCALLTUNBCDMOVA,TIMEJZOUT444OUT333:SETBET1POPPSWPOPACCRETIOUT444:CLRTR1CLRET1MOVTIME,TIMESFRLCALLTUNBCDSETBET0SETBTR0SETBEX1POPPSWPOPACCRETIEND;程序结束附录二单片机技术课程设计任务书一、课程设计时间2周二、指导教师王福元、李永健、卢倩、郝昕玉、王军三、课程设计内容根据指定的题目完成硬件与软件的设计(根据条件可以制作实物)。四、课程设计题目及分组及设计要求1.基于SHT10温湿度测量显示电路设计设计目的:(1)学习I/O口模拟串口IIC接口方法;(2)学习延时子程序的编写;(3)学习多位数码管扩展方法设计要求:在单片机最小系统的基础上扩展一片SHT10集成传感器,测量环境的温度湿度并通过6位LED数码管动态显示测量值。思考问题:改变延时常数如何使LED数码管无闪烁,如何防止PCB板上发热器件对测量结果造成的影响,市场上还有SHT11型的器件,试对这两种器件进行比较。2.基于单片机的电子时钟电路设计设计目的:(1)学习输出口的使用方法;(2)学习定时/计数器的使用;(3)学习中断的使用设计要求:电路的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论