基于89C51单片机的万历设计.doc

上传人:laozhun 文档编号:4147976 上传时间:2023-04-07 格式:DOC 页数:20 大小:858KB
返回 下载 相关 举报
基于89C51单片机的万历设计.doc_第1页
第1页 / 共20页
基于89C51单片机的万历设计.doc_第2页
第2页 / 共20页
基于89C51单片机的万历设计.doc_第3页
第3页 / 共20页
基于89C51单片机的万历设计.doc_第4页
第4页 / 共20页
基于89C51单片机的万历设计.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《基于89C51单片机的万历设计.doc》由会员分享,可在线阅读,更多相关《基于89C51单片机的万历设计.doc(20页珍藏版)》请在三一办公上搜索。

1、目 录一、 设计目的二、任务要求三、功能说明四、实时时钟芯片DS13024.1 DS1302主要的性能指标:4.2 DS1302 的基本组成和工作原理4.3 DS1302的寄存器4.4 DS1302的复位五、硬件电路设计模块5.1电源电路5.2控制电路5.3 LED显示电路5.4 DS1302在系统中的硬件电路六、硬件安装及调试6.1安装中注意的问题6.2 布线布局说明6.2安装调试中出现的问题:七、软件调试及设计1.软件设计思想:2.程序流程图:(见下页)八、设计中存在的问题1.DS1302工作的稳定性加入辅助电容实现负载匹配2.乱码显示九、设计总结十、附录附录一:元器件清单附录二:系统电路

2、图附录三:设计PCB板图附录四:万年历实物图附录五:程序清单一、 设计目的通过一个复杂的产品的设计、组装、调试及软件实现,从而将所学的理论知识与实践相结合,进一步巩固专业知识,掌握基本专业技能,切实加强动手能力,通过对实际产品各功能系统的研究,提升对理论知识的认识,两者结合,提高理论指导,解决实际问题的能力 为就业打下坚实的基础。二、 任务要求l 显示准确的北京时间(年、月、日、时、分、秒,年号只显示最后两位),12/24小时显示切换。l 随时可以调校时间。l 可整点报时。l 可掉电储存并记时。l 允许通过转换功能键转换显示时间或日期。三、 功能说明本设计是基于89C51单片机的万年历,特点在

3、于利用DS1302计时。采用两个三位共阴数码管,及7个功能键。主要能实现时、分、秒显示,年、月、日显示,时、分、月、日调整,闹铃设置。可内置时间初值,也可利用按键调整时间初值。系统默认时间为2006年10月21日11时59分50秒。按键P1.3、P1.4、 P1.5、P1.6分别调整时加、时减、分加、分减。按下P1.1键,显示切换到日历显示,LED显示年、月、日,初始值为06年10月21日。按键P1.3、P1.4、 P1.5、P1.6分别调整月加、月减、日加、日减。P1.7为设置键,对应一个红色发光二极管,按下P1.7,设置键启动,红色二极管亮,此时可调整时间日期;再按下P1.7键,设置功能关

4、闭,同时红色发光二极管灭,此时P1.3、P1.4、P1.5、P1.6等调整键失效。P1.0键为闹铃控制键,默认情况下闹铃关,对应的绿色发光二极管灭,按下P1.0,闹铃开,同时绿色发光二极管亮,再按一下,闹铃关。闹铃开时,时间跳到设置的闹铃时间时,蜂鸣器响时1分钟。四、 实时时钟芯片DS1302DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信,实时时钟/日历电路提供秒分时日日期月年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24或12小时格式,DS1302与单片机之间能简单地采

5、用同步串行的方式进行通信仅需用到三个口线1RES,复位2I/O,数据线3SCLK,串行时钟时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mW。DS1302 是由DS1202 改进而来增加了以下的特性双电源管脚用于主电源和备份电源供应Vcc1 为可编程涓流充电电源附加七个字节存储器它广泛应用于电话传真便携式仪器以及电池供电的仪器仪表等。4.1 DS1302主要的性能指标:a) 实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力,还有闰年调整的能力。b) 31 8 位暂存数据存储RAMc) 串行I/O 口

6、方式使得管脚数量最少d) 宽范围工作电压2.0 5.5Ve) 工作电流2.0V 时,小于300nAf) 读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式g) 8脚DIP 封装或可选的8 脚SOIC 封装根据表面装配h) 简单3线接口i) 与TTL 兼容Vcc=5Vj) 可选工业级温度范围-40 +85k) 与DS1202 兼容,在DS1202 基础上增加的特性l) 对Vcc1 有可选的涓流充电能力m) 双电源管用于主电源和备份电源供应,备份电源管脚可由电池或大容量电容输入n) 附加的7字节暂存存储器4.2 DS1302 的基本组成和工作原理DS1302的管脚排列及描述如

