ImageVerifierCode 换一换
格式:DOC , 页数:11 ,大小:152KB ,
资源ID:6323450      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-6323450.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(时钟芯片DS12C887使用说明.doc)为本站会员(yjrm16270)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

时钟芯片DS12C887使用说明.doc

1、汇编程序:ORG 0000HAJMP STARTSTART:ACALL SETTIME ;设置初始时间LOOP: ACALL GETTIME ;循环读取当前时间AJMP LOOP;SETTIME: MOV DPTR,#7D0AH ;DS12C887 的 A 寄存器MOV A,#20HMOVX DPTR,A ;打开 DS12C887 的内部晶振并使 RTC(实时时钟)记录时间INC DPTR ;DS12C887 的 B 寄存器MOV A,#08HMOVX DPTR,A ;设十进制 BCD 码,24 小时制,不定时MOV DPTR,#7D0DH ;DS12C887 的 D 寄存器MOVX A,DP

2、TR ;如果 D 寄存器的第 7 位为 0,表示电池耗尽JNB ACC.7,ERRORMOV DPTR,#7D00H ;DS12C887 的秒单元MOV A,#00HMOVX DPTR,A ;写入秒MOV DPTR,#7D02H ;DS12C887 分单元MOV A,#21HMOVX DPTR,A ;写入分MOV DPTR,#7D04H ;DS12C887 时单元MOV A,#03HMOVX DPTR,A ;写入时MOV DPTR,#7D06H ;DS12C887 星期单元MOV A,#03HMOVX DPTR,A ;写入星期MOV DPTR,#7D07H ;DS12C887 日单元MOV A

3、,#20HMOVX DPTR,A ;写入日MOV DPTR,#7D08H ;DS12C887 月单元MOV A,#07HMOVX DPTR,A ;写入月MOV DPTR,#7D09H ;DS12C887 年单元MOV A,#05HMOVX DPTR,A ;写入年时间ERROR: RETGETTIME:MOV DPTR,#7D0AHMOVX A,DPTRJB ACC.7,GETTIME ;REGISTER A 的 UIP 位=0 时才可以读数据 MOV DPTR,#7D00HMOVX A,DPTRMOV R2,A ;SECONDSACALL DISPLAYMOV DPTR,#7D02HMOVX

4、A,DPTRMOV R1,AACALL DISPLAY ;MINUTESMOV DPTR,#7D04H MOVX A,DPTRMOV R0,A ;HOURSACALL DISPLAYACALL DELAYRETDISPLAY:MOV DPTR,#TABMOV SCON,#00HMOV R3,AANL A,#0FHMOVC A,A+DPTRMOV SBUF,AJNB TI,$CLR TIMOV A,R3SWAP AANL A,#0FHMOVC A,A+DPTRMOV SBUF,AJNB TI,$CLR TIRETDELAY:MOV R4,#0FHDE1:MOV R5,#0FFHDJNZ R5,$

5、DJNZ R4,DE1RET TAB: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H,11H,0C1H,63H,85H,61H,71HENDC 语言源程序:#include “reg52.h“#include “absacc.h“#define DSA XBYTE0x7F0A /12c887 寄存器 A 地址#define DSB XBYTE0x7F0B /B 地址#define DSD XBYTE0x7F0D /D 地址#define DS_H XBYTE0x7F04 /时地址#define DS_M XBYTE0x7F02 /分地址#define D

6、S_S XBYTE0x7F00 /秒地址#define DS_W XBYTE0x7F06 /星期地址#define DS_D XBYTE0x7F07 /日地址#define DS_Mo XBYTE0x7F08 /月地址#define DS_Y XBYTE0x7F09 /年地址code unsigned char LED_code_tab= /* 显示段笔划 abcdefgh; 0=亮 */0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f, /* 0,1,2,3,4,5,6,7 */0x01,0x09,0x11,0xc1,0x63,0x85,0x61,0x71,0x

7、ff /* 8,9,A,b,C,d,E,F,全灭 */;sbit Set=P10; /设置时间标志位sbit Set_h=P11; /设置小时sbit Set_m=P12; /设置分钟sbit Set_s=P13; /设置秒钟code struct timeint Year; /当前时间 年int Month; /当前时间 月int Day; /当前时间 日int Week; /当前时间 星期int Hour; /当前时间 时int Minutes; /当前时间 分int Seconds; /当前时间 秒int a_Hour; /报警时间 时int a_Minutes; /报警时间 分int

