stc單片機(jī)1TMCU控制DS1302程序
SCLKBITP1.0;DS1302時(shí)鐘口P1.0
IOBITP1.1;DS1302數(shù)據(jù)口P1.1
RSTBITP1.2;DS1302片選口P1.2 NOWDATA40H ORG0
JMPReset ORG100H
Reset:
CALLDS1302_Initial;初始化DS1302
MOV DPTR,#INIT
CALLDS1302_SetTime;設(shè)置初始時(shí)間
MOV R0,#NOW
CALLDS1302_GetTime;讀取當(dāng)前時(shí)間 JMP$ INIT://秒分時(shí)日月星期年
DB00H,00H,20H,01H,01H,05H,10H
;**************************************
;延時(shí)X微秒(STC12C5A60S2@12M)
;不同的工作環(huán)境,需要調(diào)整此函數(shù)
;入口參數(shù):R7
;出口參數(shù):無
;**************************************
Delay:;6此延時(shí)函數(shù)是使用1T的指令周期進(jìn)行計(jì)算,與傳統(tǒng)的12T的MCU不同
NOP;1
NOP;1
RET;4
;**************************************
;從DS1302讀1字節(jié)數(shù)據(jù)
;入口參數(shù):無
;出口參數(shù):ACC
;**************************************
DS1302_ReadByte:
CLRA
PUSH0
MOV 0,#8;8位計(jì)數(shù)器
ReadNext:
CLRSCLK;時(shí)鐘線拉低
CALLDelay;延時(shí)等待
MOV C,IO;讀取數(shù)據(jù)
RRCA;保存數(shù)據(jù)
SETBSCLK;時(shí)鐘線拉高
CALLDelay;延時(shí)等待
DJNZ0,ReadNext
POP0
RET ;**************************************
;向DS1302寫1字節(jié)數(shù)據(jù)
;入口參數(shù):ACC
;出口參數(shù):無
;**************************************
DS1302_WriteByte:
PUSH0
MOV 0,#8;8位計(jì)數(shù)器
WriteNext:
CLRSCLK;時(shí)鐘線拉低
CALLDelay;延時(shí)等待
RRCA;移出數(shù)據(jù)
MOV IO,C;送出到端口
SETBSCLK;時(shí)鐘線拉高
CALLDelay;延時(shí)等待
DJNZ0,WriteNext
POP0
RET ;**************************************
;讀DS1302某地址的的數(shù)據(jù)
;入口參數(shù):ACC(地址)
;出口參數(shù):ACC(讀出的數(shù)據(jù))
;**************************************
DS1302_ReadData:
CLRRST;拉低片選
CALLDelay;延時(shí)等待
CLRSCLK;時(shí)鐘線拉低
CALLDelay;延時(shí)等待
SETBRST;使能片選
CALLDelay;延時(shí)等待
CALLDS1302_WriteByte;寫地址
CALLDS1302_ReadByte;讀數(shù)據(jù)
RET ;**************************************
;往DS1302的某個(gè)地址寫入數(shù)據(jù)
;入口參數(shù):ACC(地址)B(需寫入的數(shù)據(jù))
;出口參數(shù):無
;**************************************
DS1302_WritEDAta:
CLRRST;拉低片選
CALLDelay;延時(shí)等待
CLRSCLK;時(shí)鐘線拉低
CALLDelay;延時(shí)等待
SETBRST;使能片選
CALLDelay;延時(shí)等待
CALLDS1302_WriteByte;寫地址
MOV A,B;地址數(shù)據(jù)送入ACC
CALLDS1302_WriteByte;寫數(shù)據(jù)
RET ;**************************************
;寫入初始時(shí)間
;入口參數(shù):DPTR(初始值地址)
;出口參數(shù):無
;**************************************
DS1302_SetTime:
MOV A,#8EH
MOV B,#0
CALLDS1302_WriteData;允許寫操作
MOV R7,#80H;從寄存器80開始
MOV R6,#7;連續(xù)寫7次
SetNext:
CLRA
MOV CA,@A+DPTR
MOV B,A;數(shù)據(jù)
MOV A,R7;地址
CALLDS1302_WriteData;寫數(shù)據(jù)
INCR7
INCR7;寄存器地址+2
INCDPTR;數(shù)據(jù)地址+1
DJNZR6,SetNext
MOV A,#8EH
MOV B,#80H
CALLDS1302_WriteData;寫保護(hù)
RET ;**************************************
;讀取當(dāng)前時(shí)間
;入口參數(shù):R0(數(shù)據(jù)緩沖區(qū)首地址)
;出口參數(shù):無
;**************************************
DS1302_GetTime:
MOV R7,#81H;從寄存器81開始
MOV R6,#7;連續(xù)讀7次
GetNext:
MOV A,R7;地址
CALLDS1302_ReadData;讀數(shù)據(jù)
MOV @R0,A;保存數(shù)據(jù)
INCR7
INCR7;寄存器地址+2
INCR0;數(shù)據(jù)地址+1
DJNZR6,GetNext
RET ;**************************************
;初始化DS1302
;**************************************
DS1302_Initial:
CLRRST
CLRSCLK
MOV A,#8EH
MOV B,#0
CALLDS1302_WriteData;允許寫操作
MOV A,#80H
MOV B,#0
CALLDS1302_WriteData;時(shí)鐘啟動(dòng)
MOV A,#90H
MOV B,#0A6H
CALLDS1302_WriteData;一個(gè)二極管+4K電阻充電
MOV A,#8EH
MOV B,#80H
CALLDS1302_WriteData;寫保護(hù)
RET END
IOBITP1.1;DS1302數(shù)據(jù)口P1.1
RSTBITP1.2;DS1302片選口P1.2 NOWDATA40H ORG0
JMPReset ORG100H
Reset:
CALLDS1302_Initial;初始化DS1302
MOV DPTR,#INIT
CALLDS1302_SetTime;設(shè)置初始時(shí)間
MOV R0,#NOW
CALLDS1302_GetTime;讀取當(dāng)前時(shí)間 JMP$ INIT://秒分時(shí)日月星期年
DB00H,00H,20H,01H,01H,05H,10H
;**************************************
;延時(shí)X微秒(STC12C5A60S2@12M)
;不同的工作環(huán)境,需要調(diào)整此函數(shù)
;入口參數(shù):R7
;出口參數(shù):無
;**************************************
Delay:;6此延時(shí)函數(shù)是使用1T的指令周期進(jìn)行計(jì)算,與傳統(tǒng)的12T的MCU不同
NOP;1
NOP;1
RET;4
;**************************************
;從DS1302讀1字節(jié)數(shù)據(jù)
;入口參數(shù):無
;出口參數(shù):ACC
;**************************************
DS1302_ReadByte:
CLRA
PUSH0
MOV 0,#8;8位計(jì)數(shù)器
ReadNext:
CLRSCLK;時(shí)鐘線拉低
CALLDelay;延時(shí)等待
MOV C,IO;讀取數(shù)據(jù)
RRCA;保存數(shù)據(jù)
SETBSCLK;時(shí)鐘線拉高
CALLDelay;延時(shí)等待
DJNZ0,ReadNext
POP0
RET ;**************************************
;向DS1302寫1字節(jié)數(shù)據(jù)
;入口參數(shù):ACC
;出口參數(shù):無
;**************************************
DS1302_WriteByte:
PUSH0
MOV 0,#8;8位計(jì)數(shù)器
WriteNext:
CLRSCLK;時(shí)鐘線拉低
CALLDelay;延時(shí)等待
RRCA;移出數(shù)據(jù)
MOV IO,C;送出到端口
SETBSCLK;時(shí)鐘線拉高
CALLDelay;延時(shí)等待
DJNZ0,WriteNext
POP0
RET ;**************************************
;讀DS1302某地址的的數(shù)據(jù)
;入口參數(shù):ACC(地址)
;出口參數(shù):ACC(讀出的數(shù)據(jù))
;**************************************
DS1302_ReadData:
CLRRST;拉低片選
CALLDelay;延時(shí)等待
CLRSCLK;時(shí)鐘線拉低
CALLDelay;延時(shí)等待
SETBRST;使能片選
CALLDelay;延時(shí)等待
CALLDS1302_WriteByte;寫地址
CALLDS1302_ReadByte;讀數(shù)據(jù)
RET ;**************************************
;往DS1302的某個(gè)地址寫入數(shù)據(jù)
;入口參數(shù):ACC(地址)B(需寫入的數(shù)據(jù))
;出口參數(shù):無
;**************************************
DS1302_WritEDAta:
CLRRST;拉低片選
CALLDelay;延時(shí)等待
CLRSCLK;時(shí)鐘線拉低
CALLDelay;延時(shí)等待
SETBRST;使能片選
CALLDelay;延時(shí)等待
CALLDS1302_WriteByte;寫地址
MOV A,B;地址數(shù)據(jù)送入ACC
CALLDS1302_WriteByte;寫數(shù)據(jù)
RET ;**************************************
;寫入初始時(shí)間
;入口參數(shù):DPTR(初始值地址)
;出口參數(shù):無
;**************************************
DS1302_SetTime:
MOV A,#8EH
MOV B,#0
CALLDS1302_WriteData;允許寫操作
MOV R7,#80H;從寄存器80開始
MOV R6,#7;連續(xù)寫7次
SetNext:
CLRA
MOV CA,@A+DPTR
MOV B,A;數(shù)據(jù)
MOV A,R7;地址
CALLDS1302_WriteData;寫數(shù)據(jù)
INCR7
INCR7;寄存器地址+2
INCDPTR;數(shù)據(jù)地址+1
DJNZR6,SetNext
MOV A,#8EH
MOV B,#80H
CALLDS1302_WriteData;寫保護(hù)
RET ;**************************************
;讀取當(dāng)前時(shí)間
;入口參數(shù):R0(數(shù)據(jù)緩沖區(qū)首地址)
;出口參數(shù):無
;**************************************
DS1302_GetTime:
MOV R7,#81H;從寄存器81開始
MOV R6,#7;連續(xù)讀7次
GetNext:
MOV A,R7;地址
CALLDS1302_ReadData;讀數(shù)據(jù)
MOV @R0,A;保存數(shù)據(jù)
INCR7
INCR7;寄存器地址+2
INCR0;數(shù)據(jù)地址+1
DJNZR6,GetNext
RET ;**************************************
;初始化DS1302
;**************************************
DS1302_Initial:
CLRRST
CLRSCLK
MOV A,#8EH
MOV B,#0
CALLDS1302_WriteData;允許寫操作
MOV A,#80H
MOV B,#0
CALLDS1302_WriteData;時(shí)鐘啟動(dòng)
MOV A,#90H
MOV B,#0A6H
CALLDS1302_WriteData;一個(gè)二極管+4K電阻充電
MOV A,#8EH
MOV B,#80H
CALLDS1302_WriteData;寫保護(hù)
RET END
評(píng)論