时钟芯片DS1302.docx

上传人:b****3 文档编号:4939188 上传时间:2022-12-11 格式:DOCX 页数:31 大小:19.98KB
下载 相关 举报
时钟芯片DS1302.docx_第1页
第1页 / 共31页
时钟芯片DS1302.docx_第2页
第2页 / 共31页
时钟芯片DS1302.docx_第3页
第3页 / 共31页
时钟芯片DS1302.docx_第4页
第4页 / 共31页
时钟芯片DS1302.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

时钟芯片DS1302.docx

《时钟芯片DS1302.docx》由会员分享,可在线阅读,更多相关《时钟芯片DS1302.docx(31页珍藏版)》请在冰豆网上搜索。

时钟芯片DS1302.docx

时钟芯片DS1302

;8位数码管显示

;P0为段码口、P2为位码口

;时钟芯片:

DS1302

 

;**************DS1302端口位定义**************

IO_DATABITP1.1;数据传送总线

SCLKBITP1.0;时钟控制总线

RSTBITP1.2;复位总线

K1EQUP1.4;独立键

K2EQUP1.5

K3EQUP1.6

K4EQUP1.7

BEEPEQUP3.3;蜂鸣器

RELAYEQUP3.5;继电器

T_CONUEQU22H;中断计数

TIME_LEQU23H;定时初值

TIME_HEQU24H

TIME_DATAEQU50H;显示时间单元首地址

DATE_DATAEQU60H;显示日期单元首地址

DS_DATAEQU58H;显示定时时间单元首地址

;------------------------------------------------

ORG0000H

AJMPMAIN

ORG000BH

AJMPINT_T0

ORG0080H

;------------------------------------------------

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:

LCALLCHULI;日期数据处理

MOVR0,#DATE_DATA

LCALLDISP;显示年、月、日

MOVR0,#DATE_DATA

LCALLTIME_DISPLAY

JBK1,MAIN2

CALLBEEP_BL

MAIN3:

LCALLDS_CHULI;定时时间数据处理

MOVR0,#DS_DATA

LCALLDS_SP;显示定时时间

MOVR0,#DS_DATA

LCALLDS_DISPLAY

JBK1,MAIN3

CALLBEEP_BL

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

NOP

SETBRST

;MOVR1,#80H;写秒寄存器

;MOVR0,#00H;启动振荡器

;LCALLWRITE

;MOVR1,#82H;写分寄存器

;MOVR0,#58H

;LCALLWRITE

;MOVR1,#84H;写时寄存器

;MOVR0,#80H

;LCALLWRITE

MOVR1,#90H;写充电寄存器

MOVR0,#0ABH

LCALLWRITE

RET

;===============================================

;读时间、日期数据子程序

;存放单元40H-46H

;===============================================

GET_TIME:

MOVR1,#81H;读秒

LCALLREAD

MOV40H,R0

MOVR1,#83H;读分

LCALLREAD

MOV41H,R0

MOVR1,#85H;读时

LCALLREAD

MOV42H,R0

MOVR1,#87H;读出日期

LCALLREAD

MOV43H,R0

MOVR1,#89H;读出月份

LCALLREAD

MOV44H,R0

MOVR1,#8BH;读出星期

LCALLREAD

MOV46H,R0

MOVR1,#8DH;读出年

LCALLREAD

MOV45H,R0

RET

;================================================

;写DS1302子程序

;================================================

WRITE:

CLRSCLK

NOP

NOP

SETBRST

NOP

MOVA,R1

MOVR2,#08H

WRI_01:

RRCA;传输地址到DS1302

NOP

NOP

CLRSCLK

NOP

NOP

MOVIO_DATA,C

NOP

NOP

SETBSCLK

NOP

NOP

DJNZR2,WRI_01

CLRSCLK

NOP

NOP

MOVA,R0

MOVR2,#08H

WRI_02:

RRCA;传输数据到DS1302

NOP

CLRSCLK

NOP

NOP

MOVIO_DATA,C

NOP

NOP

SETBSCLK

NOP

NOP

DJNZR2,WRI_02

CLRSCLK

NOP

NOP

CLRRST

NOP

NOP

RET

;=================================================

;读DS1302子程序

;=================================================

READ:

CLRSCLK

NOP

NOP

SETBRST

NOP

NOP

MOVA,R1

MOVR2,#08H

READ_01:

RRCA

NOP;先传输地址到DS1302

MOVIO_DATA,C

NOP

NOP

SETBSCLK

NOP

NOP

CLRSCLK

NOP

NOP

DJNZR2,READ_01

NOP

NOP

SETBIO_DATA

CLRA

CLRC

MOVR2,#08H

READ_02:

CLRSCLK

NOP

NOP

MOVC,IO_DATA

NOP

NOP

RRCA;再从DS1302接收数据

NOP

NOP

SETBSCLK

NOP

NOP

DJNZR2,READ_02

MOVR0,A

