单片机抢答器设计与实现 摘 要
此次设计提出了用AT89C51单片机为核心控制元件,设计一个简易的抢答器, 本方案以AT89C51单片机作为主控核心,与MAX232、发光二极管、数码管、蜂鸣器等构成四路抢答器,利用了单片机的延时电路、按键复位电路、时钟电路、定时/中断等电路,设计的抢答器具有实时显示抢答选手的号码和抢答时间的特点,还有复位电路,使其再开始新的一轮的答题和比赛,同时还利用C语言编程,使其实现一些基本的功能。
本设计的系统实用性强、判断精确、操作简单、扩展功能强。它的功能实现是比赛开始,主持人读完题之后按下总开关,即计时开始,此时数码管开始进行1s的加计时,直到有一个选手抢答时,对应的会在数码管上显示出该选手的编号和抢答所用的时间,同时该选手对应的发光二极管会发出相应的光,蜂鸣器也会发出声音,以提示有人抢答本题,如果在规定的60s时间内没有做出抢答,则此题作废,即开始重新一轮的抢答。 关键字:STC89C52单片机、动态显示、中断、按键控制
目 录 第一章论 ………………………………………………………………………………1
绪
1.1 单片机抢答器背景……………………………………………………………………1 1.2 单片机抢答器意义……………………………………………………………………1 1.3 抢答器的应用…………………………………………………………………………1 第二章 整体设计方案 ………………………………………………………………1 2.2 单片机的基本结构……………………………………………………………………4 2.3 单片机的存储器配置…………………………………………………………………6 第三章 硬件设计 …………………………………………………………………………8 3.1 最小系统的设计 ……………………………………………………………………8
2.1 单片机的选择…………………………………………………………………………2
3.2 数码管显示电路 ……………………………………………………………………8 3.3 按键控制电路…………………………………………………………………………9 第四章 软件设计 …………………………………………………………………………11 4.1 抢答器系统软件设计的流程图 ……………………………………………………11 4.2 主程序 ………………………………………………………………………………12 4.3 中断程序 ……………………………………………………………………………15 第五章 系统的仿真 ………………………………………………………………………18 5.1 protenus软件的介绍及使用 ………………………………………………………18 5.2 抢答器protenus软件的仿真………………………………………………………23 第六章 调试功能说明 ……………………………………………………………………24
6.1 系统的调试 …………………………………………………………………………24
6.2 软件调试问题及解决 ………………………………………………………………25 6.3 焊接的问题及解决 …………………………………………………………………26 6.4 单片机的通信 ………………………………………………………………………25 第七章 结束语 ……………………………………………………………………………27
7.1 结论 ………………………………………………………………………………27 7.2工作展望 ……………………………………………………………………………28 参考文献 ……………………………………………………………………………………29 致谢……………………………………………………………………………………………30
单片机抢答器设计与实现(2)
第一章 绪论 1.1 单片机抢答器的背景 二十世纪跨越了三个电的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成。
第一章 绪论 1.1 单片机抢答器的背景
二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成。还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词--“智能型”。
在知识竞赛中,往往会用到抢答器。故此我们就选择利用单片机编程来设计抢答器,即使两组的抢答时间相差几微秒,也能轻松的分辨出哪一组(或哪个选手)先抢答到题。 1.2 单片机抢答器的意义
本系统采用单片机作为整个控制核心。控制系统的四个模块为:显示模块、存储模块、语音模块、抢答开关模块。该系统通过开关电路四个按键输入抢答信号,利用一个数码管来完成显示功能,用按键来让选手进行抢答,在数码管上显示哪一组先答题的,从而实现整个抢答过程。本文主要介绍了单片机抢答器设计及工作原理,以及它的实际用途。系统工作原理本系统采用89C52单片机作为核心。控制系统的四个模块分别为:存储模块、显示模块、语音模块、抢答开关模块。该抢答器系统通过开关电路四个按键输入抢答信号, 利用一个数码管来完成显示功能。工作时,用按键通过开关电路输入各路的抢答信号,经单片机的处理, 输出控制信号,单片机控制的智能抢答器设计。
1.3 抢答器的应用 随着我国经济和文化事业的发展,在很多公开竞争场合要求有公正的竞争裁决,诸如证券、股票交易及各种智力竞赛等,因此出现了抢答器。抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。因此我们设计了以单片机为核心的新型智能的抢答器,在保留原始抢答器的基本功能的同时又增加了数码管显示电路实现了其它功能。抢答器又称为第一信号鉴别器,其主要应用于各种知识竞赛、文艺活动等场合。 第二章 整体设计方案 2.1 单片机的选择 2.1.1 什么是单片机
单片机是指一个集成在一块芯片上的完整计算机系统。尽管它的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存 内部和外部总线系统。单片机是将中央处理器,
随机存储器。只读存储器,定时器芯片和I/O接口电路集成于一个芯片上的微控制器。
单片机也被称为微控制器(Microcontroler),是因为它最早被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对提及要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大的提高。随着INTELI960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。
单片机是靠程序的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板,但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别。只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。 2.1.2 单片机的应用
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴: 1.在智能仪器仪表上的应用
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。 2.在工业控制中的应用
用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。 3.在家用电器中的应用
可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。 4.在计算机网络和通信领域中的应用
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。
5.单片机在医用设备领域中的应用
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。 2.1.3 如何选择单片机
ATMEL公司的89C52单片机,是增强型RISC内载Flash的单片机,芯片上的Flash存储器附在用户的产品中,可随时编程,再编程,使用户的产品设计容易,更新换代方便。89C52单片机采用增强的RISC结构,使其具有高速处理能力,在一个时钟周期内可执行复杂的指令,每MHz可实现1MIPS的处理能力。89C52单片机工作电压为2.7~6.0V,可以实现耗电最优化。89C52的单片机广泛应用于计算机外部设备,工业实时控制,仪器仪表,通讯设备,家用电器,宇航设备等各个领域。
由于单片机的种类很多,在选择单片机时要依据实际设计要求选择合适的单片机。例如当设计仅仅需要一个单片机定时器那么选择89C1051或89C2051即可,而不选择89C52,因为后者的价格较高一些。当然若程序和数据区的要求较高那么选择的单片机还要满足程序空间的要求。 表2-1 51和52的比较
数据存储器 程序存储器 4KB 8KB 定时器 中断 51系列 52系列
128B 256B 2 3 5 8 在本课题中,我们选用现在较为流行的52系列单片机,即选用ATMEL公司的STC89C52。 2.2 单片机的基本结构
2.2.1 单片机的引脚分布及功能
MCS-52系列单片机中的8032、8052及8752均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:
图2-2 STC89C52的引脚图
Pin9:RESET/Vpd复位信号复用脚,当8052通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8052的初始态。 8052的复位方式可以是自动复位,也可以是手动复位,见下图4。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。
图2-3 复位电路和晶振电路图 1、8位微处理器和控制器 2、内部含有4KB的程序ROM。 3、2个16位的计数/定时器。 4、内部时钟振荡器
5、全双工方式的串行接口(UART)种寻址方式。
6、最高时钟振荡频率可达12MHZ,大部分指令执行时间为1?s,乘、除指令为4?s。
2.2 信号引脚介绍: 1.输入/输出口线 2.ALE地址锁存控制信号
3.在系统扩展时,ALE用于控制把 口输出的底8位地址送入锁存器锁存起来,以实现低位地址和数据的分时传送。此外由于ALE是以十二分之一晶振频率的固定频率输出的正脉冲,因此可作为外部时钟或外部定时脉冲使用。
4.外部程序存储器读选通信号
5.在读外部ROM时 有效(低电平),以实现外部ROM单元的读操作 6.访问程序存储器控制信号
7.当信号为低电平时,对ROM的读操作限定在外部程序存储器;而当 信号为高电平时,则对ROM的读操作是从内部程序存储器开始,并可延续至外部程序存储 8.RST 复位信号
当输入的复位信号延续2个机器周期以上高电平时即为有效,用以完成单片机的复位操作。 9.XTAL1和XTAL2外接晶体引线端
当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。 10.VSS地线 11.VCC+5V 电源 2.3 单片机的存储器配置
图2-4 单片机的内部存储器配置
从用户的角度存储器分3个逻辑地址空间:
1. 片内外统一编址的64KB程序存储器地址空间0000H~FFFFH即(a)图;
2. 256B的片内数据存储器地址空间00H~FFH(包括低128B的内部RAM地址00H~7FH和高128B的特殊功能寄存器地址空间)即(b)图;
3.64KB的外部数据存储器或扩展I/O接口地址空间0000H~FFFFH如(c)图。 4.画出RAM的组成
RAM共有256个单元,按功能分为两部分低128单元(单元地址00H~7FH)和高128单元(单元地址80H~FFH)。其中高128单元是供给专用寄存器使用,因这些寄存器的功能已作为专门规定故此称之为特殊功能寄存器SFR-11个SFR有位寻址作用,而且要说明低128单元是单片机的真正RAM存储器。
表2-5 RAM的组成图
30H~7FH 20H~2FH 18H~1FH 10H~17H 08H~0FH 00H~07H
通用RAM区 位寻址区(00H~7FH) 工作寄存器3区(R7~R0) 工作寄存器2区(R7~R0) 工作寄存器1区(R7~R0) 工作寄存器0区 (R7~R0) 低128单元是单片机的真正RAM存储器,按其用途划分为三个区域: ⒈通用寄存器区
通用寄存器为CPU提供了就近数据存储的便利,有利于提高单片机的运算速度。此外,使用通用存储器还能提高程序编制的灵活性,因此在单片机的应用编程中应充分利用这些寄存器,以简化程序设计,提高程序运行速度。 ⒉位寻址区
内部RAM的20H~2FH单元,即可作为一般RAM单元使用,进行字节操作,也可以对单元中每一位进行位操作,因此把该区称之为位寻址区。 ⒊工作寄存区 用户存储数据的。
第三章硬件设计 3.1 单片机的最小系统 52单片机的最小系统电路图: 图3-1 单片机的最小系统图 说明: ①复位电路:由电容串联电阻构成,由图并结合电容电压不能突变的性质,可以知道,当系统一上电,RST脚将会出现高电平, 第三章硬件设计 3.1 单片机的最小系统 52单片机的最小系统电路图: 图3-1 单片机的最小系统图 说明:
①复位电路:由电容串联电阻构成,由图并结合“电容电压不能突变”的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定。典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.一般教科书推荐C 取10,R取8.2K。当然也有其他取法的,原则就要让RC组合可以在RST脚上产生不少于2个机周期的高电平; ②复位输入高电平有效,当振荡器工作是,RST引脚出现两个机器周期以上的高电平,使单片机复位。此电路除具有上电复位功能外,若要复位只需按“RST”键,此电源Vcc经电阻分压,在RST端产生一个复位高电平;
③晶振电路:典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的方波便于12分频,方便定时操作);
④单片机:一片AT89S51/52或其他51系列兼容单片机;
注意:对于31脚(EA/Vpp),当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行; ⑤电源部分:接+5伏特的电压。 3.2 数码管显示电路
LED显示器,实现七段数码管的显示三位十六进制数。来进行倒计时,即来限制抢答的时间。 其中数码管的显示可以分为两种:静态显示和动态显示。静态显示的段选位和位选位均单独连接,因此占用的I/O接口多,无法扩展多个数码管,在这种采用这种方式,必须要给LED恒定的电压,要求电压一直保持,所以一般在LED和单片机之间加锁存器,这种显示方式亮度高,编程较简单,结构清晰,管理也较简单,占用的CPU时间少。② 动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划\"a,b,c,d,e,f,g,dp\"的同名端连在一起,另外为每个数码管的公共端COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
从电路上,按数码管的接法不同又分为共阴和共阳两种。图1-1 是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。其数码管的外形如下图所示: 图3-2 数码管的共阴和共阳极接法 3.3 按键控制电路
在一些按键控制电路中,人机接口通常是LED显示器和小型按键。常见的工作方式有两种:一是直接使用系统中的CPU对显示器进行动态显示和键盘检测;二是专用的显示、键盘芯片。但这两种方式存在着不能及时响应、价格较高等缺点。介绍了一种性价比高的显示/键盘电路的结构及工作原理。以ATMEL89C51系列单片机为核心构成的显示/键盘电路,他具有功能强、价格低廉等特点。
按键可直接连接到STC89C52的P1口,这样其电路结构最为简单,工作时可使用中断方式,但使用STC89C52在不用扫描方式时最多只可以有8个按键,此次设计抢答器利用P1.0~P1.3作为输入,由四个按键来控制单片机中的发光二极管即P1.4~P1.7端口,当在P1.0的按键按下则对应的P1.4发光二极管亮,当在P1.1端口的按键按下则对应的P1.5的发光二极管亮;依次如此。 第四章 软件设计 4.1 抢答器流程图
流程图是使用图形表示算法的思路是一种极好的方法,不论采用何种程序设计方法,程序总体结构确定后,一般以程序流程图的形式对其进行描述。总体框图中的各个子模块或各个子任务也应该结合具体的教学模型和算法画出较详细的程序流程图,供后面编写具体程序和阅读程序使用。
流程图是由一些图框和流程线组成的,其中图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。流程图的基本结构为顺序结构,分支结构(又称选择结构),循环结构。为便于识别,绘制流程图的习惯做法是: 方框表示:要执行的处理(Process) 平行四边型表示:代表资料输入(Input)
不规则图形代表资料输出(Output)或报表输出(Print) 菱形表示:决策或判断(例如:If...Then...Else)
图4-1 抢答器主程序流程图
图4-2 抢答器定时器中断流程图
图4-3 外部中断程序图 4.2 主程序
我们组所设计的抢答器的程序采用的是C程序设计,C语言的显著特点是用二进制来编写程序,程序的各个部分除了必要的信息交流外彼此之间相互独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。本次设计的主程序中包括时钟设计程序,定时器中断子程序,LED显示程序以及按键控制子程序,程序设计如下:
#include sbit l3=P2^4; sbit kz=P3^0; unsigned char qiangdanum=0x3f; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char ge=0,shi=0; unsigned int num=0,time=0; void display(); /*显示函数*/ void delay(unsigned int); main() { TMOD=0X01; /*采用方式一,即十六位计数器*/ TH0=(65536-50000)/256; /*设置初始值*/ TL0=(65536-50000)%256; IT0=0; EA=1;ET0=1; /*开启总中断源*/ EX0=1; /*启动外部中断0*/ {while(1) {display(); if(kz==0) TR0=1; /*开启定时器0中断*/ if(num==20) { num=0; time++; if(time==60) /*60秒的计时*/ time=0; } } } } void exter0() interrupt 0 /*外部中断程序*/ {EA=0;l0=0; if(k0==0) /*开关0按下*/ {d0=0;qiangdanum=1;B0=1; } /* 1号选手抢答成功,数码管显示1,蜂鸣器响,第1个二极管亮*/ if(k1==0) /*开关1按下*/ {d1=0;qiangdanum=2;B0=1; } /* 2号选手抢答成功,数码管显示2,蜂鸣器响,第2个二极管亮*/ if(k2==0) /*开关2按下*/ {d2=0;qiangdanum=3;B0=1; } /* 3号选手抢答成功,数码管显示3,蜂鸣器响,第3个二极管亮*/ if(k3==0) /*开关3按下*/ {d3=0;qiangdanum=4;B0=1; } /* 4号选手抢答成功,数码管显示4,蜂鸣器响,第4个二极管亮*/ } void time0() interrupt 1 {num++; TH0=(65536-50000)/256; TL0=(65536-50000)%256; } /*1秒定时函数*/ void delay(unsigned int z) {unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /*延迟函数*/ void display(void) {shi=time/10; ge=time%10; P2=0xef; P0=table[ge]; delay(5); P2=0xf7; P0=table[shi]; delay(5); P2=0xFE; P0=table[qiangdanum]; delay(5); } /*显示函数:来显示0-60的计数*/ 4.3 中断程序 4.3.1 什么是中断 中断是指由于某种随机事件的发生,计算机暂停现行的程序的运行,转去执行另一个程序,以处理发生的事件,处理完毕后又自动返回原来的程序继续运行。 有五种中断源:外部中断0、外部中断1、定时器中断0、定时器中断1、串行中断。它们的描述如下图所示: 表4-4 五种中断源的表示 中断源符号 INT0 名称 终端引起的原因 中断矢量地址 外部中断0 由P3.2低电平或下降0003H 沿信号 定时/计数器0回零溢出P3.4 由P3.3低电平或下降000BH 沿信号 0013H T0 定时器中断0 INT1 外部中断1 T1 定时器中断1 定时/计数器1回零溢出P3.5 001BH TI/RI 串行中断 串行口接收或发送完0023H 帧数据引起的中断 中断源符号名称终端引起的原因中断矢量地址 INT0外部中断0由P3.2低电平或下降沿信号0003H T0定时器中断0定时/计数器0回零溢出P3.40013H INT1外部中断1由P3.3低电平或下降沿信号000BH T1定时器中断1定时/计数器1回零溢出P3.5001BH TI/RI串行中断串行口接收或发送完帧数据引起的中断0023H 4.3.2 中断所用到的寄存器 介绍定时器/计数器中所介绍的寄存器: (1)定时器/计数器控制寄存器TCON TCON的作用是控制定时器的启动停止,标志定时器的溢出和中断情况; (2)中断允许控制寄存器IE 对中断源的开放或屏蔽是由中断寄存器IE控制的,地址为0A8H,即可以按字节寻址,也可以按位寻址。当单片机复位时,IE被清零。 (3)串行控制寄存器SCON 定时/计数器的控制方法:在启动定时/计数器工作之前CPU必须将一些命令(称为控制字)写入定时/计数器中,这个过程称为定时/计数的初始化。(定时/计数器的初始化通过定时/计数器的方式寄存器TMOD和控制寄存器TCON来完成。 ①定时/计数器方式寄存器TMOD GATEC/TM1M0GATEC/TM1M0 GATE CM1 M0 /T GACM1 M0 TE /T 定时器1 定时器0 MM工作功能说明 1 0 方式 0 0 方式0 0 1 方式1 1 0 方式2 1 1 方式3 表4-5 选择定时方式表 M1M0工作方式功能说明 00方式013位计数器 01方式116位计数器 10方式2自动再装入8位计数器 11方式3定时器0:分成两个8位计数器;定时器1:停止计数 ②中断程序的编写的步骤: (1)根据要求设置IE(中断允许寄存器)的对应位EA(EA-总中断允许位 EA=1开放所有的中断;,某个中断源还有相应的中断允许位 EA=0禁止所有的中断) ①、当=1时:允许相应中断源的中断; ②、当=0时:禁止相应中断源的中断; (2)INT0、INT1设定触发方式IT0(外部中断触发方式控制位)当为0时:低电平触发;当为1时:下降沿触发; (3)返回值是Void中断函数名() interrupt() 4.3.2 为什么采用中断控制方式 CPU与外部设备的数据传送方式: (1)无条件传送方式 CPU总认为外设处于准备好的状态,外设比较简单 (2)程序查询传送方式 外设有一个状态(状态存储在寄存器内) 缺点:CPU工作效率低,CPU处于等待的状态,为解决此缺点便出现了第三种传送方式 (3)中断传送方式 中断是指由于某种随机事件的发生,计算机暂停现行的程序,转去执行另一程序以处理发生的 事件,处理完毕后又自动返回原来的程序继续运行。 优点: (1)实现分时操作 CPU分为多个I/O设备服务,提高计算机的利用率(提前安排好的函数而中断不同); (2)实时响应 CPU能够及时处理应用系统的随机事件,系统的实时性大大增强; (3)可靠性高 13位计数器 16位计数器 自动再装入8位计数器 定时器0:分成两个8位计数器;定时器1:停止计数 CPU具有处理设备故障及掉电等突发性事件的能力,从而使系统的可靠性提高。 定时器的初始化 (1)确定工作方式-对TMOD赋值; (2)设置初始值-直接将初值写入THO,TLO; (3)开启定时器的中断-{ETO=1 EA=1}; (4)启动定时器-将TR0或TRI置“1”。 单片机抢答器设计与实现(4) 第五章 系统的仿真 5.1 proteus软件的介绍及使用 5.1.1 什么是Proteus软件 Proteus软件是Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS 第五章 系统的仿真 5.1 proteus软件的介绍及使用 5.1.1 什么是Proteus软件 Proteus软件是Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如按键、LED、数码管等等。通过Proteus仿真软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。 5.1.2 怎样操作Proteus仿真软件 在进行下面的操作前,我先说明一点:我的Proteus版本是7.1,如果你使用的是6.9以前的版本,可能你发现在鼠标操作上会略有不同。这主要表现在6.9以前的版本鼠标左右键的作用与一般软件刚好相反,而7.0以后已经完全改过。首先我们把压缩文件解压到D盘,然后找到ISIS Manage找到Find key 然后再安装即可使用,双击打开桌面是上的那个软件即可使用。 下面我们首先来熟悉一下Proteus的界面。Proteus是一个标准的Windows窗口程序,和大多数程序一样,没有太大区别,其启动界面如下图所示: 图5-1 proteus 启动界面图 如图中所示,区域①为菜单及工具栏,区域②为预览区,区域③为元器件浏览区,区域④为编辑窗口,区域⑤为对象拾取区,区域⑥为元器件调整工具栏,区域⑦为运行工具条。 下面我们就以建立一个和我们在Keil简介中所讲的工程项目相配套的Proteus工程为例来详细讲述Proteus的操作方法以及注意事项。 首先点击启动界面区域③中的“P”按钮(Pick Devices,拾取元器件)来打开“Pick Devices”(拾取元器件)对话框从元件库中拾取所需的元器件。对话框如下图所示: 图5-2 用proteus软件查找元器件 在对话框中的“Keywords”里面输入我们要检索的元器件的关键词,比如我们要选择项目中使用的AT89C51,就可以直接输入。输入以后我们能够在中间的“Results”结果栏里面看到我们搜索的元器件的结果。在对话框的右侧,我们还能够看到我们选择的元器件的仿真模型、引脚以及PCB参数。 搜索到所需的元器件以后,我们可以双击元器件名来将相应的元器件加入到我们的文档中,那么接着我们还可以用相同的方法来搜索并加入其他的元器件。当我们已经将所需的元器件全部加入到文档中时,我们可以点击“OK”按钮来完成元器件的添加。 添加好元器件以后,下面我们所需要做的就是将元器件按照我们的需要连接成电路。首先在元器件浏览区中点击我们需要添加到文档中的元器件,这时我们就可以在浏览区看到我们所选择的元器件的形状与方向,如果其方向不符合你的要求,你可以通过点击元器件调整工具栏中的工具来任意进行调整,调整完成之后在文档中单击并选定好需要放置的位置即可。接着按相同的操作即可完成所有元器件的布置,接下来是连线。事实上Proteus的自动布线功能是如此的完美以至于我们在做布线时从来都不会觉得这是一项任务,而通常像是在享受布线的乐趣。布线时我们只需要单击选择起点,然后在需要转弯的地方单击一下,按照你所需走线的方向移动鼠标到线的终点单击即可。本例我们布线的结果如下图所示(仿真我们在上面的Keil操作介绍中的简单例子)。 图5-3 发光二极管发光原理图 因为该工程十分简单,我们没有必要加上复位电路,所以这点在图中予以忽略,请大家注意。除此以外,还会发现,单片机系统没有晶振,这一点你需注意。事实上在Proteus中单片机的晶振可以省略,系统默认为12MHz,而且很多时候,当然也为了方便,我们只需要取默认值就可以了。 Proteus中单片机芯片默认已经添加电源与地,所以我们可以省略。然后在添加电源与地以前,我们先来看一下上面第一个图中区域⑤的对象拾取区,在这里只说明本文中可能会用得到的以及比较重要的工具。 l:(Selection Mode)。选择模式,通常情况下我们都需要选中它,比如布局时和布线时。 l :(Component Mode)。组件模式,点击该按钮,能够显示出区域③中的元器件,以便我们选择。 l :线路标签模式,选中它并单击文档区电路连线能够为连线添加标签。经常与总线配合使用。 l :文本模式,选中它能够为文档添加文本。 l :总线模式,选中它能够在电路中画总线。关于总线画法的详细步骤与注意事项我们在下面会进行专门讲解。 l :终端模式,选中它能够为电路添加各种终端,比如输入、输出、电源、地等等。 l :虚拟仪器模式,选中它我们能够在区域③中看到很多虚拟仪器,比如示波器、电压表、电流表等等。关于它们的用法我们会在后面的相应章节中详细讲述。 添加电源:首先点击,选择终端模式,然后在元器件浏览区中点击POWER(电源)来选中电源,通过区域⑥中的元器件调整工具进行适当的调整,然后就可以在文档区中单击放置电源了。 连接好电路图以后我们还需要做一些修改,由上5-1-3图我们可以看出,图中的R1电阻值为10k,这个电阻作为限流电阻显然太大,将使发光二极管D1亮度很低或者根本就不亮,影响我们的仿真结果。故要进 行修改,修改方法:首先我们双击电阻图标,这时软件将弹出“Edit Component”对话框(见下图所示的对话框),对话框中的“Component Referer”是组件标签之意,可以随便填写,也可以取默认,但要注意在同一文档中不能有两个组件标签相同;“Resistance”就是电阻值了,我们可以在其后的框中根据需要填入相应的电阻值。填写时需注意其格式,如果直接填写数字,则单位默认为Ω;如果在数字后面加上K或者k,则表示kΩ之意。这里我们填入220,表示220Ω。 修改好各组件属性以后就要将程序(HEX文件)载入单片机了。首先双击单片机图标,系统同样会弹出“Edit Component”对话框,如下图。在这个对话框中我们点击“Program files”框右侧的,来打开选择程序代码窗口,选中相应的HEX文件后返回,这时,按钮左侧的框中就填入了相应的HEX文件,我们点击对话框的“OK”按钮,回到文档,程序文件就添加完毕了。 图5-4 装载程序 装载好程序,我们就可以进行仿真了。首先来熟悉一下上面第一个图中区域⑦的运行工具条。因为比较简单,我们只作一下介绍。 工具条从左到右依次是“Play”、“Step”、“Pause”、“Stop”按钮,即运行、步进、暂停、停止。下面我们点击“Play”按钮来仿真运行,效果如下图所示,可以看到系统按照我们的程序在运行着,而且我们还能看到其高低电平的实时变化。如果我们已经观察到了结果就可以点击“Stop”来停止运行。 5.2 抢答器protenus软件的仿真 绘制抢答器的软件仿真图步骤分一下四步: (1)查找所需要的元器件; (2)根据电路图进行连线; (3)是用来写线所对应的坐标,即下图所示的P1.1等坐标; (4)下载所写完的C程序即可以仿真。 通过以上步骤,来实现抢答器设计的仿真实现,仿真如下图所示: 图5-5 抢答器的proteus仿真图 第六章 调试功能说明 6.1 系统的调试 系统调试包括硬件调试和软件调试,而且两者是密不可分的。我们设计好的硬件电路和软件程序,只有经过联合调试,才能验证其正确性;软硬件的配人情况以及是否达到设计任务的要求,也只有经过调试,才能发现问题并加以解决、完善,最终开发成实用产品。 硬件调试分单元电路调试和联机调试,单元电路试验在硬件电路设计时已经进行,这里的调试只是将其制成印刷电路板后试验电路是否正确,并排除一些加工工艺性错误(如错线、开路、短路等)。这种调试可单独模拟进行,也可通过开发装置由软件配合进行,硬件联机调试则必须在系统软件的配合下进行。 软件调试一般包括分块调试和联机调试两个阶段。程序的分块调试一般在单片机开发装置上进行,可根据所调程序功能块的入口参量初值编制一个特殊的程序段,并连同被调程序功能块一起在开发装置上运行;也可配合对应硬件电路单独运行某程序功能块,然后检查是否正确,如果执行结果与预想的不一致,可以通过单步运行或设置断点的方法,查出原因并加以改正,直到运行结果正确为止。这时该 程序功能块已调试完毕,可去掉附加程序段。其它程序功能块可按此法进行调试。程序联机调试就是将已调试好的各程序功能块按总体结构联成一个完整程序,在所研制的硬件电路上运行。从而试验程序整体运行的完整性、正确性和与硬件电路的配合情况。在联调中可能会有某些支路上的程序、功能块因受条件制约而得不到相应的输入参数,这时,调试人员应创造条件进行模拟调试。在联调中如发现硬件问题也应及时修正,直到单片机系统的软件、硬件全部调试成功为止。系统调试完成后,还要进行一段时间的试运行,从而检验系统的稳定性和抗干扰能力,验证系统功能是否达到设计要求,是否达到预期的效果。 6.2 软件调试问题及解决 首先对所用软件及使用方法介绍如下: 1、Keil是德国开发的一个51单片机开发软件平台,最开始只是一个支持C语言和汇编语言的编译器软件。后来随着开发人员的不断努力以及版本的不断升级,使它已经成为了一个重要的单片机开发平台,不过 KEIL的界面并不是非常复杂,操作也不是非常困难,很多工程师的开发的优秀程序都是在KEIL的平台上编写出来的。可以说它是一个比较重要的软件,熟悉他的人很多很多,用户群极为庞大,要远远超过伟福等厂家软件用户群,操作有不懂的地方只要找相关的书看看,到相关的单片机技术论坛问问,很快就可以掌握它的基本使用了。 2、 总调,即应用软件的链接调试,程序固化,软、硬件结合的应用系统 软硬件联合仿真系统由一个硬件执行环境和一个软件执行环境组成,通常软件环境和硬件环境都有自己的除错和控制界面,Keil与Proteus的整合调试可以实现系统的总调,在该系统中,Keil作为软件调试界面,Proteus作为硬件仿真和调试界面,下面说一下如何在keil中调用proteus进行MCU外围器件的仿真。 (1)安装keil 与 proteus。 (2)把安装proteus\\ MODELS目录下 VDM51.dll文件复制到Keil安装目录的 \\C51\\BIN目录中。 (3)修改keil安装目录下 Tools.ini文件,在C51字段加入TDRV5=BIN\\VDM51.DLL (\"Proteus VSM Monitor-51 Driver\"),保存。 (注意:不一定要用TDRV5,根据原来字段选用一个不重复的数值就可以了。引号内的名字随意) 3、打开proteus,画出相应电路,在proteus的debug菜单中选中use remote debug monitor 4、在keil中编写C语言程序 5、进入KEIL的project菜单option for target '工程名'。在DEBUG选项中右栏上部的下拉菜单选中 Proteus VSM Monitor-51 Driver。 6、在keil中进行debug吧,同时在proteus中查看直观的结果(如LCD显示…)这样就可以像使用仿真器一样调。 问题:有时候在自己创建的元器件的管脚上无法实现连线。 回答:应该是管脚的间距太小了。因为在ISIS中,每个元器件的管脚都要占据一块区域(就像自己的保护区一样,不容别人随意侵犯),该区域会排斥外部的走线。解决问题的方法是在走线的同时按住 “CTRL”键,直到走线绕过狭窄的保护区。当然最根本的办法是重新编辑元器件,把其管脚间距调大一些。 主持人按键来控制总开关,主持人按下开关那么选手开始抢答,此时数码管开始0-60计数,并且选手们必须在规定的时间内进行抢答,若过了60秒还没抢答那么抢答失效,选手们若有一个在规定的时间内抢答成功则其余的选手不可以再抢答,即该选手抢答成功。 6.3 焊接的问题及解决 一般来说,造成硬件问题的首要问题就是焊接了,也就是说焊接的好与坏直接响产品的正常运行。造成焊接质量不高的常见原因是:①焊锡用量过多,形成焊点的锡堆积;焊锡过少,不足以包裹焊点。②冷焊。焊接时烙铁温度过低或加热时间不足,焊锡未完全熔化、浸润、焊锡表面不光亮(不光滑),有细小裂纹(如同豆腐渣一样!)。③夹松香焊接,焊锡与元器件或印刷板之间夹杂着一层松香,造成电连接不良。若夹杂加热不足的松香,则焊点下有一层黄褐色松香膜;若加热温度太高,则焊点下有一层碳化松香的黑色膜。对于有加热不足的松香膜的情况,可以用烙铁进行补焊。对于已形成黑膜的,则要\"吃\"净焊锡,清洁被焊元器件或印刷板表面,重新进行焊接才行。④焊锡连桥。指焊锡量过多,造成元器件的焊点之间短路。这在对超小元器件及细小印刷电路板进行焊接时要尤为注意。⑤焊剂过量,焊点明围松香残渣很多。当少量松香残留时,可以用电烙铁再轻轻加热一下,让松香挥发掉,也可以用蘸有无水酒精的棉球,擦去多余的松香或焊剂。⑥焊点表面的焊锡形成尖锐的突尖。这多是由于加热温度不足或焊剂过少,以及烙铁离开焊点时角度不当浩成的内。 最小系统的电路不工作,首先应该确认电源电压是否正常。用电压表测量接地引脚跟电源引脚之间的电压,看是否符合电源电压,常用的是5V左右。接下来就是检测复位引脚的电压是否正常,EA引脚的电压要正常为5V左右。 单片机抢答器设计与实现(5) 6.4 单片机的通信 (1)RS232C是一种标准接口,D型插座,采用25芯引脚或9芯引脚的连线器,我们 一般采用9芯引脚的。信号线的引脚和功能如下: TXD(第2脚):发送数据线,输出。发送数据到MODEN。 RXD(第3脚):接 6.4 单片机的通信 (1)RS232C是一种标准接口,D型插座,采用25芯引脚或9芯引脚的连线器,我们一般采用9芯引脚的。信号线的引脚和功能如下: TXD(第2脚):发送数据线,输出。发送数据到MODEN。 RXD(第3脚):接受数据线,输入。接收数据到计算机或终端。 RTS(第7脚):请求发送,输出。计算机通过此引脚通知MODEN,要求发送数据。 CTS(第8脚):允许发送,输入。发出作为对的回答,计算机才可以进行发送数据。 DSR(第6脚):数据装置就绪(即MODEN准备好),输入。表示调制解调器可以使用,该信号有时直接接到电源上,这样当设备连通shir时即有效。 CD(第1脚):载波检测(接收线信号测定器),输入。表示MODEN已与电话线路连接好。 RI(第9脚):振铃指示,输入。MODEN若接到交换台送来的振铃呼叫信号,就发出该信号来通知计算机或终端。 DTR(第4脚):数据终端就绪,输出。计算机收到RI信号以后,就发出信号到MODEN作为回答,以控制它的转换设备,建立通信链路。 GND(第5脚):接地,信号地。 规定:对TXD和RXD上的数据信号“1”的逻辑电平在-3V---15V之间,“0”的逻辑电平在+3V--+15V之间;对于DTR、DSR、RTS、CTS、CD等控制信号,-3V---25V表示信号无效,即断开,+3V--+25V表示信号有效,即接通。 (2)MAX232接口电路 MAX232芯片是MAXIM公司生产的具有两路接收器和驱动器IC芯片,其内部有一个电源电压变化器,可以将输入+5V的电压变换成RS-232C输出电平所需的+12V、-12V电压。在其内部同时也完成TTL信号电平和RS-232C信号电平的转换。所以,采用此芯片实现接口电路只需要单一的+5V电源就可以了。 MAX232芯片的引脚图如6-4所示,其中管脚1到6用于电源电压的转换,值要在外部接入相应的电解电容即可;管脚7到10和管脚11到14构成两组TTL信号电平与RS232C信号电平的转换电路,对应管脚可直接与单片机串行口的TTL电平引脚和PC机的RS232C电平引脚相连。 结 论 经过近一个月的努力,在老师和同学的商讨和帮助下,我较好的完成了设计任务,通过此次课程设计,我重新认识到了自学的重要性,以及学以致用的道理。我在图书馆查阅了大量的资料,同时也认识到了图书馆的重要作用。通过此次的抢答器的设计,让我重新拾起了以前所学习的电子知识,及我觉得此次设计让我更加巩固了所学的知识并在设计的过程中学会了与时俱进,克服了编程的枯燥感,让我受益匪浅。在学习单片机这门课程的时候,我们应该好好你的记笔记,课下好好的做练习题才能把C程序设计灵活的运用到单片机程序的设计上,在单片机这门课程的学习上,我们还应该知道一种常用的仿真软件proteus软件,可以让你我们更为清晰的掌握STC89C51/52系列的实际应用上的设计。在今后的学习过程中,应该多到图书馆看一些专业方面的书籍,以丰富自己的知识。也使我加深了对单片机及接口技术的理解和应用,由于知识水平的局限,设计中可能会存在着一些不足,我真诚的接受老师和同学的批评和指正。 工作展望 经过一个月的毕业设计,我深刻明白了理论知识与社会实践相结合的道理,也得到了以前书本知识所不曾得到的知识,更加明白了如今信息时代电子技能知识的重要性。 本设计增强了我对单片机、C语言等技能方面的认识,掌握了分析、处理问题的方法、逻辑思维能力等基本技能的训练,具有了一定程度的实际工作能力。 面对如此激烈的市场竞争体系,只有努力掌握好单片机知识方可在竞争中立于不败之地,我对从事电子设计、C语言编程和研究产生了浓厚的兴趣。希望自己以后能通过自己的不懈努力取得更大的进步。 从上述单片机计术的发展现状与趋势来看,可以认为单片机又一次进入了蓬勃发展的新高潮。而这一次发展高潮涉及的范围更广,技术更新更难,影响力和影响面也更宽,势必对整个信息产业产生更加深远的影响,也将对下一世纪的社会经济发展产生巨大影响,值得密切注视和研究。 参考文献、资料索引 文献、资料名称编著者出版单位 北京:人民邮电出版社 张立科《单片机典型模块设计实例导航》 2004年 北京:高等教育出版社李金利《单片机原理及应用技术》 2004年 西安电子科技大学出版社 董晓红 2004年 北京:电子工业出版社《单片机原理及接口技术》 2007年 北京:机械工业出版社 王振红《数字电路设计与应用实践教程》 2003年 清华大学出版社张靖武《单片机系统的proteus设计及仿真》 2003年 清华大学出版社潭浩强 《C程序设计》付晓光 2004年 高等教育出版社《单片机原理与实用技术》 邹寿彬 2005年 高等教育出版社 《电子技术基础》 2003年 高等教育出版社徐熙文《电路基础》 2002年 高等教育出版社 杨志忠《数字电子技术》 2005年 高等教育出版社胡宴如《模拟电子技术》 2006年 石生《电路基本分析》 高等教育出版社 2003年郭培源《电子电路及电子器件》 致 谢 首先衷心地感谢我的导师***。本文从选题到完成,从理论上的探讨到实际问题的解决,无处不饱含着***导师的心血。***导师的悉心指导和建议给了我极大的帮助和支持,使我受益匪浅,在此论文完成之际,谨向***导师致以深深的谢意和崇高的敬意。 因篇幅问题不能全部显示,请点此查看更多更全内容