最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

基于C8051F500的时钟程序

来源:动视网 责编:小OO 时间:2025-10-02 00:00:35
文档

基于C8051F500的时钟程序

#include"compiler_defs.h"#include"C8051F500_defs.h"//SFRdeclarations//*****************************************//实时时钟全局常量定义#defineWRITE_SECOND0x80#defineWRITE_MINUTE0x82#defineWRITE_HOUR0x84#defineWRITE_DATE0x86#defineWRITE_DAY0x8A#defineWRITE_MONTH
推荐度:
导读#include"compiler_defs.h"#include"C8051F500_defs.h"//SFRdeclarations//*****************************************//实时时钟全局常量定义#defineWRITE_SECOND0x80#defineWRITE_MINUTE0x82#defineWRITE_HOUR0x84#defineWRITE_DATE0x86#defineWRITE_DAY0x8A#defineWRITE_MONTH
#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 0x

#define READ_YEAR 0x8D

#define WRITE_PROTECT 0x8E

#define uchar unsigned char

sbit 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_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;

}

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);

}

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); //允许写保护

}

文档

基于C8051F500的时钟程序

#include"compiler_defs.h"#include"C8051F500_defs.h"//SFRdeclarations//*****************************************//实时时钟全局常量定义#defineWRITE_SECOND0x80#defineWRITE_MINUTE0x82#defineWRITE_HOUR0x84#defineWRITE_DATE0x86#defineWRITE_DAY0x8A#defineWRITE_MONTH
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top