>
首 页文章中心单片机论坛电脑援救中心杀毒软件下载电子元件速查集成电路速查客户留言下载中心商品展示频道繁體中文
设为首页
加入收藏
联系我们
您当前的位置:中国单片机网 -> 单片机讲座 -> 文章内容 退出登录 用户管理
栏目导航
· 经典软件 · 单片机讲座
· 配套实验板 · ARM、AVR
· 电源技术 · 称重技术
· 硬件与电路 · 资料下载大全
· 轻松一刻 · 胡老师专栏
· l
热门文章
· 金华广播电视大学(金..
· 金华广播电视大学(金..
· [组图] 三极管s8050管..
· [图文] 324
· [组图] 326
· [组图] 51系列单片机..
· dac0832中文资料引脚..
· 金华电大2008年秋季..
· [组图] 三极管9013管..
· 电动机书下载大全
相关文章
· 基于DS18B20温度传感..
· [组图] 基于MCU和DSP..
· 实时时钟DS1302程序..
· 实时时钟模块DS1302..
· DS1302的读写程序(..
· 时钟芯片DS1302程序..
· DS1302 在ATmega8下..
· [组图] 实时时钟电路..
· DS18B20测温(C语言..
· DS18B20智能温度控制..
ds1302汇编程序(推荐)
作者:本站  来源:www.chinadpj.com  发布时间:2008-5-15 21:00:59  发布人:admin

减小字体 增大字体

 ds1302汇编程序(推荐)

 ;*********************************************************************/
T_RST Bit P3.3 ;实时时钟复位线引脚
T_CLK Bit P3.4 ;实时时钟时钟线引脚
T_IO Bit P3.5 ;实时时钟数据线引脚
SECOND EQU 30H
MINUTE EQU 31H
HOUR EQU 32H
DAY EQU 33H
MONTH EQU 34H
WEEK EQU 35H
YEARL EQU 36H

;*********************************************************************/
        ORG 0000H
        LJMP START
        ORG 0060H
START:  ;CLR     T_RST
        ;CLR     T_CLK
        MOV SP,#60H                 ;修改堆栈
        MOV SECOND,#00H             ;初始时间设为12:00:00
        MOV MINUTE,#00H
        MOV HOUR,#12H
        MOV DAY,#01H                ;初始日期设为08年1月1日第一周
        MOV MONTH,#01H
        MOV WEEK,#01H
        MOV YEARL,#08H
        LCALL SETDS1302
        LCALL GET1302
        LCALL DISPLAY
MAIN: MOV R3,#25
        MOV TMOD,#01H
        MOV TH0,#70H  ;置定时器初值(定时40ms)
        MOV TL0,#00H
        SETB TR0   ;启动定时器0
LP1:    JBC TF0,LP2   ;查询计数溢出
        SJMP LP1   ;未到40 ms继续计数
LP2:    MOV TH0,#0B8H  ;重新置定时器初值
        MOV TL0,#00H
        LCALL DISPLAY                 ;显示
        DJNZ R3,LP1                 ;未到1 S继续循环
        LCALL GET1302                 ;每过1s从DS1302读取一次时间
        mov     r3,#25
        SJMP lp1

;---------------------------------------------------------------------------------------------------
;字符显示码表
DIG_CODE:
        DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H

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

;---------------------------------------------------------------------------------------------------
;数码显示子程序
DISPLAY:
        MOV     DPTR,#DIG_CODE
;*******************************************
;显示秒
        MOV     A,SECOND
        ANL     A,#0FH
        MOVC    A,@A+DPTR
        MOV     P2,A
        MOV     P1,#11011111b
        LCALL   DIS_DELAY
        MOV     A,SECOND
        SWAP    A
        ANL     A,#07H
        MOVC    A,@A+DPTR
        MOV     P2,A
        MOV     P1,#11101111b
        LCALL   DIS_DELAY
;*******************************************
;显示分
        MOV     A,MINUTE
        ANL     A,#0FH
        MOVC    A,@A+DPTR
        MOV     P2,A
        MOV     P1,#11110111b
        LCALL   DIS_DELAY
        MOV     A,MINUTE
        SWAP    A
        ANL     A,#07H
        MOVC    A,@A+DPTR
        MOV     P2,A
        MOV     P1,#11111011b
        LCALL   DIS_DELAY
;*******************************************
;显示小时
        MOV     A,HOUR
        ANL     A,#0FH
        MOVC    A,@A+DPTR
        MOV     P2,A
        MOV     P1,#11111101b
        LCALL   DIS_DELAY
        MOV     A,HOUR
        SWAP    A
        ANL     A,#03H
        MOVC    A,@A+DPTR
        MOV     P2,A
        MOV     P1,#11111110b
        LCALL   DIS_DELAY

        RET
;---------------------------------------------------------------------------------------------------

;---------------------------------------------------------------------------------------------------
;显示延时5ms子程序
DIS_DELAY:
        PUSH PSW
        MOV R7,#10
D1:     MOV R6,#248
D2:     DJNZ R6,$
        DJNZ R7,D1
        POP PSW
        RET
;---------------------------------------------------------------------------------------------------

;---------------------------------------------------------------------------------------------------
;设置DS1302初始时间,并启动计时
SETDS1302:
        CLR     T_RST
        nop
        CLR     T_CLK
        nop
        SETB    T_RST
        nop
        MOV     B,#8EH          ;写控制命令字
        LCALL   INPUTBYTE      
        MOV     B,#00H          ;写保护关闭
        LCALL   INPUTBYTE
        SETB    T_CLK
        nop
        CLR     T_RST

        MOV     R0,#SECOND      ;内存中的时间首地址
        MOV     R1,#80H         ;DS1302中的时间首地址
        MOV     R7,#7           ;字节数

SETLOOP:
        CLR     T_RST
        nop
        CLR     T_CLK
        nop
        SETB    T_RST
        nop
        MOV     B,R1            ;写命令字
        LCALL   INPUTBYTE
        MOV     A,@R0           ;设置时间
        MOV     B,A
        LCALL   INPUTBYTE      
        INC     R0
        INC     R1
        INC     R1
        SETB    T_CLK
        nop
        CLR     T_RST
        nop
        DJNZ    R7,SETLOOP

        CLR     T_RST
        nop
        CLR     T_CLK
        nop
        SETB    T_RST
        nop
        MOV     B,#8EH
        LCALL   INPUTBYTE
        MOV     B,#80H          ;开写保护
        LCALL   INPUTBYTE
        SETB    T_CLK
        nop
        CLR     T_RST
        nop
        RET

;---------------------------------------------------------------------------------------------------
;从DS1302读取时间
GET1302:
        MOV     R0,#SECOND    
        MOV     R1,#81H        ;DS1302中读时间的首地址
        MOV     R7,#7
GETLOOP:
        CLR     T_RST
        nop
        CLR     T_CLK
        nop
        SETB    T_RST
        nop
        MOV     B,R1
        LCALL   INPUTBYTE       ;写命令字
        LCALL   OUTPUTBYTE      ;读时间
        MOV     @R0,A           ;将从DS1302中读取的时间从内存中保存
        INC     R0              ;修改地址指针
        INC     R1
        INC     R1
        SETB    T_CLK
        nop
        CLR     T_RST
        nop
        DJNZ    R7,GETLOOP
        RET

;---------------------------------------------------------------------------------------------------
;向DS1302写一个字节
INPUTBYTE:
        MOV     R4,#8
INPUTLOOP:
       
        MOV     A,B
        RRC     A
        MOV     B,A
        MOV     T_IO,C
        SETB    T_CLK
        NOP
        ;NOP
        ;NOP
        CLR     T_CLK
        DJNZ    R4,INPUTLOOP
        RET
;---------------------------------------------------------------------------------------------------
;从DS1302读一个字节
OUTPUTBYTE:
        clr     a
        clr     c
        MOV     R4,#8
OUTPUTLOOP:
       
        NOP
        ;NOP
        MOV     C,T_IO
        RRC     A
        SETB    T_CLK
        NOP
        ;NOP
        ;NOP
        CLR     T_CLK
        DJNZ    R4,OUTPUTLOOP
        RET
        end

[本站www.chinadpj.com(中国单片机网),摘自:http://www.neeeu.com/danpianji/ShowArticle.asp?ArticleID=1549,作者:]
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 管理登录
Copyright © 2002-2020 www.chinadpj.com. All Rights Reserved. 浙ICP备06040125号
Powered by:NewAsp SiteManageSystem Version 2.1 SP1 1030