⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1381driver.c

📁 本程序是完成的HT1381的驱动程序
💻 C
字号:
/********** 1381芯片读写驱动程序 (4MHZ晶体)
***********作者:卢海钧
***********日期:2004.11.14,
                2005.3.27修正一错误 
    2V 500K  5V 2MHZ CLK
*/   

#define  USER_DRIVER_GLOBALS
#include "..\includes\includes.h"
INT8U  CLK_TEMP;


#define  ht1380_clk          _pd0
#define  ht1380_clk_ctrl	 _pdc0
#define  ht1380_io		     _pd1
#define  ht1380_io_ctrl	     _pdc1
#define  ht1380_rest	     _pd2
#define  ht1380_rest_ctrl	 _pdc2

//void HT1381_INIT(void);
//void HT1381_WR(void);
//void HT1381_RD(void);
//void HT1381_GETTIME(void);
//void HT1381_WRTIME(void);

void HT1381_GETTIME(void)
{
    ht1380_rest = 0;
    asm("nop");
    asm("nop");
    ht1380_rest = 1;
    CLK_TEMP = 0xbf;
    HT1381_WR();
    HT1381_RD();
    ClkSec = CLK_TEMP;
    HT1381_RD();
    ClkMin = CLK_TEMP;
    HT1381_RD();
    ClkHr = CLK_TEMP;
    HT1381_RD();
    HT1381_RD();
    HT1381_RD();
    HT1381_RD();
    ht1380_clk=0;          
    ht1380_clk_ctrl=0;	 
    ht1380_io=0;		     
    ht1380_io_ctrl=0;	     
    ht1380_rest=0;	     
    ht1380_rest_ctrl=0;	
    ht1380_rest = 0;
}

void HT1381_WRTIME(void)
{
    ht1380_rest = 0;
    asm("nop");
    asm("nop");
    ht1380_rest = 1;
    CLK_TEMP = 0x8e;//10001110写第7个字节
    HT1381_WR();
    CLK_TEMP = 0;//cmd 取消写保护命令
    HT1381_WR();
    ht1380_rest = 0;
    asm("nop");
    asm("nop");
    ht1380_rest = 1;
    CLK_TEMP = 0xbe;
    HT1381_WR();
    CLK_TEMP = ClkSec;//写秒
    HT1381_WR();
    CLK_TEMP = ClkMin;//写分
    HT1381_WR();
    CLK_TEMP = ClkHr;//写时
    HT1381_WR();
    CLK_TEMP = 1;//DATE
    HT1381_WR();
    CLK_TEMP = 11;//month
    HT1381_WR();
    CLK_TEMP = 1;//day
    HT1381_WR();
    CLK_TEMP = 4;//year
    HT1381_WR();
    ht1380_rest = 0;
    asm("nop");	
}
void HT1381_INIT(void)
{
    ht1380_clk_ctrl = 0;
    ht1380_io_ctrl = 0;
    ht1380_rest_ctrl = 0;
    ht1380_rest = 0;
    asm("nop");
    asm("nop");
    ht1380_rest = 1;
    CLK_TEMP = 0x8e;//10001110写第7个字节
    HT1381_WR();
    CLK_TEMP = 0;//cmd 取消写保护命令
    HT1381_WR();
    ht1380_rest = 0;
    asm("nop");
    asm("nop");
    ht1380_rest = 1;
    CLK_TEMP = 0x80;//10000000写第0个字节
    HT1381_WR();
    CLK_TEMP = 0;//使能晶体
    HT1381_WR();
    /*
    CLK_TEMP = 0xBE;//10111110写第0--7个字节
    HT1381_WR();
    CLK_TEMP = ClkSec;
    HT1381_WR();
    CLK_TEMP = ClkMin;
    HT1381_WR();
    CLK_TEMP = ClkHr;
    HT1381_WR();
    CLK_TEMP = 1;//DATE
    HT1381_WR();
    CLK_TEMP = 11;//month
    HT1381_WR();
    CLK_TEMP = 1;//day
    HT1381_WR();
    CLK_TEMP = 4;//year
    HT1381_WR();
    */
    asm("nop");
    ht1380_rest = 0;
}
void HT1381_WR(void)
{
    INT8U i;
    ht1380_io_ctrl = 0;
    ht1380_io = 0;
    for (i = 0; i < 8; i ++){
        if (CLK_TEMP & 0x01 ) {
            ht1380_io = 1;
        }
        ht1380_clk = 1;
        asm("nop");
        asm("nop");
        ht1380_clk = 0;
        ht1380_io = 0;
        CLK_TEMP = CLK_TEMP >> 1;
    }
}
void HT1381_RD(void)
{
    INT8U i;
    CLK_TEMP = 0;
    ht1380_io_ctrl = 1;
   
    for (i = 0; i < 8; i ++){
        ht1380_clk = 1;
        asm("nop");
        CLK_TEMP = CLK_TEMP >> 1;
        if (ht1380_io ){
            CLK_TEMP |= 0x80;
        }
        ht1380_clk = 0;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -