交通信号灯模拟控制系统的设计8051单片机设计毕业论文.doc_第1页
交通信号灯模拟控制系统的设计8051单片机设计毕业论文.doc_第2页
交通信号灯模拟控制系统的设计8051单片机设计毕业论文.doc_第3页
交通信号灯模拟控制系统的设计8051单片机设计毕业论文.doc_第4页
交通信号灯模拟控制系统的设计8051单片机设计毕业论文.doc_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

湖南科技经贸职业学院毕业论文 毕业论文用8051单片机设计 一交通信号灯模拟控制系统目 录摘要. 8前言. 91AT89C51单片机的性能参数和工作原理.101.1AT89C51单片机的简要介绍.101.1.1 8051单片机的基本结构.101.1.2 51单片机管脚说明.121.1.3 各端口工作原理讲解.141.1.4 51单片机的时钟及复位. 182.1定时器、计数器的基本结构及工作原理. 192基于Keil单片机编译软件的C语言编程以及使用该软件开发单片机程序的方法. 242.1 基于Keil单片机编译软件的C语言编程. 242.1.1 Keil单片机编译软件的简单介绍. 242.1.2 Keil单片机编译软件的使用. 242.1.3 基于Keil单片机编译软件的C语言编程简介. 273交通信号灯模拟控制系统的工作原理、程序流程和硬件结构介绍. 293.1交通信号灯模拟控制系统的工作原理的讲解. 293.2交通信号灯模拟控制系统的程序流程介绍.303.3交通信号灯模拟控制系统的硬件结构介绍. 324交通信号灯模拟控制系统的工作测试仿真介绍. 334.1仿真软件Proteus 6简介. 334.2交通信号灯模拟控制系统的工作测试仿真. 344.2.1 控制系统程序分析. 345 总体结论. 41致谢. 42参考文献. 43基于AT89C51单片机的交通信号灯模拟控制系统设计及仿真摘 要:设计一种基于AT89C51超低功耗单片机的交通信号灯模拟控制系统,详细阐明了交通信号灯模拟控制系统的工作原理,实现了一般交通信号灯控制系统的主要功能及要求,具有实用性。该系统充分利用了AT89C51单片机的特点,使用现今单片机广泛采用的C语言编制了系统程序,并利用Keil uVision3软件进行编译运行,最终通过Proteus完成了模拟控制系统的仿真。关键词:AT89C51单片机;交通信号灯模拟控制系统;Keil软件;C语言;Proteus软件;系统仿真前 言本文以一般情况下的交叉十字路口的交通情况为背景,设计并介绍一种通用性很强的交通信号灯模拟控制系统,最终完成系统的仿真达到了设计目标。系统的核心是AT89C51超低功耗单片机,利用Keil软件进行控制程序的开发来对交通信号灯模拟控制系统的模拟及控制。文中详细阐述了AT89C51单片机的性能参数和工作原理,并介绍了基于Keil单片机编译软件的C语言编程以及使用该软件开发单片机程序的方法,说明了设计的交通信号灯模拟控制系统的工作原理、程序流程和硬件结构等相关技术,指出了该系统的特点。另外,文中还简单介绍了电子仿真软件Proteus 6的特点及使用方法。 1AT89C51单片机的性能参数和工作原理1.1AT89C51单片机的简要介绍微控制器是交通信号灯模拟控制系统的核心,它完成对模拟信号的输入接受处理和控制信号的输出控制外部设备的功能。AT89系列单片机是通用性强、功耗小、使用广泛、性能优良的微处理芯片。考虑本设计的具体设计要求,选择AT89C51单片机作为控制核心,它是高性能8位微处理芯片,兼容MCS-51,具有4KB的FLASH存储空间,32个全双工可编程I/O口,两个16位的定时器/计数器以及6个中断源等特点,大大的简化了系统设计。1.1.1 8051单片机的基本结构在介绍单片机的内部结构之前,我们先了解下我们现在正在使用的计算机五个组成部分:运算器:用于实现算术和逻辑运算。计算机的运算和处理都在这里进行;控制器:是计算机的控制指挥部件,使计算机各部份能自动协调的工作;存储器:用于存放程序和数据;(又分为内存储器和外存储器,内存储器就如我们电脑的硬盘,外存储器就如我们的U盘)输入设备:用于将程序和数据输入到计算机(例如我们电脑的键盘、扫描仪);输出设备:输出设备用于把计算机数据计算或加工的结果以用户需要的形式显示或保存(例如我们的打印机)。注:1、通常把运算器和控制器合在一起称为中央处理器(Central Processing Unit),简称CPU。2、通常把外存储器、输入设备和输出设备合在一起称之为计算机的外部设备。典型系列单片机是由下图所示的器件组成的:1 中央处理器(CPU):刚刚讲过,需要提醒的是MCS-51的CPU能处理8位二进制数或代码;2 内部数据存储器(RAM):8051芯片共有256个RAM单元,其中后128单元被专用寄存器占用(稍后我们详解),能作为寄存器供用户使用的只是前128单元,用于存放可读写的数据。因此通常所说的内部数据存储器就是指前128单元,简称内部RAM。地址范围为00HFFH(256B)。是一个多用多功能数据存储器,有数据存储、通用工作寄存器、堆栈、位地址等空间。3 内部程序存储器(ROM):在前面也已讲过,8051内部有4KB的ROM,用于存放程序、原始数据或表格。因此称之为程序存储器,简称内部RAM。地址范围为0000HFFFFH(64KB)。4 定时器/计数器8051共有2个16位的定时器/计数器,以实现定时或计数功能,并以其定时或计数结果对计算机进行控制。定时时靠内部分频时钟频率计数实现,做计数器时,对P3.4(T0)或P3.5(T1)端口的低电平脉冲计数。5 并行I/O口MCS-51共有4个8位的I/O口(P0、P1、P2、P3)以实现数据的输入输出。6 串行口MCS-51有一个全双工的串行口,以实现单片机和其它设备之间的串行数据传送。该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为移位器使用。RXD( P3.0)脚为接收端口,TXD(P3.1)脚为发送端口。7 中断控制系统MCS-51单片机的中断功能较强,以满足不同控制应用的需要。共有5个中断源,即外中断2个,定时中断2个,串行中断1个,全部中断分为高级和低级共二个优先级别。8 时钟电路MCS-51芯片的内部有时钟电路,但石英晶体和微调电容需外接。时钟电路为单片机产生时钟脉冲序列。系统允许的晶振频率为12MHZ。1.1.2 51单片机管脚说明MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照-单片机引脚图:l P0.0P0.7 P0口8位双向口线(在引脚的3932号端子)。l P1.0P1.7 P1口8位双向口线(在引脚的18号端子)。l P2.0P2.7 P2口8位双向口线(在引脚的2128号端子)。l P3.0P3.7 P2口8位双向口线(在引脚的1017号端子)。这4个I/O口具有不完全相同的功能,需要不同等待。P0口有三个功能:1、外部扩展存储器时,当做数据总线(如图1中的D0D7为数据总线接口)2、外部扩展存储器时,当作地址总线(如图1中的A0A7为地址总线接口)3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。P1口只做I/O口使用:其内部有上拉电阻。P2口有两个功能:1、扩展外部存储器时,当作地址总线使用2、做一般I/O口使用,其内部有上拉电阻;P3口有两个功能:除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的,即:编程脉冲:30脚(ALE/PROG)编程电压(25V):31脚(EA/Vpp)。ALE 地址锁存控制信号:在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。参见图2(8051扩展2KB EEPROM电路,在图中ALE与4LS373锁存器的G相连接,当CPU对外部进行存取时,用以锁住地址的低位地址,即P0口输出。由于ALE是以晶振六分之一的固定频率输出的正脉冲,当系统中未使用外部存储器时,ALE脚也会有六分之一的固定频率输出,因此可作为外部时钟或外部定时脉冲使用PSEN 外部程序存储器读选通信号:在读外部ROM时PSEN低电平有效,以实现外部ROM单元的读操作。1、内部ROM读取时,PSEN不动作;2、外部ROM读取时,在每个机器周期会动作两次;3、外部RAM读取时,两个PSEN脉冲被跳过不会输出;4、外接ROM时,与ROM的OE脚相接。EA/VPP 访问和序存储器控制信号1、接高电平时:CPU读取内部程序存储器(ROM)扩展外部ROM:当读取内部程序存储器超过0FFFH(8051)1FFFH(8052)时自动读取外部ROM。2、接低电平时:CPU读取外部程序存储器(ROM)。3、8751烧写内部EPROM时,利用此脚输入21V的烧写电压。RST 复位信号:当输入的信号连续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作。XTAL1和XTAL2 外接晶振引脚。当使用芯片内部时钟时,此二引脚用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。VCC:电源+5V输入VSS:GND接地。1.1.3 各端口工作原理讲解P0端口:总线IO端口,双向,三态,数据地址分时复用,该端口除用于数据的输入输出外,在8031单片机外接程序存储器时,还分时地输出输入地址指令。由Po端口输出的信号无锁存,输入的信息有读端口引脚和读端口锁存器之分。P0端口8位中的一位结构图见下图:由上图可见,P0端口由锁存器、输入缓冲器、切换开关与相应控制电路、场效应管驱动电路构成。在输出状态下,当切换开关MUX向下时,从内部总线来的数据经锁存器反相和场效应管T2反相,输出到端口引脚线上。此时,场效应管T1关断,因而这种输出方式应为外接上拉电阻的漏极开路式。当切换开关MUX向上时,一位地址数据信号分时地输出到端口线上。此外,由T1、T2的通断组合,形成高电平、低电平与高阻浮动三态的输出。在输入状态下,从锁存器和从引脚上读来的信号一般是一致的,但也有例外。例如,当从内部总线输出低电平后,锁存器Q0,Q1,场效应管T2开通,端口线呈低电平状态。此时无论端口线上外接的信号是低电乎还是高电平,从引脚读入单片机的信号都是低电平,因而不能正确地读入端口引脚上的信号。又如,当从内部总线输出高电平后,锁存器Q1,Q0,场效应管T2截止。如外接引脚信号为低电平,从引脚上读入的信号就与从锁存器读入的信号不同。为此,8031单片机在对端口P0一P3的输入操作上,有如下约定:为此,8051单片机在对端口P0一P3的输入操作上,有如下约定:凡属于读-修改-写方式的指令,从锁存器读入信号,其它指令则从端口引脚线上读入信号。P1端口:通用I0端口,准双向静态口。输出的信息有锁存,输入有读引脚和读锁存器之分。P1端口的一位结构见下图. 由图可见,P1端口与P0端口的主要差别在于,P1端口用内部上拉电阻R代替了P0端口的场效应管T1,并且输出的信息仅来自内部总线。由内部总线输出的数据经锁存器反相和场效应管反相后,锁存在端口线上,所以,P1端口是具有输出锁存的静态口。由下图可见,要正确地从引脚上读入外部信息,必须先使场效应管关断,以便由外部输入的信息确定引脚的状态。为此,在作引脚读入前,必须先对该端口写入l。具有这种操作特点的输入输出端口,称为准双向IO口。8031单片机的P1、P2、P3都是准双向口。P0端口由于输出有三态功能,输入前,端口线已处于高阻态,无需先写入l后再作读操作。单片机复位后,各个端口已自动地被写入了1,此时,可直接作输入操作。如果在应用端口的过程中,已向P1一P3端口线输出过0,则再要输入时,必须先写1后再读引脚,才能得到正确的信息。此外,随输入指令的不同,H端口也有读锁存器与读引脚之分。Pl端口是803l单片机中唯一仅有的单功能IO端口,并且没有特定的专用功能,输出信号锁存在引脚上,故又称为通用静态口。P2端口:P2端口的一位结构见下图:由图可见,P2端口在片内既有上拉电阻,又有切换开关MUX,所以P2端口在功能上兼有P0端口和P1端口的特点。这主要表现在输出功能上,当切换开关MUX向左时,从内部总线输出的一位数据经反相器和场效应管反相后,输出在端口引脚线上;当MUX向右时,输出的一位地址信号也经反相器和场效应管反相后,输出在端口引脚线上。由于8031单片机必须外接程序存储器才能构成应用电路,而P2端口就是用来周期性地输出从外存中取指令的地址(高8位地址),因此,P2端口的切换开关MUX总是在进行切换,分时地输出从内部总线来的数据和从地址信号线上来的地址。因此P2端口是动态的IO端口。输出数据虽被锁存,但不是稳定地出现在端口线上。其实,这里输出的数据往往也是一种地址,只不过是外部RAM的高8位址。在输入功能方面,P2端口与P0和H端口相同,有读引脚和读锁存器之分,并P2端口也是准双向口。P3端口:双功能静态IO口P3端口的一位结构见下图:由上图可见,P3端口和Pl端口的结构相似,区别仅在于P3端口的各端口线有两种功能选择。当处于第一功能时,第二输出功能线为1,此时,内部总线信号经锁存器和场效应管输入输出,其作用与P1端口作用相同,也是静态准双向IO端口。当处于第二功能时,锁存器输出1,通过第二输出功能线输出特定的内含信号,在输入方面,即可以通过缓冲器读入引脚信号,还可以通过替代输入功能读入片内的特定第二功能信号。由于输出信号锁存并且有双重功能,故P3端口为静态双功能端口。P3口的特殊功能(即第二功能):口线 第二功能 信号名称 P3.0 RXD串行数据接收P3.1TXD串行数据发送P3.2INT0外部中断0申请P3.3INT1外部中断1申请P3.4T0定时器/计数器0计数输入P3.5T1定时器/计数器1计数输入P3.6WR外部RAM写选通P3.7RD外部RAM读选通使P3端品各线处于第二功能的条件是:1串行I/O处于运行状态(RXD,TXD);2打开了处部中断(INT0,INT1);3定时器/计数器处于外部计数状态(T0,T1)4执行读写外部RAM的指令(RD,WR)在应用中,如不设定P3端口各位的第二功能(WR,RD信叼的产生不用设置),则P3端口线自动处于第一功能状态,也就是静态IO端口的工作状态。在更多的场合是根据应用的需要,把几条端口线设置为第二功能,而另外几条端口线处于第一功能运行状态。在这种情况下,不宜对P3端口作字节操作,需采用位操作的形式。1.1.4 51单片机的时钟及复位单片机的时钟信号用来提供单片机片内各种微操作的时间基准,复位操作则使单片机的片内电路初始化,使单片机从一种确定的初态开始运行。时钟电路:8051单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。内部振荡方式的外部电路如下图所示。图中,电容器Col,C02起稳定振荡频率、快速起振的作用,其电容值一般在5-30pF。晶振频率的典型值为12MH2,采用6MHz的情况也比较多。内部振荡方式所得的时钟情号比较稳定,实用电路中使用较多。外部振荡方式是把外部已有的时钟信号引入单片机内。这种方式适宜用来使单片机的时钟与外部信号保持同步。外部振荡方式的外部电路如下图所示。由上图可见,外部振荡信号由XTAL2引入,XTAL1接地。为了提高输入电路的驱劝能力,通常使外部信号经过一个带有上拉电阻的TTL反相门后接入XTAL2。基本时序单位:单片机以晶体振荡器的振荡周期(或外部引入的时钟周期)为最小的时序单位,片内的各种微操作都以此周期为时序基准。振荡频率二分频后形成状态周期或称s周期,所以,1个状态周期包含有2个振荡周期。振荡频率foscl2分频后形成机器周期MC。所以,1个机器周期包含有6个状态周期或12个振荡周期。1个到4个机器周期确定一条指令的执行时间,这个时间就是指令周期。8031单片机指令系统中,各条指令的执行时间都在1个到4个机器周期之间。4种时序单位中,振荡周期和机器周期是单片机内计算其它时间值(例如,波特率、定时器的定时时间等)的基本时序单位。下面是单片机外接晶振频率12MHZ时的各种时序单位的大小:振荡周期1/fosc=1/12MHZ=0.0833us复位电路:当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。 上电复位要求接通电源后,自动实现复位操作。常用的上电复位电路如下图A中左图所示。图中电容C1和电阻R1对电源十5V来说构成微分电路。上电后,保持RST一段高电平时间,由于单片机内的等效电阻的作用,不用图中电阻R1,也能达到上电复位的操作功能,如下图(A)中右图所示。上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。常用的上电或开关复位电路如上图(B)所示。上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。根据实际操作的经验,下面给出这两种复位电路的电容、电阻参考值。上图(A)中:Cl10-30uF,R11kO上图127(B)中:C:1uF,RllkO,R210kO单片机复位后的状态:单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值。2.1定时器、计数器的基本结构及工作原理本设计中应用了定时器0(T0)用于计时,因此这里有必要介绍一下定时器、计数器的基本结构及工作原理。定时器、计数器定时器计数器简称定时器,其作用主要包括产生各种时标间隔、记录外部事件的数量等,是微机中最常用、最基本的部件之一。803l单片机有2个16位的定时器计数器:定时器0(T0)和定时器1(T1)。T0由2个定时寄存器TH0和TL0构成,T1则由TH1和TL1构成,它们都分别映射在特殊功能寄存器中,从而可以通过对特殊功能寄存器中这些寄存器的读写来实现对这两个定时器的操作。作定时器时,每一个机器周期定时寄存器自动加l,所以定时器也可看作是计量机器周期的计数器。由于每个机器周期为12个时钟振荡周期,所以定时的分辨率是时钟振荡频率的112。作计数器时,只要在单片机外部引脚T0(或T1)有从1到0电平的负跳变,计数器就自动加1。计数的最高频率一般为振荡频率的l24。工作方式:T0或T1无论用作定时器或计数器都有4种工作方式:方式0、方式1、方式2和方式3。除方式3外,T0和T1有完全相同的工作状态。下面以T1为例,分述各种工作方式的特点和用法。1、工作方式0:13位方式由TL1的低5位和TH1的8位构成13位计数器(TL1的高3位无效)。工作方式0的结构见下图:图中,CT为定时计数选择:CT0,T1为定时器,定时信号为振荡周期12分频后的脉冲;CTl,T1为计数器,计数信号来自引脚T1的外部信号。定时器T1能否启动工作,还受到了R1、GATE和引脚信号INT1的控制。由图中的逻辑电路可知,当GATE0时,只要TR11就可打开控制门,使定时器工作;当GATE1时,只有TR11且INT11,才可打开控制门。GATE,TR1,CT的状态选择由定时器的控制寄存器TMOD,TCON中相应位状态确定,INT1则是外部引脚上的信号。在一般的应用中,通常使GATE0,从而由TRl的状态控制Tl的开闭:TRl1,打开T1;TRl0,关闭T1。在特殊的应用场合,例如利用定时器测量接于INT1引脚上的外部脉冲高电平的宽度时,可使GATE1,TRl1。当外部脉冲出现上升沿,亦即INT1由0变1电平时,启动T1定时,测量开始;一旦外部脉冲出现下降沿,亦即INT1由l变O时就关闭了T1。定时器启动后,定时或计数脉冲加到TLl的低5位,从预先设置的初值(时间常数)开始不断增1。TL1计满后,向THl进位。当TL1和THl都计满之后,置位T1的定时器回零标志TFl,以此表明定时时间或计数次数已到,以供查询或在打开中断的条件下,可向CPU请求中断。如需进一步定时/计数,需用指令重置时间常数。2、工作方式1:16位方式。与工作方式0基本相同,区别仅在于工作方式1的计数器TL1和TH1组成16位计数器,从而比工作方式0有更宽的定时/计数范围。工作方式1的结构见下图。3、工作方式28位自动装入时间常数方式。由TLl构成8位计数器,THl仅用来存放时间常数。启动T1前,TLl和THl装入相同的时间常数,当TL1计满后,除定时器回零标志TFl置位,具有向CPU请求中断的条件外,THl中的时间常数还会自动地装入TLl,并重新开始定时或计数。所以,工作方式2是一种自动装入时间常数的8位计数器方式。由于这种方式不需要指令重装时间常数,因而操作方便,在允许的条件下,应尽量使用这种工作方式。当然,这种方式的定时计数范围要小于方式0和方式1。工作方式2的结构见下图4、工作方式32个8位方式。工作方式3只适用于定时器0。如果使定时器1为工作方式3,则定时器1将处于关闭状态。当T0为工作方式3时,THo和TL0分成2个独立的8位计数器。其中,TL0既可用作定时器,又可用作计数器,并使用原T0的所有控制位及其定时器回零标志和中断源。TH0只能用作定时器,并使用T1的控制位TRl、回零标志TFl和中断源,见下图。通常情况下,T0不运行于工作方式3,只有在T1处于工作方式2,并不要求中断的条件下才可能使用。这时,T1往往用作串行口波特率发生器(见14),TH0用作定时器,TL0作为定时器或计数器。所以,方式3是为了使单片机有1个独立的定时器计数器、1个定时器以及1个串行口波特率发生器的应用场合而特地提供的。这时,可把定时器l用于工作方式2,把定时器0用于工作方式3。下才可能使用。这时,T1往往用作串行口波特率发生器,TH0用作定时器,TL0作为定时器或计数器。所以,方式3是为了使单片机有1个独立的定时器计数器、1个定时器以及1个串行口波特率发生器的应用场合而特地提供的。这时,可把定时器l用于工作方式2,把定时器0用于工作方式3。控制寄存器定时器计数器T0和T1有2个控制寄存器-TMOD和TCON,它们分别用来设置各个定时器计数器的工作方式,选择定时或计数功能,控制启动运行,以及作为运行状态的标志等。其中,TCON寄存器中另有4位用于中断系统。1、定时器方式控制寄存器TMODTMOD在特殊功能寄存器中,字节地址为89H,无位地址。TMOD的格式如下图年示。由图可见,TMOD的高4位用于T1,低4使用于T0,4种符号的含义如下:GATE:门控制位。其作用见图16。GATE和软件控制位TR、外部引脚信号INT的状态,共同控制定时器计数器的打开或关闭。CT:定时器计数器选择位。C/T1,为计数器方式;CT0,为定时器方式。M1M0:工作方式选择位,定时器计数器的4种工作方式由M1M0设定。M1M000:工作方式0(13位方式)。M1M001:工作方式1(16位方式)。M1M010:工作方式2(8位自动装入时间常数方式)。MlM0=11:工作方式3(2个8位方式-仅对T0)。2定时器控制寄存器-TCONTCON在特殊功能寄存器中,字节地址为88H,位地址(由低位到高位)为88H一8FH,由于有位地址,十分便于进行位操作。TCON的格式如下图所示。其中,TFl,TRl,TF0和TR0位用于定时器计数器;IEl,ITl,IEo和IT0位用于中断系统。TFl,TRl用于定时器T1;TF0,TR0用于定时器T0。两组符号有相同的含义。TF:定时器计数器中断请求标志位。当定时器计满回零时,TF1,并可申请中断;当CPU响应中断并进入中断服务程序后,TF自动清零。如对TF查询,定时器回零后,要用指令将TF清零。TR:定时器计数器开闭控制位。IEl,ITl用于外部中断1(1NTl);IE0,IT0用于外部中断0(1NT0)。两组符号的含义相同。IT:下跳沿低电平引起外部中断请求的选择位。IT=1,由下跳沿引起;IT0,由低电平引起。IE:外部中断的中断申请标志。IE0,表明无外部中断请求;IE1,表明有外部中断请求。当有外部中断请求时,IE自动为1,单片机CPU响应此中断后,IE自动清零。定时计数初值的求取方法8051单片机的定时器计数器采用增量式计数。也就是说,当运行于定时器方式时,每隔一个机器周期定时器自动加1;当运行于计数器方式时,每当引脚出现下跳沿,计数器自动加1。无论是作定时用还是计数用,当T0或Tl加满回零后,定时器回零标志置1。而当允许中断时,TF可以申请中断进而在中断服务程序中作相应的操作;TF也可用程序判断定时到或计数满的标志位。那么,怎样确定定时或计数初值(又称为时间常数),以便达到要求的定时时间或计数值呢?下面作简要介绍,并举两个例子加以说明。设T0(或T1)运行于计数器方式,要求计数X个外部脉冲后T0(或T1)回零,则计数初值C的求取方法如下:因为回零的含义是指加满到计数器的模值,即x十C模所以 C模一x模十(一x)(x)求补由此可见,计数初值的大小等于需要计数的个数x求补运算后的结果。2基于Keil单片机编译软件的C语言编程以及使用该软件开发单片机程序的方法2.1 基于Keil单片机编译软件的C语言编程2.1.1 Keil单片机编译软件的简单介绍基于8051的编程语言通常有两种:一种是汇编语言,另一种就是C语言了。汇编语言生成的机器代码效率很高但是可读性不强,复杂一点的程序更是难读,而C语言在大多数情况下其机器代码效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还允许嵌入汇编语言代码来解决少数的高时效性代码编写问题。因此,本设计中采用C语言来进行系统控制程序代码的编写。使用C语言肯定要使用到C语言编译器了,以便把写好的C程序编译生成为可执行的机器码。本设计所采用的Keil uVision3是众多单片机应用开发软件当中的优秀软件之一,在国内外有广泛的使用范围,它支持众多不同公司的MCS51架构芯片,集编辑、编译和仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面友好,易学易用,在调试仿真各方面都拥有强大的功能。2.1.2 Keil单片机编译软件的使用按以下步骤可以建立基于89C51的C语言程序项目:第一步:打开运行Keil uVision3软件,点击 Project菜单,选择New Project,接着弹出创建新项目对话框,输入项目名称后点击保存即可,如下图所示:第二步:选取芯片。在弹出对话框中选取所要的芯片,这里选择Ateml公司的AT89C51单片机。如下图所示:第三步:在项目中加入程序文件,这里是加入C语言(.c)文件,如果没有现有的文件则可以选择新建。如下图所示:第四步:现在在项目中如果已经是写好的程序就可以开始编译了,编译之前还要配置一下输出文件的格式(.hex)。如下图所示:第五步:最终生成的HEX文件就可以烧写到芯片内用做控制使用了。如下图所示:2.1.3 基于Keil单片机编译软件的C语言编程简介基于Keil单片机编译软件的C语言编程和PC机上的C语言编程基本是一致的,有关C语言语法结构问题这里就不再论述,这里主要介绍一下基于Keil单片机编译软件的C语言编程的特点。单片机的C语言编程程序结构同样是分为三大部分的。第一部分:是程序的预编译部分。这里主要是如同PC机C语言程序的头文件和预编译定义。头文件需要选入Keil自带的各个芯片的定义文件,如AT89C51芯片就可以在程序最前端写入#include 或#include 之类的头文件声明,这样在编译器编译时就知道按什么芯片定义来进行编译了,另外,当然自己也可以编写别的头文件来用做预定义声明。接着可以是预编译的定义了,在下面写入如#define max 3之类的语句来用于预编译,这对于程序随后的维护修改及可读性是很有帮助的。第二部分:是程序的函数及全局变量声明部分。函数的编写及声明和PC机C语言基本是一样的,可以放在主函数内也可以在主函数外,可以在主函数前也可以在主函数后,要注意的是如果在主函数后面定义的外部函数需要在主函数之前进行声明。另外,在这里重点要说的是和PC机C语言不一样的单片机中断响应函数。单片机中断响应函数是用于响应并处理单片机的中断的函数,8051系列单片机一般拥有5个固定中断源,5个中断源的符号、名称及产生的条件如下:INT0:外部中断0,由P32端口线引入,低电平或下跳沿引起。INT1:外部中断1,由P33端口线引入,低电平或下跳沿引起。T0:定时器计数器0中断,由T0计满回零引起。T1:定时器计数器l中断,由T1计满回零引起。TIRI:串行IO中断,串行端口完成一帧字符发送接收后引起。中断由中断控制寄存器来进行控制管理。在正常的情况下,从中断请求信号有效开始,到中断得到响应,通常需要3个机器周期到8个机器周期。中断得到响应后,自动清除中断请求标志(对串行IO端口的中断标志,要用软件清除),将断点即程序计数器之值(PC)压入堆栈(以备恢复用);然后把相应的中断入口地址装入PC,使程序转入到相应的中断服务程序中去执行。对于单片机系统,当满足某一中断条件,得到中断请求时将需要具体的单片机中断响应函数来响应处理,单片机中断响应函数和一般的函数定义基本一致,不同只是它的执行机制是当中断产生后就立刻转入单片机中断响应函数的执行,执行完毕后又回到原处继续执行下续的程序,另外,单片机中断响应函数的编写还需要在函数名后加上中断序号以便识别响应特定的中断还可以区别一般的函数,如void time0() interrupt 1。第三部分:是程序的主函数部分。C语言规定每一个完整独立的程序都必需一个主函数(main()函数),和PC机C语言是一致的main函数是作为程序的入口函数的,它可以是各种不同的函数类型,也可以是没有返回值的void类型,它是整个程序所要具体执行的地方,其他内容就不再论述了。3交通信号灯模拟控制系统的工作原理、程序流程和硬件结构介绍3.1交通信号灯模拟控制系统的工作原理的讲解现今的社会快速发展,随着我国改革开放的不断深入,我国的经济迅猛发展,人民的生活水平持续提高,现代的交通工具越来越多尤其是机动车辆的数量急剧增长,由此带来了我国城市交通情况恶化,大一点的城市交通堵塞、交通事故频有发生,因此, 改善城市交通情况是我们面临的一项严峻而由紧迫的问题。采用现代的交通信号指示系统对于改善交通问题有很大的帮助,这套系统由于长期的使用而不断得到完善技术方面已经相当成熟了,它在各国的道路交通系统上都有着广泛的应用。我国建立起现代的交通系统较晚,在有的方面还是不够完善和成熟,所以,对于交通信号指示系统的试验和改进是有一定的必要性的,这将对我国的城市交通情况持续改善有极大裨益。本设计要求使用8051单片机设计一交通信号灯模拟控制系统,通过建立模拟系统可以在低廉的成本、直接的观测性和极大的灵活性基础上对交通系统进行持续的模拟试验和改进,使实际的道路交通指示系统不断完善。本文中,笔者是按最常见的A、B道交叉组成十字路口(A是主道,B是支道)红黄绿指示灯系统来建立模型的,并且根据实际情况对该模型赋予如下的特点:(1)正常情况下A、B道(A、B道交叉组成十字路口,A是主道,B是支道)轮流放行,A道放行1分钟(其中5秒用于警告),B道放行30秒(其中5秒用于警告)。(2)一道有车而另一道无车(用按键开关K1、K2模拟)时,使有车车道放行。(3)有紧急车辆通过(用按键开关K0模拟)时,A、B道均为红灯。以上也可认为是该设计的设计要求,所设计的模拟系统就必须严格按照这些要求来工作运行。3.2交通信号灯模拟控制系统的程序流程介绍根据上文的设计要求,我们需要编写控制系统的C语言程序,程序上的流程见如下图表:开始初始化检测状态模拟开关检测状态模拟开关是否有闭合?检测紧急车辆通过状态模拟开关状态有执行正常情况下模式,主支道轮流放行无是主支两道轮流均不放行否检测主支道状态模拟开关状态是否为主道有车,支道无车的情况?是主道放行是否有紧急车辆通过?否检测主支道状态模拟开关状态是否为支道有车,主道无车的情况?否支道放行是以上即为程序流程图。3.3交通信号灯模拟控制系统的硬件结构介绍本设计采用AT89C51作为系统控制核心,外接12M的晶振电路,使用3组按键开关K0、K1和K2分别模拟作为紧急车辆通过指示开关、主道状态指示开关和支道状态指示开关,具体硬件结构图如下图所示。在本设计中,由P1.0、P1.1和P1.2来分别接3组按键开关K0、K1和K2用来检测模拟信号的输入,使用P3.0、P3.1和P3.2分别来输出控制信号控制主道信号的各组指示灯,用P2.0、P2.1和P2.2分别来输出控制信号控制支道信号的各组指示灯。在结构图中,还另外接入了时间指示表来用来计时。 4交通信号灯模拟控制系统的工作测试仿真介绍4.1仿真软件Proteus 6简介PROTEUS系统包括ISIS.EXE(电路原理图设计、电路原理仿真),ARES.EXE(印刷电路板设计)两大主要程序三大基本功能。其中最令人称赞的是电路原理仿真功能,除了普通分离器件、小规模集成器件的仿真功能以外,还具有多种带有CPU的可编程序器件的仿真功能,如51系列、68系列、PIC系列等;具有多种总线、储存器、RS232终端仿真功能;具有电动机、液晶显示器等特殊器件的仿真功能;对可编程序器件可以灵活地外挂各种编译、编辑工具,使用非常方便。具有多种虚拟仪器帮助完成实时仿真调试;具有传输特性、频率特性、电压波动分析、噪声分析等多种图形分析工具、可以完成电路参数和可靠性分析。可以完成:电路原理实验(电阻、电容、电感、开关、继电器、电机、指示灯等)模拟电子技术实验(二极管、三极管、场效应管、晶闸管、光电管、运算放大器等)数字电子技术实验(4000系列、74系列、ECL10000系列逻辑器件、PLD器件等)单片机与接口实验(51系列、68系列、PIC系列、储存器、ADC、DAC器件等)本文中设计是采用PROTEUS系统对已经设计的交通信号灯模拟控制系统进行仿真和调试来得到所要求的结果,采用这种方式的优点是显而易见的。4.2交通信号灯模拟控制系统的工作测试仿真4.2.1 控制系统程序分析按照上一节的程序流程图可以编写出控制系统的C程序,具体程序如下:#include sbit main_red=P30;/定义两组交通灯(主、支道)sbit main_yel=P31;sbit main_gre=P32;sbit sub_red=P20;sbit sub_yel=P21;sbit sub_gre=P22;sbit button1=P10;/K0 紧急车辆通过指示开关sbit button2=P11;/K1 支道状态指示开关sbit button3=P12;/K2 主道状态指示开关unsigned int num0;void time0_int(unsigned int time0_num);void ini()P3=0xff;P1=0xff;P2=0xff;main_yel=0;main_gre=0;main_red=1;sub_yel=0;sub_gre=0;sub_red=1;void main() ini(); while(1) while(button1!=0)&(button2!=0)&(button3!=0)if(button1!=0)&(button2!=0)&(button3!=0)main_yel=1; /主道顺序main_gre=0;main_red=0;time0_int(5000);main_yel=0;main_gre=1;main_red=0;time0_int(55000);main_yel=0;main_gre=0;main_red=1;if(button1!=0)&(button2!=0)&(button3!=0) sub_yel=1;/支道顺序sub_gre=0;sub_red=0;time0_int(5000);sub_yel=0;sub_gre=1;sub_red=0;time0_int(25000);sub_yel=0;sub_gre=0;sub_red=1;while(button1=0) /紧急车辆通过时,两道均不放行main_yel=0;main_gre=0;main_red=1;sub_yel=0;sub_gre=0;sub_red=1;while(button1!=0)&(button2!=0)&(button3=0) /主道有车,支道无车时,主道放行main_yel=0;main_gre=1;main_red=0;sub_yel=0;sub_gre=0;sub_red=1;while(button1!=0)&(button2=0)&(button3!=0) /支道有车,主道无车时,支道放行main_yel=0;main_gre=0;main_red=1;sub_yel=0;sub_gre=1;sub_red=0;void time0_int(unsigned int time0_num)/计时器0计时函数,time0_num为计时变量,单位为msnum0=0;TMOD=0x11;/设置定时器0为工作方式1TH0=(64536)/256;TL0=(64536)%256;EA=1;/开总中断ET0=1;/开定时器0中断TR0=1;/

温馨提示

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

评论

0/150

提交评论