×
单片机 > 单片机程序设计 > 详情

时钟芯片DS1302的PIC程序

发布时间:2020-06-19 发布时间:
|
 

include

  CBLOCK 20H
  SEC   ;秒
  MIN   ;分
  HOU   ;小时
  DATE  ;日期
  MON   ;月
 DAY   ;日
  YERR  ;年
  DDD   ;写使能位
  TIME_TX ;1302发送寄存器
  TIME_RX ;1302接收寄存器
  COUNT1  ;
  COUNT2  ;
  DELAY1
  DELAY2
  ENDC

;=================================
;1302子程序说明
; DS1302INI  ;1302初始化,先禁止RST,设定充电方式
; SET_TIME  ;一次发送7个数据设定时间,包含写使能寄存器,8个数据
; GET_TIME  ;一次接收7个数据显示时间
; TIME_WRITE_1 ;一次写入1302一个字节
; TIME_READ_1  ;一次接收一个字节数据

;============== 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个时间数据,单字节
  MOVLW  B'10000000'
  MOVWF  TIME_TX
  BSF   RST
  CALL  CMD
  MOVLW  B'00100101'
  MOVWF  TIME_TX
  CALL  CMD
  BCF   RST

;读秒,可以读任意7个时间,单字节
  MOVLW  B'10000001'
  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  B'10001110'  ;写使能寄存器
  MOVWF  TIME_TX
  BSF   RST
  CALL  CMD
  MOVLW  B'0'    ;允许写使能
  MOVWF  TIME_TX
  CALL  CMD  ;发送一个字节的数据
  BCF   RST
 
;设定充电方式  没有设定
  RETURN  
 
;**************************************************
; SET_TIME     
; 作用:一次输入7个数据来一次性的设定时间,同时使能写寄存器
; 突发模式写入,必须写入8个数据,不是7个
; INPUT:要设定的8个数据已经写入到TIME_TX_ADD开始的8个字节里面
;**************************************************
SET_TIME   
    MOVLW  B'10111110' ;标志位
  MOVWF  TIME_TX
  BSF   RST  
  CALL  CMD
 ;TIME_WRITE_8    ;发送8个数据
  MOVLW  TX_ADD  ;//发送数据的起始地址
  MOVWF  FSR
  MOVLW  D'8'
  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个字节的时间数据,突发模式读取
; INPUT:NONE
; OUTPUT:把7个时间数据保存在TIME_RX_ADD开始的7个寄存器里面
;***********************************************
GET_TIME    
     MOVLW  B'10111111'
  MOVWF  TIME_TX
  BSF   RST
  CALL  CMD
 ;TIME_READ_7     ;接收7个数据
  MOVLW  RX_ADD   ;保存数据的起始地址
  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
; 作用:一次发送一个字节的数据,用于发送1302的
; 控制字或者发送一个数据
; INPUT: TIME_TX
;************************************************
CMD
  MOVLW D'8'
  MOVWF COUNT1
TLOP
  BCF   I_O    ;初始值是低电平
  BCF   SCLK
  BTFSC  TIME_TX,0
  BSF   I_O
  RRF   TIME_TX,F
  BSF   SCLK   ;高电平发送数据
  DECFSZ  COUNT1,F
  GOTO  TLOP
  BCF   SCLK   ;恢复
  RETURN

;************************************************
; TIME_READ_1
; 作用:读取1302一个字节的数据
; INPUT: NONE
; OUTPUT:接收数据保存在TIME_RX里面
; 原理:在SCLK下降沿接收数据,低字节在前,根据I_O的
;    的电平的高低,采取带进位和不带进位右移.
;***********************************************
TIME_READ_1
  BANK1
  BSF   TRISC,7  ;I_O  IS INPUT
  BANK0
  MOVLW  D'8'
  MOVWF  COUNT1   ;读取8个字节
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  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

关键字:时钟芯片  DS1302  PIC程序

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法