实时时钟电路MC146818A与单片机的接口及编程
2012-02-18 来源:国外电子元器件
实时时钟电路是控制系统中常用的功能模块。MC146818A是专用于各类微处理器与单片机系统的时钟集成电路。它带有50字节的低功耗静态RAM,可进行时、分、秒和年、月、日及星期的计数,并有自动的月结束识别和闰年处理功能,具有12/24小时和AM/PM的12小时计时功能,既可与 Motorola系列的单片机接口[1],又可与Intel的微处理器接口。本文详细讨论MC146818A与89C51单片机的接口。
1.MC146818A的结构
MC146818A有双列直插式DIP和PLCC两种封装,图1为双列直插式封装引脚图。下面详细介绍各引脚功能。
VDD:电源线,可以为3DC~6V;
VSS:地线,信号、电源地;
MOT:单片机类型选择线,当MOT接VDD时,选择Motorola总线时序;当MOT接VSS时,选择Intel类型总线,如8051、8085等;
OSC1、OSC2:时间基准输入线,可接外部信号源或晶振。在时钟电路中,一般接32.768kHz的晶振;
CKFS:时钟频率输出选择线,当CKFS接VDD时,CKOUT引脚输出频率为晶振频率;当CKFS接VSS时,CKOUT引脚输出频率为晶振频率的1/4;
CKOUT:时钟输出线;
SQW:方波输出线;
AD0~AD7:双向地址/数据总线;
AS/ALE:地址锁存线;
DS/RD:读信号线;
R/WR:写信号线;
CS:片选线;
IRQ:中断请求线INT;
RESET:复位信号线;
PS:电源检测信号线,用来控制寄存器D的VRT位;
STBY:掉电检测线,当此线为低时,禁止访问芯片,这有利于电池供电。由于MC146818A采用高速CMOS工艺,对于32.768kHz晶振频率,当VDD为5V时,消耗电流为50μA,因此可以采用后备电池方式,以确保主电源失电后,时钟仍正常工作。
2. MC146818A与89C51单片机的接口电路
MC146818A与89C51单片机的接口电路如图2所示。
上电时,必须保护U2的PS引脚在tPLH时间的低电平,以建立一个过渡状态。上电后,应升高PS引脚电平到VCC,以允许通过读寄存器来把VRT置位。
将U2的AD0~AD7与单片机P0口数据/地址复用总线相连,并将单片机的ALE、WR、RD、INT1信号线一一对应接到时钟电路U2的引脚,即可完成硬件接口,通过片选CS,选中U2,然后对其进行读/写操作。
3.软件编程
MC146818A时钟电路的内部地址空间如表1所列。
对MC146818A的编程,主要是通过它的寄存器A、B、C、D设置工作状态实现的。下面着重分析这四个寄存器。
(1)寄存器A:用来确定基准频率和分频计数器的输出频率,它的格式为:
各位定义为:
D7-U1P,只读位。“1”表示正在更新,“0”表示可读时间、闹钟和日历值。
D6D5D4-DV2DV1DV0,可读写,不受RESET影响,用于选择基准频率,对于32.768kHz晶振,D6D4应清零,D5置1。
D3D2D1D0-RS3RS2RS1RS0,可读写,不受RESET影响,通过SQW引脚输出方波及中断周期。选择分频输出频率。
(2)寄存器B:用来确定更新周期、各种中断的许可、数据格式、计时方式和输出方波的许可。可读写。它的格式为:
各位定义为:D7-SET为“0”表示允许周期更新,“1”停止周期更新,以便对时间和日历进行初始化;
D6-P1E:“1”表示允许周期中断,激活IRQ;“0”表示禁止周期中断;
D5-A1E:“1”表示允许闹钟中断,0”表示禁止。
D4-U1E,“1”表示允许周期更新“结束位激活IRQ,“0”表示禁止;
D3-SQWE:“1”表示允许方波由SQW引脚输出,“0”表示禁止,并使SQW始终为低电平;
D2-DM:数码格式选择。“1”选择二进制码,“0”选择十进制码;
D1-12/24:小时选择,“1”表示时间单元为24小时计时,“0”表示时间单元为12小时计时,这样,地址单元4与5的最高位“0”为AM,“1”为PM。
D0-DSE:夏令时允许位,“0”为禁止。
(3)寄存器C:只读、中断标志位。
它的格式为:
各位定义为:D7-IRQF:中断请求标志,为“1”时IRQ引脚输出低电平。
D6-PF:周期中断标志位;
D5-AF:闹钟中断标志位;
D4-UF:周期更新完成标志位。
只有当寄存器B的P1E,A1E,U1E为1时,才会触发PF,AF,VF三个位中断,并使IRQF置位。
(4)寄存器D:只读,表示RAM和时间是否有效,只考虑D7位VRT,其余均不考虑。当引脚PS为高电平时,VRT为“1”,表示RAM与时钟信息为可读,若PS引脚为低电平,则VRT=0,此时信息不可读。
通过以上对四个控制器的分析,得出MC146818A的编程流程如图3所示。
硬件连接及软件设计好后,MC146818A就可开始工作,进入计时状态。对于32.768kHz晶振,更新时禁止读写时间为1948μs,其余时间均可对有关单元进行读写。