7、下图及表所示管脚描述l X1 X2 32.768KHz 晶振管脚l GND 地l RST 复位脚l I/O 数据输入/输出引脚l SCLK 串行时钟l Vcc1,Vcc2 电源供电管脚l DS1302 内部寄存器l CH: 时钟停止位寄存器2 的第7 位12/24 小时标志CH=0 振荡器工作允许bit7=1,12 小时模式CH=1 振荡器停止bit7=0,24 小时模式l WP: 写保护位寄存器2 的第5 位:AM/PM 定义WP=0 寄存器数据能够写入AP=1 下午模式WP=1 寄存器数据不能写入AP=0 上午模式l TCS: 涓流充电选择DS: 二极管选择位TCS=1010 使能涓流充电

8、DS=01 选择一个二极管TCS=其它禁止涓流充电DS=10 选择两个二极管DS=00 或11, 即使TCS=1010, 充电功能也被禁止l RS 位电阻典型位00 没有没有01 R1 2K10 R2 4K11 R3 8K4.3 DS1302的寄存器DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字见表2。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类,一类是单个RAM单元

9、,共31个,每个单元组态为一个8位的字节,其命令控制字为COHFDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。4.4 DS1302的复位通过把 输入驱动置高电平来启动所有的数据传送。 输入有两种功能:首先, 接通控制逻辑,允许地址命令序列送入移位寄存器;其次, 提供了终止单字节或多字节数据的传送手段。当 为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中置 为低电平,则会终止此次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前, 必须

10、保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。五、 硬件电路设计模块5.1电源电路由于C51单片机的工作电压是5V,而我们日常生活中用的电压一般是220V的市电,因此我们需要设计一个电源转换电路,电路见下图。该电路可分为变压电路,整流电路,滤波电路,稳压电路。整个电路输入是220V电压,输出是5V的电压,即为单片机和实时时钟的正常工作电压。图3-2 稳压电源电路5.2控制电路利用AT89C51作为主控制器,在接口充足的情况下,考虑到编程容易,所以外接的7个按键开关采用独立式按键。P1口作为键盘接口。P1口所接电阻起上拉作用,没有键按下时,将P1口置高电平。当有按键按下,该口拉为

11、低电平。P1.0口接的是报警蜂鸣器。 5.3 LED显示电路该显示部分有2个3位共阴数码管和两个驱动(74LS07和74LS48组成)。根据实际经验,虽然在不接驱动的情况下,数码管也可被驱动,但电流太小,亮度不够,因此采用74LS07驱动数码管位选,用74LS48来驱动段选。5.4 DS1302在系统中的硬件电路DS1302与CPU的连接仅需要三条线,即SCLK(7)、I/O(6)、RST(5)。DS1302与CPU连接的电路原理图如图所示。在单电源与电池供电的系统中提供低电源并提供低功率的电池备份。在双电源系统中提供主电源,在这种运用方式下连接到备份电源,以便在没有主电源的情况下能保存时间信

12、息以及数据。DS1302由或两者中的较大者供电。当大于Vcc1+0.2V时,Vcc2给DS1302供电。当小于时,DS1302由供电。六、 硬件安装及调试6.1安装中注意的问题(1)晶体振荡器的接法:尽量要靠近IC插座,接地要尽量短,如果IC插座即89C51的接线太长,而晶体振荡器的频率很高,在这种情况下,接线会呈现感性。(2)三极管(9013)极性判别:在安装过程中切记不能将三极管引脚接错,否则不仅得不到设计想要的结果,还可能会烧坏三极管,影响到整个电路的性能。 (3)在安装集成芯片的过成中,注意不要将芯片反接,否则会将芯片烧坏,引起不必要 的损失。(4)在直接接用220V的市电时应在电源电

13、路设计中考虑到安全问题,在电路中接入保险丝,以便在电流超出电路板的负荷时能自动断开,不会造成事故。6.2 布线布局说明(1)在PCB设计中,布线与布局是一重要步骤:在整个PCB中,输入端与输出端的边线应避免相邻平行, 以免产生反射干扰。必要时应加地线隔离,两相邻层的布线要互相垂直,平行容易产生寄生耦合。(2)电源与地线的外理:尽量加宽电源、地线宽度,最好是地线比电源线宽,它们的关系是:地线电源线信号线,通常信号线宽为:0.20.3mm,最经细宽度可达0.050.07mm,电源线为1.22.5 mm。用大面积铜层作地线用,在印制板上把没被用上的地方都与地相连接作为地线用。(3)大面积导体中连接腿

