电子钟的设计与实现0Word文档格式.docx
- 文档编号:19674976
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:41
- 大小:541.49KB
电子钟的设计与实现0Word文档格式.docx
《电子钟的设计与实现0Word文档格式.docx》由会员分享,可在线阅读,更多相关《电子钟的设计与实现0Word文档格式.docx(41页珍藏版)》请在冰豆网上搜索。
掉电保护方式下,RAM内容被保护,振荡器被冻结,单片机一切工作停止,直至下一个中断或硬件复位为止。
AT89S52引脚图如下如所示:
AT89S52内部方框图如下:
AT89S52各引脚功能介绍:
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;
在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。
在flash编程和校验时,P1口接收低8位地址字节。
引脚号
第二功能
P1.0
T2(定时器/计数器的外部计数输入),时钟输出
P1.1
T2EX(定时器/计数器的捕捉/重载触发信号和方向控制)
P1.5
MOSI(在系统编程用)
P1.6
MISO(在系统编程用)
P1.7
SCK(在系统编程用)
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
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(外部数据存储器读选通)
RST:
复位输入。
晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
看门狗计时完成后,RST脚输出96个晶振周期的高电平。
ALE/PROG:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
PSEN:
外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。
当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
EA/VPP:
访问外部程序存储器控制信号。
为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。
为了执行内部程序指令,EA应该接VCC。
在flash编程期间,EA也接收12伏VPP电压。
XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
特殊功能寄存器
AT89S52特殊寄存器映象及复位值
表一:
AT89S52特殊寄存器映像及复位值表
定时器2寄存器:
寄存器T2CON和T2MOD包含定时器2的控制位和状态位(如表二和表三所示),寄存器对RCAP2H和RCAP2L是定时器2的捕捉/自动重载寄存器。
中断寄存器:
各中断允许位在IE寄存器中,六个中断源的两个优先级也可在IE中设置。
双数据指针寄存器:
为了更有利于访问内部和外部数据存储器,系统提供了两路16位数据指针寄存器:
位于SFR中82H~83H和位于DP0中84H~85。
特殊寄存器AUXR1中DPS=0选择DP0;
DPS=1选择DP1。
用户应该在访问数据指针寄存器前先初始化DSP至合理的值。
掉电标志位:
掉电标志位(POF)位于特殊寄存器PCON的第四位(PCON.4)。
上电期间POF置“1”。
POF可以软件控制使用与否,但不受复位影响。
看门狗定时器
WDT是一种需要软件控制的复位方式。
WDT由13位计数器和特殊功能寄存器中的看门狗定时器复位存储器(WDTRST)构成。
WDT在默认情况下无法工作;
为了激活WDT,必须往WDTRST寄存器(地址:
0A6H)中依次写入01EH和0E1H。
当WDT激活后,晶振工作,WDT在每个机器周期都会增加。
WDT计时周期依赖于外部时钟频率。
除了复位(硬件复位或WDT溢出复位),没有办法停止WDT工作。
当WDT溢出,它将驱动RSR引脚一个高个电平输出。
WDT的使用
为了激活WDT,必须向WDTRST寄存器(地址为0A6H的SFR)依次写入0E1H和0E1H。
当WDT激活后,必须向WDTRST写入01EH和0E1H喂狗来避免WDT溢出。
当计数达到8191(1FFFH)时,13位计数器将会溢出,这将会复位器件。
晶振正常工作、WDT激活后,每一个机器周期WDT都会增加。
为了复位WDT,必须向WDTRST写入01EH和0E1H(WDTRST是只读寄存器)。
WDT计数器不能读或写。
当WDT计数器溢出时,将给RST引脚产生一个复位脉冲输出,这个复位脉冲持续96个晶振周期(TOSC),其中TOSC=1/FOSC。
为了很好地使用WDT,应该在一定时间内周期性写入那部分代码,以避免WDT复位。
3.2)时钟芯片DS1302功能介绍:
DS1302时钟芯片主要组成部分包括实时时钟/日历、31字节的静态RAM、移位寄存器、控制逻辑和振荡器,它经过一个简单的串行接口与微处理器通信。
实时时钟/日历提供秒、分、时、日、周、月和年等信息,对于小于31天的月,月末的日期自动进行调整,包括了闰年校正的功能,可以采用24小时或带AM/PM的12小时格式。
使用同步串行通信,简化与微处理器的通信。
数据可以以每次一个字节或多达31字节的多字节形式传送至时钟/RAM或从其中送出。
DS1302能在非常低的功耗下工作,消耗小于1微瓦的功率便能保持数据和时钟信息。
DS1302的命令字
命令字节如图所示:
每一数据传送由命令字节初始化。
最高有效位MSB(位7)必须为逻辑1,如果它是零,禁止写DS1302。
位6为逻辑0指定时钟/日历数据;
逻辑1指定RAM数据。
位1至5指定进行输入或输出的特定寄存器。
最低有效位LSB(位0)为逻辑0指定进行写操作;
逻辑1指定进行读操作。
DS1302引脚图如下如所示
引脚说明
引脚
名称
功能
2/3
X1/X2
32.768KHZ晶振引脚
1/8
VCC2/VCC1
电源引脚
GND
地
5
RST
复位
6
I/O
数据输入/输出
SCLK
串行时钟
DS1302时钟芯片时序图如下:
3.3):
4位7段数码管
4位7段数码管各引脚对应关系如下图所示:
四:
实时时钟设计电路图
运用Protel99se搭建好实时电子时钟电路图如下
五:
实时电子时钟程序实现:
(程序流程图)
;
4位7段数码管显示
P0为段码口、P2为位码口
晶振12M
时钟芯片:
**************DS1302端口位定义**************
IO_DATABITP1.1;
数据传送总线
SCLKBITP1.0;
时钟控制总线
RSTBITP1.2;
复位总线
K1EQUP1.4;
独立键
K2EQUP1.5
K3EQUP1.6
K4EQUP1.7
BEEPEQUP3.7;
蜂鸣器
RELAYEQUP1.3;
继电器
T_CONUEQU22H;
中断计数
TIME_LEQU23H;
定时初值
TIME_HEQU24H
TIME_DATAEQU50H;
显示时间单元首地址
DATE_DATAEQU60H;
显示日期单元首地址
DS_DATAEQU58H;
显示定时时间单元首地址
------------------------------------------------
ORG0000H
AJMPMAIN
ORG000BH
AJMPINT_T0
ORG0100H
MAIN:
MOVTMOD,#01H;
T0,方式1
MOVTIME_L,#00H;
50MS定时值
MOVTIME_H,#4CH
MOVT_CONU,#00H;
中断次数
MOVIE,#82H;
EA=1,ET0=1
MOVA,#00H
MOVR0,#40H;
从40H单元开始
MOVR1,#40H;
清64个单元
M_CLEAR:
MOV@R0,A
INCR0
DJNZR1,M_CLEAR
MOV7FH,#0AH;
送熄灭符
SETBBEEP
LCALLTIME_DELAY;
调显示延时
LCALLPROSET;
DS1302初始化
MAIN1:
LCALLGET_TIME;
从DS1302读数据程序
LCALLCHULI;
实时时间数据处理
MOVR0,#TIME_DATA;
显示时、分、秒
LCALLDISP
MOVR0,#TIME_DATA
LCALLTIME_DISPLAY
LCALLSET_KEY;
键功能程序
LCALLCOMP;
实时时间与定时时间比较
JBK1,MAIN1
CALLBEEP_BL
MAIN2:
日期数据处理
MOVR0,#DATE_DATA
LCALLDISP;
显示年、月、日
JBK1,MAIN2
MAIN3:
LCALLDS_CHULI;
定时时间数据处理
MOVR0,#DS_DATA
LCALLDS_SP;
显示定时时间
LCALLDS_DISPLAY
JBK1,MAIN3
AJMPMAIN1
--------------------------------------------
中断服务子程序
300MS对闪动标记取反一次
INT_T0:
PUSHACC
PUSHPSW
MOVTL0,TIME_L
MOVTH0,TIME_H
INCT_CONU
MOVA,T_CONU
CJNEA,#06H,INT_END
MOVT_CONU,#00H
CPL0AH
INT_END:
POPPSW
POPACC
RETI
DS1302初始化子程序
(R0)=数据(R1)=地址
PROSET:
CLRRST;
DS1302复位
CLRSCLK
NOP
SETBRST
;
MOVR1,#80H;
写秒寄存器
MOVR0,#00H;
启动振荡器
LCALLWRITE
MOVR1,#82H;
写分寄存器
MOVR0,#58H
MOVR1,#84H;
写时寄存器
MOVR0,#80H
MOVR1,#90H;
写充电寄存器
MOVR0,#0ABH
LCALLWRITE
RET
===============================================
读时间、日期数据子程序
存放单元40H-46H
GET_TIME:
MOVR1,#81H;
读秒
LCALLREAD
MOV40H,R0
MOVR1,#83H;
读分
MOV41H,R0
MOVR1,#85H;
读时
MOV42H,R0
MOVR1,#87H;
读出日期
MOV43H,R0
MOVR1,#89H;
读出月份
MOV44H,R0
MOVR1,#8BH;
读出星期
MOV46H,R0
MOVR1,#8DH;
读出年
MOV45H,R0
================================================
写DS1302子程序
WRITE:
MOVA,R1
MOVR2,#08H
WRI_01:
RRCA;
传输地址到DS1302
NOP
MOVIO_DATA,C
SETBSCLK
DJNZR2,WRI_01
MOVA,R0
WRI_02:
传输数据到DS1302
DJNZR2,WRI_02
CLRRST
=================================================
读DS1302子程序
READ:
READ_01:
RRCA
NOP;
先传输地址到DS1302
DJNZR2,READ_01
SETBIO_DATA
CLRA
CLRC
READ_02:
MOVC,IO_DATA
再从DS1302接收数据
DJNZR2,READ_02
MOVR0,A
==============================================
实时时间、日期数据处理子程序
CHULI:
MOVA,40H;
处理秒数据
ANLA,#0FH
MOV50H,A
MOV70H,A
MOVA,40H
ANLA,#11110000B
SWAPA
MOV51H,A
MOV71H,A
---------------------------------------------
MOVA,41H;
处理分数据
MOV52H,A
MOV72H,A
MOVA,41H
MOV53H,A
MOV73H,A
MOVA,42H;
处理时数据
MOV54H,A
MOV74H,A
MOVA,42H
MOV55H,A
MOV75H,A
----------------------------------------------
MOVA,43H;
处理日数据
MOV60H,A
MOV76H,A
MOVA,43H
MOV61H,A
MOV77H,A
MOVA,44H;
处理月数据
MOV62H,A
MOV78H,A
MOVA,44H
MOV63H,A
MOV79H,A
MOVA,45H;
处理年数据
MOV64H,A
MOV7AH,A
MOVA,45H
MOV65H,A
MOV7BH,A
MOVA,46H;
处理周数据
MOV66H,A
MOV7CH,A
=============================================
实时时间、日期查表取数子程序
DISP:
MOVR0,#TIME_DATA
MOVR3,#06H
DISP1:
MOVA,@R0
MOVDPTR,#TAB_NU
MOVCA,@A+DPTR
DJNZR3,DISP1
====================================================
时间、日期显示子程序
TIME_DISPLAY:
MOVR0,#TIME_DATA;
取得显示单元首地址
MOVR1,#07FH;
从第一个数码管开始
MOVR2,#08H;
共8个数码管
DISLP:
MOVP0,@R0;
获得当前单元数据
MOVP2,A;
数码显示
JBACC.5,DISLP1;
第三位数码管显示-
MOVP0,#0BFH
JMPDISLP3
DISLP1:
JBACC.2,DISLP2;
第六位数码管显示-
DISLP2:
DISLP3:
MOVA,R1;
为下一个数准备
RRA;
下一个单元
MOVR1,A;
保存
LCALLDELAY;
为了保证数码管亮度,延时
DJNZR2,DISLP;
重复显示,直到全部数据刷新过
RET;
返回
DELAY:
MOVR4,#0AH
L15:
MOVR5,#64H
L16:
DJNZR5,L16
DJNZR4,L15
**********
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子钟 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)