您的位置 首页 设计

根据C8051F的DS1302程序

includeC8051F340hdefineuintunsignedintdefineucharunsignedcharsbitSCLK=P2^3;DS1302时钟sbitDIO=

#include “C8051F340.h”

#define uint unsigned int
#define uchar unsigned char
sbit SCLK = P2^3 ; //DS1302时钟
sbit DIO = P2^4 ; //DS1302数据
sbit CE = P2^5 ; //DS1302片选
void Ds1302_Write_Byte (uchar addr, uchar dat);
uchar Ds1302_Read_Byte ( uchar addr );
void Ds1302_Write_Time(void);
void Ds1302_Read_Time(void);
void Ds1302_Init(void)

#define WRITE_SECOND 0x80
#define WRITE_MINUTE 0x82
#define WRITE_HOUR 0x84
#define WRITE_DAY 0x86
#define WRITE_MONTH 0x88
#define WRITE_WEEK 0x8A
#define WRITE_YEAR 0x8C
#define WRITE_TIMER_FLAG 0xC0

#define READ_SECOND 0x81
#define READ_MINUTE 0x83
#define READ_HOUR 0x85
#define READ_DAY 0x87
#define READ_MONTH 0x89
#define READ_WEEK 0x8B
#define READ_YEAR 0x8D
#define READ_TIMER_FLAG 0xC1
#define WRITE_PROTECT 0x8E
uchar time_buf1[8] = {20,11,8,31,13,35,10,3}; //空年月日时分秒周
uchar time_buf[8]; //空年月日时分秒周

//============================================
//函数称号:void Ds1302_Write_Byte (byte addr, byte dat)
//功用: 串行发送地址、数据,先发低位,且在上升沿发送
//参数传递:有,地址和数据
//返回值: 无
//===========================================
void Ds1302_Write_Byte (uchar addr, uchar dat)
{
uchar i;
//DIOOUT; //数据端口界说为输出
CE = 1;
//写入方针地址:addr
addr = addr & 0xFE; //最低方位零
for (i = 0; i < 8; i ++)
{
if (addr & 0x01)
{
DIO = 1;
}
else
{
DIO = 0;
}
SCLK = 1;
SCLK = 0;
addr = addr >> 1;
}

//写入数据:d
for (i = 0; i < 8; i ++)
{
if (dat & 0x01)
{
DIO = 1;
}
else
{
DIO = 0;
}
SCLK = 1;
SCLK = 0;
dat = dat >> 1;
}
CE = 0;; //中止DS1302总线

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/255194.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部