14、的外理:在大面积的接地(电)中,常用元器件的腿与其连接,对连接腿的处理需要进行综合的考虑,就电气性能而言,元件腿的焊盘与铜面满接为好,但对元件的焊接装配就存在一些不良隐患如:焊接需要大功率加热器。容易造成虚焊点。所以兼顾电气性能与工艺需要,做成十字花焊盘,称之为热隔离(heat shield)俗称热焊盘(Thermal),这样,可使在焊接时因截面过分散热而产生虚焊点的可能性大大减少。(4)数字电路与模拟电路的共地处理:本电路是由数字电路和模拟电路混合构成的。因此在布线时需要考虑它们之间互相干扰的问题,特别是地线上的噪音干扰。数字电路的频率高,模拟电路的敏感度强,对信号线来说,高频的信号线应尽可

15、能远离敏感的模拟电路器件,对地线来说,整个PCB对外界只有一个结点,所以必须在PCB内部进行处理数、模共地的问题,而在板内部数字地和模拟地实际上应该是分开的,它们之间互不相连,只是在PCB与外界连接的接口处(如插头等),数字地与模拟地有一点短接。6.2安装调试中出现的问题:安装完后,各引脚电压正常,电源指示灯亮。进行软件调试过程中,出现以下问题。1)晶振的波形没有出来,原因:芯片的5脚虚焊,并且也存在接地问题解决方法:将5脚重新再焊一次,并纠正接地后就可以正常的工作。测晶振频率、波形,正确测量结果如下:波形为正弦波,f=11.0592MHz本设计测试时的结果如图4-2示图4-2 晶振测试图2)

16、芯片烧入程序后,程序不执行,检查发现31脚ALE没有接+5V,更正后,执行正常。3)有一个数码管的a画不亮。经检查发现,a画的引脚与小数点dp的焊点连在一起了,将焊点断开后即正常。4)蜂鸣器没有工作,原因是电路接法错法,原接法如图(a),改正后的为(b),正确的接法还有图(c)。 (a)错误的 (b)正确的 (c)正确的 七、 软件调试及设计1.软件设计思想:第一步:显示功能测试。利用软件逐个显示LED,从而检查显示电路,确定每个数字所对应的段码值。第二步:按键功能测试。利用软件测试按键部分功能是否第三步:时间显示第四步:时间可调测试第五步:万年历可调测试第六步:程序优化2.程序流程图:(见下

17、页)开始系统初始化送初值显示LOOP时钟自动加1调KEY_SET调功能键处理P1.2按下?开设置,调时间设置模块P1.1按下?P1.7按下?调闹铃设置切换到日历显示调时间显示P1.7按下?开设置,调日历设置模块调日历显示,延时10S,返回LOOP程序流程图八、 设计中存在的问题1.DS1302工作的稳定性加入辅助电容实现负载匹配在实际使用中,我们发现DS1302的工作情况不够稳定,主要表现在实时时间的传送有时会出现误差,甚至整个芯片停止工作。我们对DS1302的工作线路进行了分析。从上图看出,DS1302的外部电路十分简单,唯一外接的元件是32768Hz的晶体。通过实验发现:当外接晶体电路振荡

18、时,DS1302计时正确;当外接晶体电路停振时,DS1302计时停止。因此,我们认为32768Hz晶体是造成DS1302工作不稳定的主要原因。DS1302时钟脉冲的产生依赖外接晶体与其内部的电容配合。由于DS1302在芯片本身集成了6pF的电容,所以,为了获得稳定可靠的时钟,必须选用具有6pF负载电容的晶体。很多设计者在设计时仅注意晶体的额定频率值,而忽视了晶体的负载电容大小。在这里处理的办法是:先测晶体的负载电容(记为CI),若CI6pF,则在晶体的一端增加一串联电容CS以产生所需的负载电容CI,即1/CI=1/6pF1/CS,通过计算即可得出应增加的辅助电容的大小。如此处理,DS1302即

