1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      PIC單片機(jī)控制時(shí)鐘芯片DS1302匯編程序

      更新時(shí)間: 2008-07-21 10:46:48來源: 粵嵌教育瀏覽量:1267

      #INCLUDE
      CBLOCK 20H
      SEC ;秒
      MIN ;分
      HOU ;小時(shí)
      DATE ;日期
      MON ;月
      DAY ;日
      YERR ;年
      DDD ;寫使能位
      TIME_TX ;1302發(fā)送寄存器
      TIME_RX ;1302接收寄存器
      COUNT1 ;
      COUNT2 ;
      DELAY1
      DELAY2
      ENDC
      *******************************
      ; ; 1302子程序說明
      ; ;******************************
      ; DS1302INI ;1302初始化,先禁止RST,設(shè)定充電方式
      ; SET_TIME ;一次發(fā)送7個(gè)數(shù)據(jù)設(shè)定時(shí)間,包含寫使能寄存器,8個(gè)數(shù)據(jù)
      ; GET_TIME ;一次接收7個(gè)數(shù)據(jù)顯示時(shí)間
      ; TIME_WRITE_1;一次寫入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 ;開始保存7個(gè)要寫入的時(shí)間數(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個(gè)時(shí)間數(shù)據(jù)
      CALL GET_TIME ; 一次讀回7個(gè)時(shí)間數(shù)據(jù)
      GOTO $


      ;; 寫入秒,可以寫任意的7個(gè)時(shí)間數(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個(gè)時(shí)間,單字節(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ā)送一個(gè)字節(jié)的數(shù)據(jù)
      BCF RST

      ;設(shè)定充電方式

      沒有設(shè)定
      RETURN

      ;**************************************************
      ; SET_TIME
      ; 作用:一次輸入7個(gè)數(shù)據(jù)來一次性的設(shè)定時(shí)間,同時(shí)使能寫寄存器
      ; 突發(fā)模式寫入,必須寫入8個(gè)數(shù)據(jù),不是7個(gè)
      ; INPUT:要設(shè)定的8個(gè)數(shù)據(jù)已經(jīng)寫入到TIME_TX_ADD開始的8個(gè)字節(jié)里面
      ;**************************************************
      SET_TIME
      MOVLW B'10111110' ;標(biāo)志位
      MOVWF TIME_TX
      BSF RST
      CALL TIME_WRITE_1
      ;TIME_WRITE_8 ;發(fā)送8個(gè)數(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個(gè)字節(jié)的時(shí)間數(shù)據(jù),突發(fā)模式讀取
      ; INPUT:NONE
      ; OUTPUT:把7個(gè)時(shí)間數(shù)據(jù)保存在TIME_RX_ADD開始的7個(gè)寄存器里面
      ;***********************************************
      GET_TIME
      MOVLW B'10111111'
      MOVWF TIME_TX
      BSF RST
      CALL TIME_WRITE_1
      ;TIME_READ_7 ;接收7個(gè)數(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ā)送一個(gè)字節(jié)的數(shù)據(jù),用于發(fā)送1302的
      ; 控制字或者發(fā)送一個(gè)數(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 ;恢復(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 D'8'
      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
      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個(gè)
      RETURN
      END


      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲综合色婷婷六月在线图片 | 日韩精品色婷婷免费视频 | 亚洲欧美成aw人在线 | 亚洲国产综合有精品 | 午夜福利理论片中文字幕 | 亚洲国产日本综合aⅴ |