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

📄 ds12_intel.c

📁 msp430f149读写DS12CR887
💻 C
字号:

#include <msp430x14x.h>
#include "DS12_INTEL.h"

#define DATA_SEL     P1SEL
#define DATA_DIR     P1DIR
#define DATA_OUT     P1OUT
#define DATA_IN      P1IN

#define CONTROL_SEL  P3SEL
#define CONTROL_DIR  P3DIR
#define DS1         P3OUT |= BIT0            // DS 置 1
#define DS0         P3OUT &= ~BIT0           // DS 置 0
#define RW1         P3OUT |= BIT1            // RW 置 1
#define RW0         P3OUT &= ~BIT1            // RW 置 0
#define AS1         P3OUT |= BIT2            // AS 置 1
#define AS0         P3OUT &= ~BIT2           // AS 置 0
#define CS1         P3OUT |= BIT3            // CS 置 1
#define CS0         P3OUT &= ~BIT3           // CS 置 0



void init_msp430_ds12()
{
  DATA_SEL = 0X00 ;                                       // P1 口 为端口功能
  CONTROL_SEL &= ~(BIT0 + BIT1 + BIT2 +BIT3);             // P3 口的 1 2 3 4 位为 IO 口功能
  CONTROL_DIR |= BIT0 + BIT1 + BIT2 + BIT3 ;              // 控制端口 DS RW AS CS方向为输出
}

void delay_ds12(unsigned int n)
{
  unsigned int count ;
  int i ;
  unsigned long j ;
  count = 2667 ;
  for(i = n ; i> 0;i--)
  {
    for (j=count ;j>0;j--);
  }
  return ;
}



void write_register(unchar register_add ,unchar register_data)
{
  DATA_DIR = 0XFF ;
  AS0 ;
  DS0 ;
  RW1 ;
  DS1 ;
  AS1 ;
  CS0 ;
  _NOP() ;
  _NOP() ;
  DATA_OUT = register_add ;
  AS0 ;
  RW0 ;
  DATA_OUT = register_data ;
  _NOP() ;
  _NOP() ;
  RW1 ;
  AS1 ;
  CS1 ;
}

void read_register(unchar register_add ,unchar *register_data)
{
  DATA_DIR = 0XFF ;
  CS0 ;
  AS0 ;
  DS1 ;
  RW1 ;
  AS1 ;
  _NOP() ;
  _NOP() ;
  DATA_OUT = register_add ;
  _NOP() ;
  AS0 ;
  DS0 ;
  DATA_DIR = 0X00 ;
  _NOP() ;
  _NOP() ;
  delay_ds12(50) ;
  *register_data = DATA_IN ;
  DS1 ;
  AS1 ;
  CS1 ;
}

/*******************************************/
//    设置时间函数
//   ds12cr887 时间已经被设定
//   所以建议不要使用此函数
void set_time(unchar *set_time)
{
  write_register(0x0b ,0x82) ;                      //  register 0x0b 的 set 位必须为 1 才能写其他的 寄存器
  write_register(0x00 ,*set_time) ;                 //   秒
  write_register(0x02 ,*(set_time+1)) ;             //   分
  write_register(0x04 ,*(set_time+2)) ;             //   时
  write_register(0x07 ,*(set_time+3)) ;             //   日
  write_register(0x08 ,*(set_time+4)) ;             //   月
  write_register(0x09 ,*(set_time+5)) ;             //   年
  write_register(0x0b ,0x02) ;                      //  register 0x0b 的 set 位必须为 0 时间/日历寄存器才能随时间的增长而改变
}


/******************************************/
//    读当前时间函数
//
//
void get_time(unchar *get_time)
{
  read_register(0x00 , get_time) ;               //   秒
  delay_ds12(5) ;
  read_register(0x02 , get_time+1) ;             //   分
  delay_ds12(5) ;
  read_register(0x04 , get_time+2) ;             //   时
  delay_ds12(5) ;
  read_register(0x07 , get_time+3) ;             //   日
  delay_ds12(5) ;
  read_register(0x08 , get_time+4) ;             //   月
  delay_ds12(5) ;
  read_register(0x09 , get_time+5) ;             //   年
}


⌨️ 快捷键说明

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