SCLK BIT P1.0 ;DS1302时钟口P1.0
IO BIT P1.1 ;DS1302数据口P1.1
RST BIT P1.2 ;DS1302片选口P1.2
NOW DATA 40H
ORG 0
JMP Reset
ORG 100H
Reset:
CALL DS1302_Initial ;初始化DS1302
MOV DPTR,#INIT
CALL DS1302_SetTime ;设置初始时间
MOV R0,#NOW
CALL DS1302_GetTime ;读取当前时间
JMP $
INIT: //秒 分 时 日 月 星期 年
DB 00H,00H,20H,01H,01H,05H,10H
;**************************************
;延时X微秒(STC12C5A60S2@12M)
;不同的工作环境,需要调整此函数
;入口参数:R7
;出口参数:无
;**************************************
Delay: ;6 此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同
NOP ;1
NOP ;1
RET ;4
;**************************************
;从DS1302读1字节数据
;入口参数:无
;出口参数:ACC
;**************************************
DS1302_ReadByte:
CLR A
PUSH 0
MOV 0,#8 ;8位计数器
ReadNext:
CLR SCLK ;时钟线拉低
CALL Delay ;延时等待
MOV C,IO ;读取数据
RRC A ;保存数据
SETB SCLK ;时钟线拉高
CALL Delay ;延时等待
DJNZ 0,ReadNext
POP 0
RET
;**************************************
;向DS1302写1字节数据
;入口参数:ACC
;出口参数:无
;**************************************
DS1302_WriteByte:
PUSH 0
MOV 0,#8 ;8位计数器
WriteNext:
CLR SCLK ;时钟线拉低
CALL Delay ;延时等待
RRC A ;移出数据
MOV IO,C ;送出到端口
SETB SCLK ;时钟线拉高
CALL Delay ;延时等待
DJNZ 0,WriteNext
POP 0
RET
;**************************************
;读DS1302某地址的的数据
;入口参数:ACC (地址)
;出口参数:ACC (读出的数据)
;**************************************
DS1302_ReadData:
CLR RST ;拉低片选
CALL Delay ;延时等待
CLR SCLK ;时钟线拉低
CALL Delay ;延时等待
SETB RST ;使能片选
CALL Delay ;延时等待
CALL DS1302_WriteByte ;写地址
CALL DS1302_ReadByte ;读数据
RET
;**************************************
;往DS1302的某个地址写入数据
;入口参数:ACC (地址) B(需写入的数据)
;出口参数:无
;**************************************
DS1302_WritEDAta:
CLR RST ;拉低片选
CALL Delay ;延时等待
CLR SCLK ;时钟线拉低
CALL Delay ;延时等待
SETB RST ;使能片选
CALL Delay ;延时等待
CALL DS1302_WriteByte ;写地址
MOV A,B ;地址数据送入ACC
CALL DS1302_WriteByte ;写数据
RET
;**************************************
;写入初始时间
;入口参数:DPTR (初始值地址)
;出口参数:无
;**************************************
[1] [2] 下一页
本文关键字:单片机 程序 STC单片机(,单片机-工控设备 - STC单片机(