DS1302实时时钟实验.doc_第1页
DS1302实时时钟实验.doc_第2页
DS1302实时时钟实验.doc_第3页
DS1302实时时钟实验.doc_第4页
DS1302实时时钟实验.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

DS1302实时时钟实验 DS1302的结构及工作原理 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 2.1 引脚功能及结构 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。 相关原理:程序运行照片:接线方法: 1、按键接到P1口下半部分。用一条4PIN数据排线,把按键部份的JP37,接到CPU部份的P1口JP44的p1.4p1.7. 2、接8位数码管的数据线。将数码管部份的数据口 JP5接到CPU部份的P0口JP51. 3、接8位数码管的显示位线。将数码管部份的显示位口 JP8接到CPU部份的P2口JP52. 4、用1条1PIN线把喇叭部分的JP16接单片机P3.3 5、用1条1PIN线把继电器部分的JP18接单片机P3.5 6、用一条4PIN数据排线,把DS1302部份的JP83,接到CPU部份的P1口JP44的p1.0p1.3汇编语言参考程序:;8位数码管显示;P0 为段码口、P2 为位码口;时钟芯片:DS1302;接线方法:;八位数码管用两条8pin排线分别连p0,p2口;24c02 用一条2pin线连接P3.6, P3.7;喇叭用一条1pin线连接P3.3;端口按键JP37用一条4PIN线连接P1.4,1.5,1.6,1.7;DS1302的JP83用一条4PIN线连接P1.0,1.1,1.2,1.3;* DS1302 端口位定义 *IO_DATA BIT P1.1 ; 数据传送总线SCLK BIT P1.0 ; 时钟控制总线RST BIT P1.2 ; 复位总线K1 EQU P1.4 ;独立键K2 EQU P1.5K3 EQU P1.6K4 EQU P1.7BEEP EQU P3.3 ;蜂鸣器RELAY EQU P3.5 ;继电器T_CONU EQU 22H ;中断计数TIME_L EQU 23H ;定时初值TIME_H EQU 24HTIME_DATA EQU 50H ;显示时间单元首地址DATE_DATA EQU 60H ;显示日期单元首地址DS_DATA EQU 58H ;显示定时时间单元首地址;-ORG 0000HAJMP MAINORG 000BHAJMP INT_T0ORG 0080H;-MAIN:MOV TMOD,#01H ;T0,方式1MOV TIME_L,#00H ;50MS定时值MOV TIME_H,#4CHMOV T_CONU,#00H ;中断次数MOV IE,#82H ;EA=1,ET0=1MOV A,#00HMOV R0,#40H ;从40H单元开始MOV R1,#40H ;清64个单元M_CLEAR: MOV R0,AINC R0DJNZ R1,M_CLEARMOV 7FH,#0AH ;送熄灭符SETB BEEPLCALL TIME_DELAY ;调显示延时LCALL PROSET ;DS1302初始化MAIN1:LCALL GET_TIME ;从DS1302读数据程序LCALL CHULI ;实时时间数据处理MOV R0,#TIME_DATA ;显示时、分、秒LCALL DISPMOV R0,#TIME_DATALCALL TIME_DISPLAYLCALL SET_KEY ;键功能程序LCALL COMP ;实时时间与定时时间比较JB K1,MAIN1CALL BEEP_BLMAIN2:LCALL CHULI ;日期数据处理MOV R0,#DATE_DATALCALL DISP ;显示年、月、日MOV R0,#DATE_DATALCALL TIME_DISPLAYJB K1,MAIN2CALL BEEP_BLMAIN3:LCALL DS_CHULI ;定时时间数据处理MOV R0,#DS_DATALCALL DS_SP ;显示定时时间MOV R0,#DS_DATALCALL DS_DISPLAYJB K1,MAIN3CALL BEEP_BLAJMP MAIN1;-;中断服务子程序;300MS对闪动标记取反一次;-INT_T0:PUSH ACCPUSH PSWMOV TL0,TIME_LMOV TH0,TIME_HINC T_CONUMOV A,T_CONUCJNE A,#06H,INT_ENDMOV T_CONU,#00HCPL 0AHINT_END:POP PSWPOP ACCRETI;-;DS1302 初始化子程序; (R0)=数据 (R1)=地址;-PROSET:CLR RST ;DS1302复位CLR SCLKNOPNOPSETB RST;MOV R1,#80H ;写秒寄存器;MOV R0,#00H ;启动振荡器;LCALL WRITE;MOV R1,#82H ;写分寄存器;MOV R0,#58H;LCALL WRITE;MOV R1,#84H ;写时寄存器;MOV R0,#80H;LCALL WRITEMOV R1,#90H ;写充电寄存器MOV R0,#0ABHLCALL WRITERET;=;读时间、日期数据子程序;存放单元 40H - 46H;=GET_TIME:MOV R1,#81H ;读秒LCALL READMOV 40H,R0MOV R1,#83H ;读分LCALL READMOV 41H,R0MOV R1,#85H ;读时LCALL READMOV 42H,R0MOV R1,#87H ;读出日期LCALL READMOV 43H,R0MOV R1,#89H ;读出月份LCALL READMOV 44H,R0MOV R1,#8BH ;读出星期LCALL READMOV 46H,R0MOV R1,#8DH ;读出年LCALL READMOV 45H,R0RET;=;写 DS1302 子程序;=WRITE:CLR SCLKNOPNOPSETB RSTNOPMOV A,R1MOV R2,#08HWRI_01:RRC A ;传输地址到DS1302NOPNOPCLR SCLKNOPNOP MOV IO_DATA,CNOPNOP SETB SCLKNOPNOPDJNZ R2,WRI_01CLR SCLKNOPNOPMOV A,R0MOV R2,#08HWRI_02:RRC A ;传输数据到DS1302NOPCLR SCLKNOPNOPMOV IO_DATA,CNOPNOPSETB SCLKNOPNOPDJNZ R2,WRI_02CLR SCLKNOPNOPCLR RSTNOPNOPRET;=;读 DS1302 子程序;=READ:CLR SCLKNOPNOPSETB RSTNOPNOPMOV A,R1MOV R2,#08HREAD_01:RRC ANOP ;先传输地址到DS1302MOV IO_DATA,CNOPNOPSETB SCLKNOPNOPCLR SCLKNOPNOPDJNZ R2,READ_01NOPNOPSETB IO_DATACLR ACLR CMOV R2,#08HREAD_02:CLR SCLKNOPNOP MOV C,IO_DATANOPNOP RRC A ;再从DS1302接收数据NOPNOP SETB SCLKNOPNOP DJNZ R2,READ_02MOV R0,ACLR RSTRET;=;实时时间、日期数据处理子程序;=CHULI:MOV A,40H ;处理秒数据ANL A,#0FHMOV 50H,AMOV 70H,AMOV A,40HANL A,#11110000BSWAP AMOV 51H,AMOV 71H,A;-MOV A,41H ;处理分数据ANL A,#0FHMOV 52H,AMOV 72H,AMOV A,41HANL A,#11110000BSWAP AMOV 53H,AMOV 73H,A;-MOV A,42H ;处理时数据ANL A,#0FHMOV 54H,AMOV 74H,AMOV A,42HANL A,#11110000BSWAP AMOV 55H,AMOV 75H,A;-MOV A,43H ;处理日数据ANL A,#0FHMOV 60H,AMOV 76H,AMOV A,43HANL A,#11110000BSWAP AMOV 61H,AMOV 77H,A;-MOV A,44H ;处理月数据ANL A,#0FHMOV 62H,AMOV 78H,AMOV A,44HANL A,#11110000BSWAP AMOV 63H,AMOV 79H,A;-MOV A,45H ;处理年数据ANL A,#0FHMOV 64H,AMOV 7AH,AMOV A,45HANL A,#11110000BSWAP AMOV 65H,AMOV 7BH,A;-MOV A,46H ;处理周数据MOV 66H,AMOV 7CH,ARET;=;实时时间、日期查表取数子程序;=DISP: ;MOV R0,#TIME_DATAMOV R3,#06HDISP1: MOV A,R0MOV DPTR,#TAB_NUMOVC A,A+DPTRMOV R0,AINC R0DJNZ R3,DISP1RET;=;时间、日期显示子程序;=TIME_DISPLAY:;MOV R0,#TIME_DATA ;取得显示单元首地址MOV R1,#07FH ;从第一个数码管开始MOV R2,#08H ;共8个数码管DISLP: MOV P0,R0 ;获得当前单元数据MOV A,R1MOV P2,A ;数码显示JB ACC.5,DISLP1 ;第三位数码管显示 MOV P0,#0f7HJMP DISLP3DISLP1: JB ACC.2,DISLP2 ;第六位数码管显示 MOV P0,#0f7HJMP DISLP3DISLP2: INC R0DISLP3: MOV A,R1 ;为下一个数准备RR A ;下一个单元MOV R1,A ;保存LCALL DELAY ;为了保证数码管亮度,延时DJNZ R2,DISLP ;重复显示,直到全部数据刷新过RET ;返回DELAY:MOV R4,#0AHL15: MOV R5,#64HL16: DJNZ R5,L16DJNZ R4,L15RET;*SET_KEY:SETB K1 ;增加键SETB K2 ;减少键SETB K3 ;选择键SETB K4 ;定时设定功能键NOPJB K4,KEY01LCALL BEEP_BLJMP DS_KEY ;进入定时值设定子程序KEY01: JB K2,KEY02LCALL BEEP_BLJMP SET_TIME ;进入时间设定子程序KEY02: JB K3,KEY03LCALL BEEP_BLCPL 20H.0 ;止闹标记取反KEY03: RET;-DS_KEY:CALL DS_DELAYJNB K4,$ LCALL DSSETCALL DS_DELAYRET;=;实时时间设定子程序;K1为加键、K2为减键、K3为选择键;=SET_TIME:MOV R1,#8EH ;写保护寄存器MOV R0,#00H ;允许写入LCALL WRITEMOV R1,#80H ;写秒寄存器MOV R0,#80H ;停止振荡器工作LCALL WRITESETB TR0K001: CALL TIME_DELAY ;校时JNB K3,K001 ;K3为位移键K010:CALL CHULIJNB 0AH,KH01MOV 54H,7FH ;送入熄灭符MOV 55H,7FHJMP KH02KH01: MOV 54H,74H ;送实时值MOV 55H,75H ;送实时值KH02: MOV R0,#TIME_DATACALL DISPMOV R0,#TIME_DATACALL TIME_DISPLAYJNB K1,K011AJNB K2,K011BJNB K3,K002JMP K010K011A:MOV A,42HADD A,#01HDA AMOV 42H,AXRL A,#24HJNZ K012AMOV 42H,#00HK012A: MOV R1,#84H ;写时寄存器MOV R0,42HLCALL WRITECALL TIME_DELAYJMP K010K011B:MOV A,42HXRL A,#00HJZ K012BSETB C ;求补运算CLR AADDC A,#99H ;加99SUBB A,#01H ;减去减数ADD A,42H ;加被减数DA A ;十进制调整MOV 42H,A ;XRL A,#00HJNZ K012CK012B: MOV 42H,#23HK012C: MOV R1,#84H ;写时寄存器MOV R0,42HLCALL WRITECALL TIME_DELAYJMP K010;-K002: CALL TIME_DELAY ;校分JNB K3,K002 ;K3为位移键K020: CALL CHULIJNB 0AH,KM01MOV 52H,7FH ;送入熄灭符MOV 53H,7FHJMP KM02KM01: MOV 52H,72H ;送实时值MOV 53H,73H ;送实时值KM02: MOV R0,#TIME_DATACALL DISPMOV R0,#TIME_DATACALL TIME_DISPLAYJNB K1,K021AJNB K2,K021BJNB K3,K003JMP K020K021A:MOV A,41HADD A,#01HDA AMOV 41H,AXRL A,#60HJNZ K022AMOV 41H,#00HK022A: MOV R1,#82H ;写分寄存器MOV R0,41HLCALL WRITECALL TIME_DELAYJMP K020;-K021B:MOV A,41HXRL A,#00HJZ K022BSETB C ;求补运算CLR AADDC A,#99H ;加99SUBB A,#01H ;减去减数ADD A,41H ;加被减数DA A ;十进制调整MOV 41H,A ;XRL A,#00HJNZ K022CK022B: MOV 41H,#59HK022C: MOV R1,#82H ;写分寄存器MOV R0,41HLCALL WRITECALL TIME_DELAYJMP K020;-K003: CALL DATE_DELAY ;校日JNB K3,K003 ;K3为位移键K030: CALL CHULIJNB 0AH,KR01MOV 60H,7FH ;送入熄灭符MOV 61H,7FHJMP KR02KR01: MOV 60H,76H ;送实时值MOV 61H,77H ;送实时值KR02: MOV R0,#DATE_DATACALL DISPMOV R0,#DATE_DATACALL TIME_DISPLAYJNB K1,K031AJNB K2,K031BJNB K3,K004JMP K030K031A:MOV A,43HADD A,#01HDA AMOV 43H,AXRL A,#32HJNZ K032AMOV 43H,#00HK032A: MOV R1,#86H ;写日寄存器MOV R0,43HLCALL WRITECALL DATE_DELAYJMP K030K031B:MOV A,43HXRL A,#00HJZ K032BSETB C ;求补运算CLR AADDC A,#99H ;加99SUBB A,#01H ;减去减数ADD A,43H ;加被减数DA A ;十进制调整MOV 43H,AXRL A,#00HJNZ K032CK032B: MOV 43H,#31HK032C: MOV R1,#86H ;写日寄存器MOV R0,43HLCALL WRITECALL DATE_DELAYJMP K030;-K004: CALL DATE_DELAY ;校月JNB K3,K004 ;K3为位移键K040: CALL CHULIJNB 0AH,KC01MOV 62H,7FH ;送入熄灭符MOV 63H,7FHJMP KC02KC01: MOV 62H,78H ;送实时值MOV 63H,79H ;送实时值KC02: MOV R0,#DATE_DATACALL DISPMOV R0,#DATE_DATACALL TIME_DISPLAYJNB K1,K041AJNB K2,K041BJNB K3,K005JMP K040K041A:MOV A,44HADD A,#01HDA AMOV 44H,AXRL A,#13HJNZ K042AMOV 44H,#00HK042A: MOV R1,#88H ;写月寄存器MOV R0,44HLCALL WRITECALL DATE_DELAYJMP K040K041B:MOV A,44HXRL A,#00HJZ K042BSETB C ;求补运算CLR AADDC A,#99H ;加99SUBB A,#01H ;减去减数ADD A,44H ;加被减数DA A ;十进制调整MOV 44H,A ;XRL A,#00HJNZ K042CK042B: MOV 44H,#12HK042C: MOV R1,#88H ;写月寄存器MOV R0,44HLCALL WRITECALL DATE_DELAYJMP K040;-K005: CALL DATE_DELAY ;校年JNB K3,K005 ;K3为位移键K050: CALL CHULIJNB 0AH,KY01MOV 64H,7FH ;送入熄灭符MOV 65H,7FHJMP KY02KY01: MOV 64H,7AH ;送实时值MOV 65H,7BH ;送实时值KY02: MOV R0,#DATE_DATACALL DISPMOV R0,#DATE_DATACALL TIME_DISPLAYJNB K1,K051AJNB K2,K051BJNB K3,K008JMP K050K051A:MOV A,45HADD A,#01HDA AMOV 45H,AXRL A,#9AHJNZ K052AMOV 45H,#00HK052A: MOV R1,#8CH ;写年寄存器MOV R0,45HLCALL WRITECALL DATE_DELAYJMP K050K051B:MOV A,45HXRL A,#00HJZ K052BSETB C ;求补运算CLR AADDC A,#99H ;加99SUBB A,#01H ;减去减数ADD A,45H ;加被减数DA A ;十进制调整MOV 45H,A ;XRL A,#00HJNZ K052CK052B: MOV 45H,#99HK052C: MOV R1,#8CH ;写年寄存器MOV R0,45HLCALL WRITECALL DATE_DELAYJMP K050;-K008: JNB K3,K008MOV R1,#80H ;写秒寄存器MOV R0,#00H ;启动振荡器工作LCALL WRITEMOV R1,#8EH ;写保护寄存器MOV R0,#80H ;禁止写入LCALL WRITECALL DATE_DELAYCLR 0AHCLR TR0CALL BEEP_BLRET;=;定时时间设定子程序;K1为加键、K2为减键、K3为选择键;=DSSET:SETB TR0DS01: LCALL DS_DELAY ;定时分设定JNB K4,$DS010: CALL DS_CHULIJNB 0AH,DS01_1MOV 58H,7FH ;送入熄灭符MOV 59H,7FHJMP DS01_2DS01_1: MOV 58H,70H ;送实时值MOV 59H,71H ;送实时值DS01_2: MOV R0,#58HLCALL DS_SPMOV R0,#58HLCALL DS_DISPLAYJNB K1,DS01A ;加键JNB K2,DS01B ;减键JNB K3,DS02JMP DS010DS01A: ;加MOV A,48HADD A,#01HDA AMOV 48H,AXRL A,#60HJNZ DS011MOV 48H,#00HDS011: LCALL DS_DELAYJMP DS010DS01B: MOV A,48H ;判48H是否为0XRL A,#00HJZ DS012SETB C ;减CLR A ;求补运算ADDC A,#99H ;加99SUBB A,#01H ;减去减数ADD A,48H ;加被减数DA A ;十进制调整MOV 48H,A ;XRL A,#00HJNZ DS013DS012: MOV 48H,#59HDS013: CALL DS_DELAYJMP DS010;-DS02: LCALL DS_DELAY ;定时时设定JNB K3,$DS020:CALL DS_CHULIJNB 0AH,DS02_1MOV 5AH,7FH ;送入熄灭符MOV 5BH,7FHJMP DS02_2DS02_1: MOV 5AH,72H ;送实时值MOV 5BH,73H ;送实时值DS02_2: MOV R0,#58HLCALL DS_SPMOV R0,#58HLCALL DS_DISPLAYJNB K1,DS02AJNB K2,DS02BJNB K3,DS03JMP DS020DS02A: MOV A,49H ;加ADD A,#01HDA AMOV 49H,AXRL A,#24HJNZ DS021MOV 49H,#00HDS021: LCALL DS_DELAYJMP DS020DS02B: MOV A,49H ;判49H是否为0XRL A,#00HJZ DS022SETB C ;减CLR A ;求补运算ADDC A,#99H ;加99SUBB A,#01H ;减去减数ADD A,49H ;加被减数DA A ;十进制调整MOV 49H,A ;XRL A,#00HJNZ DS023DS022: MOV 49H,#23HDS023: CALL DS_DELAYJMP DS020;-DS03: CALL DS_DELAYJNB K3,$DS030: CALL DS_CHULIJNB 0AH,DS03_1MOV 5CH,7FH ;送入熄灭符JMP DS03_2DS03_1: MOV 5CH,74H ;送实时值DS03_2: MOV R0,#58H LCALL DS_SPMOV R0,#58HLCALL DS_DISPLAYJNB K3,DS04JNB K1,DS03AJMP DS030DS03A: CPL 20H.1 ;报警标记取反JNB 20H.1,DS031MOV 4AH,#01H ;报警标记=1,允许报警AJMP DS032DS031: MOV 4AH,#00H ;报警标记=0,禁止报警DS032: LCALL DS_DELAYJMP DS030;-DS04: CLR TR0CLR 0AHCALL BEEP_BLLCALL DS_DELAYRET;=;定时时间数据处理子程序;=DS_CHULI:MOV A,48H ;处理分数据ANL A,#0FHMOV 58H,AMOV 70H,AMOV A,48HANL A,#0F0HSWAP AMOV 59H,AMOV 71H,AMOV A,49H ;处理时数据ANL A,#0FHMOV 5AH,AMOV 72H,AMOV A,49HANL A,#0F0HSWAP AMOV 5BH,AMOV 73H,AMOV A,4AH ;处理定时标记ANL A,#01HMOV 5CH,AMOV 74H,ARET;=;定时时间查表取数子程序;=DS_SP: ;MOV R0,#58HMOV R3,#05HDS_SP1: MOV A,R0MOV DPTR,#TAB_NUMOVC A,A+DPTRMOV R0,AINC R0DJNZ R3,DS_SP1RET;=;定时时间显示子程序;=DS_DISPLAY:;MOV R0,#58H ;取得设定显示单元首地址MOV R1,#07FH ;从第一个数码管开始MOV R2,#07H ;共7个数码管DSPLAY: MOV P0,R0 ;获得当前单元数据MOV A,R1MOV P2,A ;数码显示JB ACC.5,DSLP1 ;第三位数码管显示“”MOV P0,#0f7HJMP DSLP3DSLP1: JB ACC.2,DSLP2 ;第六位数码管显示“”MOV P

温馨提示

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

评论

0/150

提交评论