;************************************************************************* PCF8583 PROGRAM
;************************************************************************* PCF8583 PROGRAM
; Read and Write
;**transtimation : i2c bus
;** interface: 2 line
;** SCL---- siler clock
;** SDA---- siler data
;** 功能描述:器件地址:1 0 1 0 0 0 A0 R/-W
;** A0 PIN接地时,器件地址=1010000x
;** A0 PIN接高电平时,器件地址=1010001x
;** 调用模块: 模拟I2C BUS SUB
;** use register: year month day hour minute second
;*******************************************************
PCF8583_INI ;// 日历时钟方式
;// 计数,32。768khz ,读出月日计数值,禁止起闹,
CLRF PCF8583_DATA
CLRW
MOVWF PCF8583_AD ; // 写入地址
CALL PCF8583_WriteByte
RETURN
;******************************************************
;** 函数名:Write a byte
;** 输 入: PCF8583_DATA 要写入的字节。
;** PCF8583_AD 要写入PCF8583的地址
;** 输 出: NO
;** 功能描述:a byte 写入PCF8583
;** 全局变量:
;** 调用模块:模拟I2C BUS SUB
;** 作 者:lijun leejun@qingdaonews.com
;** 日 期:2003/1/17
;** 版本 1.0
;******************************************************
PCF8583_WriteByte
CALL STA
MOVLW B'10100010' ;写器件地址。
CALL WRBYT
CALL CACK
MOVF PCF8583_AD,W ; 指定要写入pcf8583中的首地址。
CALL WRBYT
CALL CACK
MOVF PCF8583_DATA,W ;要写入的数据。
CALL WRBYT
CALL CACK
CALL STOP
RETURN
;/*******************************************************
;** 函数名:Read a byte
;** 输 入:PCF8583_AD
;** 输 出: PCF8583_DATA 要读出的字节。
;** 功能描述:a byte 写入pcf8583
;** 调用模块:模拟I2C BUS SUB
;** 功能描述
;** 作 者:lijun leejun@qingdaonews.com
;** 日 期:2003/1/17
;** 版本 1.0
;****************************************************************/
PCF8583_ReadByte
CALL STA
MOVLW B'10100010' ;SLAW
CALL WRBYT
CALL CACK ;A
MOVF PCF8583_AD,W ;Wordadr
CALL WRBYT
CALL CACK ;A
CALL STA ;S
MOVLW B'10100011'
CALL WRBYT ;SLAR
CALL CACK ;A
CALL RDBYT ;DATA1
MOVWF PCF8583_DATA
CALL MNACK ;/A
CALL STOP ;P
RETURN
;*******************************************************************/
;** 函数名:Write second.minute.hour.one_year.month.day
;** 输 入: second.minute.hour.one_year.month.day (bcd码)
;** 输 出: no
;** 功能描述:把年.月.日.时.分.秒写入pcf8583
;** 调用模块:模拟I2C BUS SUB
;** 功能描述:one_year---年只需要0~3.
;** 作 者:lijun leejun@qingdaonews.com
;** 日 期:2003/1/17
;** 版本 1.0
;*******************************************************************
Write_ymdhms
;把年和日期和成一字节.
CLC
RLF one_year
CLC
RLF one_year
CLC
RLF one_year
CLC
RLF one_year
CLC
RLF one_year
CLC
RLF one_year
;;; OR one_year,day---》one_year
MOVF day,W
IORWF one_year,1
;写入pcf8583
CALL STA ;S
MOVLW B'10100010'
CALL WRBYT ;器件的地址
CALL CACK
MOVLW 02H ;要写入的 Adress
CALL WRBYT
CALL CACK
MOVF second,W
CALL WRBYT
CALL CACK
MOVF minute,W
CALL WRBYT
CALL CACK
MOVF hour,W
CALL WRBYT
CALL CACK
MOVF one_year,W ;年和日期合成在一字节。
CALL WRBYT
CALL CACK
MOVF month,W
CALL WRBYT
CALL CACK
CALL STOP
return
;*******************************************************************/
;** 函数名:Read second.minute.hour.one_year.month.day
;** 输 出: second.minute.hour.one_year.month.day
;** 输 入: no
;** 功能描述:从pcf8583中读出 年.月.日.时.分.秒
;** 调用模块:模拟I2C BUS SUB
;** 作 者:lijun leejun@qingdaonews.com
;** 日 期:2003/1/17
;** 版本 1.0
;*******************************************************************
Read_ymdhms
CALL STA ;S
MOVLW B'10100010' ;SLAW
CALL WRBYT
CALL CACK ;A
MOVLW 02H
CALL WRBYT ;Wordadr
CALL CACK ;A
CALL STA ;S
MOVLW B'10100011' ;SLAR
CALL WRBYT
CALL CACK ;A
CALL RDBYT ;data1
MOVWF second
CALL MACK ;A
CALL RDBYT ;data2
MOVWF minute
CALL MACK ;A
CALL RDBYT ;data3
MOVWF hour
CALL MACK ;A
CALL RDBYT ;data4 one_year + day
MOVWF one_year
CALL MACK ;A
CALL RDBYT ;data5
MOVWF month
CALL MNACK ;/A
CALL STOP ;P
;读出后数据要简单的处理. 年和日期要分开.月要屏蔽高3位.
movf one_year,W
;and day,b'00111111'
andlw b'00111111'
movwf day
CLC
rrf one_year
CLC
rrf one_year
CLC
rrf one_year
CLC
rrf one_year
CLC
rrf one_year
CLC
rrf one_year
;and month,b'00011111'
movf month,w
andlw b'00011111'
movwf month
RETURN
文章评论(0条评论)
登录后参与讨论