19、可起振。2.乱码显示时间显示时,可正常显示;调整时间时,按加键或减键时,偶有乱码出现,经调试仍没有解决问题。九、 设计总结通过本次万年历的设计,安装及调试,我觉的我基本上完成了从理论到实践的过度,懂的了如何在实际操作中运用所学的专业知识。我了解了贴片产品的工艺流程,焊接、组装技术也得到了很大的提高,认识到无论是在硬件设计还是在软件设计中,都要细心、耐心,每一个细小的环节都不容马虎,比如硬件检查,有的同学未经检查直接接220V电源,结果导致自己的实验板和实验装置一起烧坏。通过实习我学会了理性的去设计、调试,遇到问题不再盲目。十、 附录附录一:元器件清单元器件名称数量元器件名称数量敷铜板115mm

20、x90mm1三极管90131实时时钟芯片DS13021发光二极管1AT89C511470u电容16位驱动器7407147u电容17448110u电容13位共阴LED222P电容412M晶振1104P电容332.768K晶振1DIP4017805稳压管1DIP1611N40015DIP141按键8DIP811K排阻1220-15变压器14.7K排阻113.6V电池1K电阻6附录二:系统电路图 图4-3 系统电路图附录三:设计PCB板图附录四:万年历实物图附录五:程序清单;本程序实现实时时钟模块 时钟芯片型号:DS1302 ;ds1302时钟上升沿输入命令或数据,下降沿输出数据.;/;本程序使用的

21、数码管为共阳极数码管.; 显示的时间:分为05,秒为00,然后在这个时间上累加.因数码管有限,只显示分; 和秒.T_CLK Bit P2.2 ;实时时钟时钟线引脚T_IO Bit P2.1 ;实时时钟数据线引脚T_RST Bit P2.0 ;实时时钟复位线引脚;*40h-46h 存放 秒 分 时 日 月 星期 年 second equ 40hminite equ 41hhour equ 42horg 0000hajmp mainorg 0030hmain: ;*主程序设定初值mov dptr,#tab ;送入表格地址mov 40h,#50H ;秒赋初值mov 41h,#59H ;分赋初值mov

22、 42h,#11H ;时赋初值mov 43h,#22H ;日赋初值mov 44h,#10H ;月赋初值mov 45h,#00H ;星期赋初值mov 46h,#06H ;年赋初值clr p1.0 ;闹铃不响CLR P3.5 ;红色指示灯灭,设置禁止,CLR P3.6 ;绿色指示灯灭,闹铃禁止START:lcall set1302 ;调用初值设定子程序;*loop: lcall get1302 ;调用时钟子程序,时钟自动加时AAA: lcall exchange ;调用十六进制转BCD码子程序 mov r4, #6 ;刷新次数tt1:lcall display ;调用动态扫描子程序 djnz r4

23、,tt1 lcall key_set ;调键盘扫描 JNB P3.5,tt3 ;p3.5为1,绿灯亮,开设置 lcall key1tt3: JNB P3.6,loopmov a,41hcjne a,#00h,loopcpl p1.0 ;p3.6为1时,调用闹铃程序AJMP loop NOP NOPKEY1:MOV P1,#0FEH KEY_HOUR_ADD:JB P1.3,KEY_HOUR_SUB MOV A,42H ;小时加一 INC a CJNE A,#24H,HADD MOV A,#00h HADD:MOV 42H,A LJMP START KEY_HOUR_SUB:JB P1.4,KE

24、Y_MINI_ADD MOV A,42H ;小时减一 dec a CJNE A,#00H,HSUB MOV A,#24H HSUB:MOV 42H,A LJMP STARTKEY_MINI_ADD:JB P1.5,KEY_MINI_SUB MOV A,41H ;分加一 INC a CJNE A,#60H,MADD MOV A,#00H MADD:MOV 41H,A LJMP STARTKEY_MINI_SUB:JB P1.6,ret_key1 MOV A,41H ;分减一 dec a CJNE A,#00H,MSUB MOV A,#59H MSUB:MOV 41H,A LJMP START r

25、et_key1: ret NOP ;*按键处理KEY_DATE0:lcall delay10ms ;清抖 JB P1.2,KEY_DATE LJMP KEY_DATE0KEY_time: LJMP LOOP retkey_set:jnb p1.2,key_date0 jb p1.1 ,ss cpl p3.6SS:jb p1.7,ret1 cpl p3.5 ret1:RETkey_set2:jnb p1.2,key_TIME JB p1.7,ret2 cpl p3.5ret2:retKEY_DATE:mov r5,#100lcall set1302 ;调用初值设定子程序 dd0:mov r6,#

