新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 時(shí)鐘芯片DS1302的PIC程序

        時(shí)鐘芯片DS1302的PIC程序

        作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏

        include

        本文引用地址:http://www.104case.com/article/201611/316531.htm

        CBLOCK 20H
        SEC ;秒
        MIN ;分
        HOU ;小時(shí)
        DATE ;日期
        MON ;月
        DAY ;日
        YERR ;年
        DDD ;寫(xiě)使能位
        TIME_TX ;1302發(fā)送寄存器
        TIME_RX ;1302接收寄存器
        COUNT1 ;
        COUNT2 ;
        DELAY1
        DELAY2
        ENDC

        ;=================================
        ;1302子程序說(shuō)明
        ; DS1302INI ;1302初始化,先禁止RST,設(shè)定充電方式
        ; SET_TIME ;一次發(fā)送7個(gè)數(shù)據(jù)設(shè)定時(shí)間,包含寫(xiě)使能寄存器,8個(gè)數(shù)據(jù)
        ; GET_TIME ;一次接收7個(gè)數(shù)據(jù)顯示時(shí)間
        ; TIME_WRITE_1 ;一次寫(xiě)入1302一個(gè)字節(jié)
        ; TIME_READ_1 ;一次接收一個(gè)字節(jié)數(shù)據(jù)

        ;============== 1302定義 ===================
        #DEFINE I_O PORTC,7 ;1302I_O
        #DEFINE SCLK PORTC,6 ;1302時(shí)鐘
        #DEFINE RST PORTA,0 ;1302使能位
        #DEFINE RX_ADD 40H ;保存接受的7個(gè)數(shù)據(jù)
        #DEFINE TX_ADD 20H ;開(kāi)始保存7個(gè)要寫(xiě)入的時(shí)間數(shù)據(jù)
        BANK1 MACRO
        BSF STATUS,RP0
        ENDM
        BANK0 MACRO
        BCF STATUS,RP0
        ENDM

        ;======================================
        ORG 00H
        NOP
        GOTO MAIN
        MAIN
        CALL CLR_RAM ;清除RAN
        CALL PORT_INI ;端口定義
        CALL DS1302_INI
        CALL SET_TIME ; 一次寫(xiě)入7個(gè)時(shí)間數(shù)據(jù)
        CALL GET_TIME ; 一次讀回7個(gè)時(shí)間數(shù)據(jù)
        GOTO $


        ;寫(xiě)入秒,可以寫(xiě)任意的7個(gè)時(shí)間數(shù)據(jù),單字節(jié)
        MOVLW B10000000
        MOVWF TIME_TX
        BSF RST
        CALL CMD
        MOVLW B00100101
        MOVWF TIME_TX
        CALL CMD
        BCF RST

        ;讀秒,可以讀任意7個(gè)時(shí)間,單字節(jié)
        MOVLW B10000001
        MOVWF TIME_TX
        BSF RST
        CALL CMD
        CALL TIME_READ_1
        BCF RST
        GOTO $

        ;**************************************************
        ; DS1302_INI:子程序
        ; 作用:初始化1302,先禁止RST,允許寫(xiě)使能
        ;**************************************************
        DS1302_INI
        BCF SCLK
        BCF RST ;先禁止
        MOVLW B10001110 ;寫(xiě)使能寄存器
        MOVWF TIME_TX
        BSF RST
        CALL CMD
        MOVLW B0 ;允許寫(xiě)使能
        MOVWF TIME_TX
        CALL CMD ;發(fā)送一個(gè)字節(jié)的數(shù)據(jù)
        BCF RST

        ;設(shè)定充電方式 沒(méi)有設(shè)定
        RETURN

        ;**************************************************
        ; SET_TIME
        ; 作用:一次輸入7個(gè)數(shù)據(jù)來(lái)一次性的設(shè)定時(shí)間,同時(shí)使能寫(xiě)寄存器
        ; 突發(fā)模式寫(xiě)入,必須寫(xiě)入8個(gè)數(shù)據(jù),不是7個(gè)
        ; INPUT:要設(shè)定的8個(gè)數(shù)據(jù)已經(jīng)寫(xiě)入到TIME_TX_ADD開(kāi)始的8個(gè)字節(jié)里面
        ;**************************************************
        SET_TIME
        MOVLW B10111110 ;標(biāo)志位
        MOVWF TIME_TX
        BSF RST
        CALL CMD
        ;TIME_WRITE_8 ;發(fā)送8個(gè)數(shù)據(jù)
        MOVLW TX_ADD ;//發(fā)送數(shù)據(jù)的起始地址
        MOVWF FSR
        MOVLW D8
        MOVWF COUNT2
        TW1
        MOVF INDF,W
        MOVWF TIME_TX
        CALL CMD
        INCF FSR,F
        DECFSZ COUNT2,F
        GOTO TW1
        BCF RST
        RETURN

        ;***********************************************
        ; GET_TIME
        ; 作用:一次接受7個(gè)字節(jié)的時(shí)間數(shù)據(jù),突發(fā)模式讀取
        ; INPUT:NONE
        ; OUTPUT:把7個(gè)時(shí)間數(shù)據(jù)保存在TIME_RX_ADD開(kāi)始的7個(gè)寄存器里面
        ;***********************************************
        GET_TIME
        MOVLW B10111111
        MOVWF TIME_TX
        BSF RST
        CALL CMD
        ;TIME_READ_7 ;接收7個(gè)數(shù)據(jù)
        MOVLW RX_ADD ;保存數(shù)據(jù)的起始地址
        MOVWF FSR
        MOVLW D7
        MOVWF COUNT2
        TR2
        CALL TIME_READ_1
        MOVF TIME_RX,W
        MOVWF INDF
        INCF FSR,F
        DECFSZ COUNT2,F
        GOTO TR2
        BCF RST
        RETURN

        ;************************************************
        ; TIME_WRITE_1
        ; 作用:一次發(fā)送一個(gè)字節(jié)的數(shù)據(jù),用于發(fā)送1302的
        ; 控制字或者發(fā)送一個(gè)數(shù)據(jù)
        ; INPUT: TIME_TX
        ;************************************************
        CMD
        MOVLW D8
        MOVWF COUNT1
        TLOP
        BCF I_O ;初始值是低電平
        BCF SCLK
        BTFSC TIME_TX,0
        BSF I_O
        RRF TIME_TX,F
        BSF SCLK ;高電平發(fā)送數(shù)據(jù)
        DECFSZ COUNT1,F
        GOTO TLOP
        BCF SCLK ;恢復(fù)
        RETURN

        ;************************************************
        ; TIME_READ_1
        ; 作用:讀取1302一個(gè)字節(jié)的數(shù)據(jù)
        ; INPUT: NONE
        ; OUTPUT:接收數(shù)據(jù)保存在TIME_RX里面
        ; 原理:在SCLK下降沿接收數(shù)據(jù),低字節(jié)在前,根據(jù)I_O的
        ; 的電平的高低,采取帶進(jìn)位和不帶進(jìn)位右移.
        ;***********************************************
        TIME_READ_1
        BANK1
        BSF TRISC,7 ;I_O IS INPUT
        BANK0
        MOVLW D8
        MOVWF COUNT1 ;讀取8個(gè)字節(jié)
        TR1
        BCF SCLK ;下降沿讀取
        BCF STATUS,C
        BTFSC I_O
        BSF STATUS,C
        RRF TIME_RX,F
        BSF SCLK ;恢復(fù)高電平
        DECFSZ COUNT1,F
        GOTO TR1
        BANK1
        BCF TRISC,7 ;OUTPUT
        BANK0
        BCF SCLK ;恢復(fù)
        RETURN

        ;======================================
        PORT_INI
        BANK1
        MOVLW B00000000
        MOVWF TRISC
        MOVLW B0
        MOVWF TRISB
        MOVLW B00000111
        MOVWF ADCON1
        MOVLW B00000000
        MOVWF TRISA
        BANK0
        MOVLW 18H
        MOVWF 20H
        MOVLW 19H
        MOVWF 21H
        MOVLW 05H
        MOVWF 22H
        MOVLW 13H
        MOVWF 23H
        MOVLW 14H
        MOVWF 24H
        MOVLW 15H
        MOVWF 25H
        MOVLW 16H
        MOVWF 26H
        RETURN

        ;==========================
        CLR_RAM
        MOVLW 20H
        MOVWF FSR
        LOOP
        CLRF INDF
        INCF FSR,F
        BTFSS FSR,7
        GOTO LOOP ;清除32個(gè)
        RETURN
        ;==========================
        END



        關(guān)鍵詞: 時(shí)鐘芯片DS1302PIC程

        評(píng)論


        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 晋宁县| 恩施市| 黄梅县| 元谋县| 江门市| 新巴尔虎左旗| 五莲县| 潜江市| 咸阳市| SHOW| 龙岩市| 余江县| 利川市| 宜昌市| 洛阳市| 玉龙| 滁州市| 青阳县| 伊川县| 翁牛特旗| 吴桥县| 新龙县| 宁陵县| 偏关县| 华池县| 新密市| 交城县| 共和县| 修水县| 唐山市| 从化市| 房产| 南郑县| 建瓯市| 六枝特区| 金坛市| 永嘉县| 竹山县| 松溪县| 昆山市| 金山区|