RX8010時鐘驅動程序
0.png (6.86 KB, 下載次數: 55)
下載附件
2017-11-14 20:31 上傳
單片機源程序如下:
- /*
- ****************************************************************************
- FILE : RX8010.c
- PURPOSE : the driver of RTC chip "RX-8010SJ"
- AUTHOR : Gtw
- LOG : 2014-11-28 , create it
- ****************************************************************************
- */
- #define _RX8010_C_
- #include ".\main\Header.h"
- #if ( RTC_SEL==RTC_RX8010 ) || ( NVMEM_SEL==NVMEM_RX8010 )
- #if ( RTC_SEL==RTC_RX8010 )
- TIME_t Time;
- #endif
- #if ( NVMEM_SEL==NVMEM_RX8010 )
- NVMEM_t NvMem;
- #endif
- // 延時
- #define DLY_TYPE_CNT 1
- #define DLY_TYPE_ASM 2
- #define DLY_TYPE DLY_TYPE_ASM
- #if ( DLY_TYPE == DLY_TYPE_ASM )
- #define delay() { nop(); }
- /*
- static void delay(void){
- asm("nop");
- }
- */
- #else
- static void dly(uint08 cnt){
- while( cnt-- );
- }
- #define delay() { dly(1); }
- #endif
- /*
- **************************************************
- 函數名 :RX8010_START
- 目的 :對RX8010產生一個START信號
- 傳遞參數:無
- 返回 :IIC總線是否正常,正常返回true,異常返回false
- 注意,此子程序不支持多主機
- **************************************************
- */
- bool RX8010_START(void){
- bool success = true;
- IoDir(RX8010_SCL,GPIO_OUT);
- IoWr(RX8010_SCL,GPIO_LO);
- delay();
- IoDir(RX8010_SDA,GPIO_IN);
- delay();
- if ( !IoRd(RX8010_SDA) ) success = false; // SDA對地線短路
- IoDir(RX8010_SCL,GPIO_IN);
- delay();
- if ( !IoRd(RX8010_SCL) ) success = false; // SCL對地線短路
- IoDir(RX8010_SDA,GPIO_OUT);
- IoWr(RX8010_SDA,GPIO_LO);
- delay();
- IoDir(RX8010_SCL,GPIO_OUT);
- IoWr(RX8010_SCL,GPIO_LO);
- //delay();
- return success;
- }
- /*
- **************************************************
- 函數名 :RX8010_STOP
- 目的 :對RX8010產生一個STOP信號
- 傳遞參數:無
- 返回 :無
- 注意,此子程序不支持多主機
- **************************************************
- */
- void RX8010_STOP(void){
- IoDir(RX8010_SCL,GPIO_OUT);
- IoWr(RX8010_SCL,GPIO_LO);
- delay();
- IoDir(RX8010_SDA,GPIO_OUT);
- IoWr(RX8010_SDA,GPIO_LO);
- delay();
- IoDir(RX8010_SCL,GPIO_IN);
- delay();
- IoDir(RX8010_SDA,GPIO_IN);
- delay();
- IoDir(RX8010_SCL,GPIO_OUT);
- IoWr(RX8010_SCL,GPIO_LO);
- //delay();
- }
- /*
- **************************************************
- 函數名 :RX8010_SEND_BIT
- 目的 :向RX8010發送一個位
- 傳遞參數:bit,位的值
- 返回 :無
- 注意,如果以傳輸數據為目的,則調用此程序前應保證已經產生了START信號
- **************************************************
- */
- void RX8010_SEND_BIT(bool bit){
- IoDir(RX8010_SCL,GPIO_OUT);
- IoWr(RX8010_SCL,GPIO_LO);
- delay();
- if ( bit ){
- IoDir(RX8010_SDA,GPIO_IN);
- }else{
- IoDir(RX8010_SDA,GPIO_OUT);
- IoWr(RX8010_SDA,GPIO_LO);
- }
- delay();
- IoDir(RX8010_SCL,GPIO_IN);
- //delay(); // 函數最后的delay()在時鐘較慢的情況下可省略
- }
- /*
- **************************************************
- 函數名 :RX8010_GET_BIT
- 目的 :從RX8010讀出一個位
- 傳遞參數:無
- 返回 :讀取到的位
- 注意,調用此程序前應保證已經產生了START信號
- **************************************************
- */
- bool RX8010_GET_BIT(void){
- IoDir(RX8010_SCL,GPIO_OUT);
- IoWr(RX8010_SCL,GPIO_LO);
- delay();
- IoDir(RX8010_SDA,GPIO_IN);
- delay();
- IoDir(RX8010_SCL,GPIO_IN);
- delay();
- return IoRd(RX8010_SDA);
- }
- /*
- **************************************************
- 函數名 :RX8010_SEND_BYTE
- 目的 :向RX8010發出一個字節
- 傳遞參數:字節的值
- 返回 :無
- 注意,調用此程序前應保證已經產生了START信號
- msb first!
- **************************************************
- */
- void RX8010_SEND_BYTE(uint08 data){
- uint08 tmp;
- for(tmp=8;tmp>0;tmp--){
-
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
RX8010.zip
(4.56 KB, 下載次數: 13)
2017-11-14 13:12 上傳
點擊文件名下載附件
RX8010時鐘驅動程序 下載積分: 黑幣 -5
|