26、200dd1:mov r7,#248 LCALL GET1302 LCALL EXCHANGE LCALL DISPLAY2 LCALL KEY_SET2 JNB P3.5,dd2 lcall key2dd2:djnz r7,dd2 djnz r6,dd1 djnz r5,dd0 AJMP loopKEY2:MOV P1,#0FEH JB P1.2, KEY_MONTH_ADD Lcall KEY_TIME KEY_MONTH_ADD:JB P1.3,KEY_MONTH_SUB MOV A,44H ;月份加一 INC A CJNE A,#13H,MOADD MOV A,#00H MOADD:M

27、OV 44H,A LJMP KEY_DATEKEY_MONTH_SUB:JB P1.4,KEY_DATE_ADD MOV A,44H ;月份减一 dec a CJNE A,#00H,MOSUB MOV A,#12H MOSUB:MOV 44H,A LJMP KEY_DATE KEY_DATE_ADD:JB P1.5,KEY_DATE_SUB MOV A,43H ;日加一 INC a CJNE A,#31H,DADD MOV A,#00H DADD:MOV 43H,A LJMP KEY_DATE KEY_DATE_SUB:JB P1.6,ret_key2 MOV A,43H ;日减一 dec a

28、 CJNE A,#00H,DSUB MOV A,#30H DSUB:MOV 43H,A LJMP KEY_DATE ret_key2:ret ;* * 十六进制-BCD码转换exchange:mov a,46hmov b,#10Hdiv ab ;把40H高低4位分开mov 36h,a ;高4位存入31H单元mov a,bmov 35h,a ;低4位存入30H单元mov a,44hmov b,#10Hdiv ab ;把40H高低4位分开mov 34h,a ;高4位存入31H单元mov a,bmov 33h,a ;低4位存入30H单元mov a,43hmov b,#10Hdiv ab ;把40H高

29、低4位分开mov 32h,a ;高4位存入31H单元mov a,bmov 31h,a ;低4位存入30H单元 ;mov a,42hmov b,#10Hdiv ab ;把41H高低4位分开mov 30h,a ;高4位存入33H单元mov a,bmov 29h,a ;低4位存入32H单元mov a,41hmov b,#10Hdiv ab ;把41H高低4位分开mov 28h,a ;高4位存入33H单元mov a,bmov 27h,a ;低4位存入32H单元mov a,40hmov b,#10Hdiv ab ;把40H高低4位分开mov 26h,a ;高4位存入31H单元mov a,bmov 25h

30、,a ;低4位存入30H单元retNOPNOP;*;年月日显示,时分秒显示,36h,35h; 34h,33h;32h,31h; 30h,29h; 28h,27h; 26h,25h;* *时分秒显示display:mov r7,#100 ;动态扫描次数dis: ;秒数码管低位mov a,25hmovc a,a+dptrmov p2,a ;秒低位段选码送P0口clr p0.4;秒数码管低位开显示lcall delay100ussetb p0.4 ;秒数码管低位关显示 ;秒数码管高位mov a,26hmovc a,a+dptrmov p2,a ;秒高位段选码送P0口clr p0.3 ;秒数码管高位开

31、显示lcall delay100ussetb p0.3 ;秒数码管高位关显示 ;分数码管低位mov a,27h ;分低位段选码送P0口movc a,a+dptrmov p2,a ;分低位段选码送P0口clr p0.2 ;分数码管低位开显示SETB P0.0 ;分小数点亮lcall delay100ussetb p0.2 ;分数码管低位关显示CLR P0.0 ;分小数点灭 ;分数码管高位mov a,28hmovc a,a+dptrmov p2,a ;分高位段选码送P0口clr p0.5 ;分数码管高位开显示lcall delay100ussetb p0.5 ;分数码管高位关显示 ;时数码管低位m

32、ov a,29h ;时低位段选码送P0口movc a,a+dptrmov p2,a ;时低位段选码送P0口clr p0.6 ;时数码管低位开显示SETB P0.0 ;时小数点亮lcall delay100ussetb p0.6 ;时数码管低位关显示CLR P0.0 ;时小数点灭 ;时数码管高位mov a,30hmovc a,a+dptrmov p2,a ;时高位段选码送P0口clr p0.7 ;时数码管高位开显示lcall delay100ussetb p0.7 ;时数码管高位关显示djnz r7,disretdelay100us: mov r5,#50 djnz r5,$ retdelay1

