这里所说的中断控制是指提供给用户使用的中断控制手段,实际上就是一些专用寄存器。在MCS-51单片机中,用于此目的的控制寄存器共有四个,即定时器控制寄存器、中断允许控制寄存器、中断优先控制寄存器以及串行口控制寄存器。
1)定时器控制寄存器(TCON)
该寄存器用于保存外部中断请求和以及定时器的计数溢出。寄存器地址88H,位地址8FH~88H。
表1定时器控制寄存器位地址及内容 位地址 8F 8E 8D 8C 8B 8A 89 88 位符号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 这个寄存器既有定时器/计数器的控制功能又有中断控制功能,其中与中断有关的控制位共六位:IE0和IE1 、IT0和IT1 以及TF0和TF1 。
2)中断允许控制寄存器(IE)
寄存器地址A8H,位地址AFH~A8H。
表2 中断允许控制寄存器位地址及内容 位地址 AF AE AD AC AB AA A9 A8 位符号 EA / / ES ET1 EX1 ET0 EX0 其中与中断有关的控制位共六位:EA、EX0和EX1 、ET0和ET1 、ES。 3)中断优先级控制寄存器(IP)
MCS-51的中断优先级控制只定义了高、低两个优先级。各中断源的优先级由优先寄存器(IP)进行设定。IP寄存器地址B8H,位地址为BFH~B8H。寄存器的内容及位地址表示如下:
表3 寄存器的内容及位地址 位地址 BF BE BD BC BB BA B9 B8 位符号 / / / PS PT1 PX1 PT0 PX0 PX0 外部中断0优先级设定位; PT0 定时中断0优先级设定位; PX1 外部中断1优先级设定位; PT1 定时中断1优先级设定位; PS 串行中断优先级设定位。
为0的位优先级为低;为1的位优先级为高。
中断响应:中断响应就是对中断源提出的中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求时,紧接着就进行中断响应。中断响应的主要内容是由硬件自动生成一条长调用指令LCALL。其格式为LCALL addr16,这里的addr16就是程序存储器中断区中相应中断的入口地址。在MCS-51单片机中,这些入口地址已由系统设定。
2.4.2 MCS-51 单片机的定时器/计数器
MCS-51单片机共有两个可编程的定时器/计数器,分别称定时器/计数器0和定时器/计数器1。它们都是十六位加法计数结构,分别由TH0(地址8CH)和TL0(地址8AH)及TH1(地址8DH)和TL1(地址8BH)两个8位计数器组成。这四个计数器均属专用寄存器之列。MCS-51的每个定时器/计数器都具有定时和计数两种功能。
1. 计数功能
所谓计数是指对外部事件进行计数。外部事件的发生以输入脉冲表示,因此计数功能的实质就是对外来脉冲进行计数。
6
2. 定时功能
定时功能也是通过计数器的计数来实现的。不过此时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲。也就是每个机器周期计数器加1。由于一个机器周期等于12个振荡脉冲周期,因此计数频率为振荡频率的1/12。
定时器/计数器提供给用户使用的有:八位计数器TH和TL,以及有关的控制位。这些内容只能以软件方法使用。
2.4.3 MCS-51定时器/计数器的四种工作方式
1.定时器工作方式0
方式0是13位计数结构的工作方式,其计数器由TH0全部8位和TL0的低5位构成。当TL0的低5位计数溢出时,向TH0进位,而全部13位计数溢出时,则向计数溢出标志位TF0进位。
在方式0下,当为计数工作方式时,计数值的范围是:1~8192(213) 当为定时工作方式时,定时时间的计算公式为:
(213-计数初值)×晶振周期×12 或 (213-计数初值)×机器周期 其时间单位与晶振周期或机器周期相同(?s)。
2.定时工作方式1
方式1是16位计数结构的工作方式,计数器由TH0全部8位和TL0全部8位构成。 当为计数工作方式时,计数值的范围是: 1~65536(216)
当为定时工作方式时,定时时间计算公式为: (216-计数初值)×晶振周期×12 或 (216-计数初值)×机器周期
3. 定时工作方式2
工作方式2是自动重新加载工作方式。在这种工作方式下,把16位计数器分为两部分,即以TL作计数器,以TH作预置寄存器,初始化时把计数初值分别装入TL和TH中。当计数溢出后,不是像前两种工作方式那样通过软件方法,而是由预置寄存器TH以硬件方法自动给计数器TL重新加载。变软件加载为硬件加载。
初始化时,8位计数初值同时装入TL0和TH0中。当TL0计数溢出时,置位TF0,同时把保存在预置寄存器TH0中的计数初值自动加载TL0,然后TL0重新计数。如此重复不止。这不但省去了用户程序中的重装指令,而且也有利于提高定时精度。但这种工作方式下是8位计数结构,计数值有限,最大只能到255。
这种自动重新加载工作方式非常适用于循环定时或循环计数应用,例如用于产生固定脉宽的脉冲,此外还可以作串行数据通信的波特率发送器使用。
2.5 AT89C51引脚功能介绍
1、主电源引脚(2根)
(1) VCC:电源输入,接+5V电源 (2)GND:接地线
2、外接晶振引脚(2根)
(1) XTAL1:片内晶振电路的输入端 (2)XTAL2:片内晶振电路的输出端 3、控制引脚(4根)
(1) RST/VPP:复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
7
(2)ALE/PROG:地址所存允许信号。 (3)PSEN:外部存储器读选通讯信号。
(4)EA/VPP:程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。 5.管脚说明: VCC:供电电压。 GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。
8
振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
第三章 设计方案 通常通过单片机设计电子时钟有2种方法:一是通过单片机内部的定时器计数器。采用软件编程实现时钟计数,一般称为软时钟,这种方法硬件线路简单,程序比较复杂。系统的功能一般与软件相关。通常用于对时间精度要求不搞的场合。二是采用时钟芯片 他的功能强大,功能不见集成在芯片内需,自动产生时钟等相关功能。硬件成本较高,软件编程仙丹。通常对时钟精确度要求较高的场合。
电子时钟的系统软件程序有、由主程序和子程序组成,主程序包含初始化参数设置,按键处理,数码管显示模块等。在设计时候、各个模块都采用子程序结构设计。在主程序种调用。由于定时器,计数器采用中断方式处理,应此还用辨析定时器,中断服务子程序,在定时器,计数器中断服务子程序种对时钟进行调整。
3.1 主程序
主程序执行流程图如图1所示。主程序先对显示单元和定时器计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有建按下,则转入相应的功能程序。
图1 主程序执行流程图
9
3.2 数码管显示模块
本设计的显示模块采用8位一体共阳极数码管,显示分为时钟显示和日期星期两种模式,当为显示时钟模式时,从右到左依次显示秒个位,秒十位,横线,分个位,分十位,横线,时个位,时十位;当为显示日期和星期模式时,从右到左一次显示星期,不显示,横线,日个位,日十位,月个月,月十位。数码管显示的信息用8个内存单元存放,这8个内存单元为显示缓冲区,其中秒个位和秒十位,分个位和分十位,时个位和时十位分别由秒数据,分数据和小时数据分拆得到。在本系统种数码管显示采用软件译码动态显示。在存储器中首先建立一张显示信息字段码表,显示的时候,先从显示缓冲区中取出显示的信息,然后通过查表程序在字段码表中查出的所显示的字段码。从P0口输出,同时在P2口将对应的位选码输出,选中显示的数码管,就能在相应的数码管上显示显示缓冲区的内容。
3.3 定时器计数器T0中断服务程序
定时器计数器T0用于时间计时,选择方式1,重复定时,定时时间设为100MS,定时时间到则溢出中断,在中断服务程序中用一个计数器对100MS计数,计10次则对秒单元加1,秒单元加到60则对分单元加1,同时秒单元清零。分单元加到60的时候,则对时单元加1,同时分单元清零,时单元加到24的时候则对时单元清零,标志一天时间计满,此时所以单元清零。在对各单元计数的同时,把它们的值放到存储器单元的制定位置
3.4按键处理模块
按键处理设置为:如果没有按键,则为时钟模式,时钟正常走时,当按下shijia按键的时候,时单元每次加1,当加到24后跳为00,当按下shijian按键的时候,时单元每次减1,当减到00的时候跳到23;当按下fenjia按键的时候,分单元每次加1,当加到60的时候跳为00,按下fenjian按键的时候,分单元每次减1,当减到00的时候跳为59;当xianshiqih建按下时,为显示日期模式,此时数码管显示日期和星期,当同时按下shijia按键的时候,月单元每次加1,当加到13后跳为00,当同时按下shijian按键的时候,日单元每次加1,如果月份为:1月、3月、5月、7月、8月、10月、12月的时候,当日加到32的时候跳到1;如果月份为4月、6月、9月、11月的时候,当日加到31的时候跳到1,如果月份为2月的时候,当日加到29时跳到1。当同时按下fenjia按键的时候,星期单元每次加1,当加到6的时候跳为0,“0”表示星期日。
第四章 硬件电路设计
10