利用单片机及DS1302制作电子时钟_第1页
利用单片机及DS1302制作电子时钟_第2页
利用单片机及DS1302制作电子时钟_第3页
利用单片机及DS1302制作电子时钟_第4页
利用单片机及DS1302制作电子时钟_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

单片机原理及应用 基于基于 ProteusProteus 和和 KeilKeil C C 实 习 报 告 课程名 利用单片机及 DS1302 制作电子时钟 指导教师 朱华贵老师 专业 应用电子技术 年级 10 级 评定 组员 邱凌芳 杨侨 陈佳佳 设计时间 2012 年 5 月 18 日 江西财经大学 职业技术学院 摘摘 要要 为了进一步熟悉51单片机的编程以及学习电子时钟的相关设计方法 在 老师的指导下我们进行了本次电子时钟的设计 我们在实习期间基于51单片机 AT89C51和时钟芯片DS1302设计并实 现了电子时钟显示 在PCB板制作完成并且调试成功之际 为了进一步提高 自己的动手能力和编程能力 对这次电子时钟的设计和制作的过程中遇到的 问题及设计思路做一次总结 本电子时钟是一种利用时钟芯片DS1302及51单片机来显示时 分 秒和 年 月的装置 默认显示为时间 由四个按键分别控制定时设置 时间调整 分钟调整 日期显示 设计电路工作电源为5V 由4位LED数码管显示时间 格式为时时分分 中间点每隔1S亮暗 有备用电池 掉电后再上电能正常显 示时间 电子时钟大体可以分为三大模块 数码管的显示模块 DS1302 时钟芯片 与单片机的时钟模块和按键与单片机的模块 单片机在 5V 电压下 各个模块正常工作 单片机从 DS1302 芯片中读出 一组时间日期数据 同时单片机通过按键设置当前要求显示的信息给单片机 单片机接收到各个数据时 把各个数据显示出来 目目 录录 一 总体设计 4 1 1 设计目的 4 1 2 硬件功能描述 4 1 3 设计方案选择 4 1 4 设计任务及要求 4 二 电子时钟软件和硬件设计 5 2 1 硬件电路设计 5 2 1 1 工作原理 5 2 1 2 单元模块电路 5 2 1 3 元器件清单 7 2 2 软件设计 7 2 2 1 程序设计流程 7 2 2 2 主控程序 8 三 电路调试 9 四 总结 10 五 参考文献 11 附录 DS1302时钟芯片的工作原理和使用方法 12 附录 程序清单 13 附录 原理图 PCB 图及实物图 20 一 总体设计一 总体设计 此电子时钟利用 AT89C51 单片机和时钟芯片 DS1302 设计完成 1 11 1 设计目的设计目的 1 通过对电子时钟的设计 进一步熟练掌握单片机编程方法及思想 2 通过对电子时钟的设计 掌握实时时钟芯片 DS1302 的使用方法 3 通过对电子时钟的设计 进一步掌握独立式键盘的编程控制并认识 独立式键盘在实际中的运用 4 通过对电子时钟的设计 增强对单片机的兴趣及动手能力 并在此 过程中学会对程序的逐步调试 1 21 2 硬件功能描述硬件功能描述 数字钟能够完成24 小时制计时 计时初始化值为00 00 00 用户可以 通过按键调整时钟的初值实现校时功能 并且可以通过按键设定一个24 小 时以内任意时刻的闹铃 用户可以手动选择闹铃的开或者关两种状态 1 31 3 设计方案选择设计方案选择 计时方案 计时方案 方案 1 采用实时时钟芯片 现在市场上有许多实时时钟集成电路 如 DS1287 DS2887 DS1302 等 这些实时时钟芯片具备年 月 日 时 分 秒计时功能和多点定时 功能 计时数据的更新每秒自动进行一次 不需要程序干预 因此 在工 业实时测控系统中多采用这这一类专用芯片来实现实时时钟功能 方案 2 是用单片机内的可编程定时器 利用单片机内部的定时计数器进行中断定时 配合软件延时实现时分 秒的计时 该方案节省硬件成本 但程序设计较复杂 显显示示方方案案 一个良好的显示模块对一个系统非常重要 所有操作结果和计时结果 都要通过显示模块来显示出来 同时显示模块提供了良好的人机交互平台 常用的显示模式有LED 7段数码管显示 点阵显示和液晶显示 液晶显示屏 LCD 具有轻薄短小 低耗电量 无辐射危险 平面直角 显示以及影象稳定不闪烁等优势 可视面积大 画面效果好 分辨率高 抗 干扰能力强等特点 但由于液晶其成本偏高 在使用时 不能有静电干扰 否则易烧坏液晶的显示芯片 鉴于LED 7段数码管成本低 也比较容易实现的特点 最终确定使用共 阳极数码管来显示 1 41 4 设计任务及要求设计任务及要求 任务 任务 设计一个可调时及日期显示的电子时钟 要求 要求 1 用 DS1302 来实现对时间的计算 2 用 7 段 LED 来显示时间 3 加独立式键盘来进行调时 二 电子时钟软件和硬件设计二 电子时钟软件和硬件设计 2 12 1 硬件电路设计硬件电路设计 2 1 12 1 1 工作原理工作原理 此电子时钟可显示的时间范围为 2000 年 1 月 1 日 0 点至 2100 年 12 月 31 日 23 时 59 分 此时钟在正常计时模式下具有自动调整 每月的天数的变化 并用内接电池对时间保持 时间为 24 小时至 接通电源对时间进行调整 按定时设置键确定被修改位的值 用时钟芯片记忆当前时间并保持 待下次接通电源无须调整能正确 显示当前时间 定时设置 定时设置 菜单按键 松开按键时有效 此按键实现闹铃功能 设定一个时间 此时四位数码管第 四位的小数点亮起 表示有闹铃设置 当闹铃是可按此键结束 闹铃 时 分调整时 分调整 加一键 松开按键有效 当定时设置键选中要修改的位时 如分 分闪烁时 按 此键可以使分的值从当前值开始加一 加至 60 时变为 00 59 过后即显示 00 不显示 60 而时则在加至 24 时变为 00 23 过后即显示 0 不显示 24 日在加至 32 时变为 00 即 31 过 后即显示 0 不显示 32 月在加至 13 时变为 00 即 12 过后即 显示 0 不显示 13 年在至 2100 时变为 2000 即 2099 过后 即显示 2000 不显示 2100 日期显示日期显示 年 月显示键 松开按键有效 按下此键松开后 显示为日期 5 秒后自动返回时间显示 2 1 22 1 2 单元模块电路单元模块电路 1 1 独立按键模块独立按键模块 P1 7 8 P3 7 RD AT89C51 R9 10k R10 10k R11 10k R12 10k B1 3 6V 定定时时设设置置 时时调调整整 分分调调整整 日日期期显显示示 系统有四个独立按键 分别接至单片机P1 4 P1 5 P1 6 P1 7口 2 2 显示模块显示模块 2 3 4 5 6 7 8 9 1 RP1 4 7K R4 2K R5 2k R6 2K R7 2K Q1 8550 Q2 8550 Q3 8550 Q4 8550 本系统显示模块电路由四个PNP三极管和一个四位一体7段LED数 码管组成 PNP三极管用来驱动数码管 3 3 复位电路模块复位电路模块 U2 R3 R8 10k C1 10uF 16V 复位电路主要的功能是使整个系统初始化 在每次上电时系统 自动初始化 使CPU及其他功能部件处于一个确定的初始状态 并 从这个状态开始工作 单片机应用程序必须以此作为设计的前提 4 4 时钟芯片模块时钟芯片模块 RST 5 SCLK 7 I O 6 X1 2 X2 3 VCC1 8 VCC2 1 U2 DS1302 X1 32 768KB1 3 6V DS1302时钟芯片是本系统实现高精度计时的关键 利用DS1302 时钟芯片独立于单片机来计时 在提高计时进度的同时也提高了整 个系统的抗干扰能力 DS1302通过SCLK I O RES端口和单片机 AT89C51 进行通信 SCLK接至单片机P1 1口 在读写操作时给 DS1302提供相应的时钟脉冲 I O接至P1 2用来传送所有的数据 RES接至单片机P1 3上用来控制单片机与时钟芯片间的数据传送的开 始与结束 DS1302 的工作原理及使用方法见附录 5 5 主控模块主控模块 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0 0 AD0 39 P0 1 AD1 38 P0 2 AD2 37 P0 3 AD3 36 P0 4 AD4 35 P0 5 AD5 34 P0 6 AD6 33 P0 7 AD7 32 P1 0 1 P1 1 2 P1 2 3 P1 3 4 P1 4 5 P1 5 6 P1 6 7 P1 7 8 P3 0 RXD 10 P3 1 TXD 11 P3 2 INT0 12 P3 3 INT1 13 P3 4 T0 14 P3 7 RD 17 P3 6 WR 16 P3 5 T1 15 P2 7 A15 28 P2 0 A8 21 P2 1 A9 22 P2 2 A10 23 P2 3 A11 24 P2 4 A12 25 P2 5 A13 26 P2 6 A14 27 U1 AT89C51 R8 10k 10uF 16V C2 30PF C3 30PF X2 12MHz 主控模块的核心组成部分是单片机AT89C51 承担着所有操作任务 的调控与分派工作 6 6 闹钟模块闹钟模块 闹铃模块由蜂鸣器和蜂鸣器的驱动组成 在有闹铃发生的时候 蜂鸣器的驱动电路驱动蜂鸣器发声 产生闹铃的效果 2 1 32 1 3 元器件清单元器件清单 元件名称规格型号数量 个 单片机 AT89S511 时钟芯片 DS13021 4 位一体的共阳 LED 显示器 7SEG MPX4 CA BLUE1 按键 BUTTON3 电阻 2K4 排阻 4 7K1 三极管 NPN4 电阻 10K10 2 22 2 软件设计软件设计 2 2 12 2 1 程序设计流程程序设计流程 Y Y N N N NY Y Y YN N N N 开始 主程序 定时器 T1 初始化 Ds1302 读取数值 与设定数值是否相 同 掉电后重启 初始化 ds1302 Flag 1 定时计数器1工作在方式1定时状态 5us 开中断 TH1 65536 2 256 TL1 65536 2 256 TR1 1 ET1 1 EA 1 timer flag Read1302 READ TIMER FLAG if timer flag timer flag rom 16 10 timer flag rom 16 else Initial while 1 if flag 1 if set timer 1 显示走时 Data Buffer 0 Read1302 READ MINUTE 10 Data Buffer 1 Read1302 READ MINUTE 10 Data Buffer 2 Read1302 READ HOUR 10 Data Buffer 3 Read1302 READ HOUR 10 if Set Min Read1302 READ MINUTE P14 0 else P14 1 else 显示调节时的值 Data Buffer 0 Min 10 Data Buffer 1 Min 10 Data Buffer 2 Hou 10 Data Buffer 3 Hou 10 if Set flag 1 显示设定闹钟值 判断闹钟是否 发生 响闹钟 返回 Data Buffer 0 Set Min 10 Data Buffer 1 Set Min 10 Data Buffer 2 Set Hou 10 Data Buffer 3 Set Hou 10 三 电路调试三 电路调试 各程序模块具有一定的独立性 因此可以先调试模块 在模块 功能都能实现的前提下 再调试总程序 这样能快捷地检查判断硬 件或软件上的问题 调试结果及解决办法如下 1 测试 DS 读写模块时 从 LED 显示能正确写入与读取当前时间 但 DS1302 的工作情况不太理想 主要表现在实时时间稍微偏快 DS1302 时钟的产生基于外接的晶体振荡器 振荡器的频率为 32768HZ 该晶振通过引脚 X1 X2 直接连接至 DS1302 即 DS1302 是依靠外部晶振与其内部的电容配合来产生时钟脉冲 由于 DS1302 在芯片本身已经集成了 5pF 的电容 所以 为了获得稳定的可靠的 时钟 必须选用具有 5pF 负载电容的晶振 然而 许多人在选用晶 振时仅仅注意了晶振的额定频率值 而忽视了晶振的负载电容大小 甚至连许多经销商也不能提供所售晶振的负载电容 所以即使在使 用中选用了符合 32768Hz 的晶振 但如果该晶振的负载电容与 DS1302 提供的 5pF 不一致时 就会影响晶振的起振或导致振荡频率 的偏移 2 测试显示模块时 数码显示管全亮显示 8 8 8 8 而不是预设 的初值 利用 Proteus 软件仿真 发现仿真显示正常 再检查硬件 发现段码位选线与 P0 口接线错误 按原理图重新焊接后能正常显示 3 测试蜂鸣模块时 没有时间显示一直保持蜂鸣 不能返回主程序 重新检查程序再次赋值给 DS1302 和闹钟时实物正常工作 证明现有 程序语法和逻辑上没有错误 从赋值过的数字中找规律 发现当 DS 初值的 分 个位为 9 而闹钟的 分 为 0 时 蜂鸣出现错误 查阅 DS 的显示有关资料 由于 DS 的数据是 BCD 码形式读取 因此 X9 的数据加 1 后为 0 但程序所用为十六进制 X9 加 1 后为 A 所以当 DS 刚到达闹钟时间准备蜂鸣时 程 序中用 INC 指令对 分 加 1 后只达到 A 与 DS 一分钟后读取 到的 0 一直不相等 程序无法向下执行 也就是无法同步显示 当前时间以及关闭蜂鸣 解决办法 进入蜂鸣状态时 先对比是否是个位为 9 的数据 是则按照 BCD 码形式直接赋值为 0 到暂存区 再加 1 否则直 接用 INC 指令加 1 不断读取 DS 分 的数据与暂存区数据比较 相等则表示满一分钟 关闭蜂鸣 修改程序后该模块运行正常 4 测试调整模块 进入中断时 按键后有时出现显示错乱 按键失 灵 出现连续加减的情况 有了蜂鸣模块的前例 增加了数据个位 为 9 时的处理程序 分析出现连续加减可能是因为消抖延时不够 造成程序误判断为按键连击 因此增大延时时间 修改程序后该模 块正常运作 5 综合总程序测试 各部分功能运作正常 达到任务要求 四 总结四 总结 课程设计是培养学生综合运用所学知识 发现 提出 分析和 解决实际问题 锻炼实践能力的重要环节 是对学生实际工作能力 的具体训练和考察过程 随着科学技术发展的日新月异 单片机已 成为当今计算机应用中空前活跃的领域 在生活中可以说是无处不 在 因此作为二十一世纪的大学生来说掌握单片机的开发技术是十 分重要的 通过本次单片机课程实践 使我们能够更熟练的掌握单片机画 图技巧及编程方法 学会使用画图软件Proteus 编程软件Keil C和 Protel软件 从画原理图 编程到焊板 写入程序每一步都参与操 作 掌握多方面与单片机有关的实践操作技巧 虽说在这一过程中遇到许多问题 但在解决问题的过程中增进 了我们对单片机知识的掌握 将课堂上学到的知识运用于实践 不 仅增进了我们的实际操作能力也更加巩固了基础知识 加强了编程 能力 能更好的读懂程序 这次课程设计后我们懂得了理论与实际相结合的重要性 虽说 在设计的过程中遇到的问题可以说是数不胜数 但这毕竟是第一次 做 难免会遇到各种各样的问题 同时在设计的过程发现了自己的 不足之处 对以前所学的知识理解得不够深刻 掌握得不够牢固 比如说不懂一些元器件的使用方法 对单片机汇编语言掌握得不 好 这次课程设计之后 一定把以前所学的知识重新温故 这次课程设计终于顺利完成 在设计中遇到了很多编程问题 最后在朱老师那学到了很多实用的的知识 再次我表示感谢 五 参考文献五 参考文献 1 8051 系列单片机C程序设计完全手册 求是科技 编著 人民邮电出版社 2006 2 51单片机应用从零开始 杨欣 编著 清华大学出版社 2008 3 单片机原理及接口技术 第三版 李朝青 编著 北京航空航天大学出版社 2008 4 51单片机C语言教程 郭天祥 编著 电子工业出版社 2009 附录附录 DS1302DS1302 时钟芯片的工作原理和使用方法时钟芯片的工作原理和使用方法 1 1 DS1302的基本组成和工作原理 DS1302的管脚排列及描述如下图及表所示 2 2 DS1302内部寄存器 CH 时钟停止位 bit7 1 12 小时模式 CH 0 振荡器工作允许 bit7 0 24 小时模式 CH 1 振荡器停止 寄存器2 的第5 位 AM PM 定义 WP 写保护位 AP 1 下午模式 WP 0 寄存器数据能够写入 AP 0 上午模式 WP 1 寄存器数据不能写入 DS 二极管选择位 TCS 涓流充电选择 DS 01 选择一个二极管 TCS 1010 使能涓流充电 DS 10 选择两个二极管 TCS 其它 禁止涓流充电寄存 DS 00或11 即使TCS 1010 充电 器2的第7位12 24小时标志 功能也被禁 3 3 DS1302使用说明及注意的问题 DS1302的控制字如表1所示 控制字节的最高有效位 位7 必 须是逻辑1 如果它为0 则不能把数据写入到DS1302中 位6如果为 0 则表示存取日历时钟数据 为1则表示存取RAM数据 位 5 1 A4 A0 指示操作单元的地址 最低有效位 位0 如果为 0 则表示要进行写操作 为1 表示进行读操作 控制字节总是从最 低位开始输入 输出 表表1 1 DS1302DS1302 控制字控制字 时钟暂停 秒寄存器的位7定义位时钟暂停位 当它为1时 DS1302停止振荡 进入低功耗的备份方式 通常在对DS1302进行写 操作时 如进入时钟调整程序 停止振荡 当它为0时 时钟将开 始启动 AM PM 12 24小时方式 小时寄存器的位7定义为12或24小时方 式选择位 它为高电平时 选择12小时方式 在此方式下 位5为第 二个10小时位 20 23h DS1302的晶振选用32768Hz 电容推荐值为6pF 因为振荡频率 较低 也可以不接电容 对计时精度影响不大 附录附录 程序清单程序清单 ORG 0000H START LJMP MAIN ORG 0030H MAIN MOV SP 5FH MOV R0 30H MOV R2 30H MOV A 00H LP0 MOV R0 A INC R0 DJNZ R2 LP0 LCALL DISPLAY SJMP MAIN MOV 41H 00H 启动时钟工 作 秒分时日月星期年 LCALL START1302 MOV 42H 46H 分单元 MOV 43H 13H 时单元 MOV 44H 01H 日单元 MOV 45H 06H 月单元 MOV 46H 05H 星期单元 MOV 47H 12H 年后两位单 元 MOV 52H 00H MOV 53H 00H CLR 30H SETB 31H LCALL Set1302 LCALL DISPLAY LP1 LCALL Get1302 MOV 40H 41H LP11 LCALL DISPLAY LCALL GET1302 MOV A 41H CJNE A 40H LP2 LJMP LP21 LP2 CPL 30H MOV 40H 41H LJMP LP11 LP21 JB 31H LP22 31H 0 定时报 警 LCALL DSBJ LCALL DISPLAY LP22 LCALL KEYSCAN MOV DPTR TAB MOV A 30H RL A ADD A 30H JMP A DPTR TAB LJMP LP11 无按键 LJMP TSSZ 定时设置 LJMP SJY 时加 1 LJMP FJY 分加 1 LJMP RQXS 日期显示 TSSZ CPL 31H TSSZ0 JB P1 4 TSSZ1 LCALL TSDISPLAY SJMP TSSZ0 TSSZ1 JNB 31H TSSZ00 31H 1 定 时关闭 31H 0 定时设置 LCALL DISPLAY LJMP LP11 TSSZ00 MOV 51 20H TSSZ10 MOV 50H 00H TSSZ11 JB P1 5 TSSZ3 定时时设 置 MOV A 53H ADD A 01H DA A CJNE A 24H TSSZ2 MOV A 00H TSSZ2 MOV 53H A TSS1 LCALL TSDISPLAY JNB P1 5 TSS1 TSSZ3 LCALL TSDISPLAY 定时显 示 JB P1 4 TSSZ11 JNB P1 4 MOV 51H 20H TSSZF0 MOV 50H 00H TSSZF1 JB P1 6 TSSZF3 定时分设 置 MOV A 52H ADD A 01H DA A CJNE A 60H TSSZF2 MOV A 00H TSSZF2 MOV 52H A TSF1 LCALL TSDISPLAY JNB P1 6 TSF1 TSSZF3 LCALL TSDISPLAY JB P1 4 TSSZF1 JNB P1 4 LCALL TSDISPLAY LJMP LP11 DSBJ MOV A 53H CJNE A 43H DSBJ1 MOV A 52H CJNE A 42H DSBJ1 MOV 50H 06H DSBJ0 CLR P1 3 LCALL DISPLAY SETB P1 3 LCALL D2MS DJNZ 50H DSBJ0 SETB 31H DSBJ1 RET SJY MOV A 43H 时加 1 处 理 ADD A 01H DA A CJNE A 24H SJY0 MOV A 00H SJY0 MOV 43H A LCALL SET1302 SJY1 JB P1 5 SJY2 LCALL DISPLAY SJMP SJY1 SJY2 LJMP LP11 FJY MOV A 42H 分加 1 处 理 ADD A 01H DA A CJNE A 60H FJY0 MOV A 00H FJY0 MOV 42H A LCALL SET1302 FJY1 JB P1 6 FJY2 LCALL DISPLAY SJMP FJY1 FJY2 LJMP LP11 RQXS LCALL RQDISPLAY RQXS1 JB P1 7 RQXS2 LCALL RQDISPLAY SJMP RQXS1 RQXS2 MOV R3 00H RQXS3 LCALL RQDISPLAY LCALL RQDISPLAY DJNZ R3 RQXS3 LCALL DISPLAY LJMP LP11 KEYSCAN PUSH ACC MOV 30H 00H ORL P1 0F0H MOV A P1 SWAP A ANL A 0FH JB ACC 0 K1 MOV 30H 01H SJMP KEYEND K1 JB ACC 1 K2 MOV 30H 02H SJMP KEYEND K2 JB ACC 2 K3 MOV 30H 03H SJMP KEYEND K3 JB ACC 3 KEYEND MOV 30H 04H KEYEND POP ACC RET KEYPLAY MOV R5 04H MOV R0 52H 51H 为秒 52H 分 53H 为时 54H 为日 55H 为月 MOV R3 08H DIS2 MOV DPTR TABLE MOV A R0 ANL A 0FH MOVC A A DPTR MOV P0 A MOV A R3 MOV P2 A LCALL D2MS MOV A R0 ANL A 0F0H SWAP A MOVC A A DPTR MOV P0 A MOV A R3 RR A MOV R3 A MOV P2 A INC R0 MOV A R3 RR A MOV R3 A LCALL D2MS DJNZ R5 DIS2 CLR P2 0 RET DISPLAY PUSH ACC PUSH PSW MOV DPTR TABLE MOV R1 42H MOV A R1 ANL A 0FH MOVC A A DPTR MOV C 31H 有定时设置则在分钟个位显示点 MOV ACC 7 C MOV P0 A MOV P2 0FEH 实物值 MOV P2 08H 仿真值 LCALL D2MS MOV P2 00H MOV A R1 SWAP A ANL A 0FH MOVC A A DPTR MOV P0 A MOV P2 0FDH MOV P2 04H LCALL D2MS MOV P2 00H MOV R1 43H MOV A R1 ANL A 0FH MOVC A A DPTR MOV C 30H MOV ACC 7 C MOV P0 A MOV P2 0FBH MOV P2 02H LCALL D2MS MOV P2 00H MOV A R1 SWAP A ANL A 0FH MOVC A A DPTR MOV P0 A MOV P2 0F7H MOV P2 01H LCALL D2MS MOV P2 00H POP PSW POP ACC RET RQDISPLAY PUSH ACC 日期显示 PUSH PSW MOV DPTR TABLE MOV R1 44H MOV A R1 ANL A 0FH MOVC A A DPTR MOV P0 A MOV P2 0FEH 实物 值 MOV P2 08H 仿真 值 LCALL D2MS MOV P2 00H MOV A R1 SWAP A ANL A 0FH MOVC A A DPTR MOV P0 A MOV P2 0FDH MOV P2 04H LCALL D2MS MOV P2 00H MOV R1 45H MOV A R1 ANL A 0FH MOVC A A DPTR MOV P0 A MOV P2 0FBH MOV P2 02H LCALL D2MS MOV P2 00H MOV A R1 SWAP A ANL A 0FH MOVC A A DPTR MOV P0 A MOV P2 0F7H MOV P2 01H LCALL D2MS MOV P2 00H POP PSW POP ACC RET TSDISPLAY PUSH ACC 定时显 示 PUSH PSW MOV DPTR TABLE MOV R1 52H MOV A R1 ANL A 0FH MOVC A A DPTR MOV P0 A MOV P2 0FEH 实物值 MOV P2 08H 仿真值 LCALL D2MS MOV P2 00H MOV A R1 SWAP A ANL A 0FH MOVC A A DPTR MOV P0 A MOV P2 0FDH MOV P2 04H LCALL D2MS MOV P2 00H MOV R1 53H MOV A R1 ANL A 0FH MOVC A A DPTR MOV P0 A MOV P2 0FBH MOV P2 02H LCALL D2MS MOV P2 00H MOV A R1 SWAP A ANL A 0FH MOVC A A DPTR MOV P0 A MOV P2 0F7H MOV P2 01H LCALL D2MS MOV P2 00H POP PSW POP ACC RET D2MS MOV R6 02H DL1 MOV R5 249 DL2 NOP NOP DJNZ R5 DL2 NOP DJNZ R6 DL1 RET TABLE DB 0C0H 0F9H 0A4H 0B0H 99H 92H 82H 0F8H 80H 90H 0FFH 0FFH 0FFH 0FFH 0 FFH 0FFH DS1302 时间处理程序 公司名称 模块名称 DS1302 asm 功 能 实时时钟模块 时钟芯片型号 DS1302 说 明 程序设计 设计时间 2006 11 03 版 本 号 20061103 T CLK Bit P1 0 实时时钟时钟线引 脚 T IO Bit P1 1 实时时钟数据线引脚 T RST Bit P1 2 实时时钟复位线引 脚 子程序名 Set1302 功 能 设置 DS1302 初始时间 并启动计时 说 明 调 用 RTInputByte 入口参数 初始时间在 Second Minute Hour Day Month Wee k YearL 地址连续 返 回 值 无 影响资源 A B R0 R2 R4 R7 设 计 ZHG 日 期 2006 11 03 修 改 日 期 Second data 41H Set1302 CLR T RST CLR T CLK SETB T RST MOV B 8EH 控制寄存器 LCALL RTInputByte MOV B 00H 写操作前 WP 0 LCALL RTInputByte SETB T CLK CLR T RST MOV R0 Second MOV R7 7 秒分时日月星期 年 MOV R2 80H 秒写地址 Set13021 CLR T RST CLR T CLK SETB T RST MOV B R2 写分时日月星期年地 址 LCALL RTInputByte MOV A R0 写秒数 据 MOV B A LCALL RTInputByte INC R0 INC R2 INC R2 SETB T CLK CLR T RST DJNZ R7 Set13021 CLR T RST CLR T CLK SETB T RST MOV B 8EH 控制寄存器 LCALL RTInputByte MOV B 80H 控制 WP 1 写保 护 LCALL RTInputByte SETB T CLK CLR T RST RET 子 程序名 Get1302 功 能 从 DS1302 读时间 说 明 调 用 RTInputByte RTOutputByte 入口参数 时间保存在 Second Minute Hour Day Month Wee k YearL 返 回 值 无 影响资源 A B R0 R2 R4 R7 Get1302 PUSH ACC PUSH PSW SETB PSW 4 SETB PSW 3 MOV R0 Second 41H MOV R7 3 MOV R2 81H 秒地 址 Get1 CLR T RST CLR T CLK SETB T RST MOV B R2 秒分时日月星期年地 址 LCALL RTInputByte NOP LCALL RTOutputByte MOV R0 A 秒 INC R0 INC R2 INC R2 SETB T CLK CLR T RST LCALL DISPLAY DJNZ R7 Get1 CLR PSW 3 CLR PSW 4 POP PSW POP ACC RET Get13021 PUSH ACC PUSH PSW SETB PSW 4 SETB PSW 3 MOV R0 51H MOV R7 01 MOV R2 81H 秒地 址 Get2 CLR T RST CLR T CLK SETB T RST MOV B R2 秒分时日月星期年地 址 LCALL RTInputByte NOP LCALL RTOutputByte MOV R0 A 秒 INC R0 INC R2 INC R2 SETB T CLK CLR T RST LCALL DISPLAY DJNZ R7 Get2 CLR PSW 3 CLR PSW 4 POP PSW POP ACC RET 子程序名 START1302 功 能设置 DS1302 初始时间并启动计时 说 明 调 用 RTInputByte 入口参数 初始时间在 Second Minute Hour Day Month Wee k YearL 地址连续 返 回 值 无 影响资源 A B R0 R2 R4 R7 设 计 ZHG 日 期 2006 11 03 修 改 日 期 START1302 CLR T RST CLR T CLK SETB T RST MOV B 8EH 控制寄存 器 LCALL RTInputByte MOV B 00H 写操作前 WP 0 LCALL RTInputByte SETB T CLK CLR T RST MOV R0 Second MOV R7 01H 秒分时日月星期 年 MOV R2 80H 秒写地址 START13021 CLR T RST CLR T CLK SETB T RST MOV B R2 写秒分时日月星期年地 址 LCALL RTInputByte MOV A R0 写秒数据 MOV B A LCALL RTInputByte INC R0 INC R2 INC R2 SETB T CLK CLR T RST DJNZ R7 START13021 CLR T RST CLR T CLK SETB T RST MOV B 8EH 控制寄存 器 LCALL RTInputByte MOV B 80H 控制 WP 1 写保 护 LCALL RTInputByte SETB T CLK CLR T RST RET 子程序名 RAMWRITE 功 能 从 89S51 读数据写到 DS1302RAM 中 说 明 调 用 RTInputByte 入口参数 初始时间在 Second Minute Hour Day Month Wee k YearL 地址连续 返 回 值 无 影响资源 A B R0 R2 R4 R7 设 计 ZHG 日 期 2006 11 03 修 改 日 期 RAMWRITE CLR T RST CLR T CLK SETB T RST MOV B 8EH 控制寄存 器 LCALL RTInputByte MOV B 00H 写操作前 WP 0 LCALL RTInputByte SETB T CLK CLR T RST MOV R0 RAM8951 MOV R7 COUNTER 秒 分 时 日 月 星期 年 MOV R2 RAM1302 RAM 写地 址 RAMWRITE1 CLR T RST CLR T CLK SETB T RST MOV B R2 写秒 分 时 日 月 星期 年 地址 LCALL RTInputByte MOV A R0 写秒数 据 MOV B A LCALL RTInputByte INC R0 INC R2 INC R2 LCALL DISPLAY SETB T CLK CLR T RST DJNZ R7 RAMWRITE1 CLR T RST

温馨提示

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

评论

0/150

提交评论