新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > PIC單片機讀寫時鐘芯片DS1302匯編程序

        PIC單片機讀寫時鐘芯片DS1302匯編程序

        作者: 時間:2011-02-24 來源:網(wǎng)絡 收藏

        #INCLUDE
        CBLOCK 20H
        SEC ;秒
        MIN ;分
        HOU ;小時
        DATE ;日期
        MON ;月
        DAY ;日
        YERR ;年
        DDD ;寫使能位
        TIME_TX ;1302發(fā)送寄存器
        TIME_RX ;1302接收寄存器
        COUNT1 ;
        COUNT2 ;
        DELAY1
        DELAY2
        ENDC
        *******************************
        ; ; 1302子程序說明
        ; ;******************************
        ; DS1302INI ;1302初始化,先禁止RST,設定充電方式
        ; SET_TIME ;一次發(fā)送7個數(shù)據(jù)設定時間,包含寫使能寄存器,8個數(shù)據(jù)
        ; GET_TIME ;一次接收7個數(shù)據(jù)顯示時間
        ; TIME_WRITE_1;一次寫入1302一個字節(jié)
        ; TIME_READ_1 ;一次接收一個字節(jié)數(shù)據(jù)
        ; ;******* 1302定義**************
        ; ;******************************
        #DEFINE I_O PORTC,7 ;1302I_O
        #DEFINE SCLK PORTC,6 ;1302時鐘
        #DEFINE RST PORTA,0 ;1302使能位
        #DEFINE RX_ADD 40H ;保存接受的7個數(shù)據(jù)
        #DEFINE TX_ADD 20H ;開始保存7個要寫入的時間數(shù)據(jù)
        BANK1 MACRO
        BSF STATUS,RP0
        ENDM
        BANK0 MACRO
        BCF STATUS,RP0
        ENDM

        ORG 000H
        NOP
        GOTO MAIN
        MAIN

        CALL CLR_RAM 清除RAN
        CALL PORT_INI 端口定義
        CALL DS1302_INI
        CALL SET_TIME 一次寫入7個時間數(shù)據(jù)
        CALL GET_TIME ; 一次讀回7個時間數(shù)據(jù)
        GOTO $


        ;; 寫入秒,可以寫任意的7個時間數(shù)據(jù),單字節(jié)
        MOVLW B'10000000'
        MOVWF TIME_TX
        BSF RST
        CALL TIME_WRITE_1
        MOVLW B'00100101'
        MOVWF TIME_TX
        CALL TIME_WRITE_1
        BCF RST

        讀秒,可以讀任意7個時間,單字節(jié)


        MOVLW B'10000001'
        MOVWF TIME_TX
        BSF RST
        CALL TIME_WRITE_1
        CALL TIME_READ_1
        BCF RST

        GOTO $

        :子程序

        **************************************************
        ; DS1302_INI
        ; 作用:初始化1302,先禁止RST,允許寫使能
        ;**************************************************
        DS1302_INI
        BCF SCLK
        BCF RST ;先禁止
        MOVLW B'10001110' ;寫使能寄存器
        MOVWF TIME_TX
        BSF RST
        CALL TIME_WRITE_1
        MOVLW B'0' ;允許寫使能
        MOVWF TIME_TX
        CALL TIME_WRITE_1;發(fā)送一個字節(jié)的數(shù)據(jù)
        BCF RST

        ;設定充電方式

        沒有設定
        RETURN

        ;**************************************************
        ; SET_TIME
        ; 作用:一次輸入7個數(shù)據(jù)來一次性的設定時間,同時使能寫寄存器
        ; 突發(fā)模式寫入,必須寫入8個數(shù)據(jù),不是7個
        ; INPUT:要設定的8個數(shù)據(jù)已經(jīng)寫入到TIME_TX_ADD開始的8個字節(jié)里面
        ;**************************************************
        SET_TIME
        MOVLW B'10111110' ;標志位
        MOVWF TIME_TX
        BSF RST
        CALL TIME_WRITE_1
        ;TIME_WRITE_8 ;發(fā)送8個數(shù)據(jù)
        MOVLW TIME_TX_ADD ;發(fā)送數(shù)據(jù)的起始地址
        MOVWF FSR
        MOVLW D'8'
        MOVWF COUNT2
        TW1
        MOVF INDF,W
        MOVWF TIME_TX
        CALL TIME_WRITE_1
        INCF FSR,F
        DECFSZ COUNT2,F
        GOTO TW1
        BCF RST
        RETURN
        ;***********************************************
        ; GET_TIME
        ; 作用:一次接受7個字節(jié)的時間數(shù)據(jù),突發(fā)模式讀取
        ; INPUT:NONE
        ; OUTPUT:把7個時間數(shù)據(jù)保存在TIME_RX_ADD開始的7個寄存器里面
        ;***********************************************
        GET_TIME
        MOVLW B'10111111'
        MOVWF TIME_TX
        BSF RST
        CALL TIME_WRITE_1
        ;TIME_READ_7 ;接收7個數(shù)據(jù)
        MOVLW TIME_RX_ADD ;保存數(shù)據(jù)的起始地址
        MOVWF FSR
        MOVLW D'7'
        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ā)送一個字節(jié)的數(shù)據(jù),用于發(fā)送1302的
        ; 控制字或者發(fā)送一個數(shù)據(jù)
        ; INPUT: TIME_TX
        ;************************************************
        TIME_WRITE_1
        MOVLW D'8'
        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 ;恢復
        RETURN
        ;************************************************
        ; TIME_READ_1
        ; 作用:讀取1302一個字節(jié)的數(shù)據(jù)
        ; INPUT: NONE
        ; OUTPUT:接收數(shù)據(jù)保存在TIME_RX里面
        ; 原理:在SCLK下降沿接收數(shù)據(jù),低字節(jié)在前,根據(jù)I_O的
        ; 的電平的高低,采取帶進位和不帶進位右移.
        ;***********************************************
        TIME_READ_1
        BANK1
        BSF TRISC,7 ;I_O IS INPUT
        BANK0
        MOVLW D'8'
        MOVWF COUNT1 ;讀取8個字節(jié)
        TR1
        BCF SCLK ;下降沿讀取
        BCF STATUS,C
        BTFSC I_O
        BSF STATUS,C
        RRF TIME_RX,F
        BSF SCLK ;恢復高電平
        DECFSZ COUNT1,F
        GOTO TR1
        BANK1
        BCF TRISC,7 ;OUTPUT
        BANK0
        BCF SCLK ;恢復
        RETURN
        NOP

         

        PORT_INI
        BANK1
        MOVLW B'00000000'
        MOVWF TRISC
        MOVLW B'0'
        MOVWF TRISB
        MOVLW B'00000111'
        MOVWF ADCON1
        MOVLW B'00000000'
        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個
        RETURN
        END

        51單片機相關文章:51單片機教程


        單片機相關文章:單片機教程


        單片機相關文章:單片機視頻教程


        單片機相關文章:單片機工作原理




        評論


        相關推薦

        技術(shù)專區(qū)

        關閉
        主站蜘蛛池模板: 浦县| 商城县| 绿春县| 景宁| 佛教| 东阳市| 米易县| 彭水| 泊头市| 株洲县| 大关县| 静乐县| 安图县| 东莞市| 札达县| 华阴市| 东兴市| 桐柏县| 长葛市| 沈阳市| 绥芬河市| 娄底市| 亳州市| 巨鹿县| 鹿泉市| 大厂| 祁东县| 蒙城县| 镇巴县| 辉县市| 油尖旺区| 犍为县| 藁城市| 昭平县| 临潭县| 高阳县| 新巴尔虎右旗| 石林| 安平县| 河津市| 乌兰浩特市|