#include "compiler_defs.h"
#include "C8051F500_defs.h" // SFR declarations
//*****************************************//实时时钟全局常量定义
#define WRITE_SECOND 0x80
#define WRITE_MINUTE 0x82
#define WRITE_HOUR 0x84
#define WRITE_DATE 0x86
#define WRITE_DAY 0x8A
#define WRITE_MONTH 0x88
#define WRITE_YEAR 0x8C
#define READ_SECOND 0x81
#define READ_MINUTE 0x83
#define READ_HOUR 0x85
#define READ_DATE 0x87
#define READ_DAY 0x8B
#define READ_MONTH 0x89
#define READ_YEAR 0x8D
#define WRITE_PROTECT 0x8E
#define uchar unsigned char
noahsbit ACC7 = ACC^7;
sbit ACC0 = ACC^0;
static unsigned char day = 0;
static unsigned char month = 0;
static unsigned char second = 0;
static unsigned char minute = 0;
static unsigned char hour = 0;
static unsigned char y = 0;
//*****************************************//实时时钟函数声明
void DS1302writeByte(unsigned char data1);
uchar DS1302readByte(void);
void Write1302(uchar ucAddr,uchar ucDa);
uchar Read1302(uchar ucAddr);
void Initial(void);
void OSCILLATOR_Init (void);
void PORT_Init (void);
void delay(unsigned int m);
//*****************************************//实时时钟位定义
SBIT (SCLK, SFR_P3, 7); // DS1302串行时钟信号
SBIT (DIO, SFR_P3, 6); // 双向串行数据
SBIT (RST, SFR_P3, 5); // DS1302使能端,传输数据时必须为高
void main()
{
SFRPAGE = ACTIVE_PAGE; // Set for PCA0MD
PCA0MD &= ~0x40; // Disable Watchdog Timer
OSCILLATOR_Init();
PORT_Init();
Initial();
while(1)
{
day= Read1302(READ_DAY);
month= Read1302(READ_MONTH);
second = Read1302(READ_SECOND);
minute = Read1302(READ_MINUTE);
}
}
void OSCILLATOR_Init (void)
{
U8 SFRPAGE_save = SFRPAGE;
SFRPAGE = CONFIG_PAGE;
RSTSRC = 0x04; // enable missing clock detector
OSCICN = 0x87; // Set internal oscillator divider to 1
CLKSEL = 0x00; // Select the internal osc. as科帕奇改装
// the SYSCLK source
SFRPAGE = SFRPAGE_save;
}
void PORT_Init (void)
{
U8 SFRPAGE_save = SFRPAGE;
SFRPAGE = CONFIG_PAGE;
P3MDOUT = 0xD0; // Make P3.7、P3.6、P3.5 push-pull
XBR2 = 0x40; // Enable the XBAR and weak pull-ups
SFRPAGE = SFRPAGE_save;
}
void delay(unsigned int m)
{
unsigned int k,j;
for(k=0;k<1;k++)
{
for(j=0;j<m;j++)
_nop_();
}
}
void DS1302writeByte(uchar data1)//向DS1302写入一个字节
{
uchar i;
ACC = data1;
for(i=8;i>0;i--)
{
DIO = ACC0; //写一位数据
SCLK = 1; //时钟信号
SCLK = 0;
ACC = ACC >>1;
}
}
uchar DS1302readByte(void)//从DS1302
读出一个字节
{
unsigned char i;
for(i=8;i>0;i--)
{
ACC = ACC >>1;
ACC7 = DIO; //读一位数据
SCLK = 1; //时钟信号
SCLK = 0;
}大黄蜂v8
return(ACC); //返回读到的数据
}
void Write1302(uchar ucAddr,uchar ucDa)//写DS1302寄存器
{
RST = 0;
SCLK = 0;
RST = 1;
DS1302writeByte(ucAddr); //地址,命令
DS1302writeByte(ucDa); //写1 Byte数据
SCLK = 1;
RST = 0;
}
uchar Read1302(uchar ucAddr) //读DS1302的寄存器内容
{
uchar ucData,data1;
RST = 0;
SCLK = 0;
RST = 1;
DS1302writeByte(ucAddr|0x01); //地址,命令
ucData = DS1302readByte(); //读 1 Byte数据
SCLK = 1;
RST = 0;
data1 = ucData/16;
ucData = ucData%16;
ucData = ucData+data1*10;
return(ucData);
开车起步技巧}雅阁十代2020款
宝马730li报价
void Initial(void) //初始化DS1302
{
Write1302(WRITE_PROTECT,0x00); //禁止写保护
Write1302(WRITE_SECOND,0x45); //秒位初始化
Write1302(WRITE_MINUTE,0x24); //分钟初始化
Write1302(WRITE_HOUR,0x09); //小时初始化
Write1302(WRITE_DATE,0x15); //日期初始化
Write1302(WRITE_DAY,0x06); //日期初始化
Write1302(WRITE_MONTH,0x05); //月初始化
Write1302(WRITE_PROTECT,0x80); //允许写保护
}
发布评论