33、s: mov r5,#10 del0:mov r6,#200 del1:mov r7,#248 lcall get1302 ;调用时钟子程序,时钟自动加时 lcall exchange ;调用十六进制转BCD码子程序 mov r4, #6 ;刷新次数 ttt: lcall display ;调用动态扫描子程序 djnz r4,ttt del2:djnz r7,del2 djnz r6,del1 djnz r5,del0 retdelay10ms: mov r6,#10 d1:mov r7,#248 djnz r7,$ djnz r6,d1 ret;*年月日显示display2:mov r7,#

34、100 ;动态扫描次数dis2: ;日数码管低位mov a,31hmovc a,a+dptrmov p2,a ;日低位段选码送P0口clr p0.4 ;日数码管低位开显示lcall delay100ussetb p0.4 ;日数码管低位关显示mov a,32h ;日数码管高位movc a,a+dptrmov p2,a ;日高位段选码送P0口clr p0.3 ;日数码管高位开显示lcall delay100ussetb p0.3 ;日数码管高位关显示 ;月数码管低位mov a,33h ;月低位段选码送P0口movc a,a+dptrmov p2,a ;月低位段选码送P0口clr p0.2 ;月数

35、码管低位开显示SETB P0.0 ;月小数点灭lcall delay100ussetb p0.2 ;月数码管低位关显示CLR P0.0 ;月小数点灭 ;月数码管高位mov a,34hmovc a,a+dptrmov p2,a ;月高位段选码送P0口clr p0.5 ;月数码管高位开显示lcall delay100ussetb p0.5 ;月数码管高位关显示 ;年数码管低位mov a,35h ;年低位段选码送P0口movc a,a+dptrmov p2,a ;年低位段选码送P0口clr p0.6 ;年数码管低位开显示SETB P0.0 ;年小数点亮lcall delay100ussetb p0.

36、6 ;年数码管低位关显示CLR P0.0 ;年小数点灭 ;年数码管高位mov a,36hmovc a,a+dptrmov p2,a ;时高位段选码送P0口clr p0.7 ;时数码管高位开显示lcall delay100ussetb p0.7 ;时数码管高位关显示djnz r7,dis2rettab:DB 00H,10H,80H,90H,40H,50H,0c0H,0d0H,20H,30H;*;子程序名:Set1302;功 能:设置DS1302 初始时间,并启动计时。;调 用:RTInputByte;入口参数:初始时间:Second,;Minute,Hour,Day,Month,Week.Yea

37、rL(地址连续);出口参数:无;影响资源:A B R0 R1 R4 R7;*Set1302:CLR T_RSTCLR T_CLKSETB T_RSTMOV B, #8EH ;控制寄存器LCALL RTInputByteMOV B, #00H ;写操作前WP=0LCALL RTInputByteSETB T_CLKCLR T_RSTMOV R0, #Second;MOV R7, #7 ;秒 分 时 日 月 星期 年MOV R1, #80H ;秒写地址S13021: CLR T_RSTCLR T_CLKSETB T_RSTMOV B, R1 ;写秒 分 时 日 月 星期 年 地址LCALL RTI

38、nputByteMOV A, R0 ;写秒数据MOV B, ALCALL RTInputByteINC R0INC R1INC R1SETB T_CLKCLR T_RSTDJNZ R7, S13021CLR T_RSTCLR T_CLKSETB T_RSTMOV B, #8EH ;控制寄存器LCALL RTInputByteMOV B, #80H ;控制,WP=1,写保护LCALL RTInputByteSETB T_CLKCLR T_RSTRET;*;子程序名:Get1302;功 能:从DS1302 读时间;调 用:RTInputByte,RTOutputByte;入口参数:时间保存在:Se

39、cond,Minute,Hour,Day,Month,Week.YearL;出口参数:无;影响资源:A B R0 R1 R4 R7;*Get1302:MOV R0, #Second;MOV R7, #7MOV R1, #81H ;秒地址G13021: CLR T_RSTCLR T_CLKSETB T_RSTMOV B, R1 ;秒 分 时 日 月 星期 年 地址LCALL RTInputByteLCALL RTOutputByteMOV R0, A ;秒INC R0INC R1INC R1SETB T_CLKCLR T_RSTDJNZ R7, G13021RET;*;功 能:写1302一字节 (内部子程序);*RTInputByte:MOV 50h, #8 ;一个字节有八个位,移八次.Inbit1: MOV A, BRRC A ;通过A移入CY.MOV B, AMOV T_IO, C ;移入芯片内.SETB T_CLKCLR T_CLKDJNZ 50h, Inbit1RET;*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号