8、a_Seconds; /报警时间 秒;struct time time_n; /保存当前时间的结构体struct time time_t; /保存上次调用显示时的时间的结构体void Init(); /程序初始化函数void Init12c887(); /初始化 12c887 的函数void GetTime(); /获取当前时间的函数void ShowTime(); /显示当前时间(设置) 的函数void Display(int temp); /显示传入参数的函数void SetTime(); /用户设置时间函数void UpDateTime(); /更新 12c887 中时间的函数 (供用户

9、设置时间函数调用)void Init() /程序初始化函数time_n.Seconds=0;time_n.Minutes=0;time_n.Hour=0;time_n.Week=0;time_n.Day=0;time_n.Month=0;time_n.Year=0;time_t=time_n;Set=1;Set_h=1;Set_m=1;Set_s=1;void Init12c887() /初始化 12c887 控制寄存器DSA=0x20; /打开 DS12C887 的内部晶振并使 RTC(实时时钟)记录时间DSB=0x0E; /设二进制计数(汇编语言可用十进制 BCD 计数),不定时void

10、GetTime() /获得当前时间函数char temp2;temp2=0x00;temp2=DSA;if(temp2 time_n.Seconds=DS_S; /读取当前时间time_n.Minutes=DS_M;time_n.Hour=DS_H;time_n.Week=DS_W;time_n.Day=DS_D;time_n.Month=DS_Mo;time_n.Year=DS_Y;void UpDateTime() /更新时间的函数char temp;temp=DSB;temp=temp | 0x80;DSB=temp; /暂停走时,为接下来的时间更新作准备DS_S=time_n.Seco

11、nds;DS_M=time_n.Minutes;DS_H=time_n.Hour;DS_W=time_n.Week;DS_D=time_n.Day;DS_Mo=time_n.Month;DS_Y=time_n.Year;temp=DSB;temp=temp DSB=temp; /恢复到正常的走时状态void ShowTime() /显示时间函数Display(time_n.Seconds); /显示秒Display(time_n.Minutes); /分Display(time_n.Hour); /时void Display(int temp3) /显示传入参数的函数 (串口)int temp

12、4;temp4=temp3;temp4=temp3%10;temp3=temp3/10;SBUF=LED_code_tabtemp4;while(!TI)TI=0;temp4=temp3%10;SBUF=LED_code_tabtemp4;while(!TI)TI=0;void SetTime() /用户设置当前时间的函数int set_st,set_mt,set_ht;set_st=set_mt=set_ht=0;while(Set=0)if(Set_h=0) /按键按下时,置标志为 1set_ht=1;else if(Set_h=1 if(Set_m=0)set_mt=1;else if(

13、Set_m=1 if(Set_s=0)set_st=1;else if(Set_s=1 if(Set_h=0)set_ht=1;else if(Set_h=1 if(set_st=2) /当标志为 2,即按键完成一次按下动作后,将当前时间的秒钟加 1,以下雷同time_n.Seconds+;if(time_n.Seconds=60)time_n.Seconds=0;if(set_mt=2)time_n.Minutes+;if(time_n.Minutes=60)time_n.Minutes=0;if(set_ht=2)time_n.Hour+;if(time_n.Hour=24)time_n.

14、Hour=0;if(set_ht=2 | set_mt=2 | set_st=2)UpDateTime(); /先更新时间,接下来获取当前最新时间后显示GetTime();ShowTime();set_ht=0;set_mt=0;set_st=0;void main()Init12c887(); /初始化 12c887Init(); /初始化程序ShowTime();while(1)if(Set=0)SetTime();GetTime();if(time_n.Seconds!=time_t.Seconds | time_n.Minutes!=time_t.Minutes | time_n.Hour!=time_t.Hour) /只有在两次的时间不一致时才调用显示函数time_t=time_n;ShowTime();以上汇编和 C 程序由 第 7 组 完成,如有疑问,请前来咨询 !

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报