📄 ds12_intel.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 + -