header
嵌入式 > 技术百科 > 详情

stc单片机1TMCU控制DS1302程序

发布时间:2020-06-20 发布时间:
|
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 (初始值地址)
;出口参数:无
;**************************************
DS1302_SetTime:
     MOV  A,#8EH
     MOV  B,#0
    CALL DS1302_WriteData   ;允许写操作
     MOV  R7,#80H             ;从寄存器80开始
     MOV  R6,#7               ;连续写7次
SetNext:
    CLR A
     MOV C A,@A+DPTR
     MOV  B,A                 ;数据
     MOV  A,R7                ;地址
    CALL DS1302_WriteData   ;写数据
    INC R7
    INC R7                  ;寄存器地址+2
    INC DPTR                ;数据地址+1
    DJNZ R6,SetNext
     MOV  A,#8EH
     MOV  B,#80H
    CALL DS1302_WriteData   ;写保护
    RET ;**************************************
;读取当前时间
;入口参数:R0 (数据缓冲区首地址)
;出口参数:无
;**************************************
DS1302_GetTime:
     MOV  R7,#81H             ;从寄存器81开始
     MOV  R6,#7               ;连续读7次
GetNext:
     MOV  A,R7                ;地址
    CALL DS1302_ReadData    ;读数据
     MOV  @R0,A               ;保存数据
    INC R7
    INC R7                  ;寄存器地址+2
    INC R0                  ;数据地址+1
    DJNZ R6,GetNext
    RET ;**************************************
;初始化DS1302
;**************************************
DS1302_Initial:
    CLR RST
    CLR SCLK
     MOV  A,#8EH
     MOV  B,#0
    CALL DS1302_WriteData   ;允许写操作
     MOV  A,#80H
     MOV  B,#0
    CALL DS1302_WriteData   ;时钟启动
     MOV  A,#90H
     MOV  B,#0A6H
    CALL DS1302_WriteData   ;一个二极管+4K电阻充电
     MOV  A,#8EH
     MOV  B,#80H
    CALL DS1302_WriteData   ;写保护
    RET     END



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Pi-Boy Classic向Gameboy致敬
footer