CLRRST

RET

;==============================================

;实时时间、日期数据处理子程序

;==============================================

CHULI:

MOVA,40H;处理秒数据

ANLA,#0FH

MOV50H,A

MOV70H,A

MOVA,40H

ANLA,#11110000B

SWAPA

MOV51H,A

MOV71H,A

;---------------------------------------------

MOVA,41H;处理分数据

ANLA,#0FH

MOV52H,A

MOV72H,A

MOVA,41H

ANLA,#11110000B

SWAPA

MOV53H,A

MOV73H,A

;---------------------------------------------

MOVA,42H;处理时数据

ANLA,#0FH

MOV54H,A

MOV74H,A

MOVA,42H

ANLA,#11110000B

SWAPA

MOV55H,A

MOV75H,A

;----------------------------------------------

MOVA,43H;处理日数据

ANLA,#0FH

MOV60H,A

MOV76H,A

MOVA,43H

ANLA,#11110000B

SWAPA

MOV61H,A

MOV77H,A

;---------------------------------------------

MOVA,44H;处理月数据

ANLA,#0FH

MOV62H,A

MOV78H,A

MOVA,44H

ANLA,#11110000B

SWAPA

MOV63H,A

MOV79H,A

;---------------------------------------------

MOVA,45H;处理年数据

ANLA,#0FH

MOV64H,A

MOV7AH,A

MOVA,45H

ANLA,#11110000B

SWAPA

MOV65H,A

MOV7BH,A

;----------------------------------------------

MOVA,46H;处理周数据

MOV66H,A

MOV7CH,A

RET

;=============================================

;实时时间、日期查表取数子程序

;=============================================

DISP:

;MOVR0,#TIME_DATA

MOVR3,#06H

DISP1:

MOVA,@R0

MOVDPTR,#TAB_NU

MOVCA,@A+DPTR

MOV@R0,A

INCR0

DJNZR3,DISP1

RET

;====================================================

;时间、日期显示子程序

;====================================================

TIME_DISPLAY:

;MOVR0,#TIME_DATA;取得显示单元首地址

MOVR1,#07FH;从第一个数码管开始

MOVR2,#08H;共8个数码管

DISLP:

MOVP0,@R0;获得当前单元数据

MOVA,R1

MOVP2,A;数码显示

JBACC.5,DISLP1;第三位数码管显示-

MOVP0,#0f7H

JMPDISLP3

DISLP1:

JBACC.2,DISLP2;第六位数码管显示-

MOVP0,#0f7H

JMPDISLP3

DISLP2:

INCR0

DISLP3:

MOVA,R1;为下一个数准备

RRA;下一个单元

MOVR1,A;保存

LCALLDELAY;为了保证数码管亮度,延时

DJNZR2,DISLP;重复显示,直到全部数据刷新过

RET;返回

DELAY:

MOVR4,#0AH

L15:

MOVR5,#64H

L16:

DJNZR5,L16

DJNZR4,L15

RET

;******************************************************

SET_KEY:

SETBK1;增加键

SETBK2;减少键

SETBK3;选择键

SETBK4;定时设定功能键

NOP

JBK4,KEY01

LCALLBEEP_BL

JMPDS_KEY;进入定时值设定子程序

KEY01:

JBK2,KEY02

LCALLBEEP_BL

JMPSET_TIME;进入时间设定子程序

KEY02:

JBK3,KEY03

LCALLBEEP_BL

CPL20H.0;止闹标记取反

KEY03:

RET

;-----------------------------------------------------

DS_KEY:

CALLDS_DELAY

JNBK4,$

LCALLDSSET

CALLDS_DELAY

RET

;==============================================

;实时时间设定子程序

;K1为加键、K2为减键、K3为选择键

;==============================================

SET_TIME:

MOVR1,#8EH;写保护寄存器

MOVR0,#00H;允许写入

LCALLWRITE

MOVR1,#80H;写秒寄存器

MOVR0,#80H;停止振荡器工作

LCALLWRITE

SETBTR0

K001:

CALLTIME_DELAY;校时

JNBK3,K001;K3为位移键

K010:

CALLCHULI

JNB0AH,KH01

MOV54H,7FH;送入熄灭符

MOV55H,7FH

JMPKH02

KH01:

MOV54H,74H;送实时值

MOV55H,75H;送实时值

KH02:

MOVR0,#TIME_DATA

CALLDISP

MOVR0,#TIME_DATA

CALLTIME_DISPLAY

JNBK1,K011A

JNBK2,K011B

JNBK3,K002

JMPK010

K011A:

MOVA,42H

ADDA,#01H

DAA

MOV42H,A

XRLA,#24H

JNZK012A

MOV42H,#00H

K012A:

MOVR1,#84H;写时寄存器

MOVR0,42H

LCALLWRITE

CALLTIME_DELAY

JMPK010

K011B:

MOVA,42H

XRLA,#00H

JZK012B

