<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 時鐘芯片DS1302的PIC程序

          時鐘芯片DS1302的PIC程序

          作者: 時間:2016-11-13 來源:網絡 收藏

          include

          本文引用地址:http://www.ex-cimer.com/article/201611/316531.htm

          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個數據設定時間,包含寫使能寄存器,8個數據
          ; GET_TIME ;一次接收7個數據顯示時間
          ; TIME_WRITE_1 ;一次寫入1302一個字節(jié)
          ; TIME_READ_1 ;一次接收一個字節(jié)數據

          ;============== 1302定義 ===================
          #DEFINE I_O PORTC,7 ;1302I_O
          #DEFINE SCLK PORTC,6 ;1302時鐘
          #DEFINE RST PORTA,0 ;1302使能位
          #DEFINE RX_ADD 40H ;保存接受的7個數據
          #DEFINE TX_ADD 20H ;開始保存7個要寫入的時間數據
          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 ; 一次寫入7個時間數據
          CALL GET_TIME ; 一次讀回7個時間數據
          GOTO $


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

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

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

          ;設定充電方式 沒有設定
          RETURN

          ;**************************************************
          ; SET_TIME
          ; 作用:一次輸入7個數據來一次性的設定時間,同時使能寫寄存器
          ; 突發(fā)模式寫入,必須寫入8個數據,不是7個
          ; INPUT:要設定的8個數據已經寫入到TIME_TX_ADD開始的8個字節(jié)里面
          ;**************************************************
          SET_TIME
          MOVLW B10111110 ;標志位
          MOVWF TIME_TX
          BSF RST
          CALL CMD
          ;TIME_WRITE_8 ;發(fā)送8個數據
          MOVLW TX_ADD ;//發(fā)送數據的起始地址
          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個字節(jié)的時間數據,突發(fā)模式讀取
          ; INPUT:NONE
          ; OUTPUT:把7個時間數據保存在TIME_RX_ADD開始的7個寄存器里面
          ;***********************************************
          GET_TIME
          MOVLW B10111111
          MOVWF TIME_TX
          BSF RST
          CALL CMD
          ;TIME_READ_7 ;接收7個數據
          MOVLW RX_ADD ;保存數據的起始地址
          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ā)送一個字節(jié)的數據,用于發(fā)送1302的
          ; 控制字或者發(fā)送一個數據
          ; 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ā)送數據
          DECFSZ COUNT1,F
          GOTO TLOP
          BCF SCLK ;恢復
          RETURN

          ;************************************************
          ; TIME_READ_1
          ; 作用:讀取1302一個字節(jié)的數據
          ; INPUT: NONE
          ; OUTPUT:接收數據保存在TIME_RX里面
          ; 原理:在SCLK下降沿接收數據,低字節(jié)在前,根據I_O的
          ; 的電平的高低,采取帶進位和不帶進位右移.
          ;***********************************************
          TIME_READ_1
          BANK1
          BSF TRISC,7 ;I_O IS INPUT
          BANK0
          MOVLW D8
          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

          ;======================================
          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個
          RETURN
          ;==========================
          END



          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();