ds1302汇编语言的驱动程序.docx

上传人:b****7 文档编号:10597465 上传时间:2023-02-21 格式:DOCX 页数:15 大小:16.12KB
下载 相关 举报
ds1302汇编语言的驱动程序.docx_第1页
第1页 / 共15页
ds1302汇编语言的驱动程序.docx_第2页
第2页 / 共15页
ds1302汇编语言的驱动程序.docx_第3页
第3页 / 共15页
ds1302汇编语言的驱动程序.docx_第4页
第4页 / 共15页
ds1302汇编语言的驱动程序.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

ds1302汇编语言的驱动程序.docx

《ds1302汇编语言的驱动程序.docx》由会员分享,可在线阅读,更多相关《ds1302汇编语言的驱动程序.docx(15页珍藏版)》请在冰豆网上搜索。

ds1302汇编语言的驱动程序.docx

ds1302汇编语言的驱动程序

第一个汇编语言程序(DS1302的驱动程序)

时钟芯片DS1302的程序(汇编)

;时钟芯片DS1302的程序(汇编)

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

;模块名称:

DS1302.a51

;功能:

实时时钟模块时钟芯片型号:

DS1302

;说明:

(修改版)

;程序设计:

;*********************************************************************/

T_CLKBitP3.2;实时时钟时钟线引脚

T_IOBitP3.3;实时时钟数据线引脚

T_RSTBitP3.4;实时时钟复位线引脚

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

SECONDEQU50H;秒寄存器

MINUTEEQU51H;分寄存器

HOUREQU52H;时寄存器

DAYEQU53H;号寄存器

MONTHEQU54H;月寄存器

WEEKEQU55H;星期寄存器

YEAREQU56H;年寄存器

ORG0000H

SJMPSTART

ORG0040H

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

;功能:

给秒分时日月星期年赋初值

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

START:

MOVSECOND,#00H

MOVMINUTE,#06H

MOVHOUR,#17H

MOVDAY,#00H

MOVMONTH,#00H

MOVWEEK,#00H

MOVYEAR,#00H

LCALLSET1302

LCALLGET1302

LCALLDISPLAY

MAIN:

MOVR5,#25

MOVTMOD,#01H

MOVTH0,#63H;置定时器初值(定时40ms)

MOVTL0,#0C0H

SETBTR0;启动定时器0

LP1:

JBCTF0,LP2;查询计数溢出

SJMPLP1;未到40ms继续计数

LP2:

MOVTH0,#63H;重新置定时器初值

MOVTL0,#0C0H

LCALLDISPLAY;显示

DJNZR5,LP1;未到1S继续循环

LCALLGET1302;每过1s从DS1302读取一次时间

MOVR5,#25

SJMPLP1

 

DISPLAY:

MOVR3,SECOND

LCALLCHAG

MOVP2,#0FFH

MOVP0,R2;段码

SETBP2.0;位码

NOP

CLRP2.0

LCALLDELAY

MOVP2,#0FFH

MOVP0,R3

SETBP2.1

NOP

CLRP2.1

LCALLDELAY

MOVR3,MINUTE

LCALLCHAG

MOVP2,#0FFH

MOVP0,R2;段码

SETBP2.2;位码

NOP

CLRP2.2

LCALLDELAY

MOVP2,#0FFH

MOVP0,R3

SETBP2.3

NOP

CLRP2.3

LCALLDELAY

MOVR3,HOUR

LCALLCHAG

MOVP2,#0FFH

MOVP0,R2;段码

SETBP2.4;位码

NOP

CLRP2.4

LCALLDELAY

MOVP2,#0FFH

MOVP0,R3

SETBP2.5

NOP

CLRP2.5

LCALLDELAY

RET

DELAY:

MOVR7,#50

D1:

MOVR6,#10

D2:

DJNZR6,$

DJNZR7,D1

RET

CHAG:

PUSHACC;低字节放入R2,高字节放入R3

MOVA,R3

ANLA,#0FH

MOVR2,A

MOVA,R3

SWAPA

ANLA,#0FH

MOVR3,A

MOVDPTR,#DATATAB

MOVA,R2

MOVCA,@A+DPTR

MOVR2,A

MOVA,R3

MOVCA,@A+DPTR

MOVR3,A

POPACC

RET

DATATAB:

DB0B7H,90H,3DH,0B9H,9AH,0ABH,0AFH,0B0H,0BFH,0BBH

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

;子程序名:

Set1302

;功能:

设置DS1302初始时间,并启动计时。

;说明:

;调用:

RTInputByte

;入口参数:

初始时间在:

Second,Minute,Hour,Day,Month,Week.YearL(地址连续)

;出口参数:

;影响资源:

ABR0R1R4R7

;设计:

Reuben日期:

2009-04-17

;修改:

日期:

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

SET1302:

CLRT_RST

CLRT_CLK

SETBT_RST

MOVB,#8EH;控制寄存器

LCALLRTInputByte

MOVB,#00H;写操作前WP=0

LCALLRTInputByte

SETBT_CLK

CLRT_RST

MOVR0,#Second;

MOVR7,#7;秒分时日月星期年

MOVR1,#80H;秒写地址

S13021:

CLRT_RST

CLRT_CLK

SETBT_RST

MOVB,R1;写秒分时日月星期年地址

LCALLRTInputByte

MOVA,@R0;写秒数据

MOVB,A

LCALLRTInputByte

INCR0

INCR1

INCR1

SETBT_CLK

CLRT_RST

DJNZR7,S13021

CLRT_RST

CLRT_CLK

SETBT_RST

MOVB,#8EH;控制寄存器

LCALLRTInputByte

MOVB,#80H;控制,WP=1,写保护

LCALLRTInputByte

SETBT_CLK

CLRT_RST

RET

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

;子程序名:

Get1302

;功能:

从DS1302读时间

;说明:

;调用:

RTInputByte,RTOutputByte

;入口参数:

时间保存在:

Second,Minute,Hour,Day,Month,Week.YearL

;出口参数:

;影响资源:

ABR0R1R4R7

;设计:

Reuben日期:

2009-04-17

;修改:

日期:

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

GET1302:

MOVR0,#SECOND;

MOVR7,#7

MOVR1,#81H;秒地址

G13021:

CLRT_RST

CLRT_CLK

SETBT_RST

MOVB,R1;秒分时日月星期年地址

LCALLRTInputByte

LCALLRTOutputByte

MOV@R0,A;秒

INCR0

INCR1

INCR1

SETBT_CLK

CLRT_RST

DJNZR7,G13021

RET

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

;功能:

写1302一字节(内部子程序)

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

RTInputByte:

MOVR4,#8

Inbit1:

MOVA,B

RRCA

MOVB,A

MOVT_IO,C

SETBT_CLK

CLRT_CLK

DJNZR4,Inbit1

RET

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

;功能:

读1302一字节(内部子程序)

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

RTOutputByte:

MOVR4,#8

Outbit1:

MOVC,T_IO

RRCA

SETBT_CLK

CLRT_CLK

DJNZR4,Outbit1

RET

END

第二个ds1302驱动程序

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

IO_DATABITP1.1;数据传送总线

SCLKBITP1.0;时钟控制总线

RSTBITP1.2;复位总线

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

;DS1302初始化子程序

;(R0)=数据(R1)=地址

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

PROSET:

CLRRST;DS1302复位

CLRSCLK

NOP

NOP

SETBRST

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

MOVR0,#0ABH

LCALLWRITE

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

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

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

;存放单元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

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

当前位置:首页 > 外语学习 > 其它语言学习

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

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