SETBC;求补运算

CLRA

ADDCA,#99H;加99

SUBBA,#01H;减去减数

ADDA,42H;加被减数

DAA;十进制调整

MOV42H,A;

XRLA,#00H

JNZK012C

K012B:

MOV42H,#23H

K012C:

MOVR1,#84H;写时寄存器

MOVR0,42H

LCALLWRITE

CALLTIME_DELAY

JMPK010

;-------------------------------------------------

K002:

CALLTIME_DELAY;校分

JNBK3,K002;K3为位移键

K020:

CALLCHULI

JNB0AH,KM01

MOV52H,7FH;送入熄灭符

MOV53H,7FH

JMPKM02

KM01:

MOV52H,72H;送实时值

MOV53H,73H;送实时值

KM02:

MOVR0,#TIME_DATA

CALLDISP

MOVR0,#TIME_DATA

CALLTIME_DISPLAY

JNBK1,K021A

JNBK2,K021B

JNBK3,K003

JMPK020

K021A:

MOVA,41H

ADDA,#01H

DAA

MOV41H,A

XRLA,#60H

JNZK022A

MOV41H,#00H

K022A:

MOVR1,#82H;写分寄存器

MOVR0,41H

LCALLWRITE

CALLTIME_DELAY

JMPK020

;---------------------------------------------------

K021B:

MOVA,41H

XRLA,#00H

JZK022B

SETBC;求补运算

CLRA

ADDCA,#99H;加99

SUBBA,#01H;减去减数

ADDA,41H;加被减数

DAA;十进制调整

MOV41H,A;

XRLA,#00H

JNZK022C

K022B:

MOV41H,#59H

K022C:

MOVR1,#82H;写分寄存器

MOVR0,41H

LCALLWRITE

CALLTIME_DELAY

JMPK020

;---------------------------------------------------

K003:

CALLDATE_DELAY;校日

JNBK3,K003;K3为位移键

K030:

CALLCHULI

JNB0AH,KR01

MOV60H,7FH;送入熄灭符

MOV61H,7FH

JMPKR02

KR01:

MOV60H,76H;送实时值

MOV61H,77H;送实时值

KR02:

MOVR0,#DATE_DATA

CALLDISP

MOVR0,#DATE_DATA

CALLTIME_DISPLAY

JNBK1,K031A

JNBK2,K031B

JNBK3,K004

JMPK030

K031A:

MOVA,43H

ADDA,#01H

DAA

MOV43H,A

XRLA,#32H

JNZK032A

MOV43H,#00H

K032A:

MOVR1,#86H;写日寄存器

MOVR0,43H

LCALLWRITE

CALLDATE_DELAY

JMPK030

K031B:

MOVA,43H

XRLA,#00H

JZK032B

SETBC;求补运算

CLRA

ADDCA,#99H;加99

SUBBA,#01H;减去减数

ADDA,43H;加被减数

DAA;十进制调整

MOV43H,A

XRLA,#00H

JNZK032C

K032B:

MOV43H,#31H

K032C:

MOVR1,#86H;写日寄存器

MOVR0,43H

LCALLWRITE

CALLDATE_DELAY

JMPK030

;------------------------------------------------

K004:

CALLDATE_DELAY;校月

JNBK3,K004;K3为位移键

K040:

CALLCHULI

JNB0AH,KC01

MOV62H,7FH;送入熄灭符

MOV63H,7FH

JMPKC02

KC01:

MOV62H,78H;送实时值

MOV63H,79H;送实时值

KC02:

MOVR0,#DATE_DATA

CALLDISP

MOVR0,#DATE_DATA

CALLTIME_DISPLAY

JNBK1,K041A

JNBK2,K041B

JNBK3,K005

JMPK040

K041A:

MOVA,44H

ADDA,#01H

DAA

MOV44H,A

XRLA,#13H

JNZK042A

MOV44H,#00H

K042A:

MOVR1,#88H;写月寄存器

MOVR0,44H

LCALLWRITE

CALLDATE_DELAY

JMPK040

K041B:

MOVA,44H

XRLA,#00H

JZK042B

SETBC;求补运算

CLRA

ADDCA,#99H;加99

SUBBA,#01H;减去减数

ADDA,44H;加被减数

DAA;十进制调整

MOV44H,A;

XRLA,#00H

JNZK042C

K042B:

MOV44H,#12H

K042C:

MOVR1,#88H;写月寄存器

MOVR0,44H

LCALLWRITE

CALLDATE_DELAY

JMPK040

;-----------------------------------------------

K005:

CALLDATE_DELAY;校年

JNBK3,K005;K3为位移键

K050:

CALLCHULI

JNB0AH,KY01

MOV64H,7FH;送入熄灭符

MOV65H,7FH

JMPKY02

KY01:

MOV64H,7AH;送实时值

MOV65H,7BH;送实时值

KY02:

MOVR0,#DATE_DA

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

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1