实时电子时钟实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告班级姓名学号组员实验题目:实时电子时钟

一、实验目的:

1、掌握DS1302与ATmega8单片机接口的方法。

2、掌握DS1302使用方法

二、实验仪器:

1、A VRATmega8 单片机开发板一块

2、+9V直流电源一个

3、USBISP下载电缆一根

三、实验原理

四、实验内容

/*************************************************

功能:实时时钟

芯片:mage8、DS1302

管脚:PC0-SCLK、PC1-I/O、PC2-RSE

*************************************************/

#include

#include

#include

#include"screen.c"

#define SCK_CLR PORTC &= ~BIT(0) //SCLK拉低

#define SCK_SET PORTC |= BIT(0) //SCLK拉高

#define SCK_OUT DDRC |= BIT(0) //SCLK设置为输出

#define RST_CLR PORTC &= ~BIT(2) //RST拉低

#define RST_SET PORTC |= BIT(2) //RST拉高

#define RST_OUT DDRC |= BIT(2) //RST设置为输出

#define IO_CLR PORTC &= ~BIT(1) //I/O拉低

#define IO_SET PORTC |= BIT(1) //I/O拉高

#define IO_OUT DDRC |= BIT(1) //I/O设置为输出

#define IO_IN DDRC &= ~BIT(1) //I/O设置为输入

#define IO_R PINC & BIT(1) //读 I/O

unsigned char time_data[7]={11,6,8,20,14,44,40}; //年、星期、月、日、时、分、秒unsigned char write_add[7]={0x8C,0x8A,0x88,0x86,0x84,0x82,0x80};

unsigned char read_add[7]={0x8D,0x8B,0x89,0x87,0x85,0x83,0x81};

unsigned char temp[] ="";

/******************************************

函数名:write_ds1302_byte()

功能:往DS1302写一个字节

入口参数:dat

返回参数:无

******************************************/

void write_ds1302_byte(unsigned char dat)

{

unsigned char i;

IO_OUT;

for(i=0;i<8;i++)

{

if(dat & 0x01)

{

IO_SET;

}

else

{

IO_CLR;

}

SCK_SET;

SCK_CLR;

dat = dat >> 1;

}

}

/****************************************** 函数名:read_ds1302()

功能:从DS1302读一个字节

入口参数:add

返回参数:无

******************************************/ unsigned char read_ds1302(unsigned char add) {

unsigned char i,value;

RST_CLR;

SCK_CLR;

RST_SET;

write_ds1302_byte(add);

IO_IN;

for(i=0;i<8;i++)

{

value = value >> 1;

if(IO_R)

{

value = value | 0x80;

}

SCK_SET;

SCK_CLR;

}

RST_CLR;

return value;

}

/****************************************** 函数名:write_ds1302()

功能:往DS1302写地址、数据

入口参数:add、dat

返回参数:无

******************************************/

void write_ds1302(unsigned char add,unsigned char dat) {

RST_CLR;

SCK_CLR;

RST_SET;

write_ds1302_byte(add);

write_ds1302_byte(dat);

RST_CLR;

}

/******************************************

函数名:set_rtc()

功能:设置时间

入口参数:无

返回参数:无

******************************************/

void set_rtc(void)

{

unsigned char i,k;

for(i=0;i<7;i++)

{

k = time_data[i]/10;

time_data[i] = time_data[i]%10;

time_data[i] = time_data[i]+k*16;

}

write_ds1302(0x8E,0x00);

for(i=0;i<7;i++)

{

write_ds1302(write_add[i],time_data[i]);

}

write_ds1302(0x8E,0x80);

}

/******************************************

函数名:read_rtc()

功能:读取时间

入口参数:无

返回参数:无

******************************************/

void read_rct(void)

{

unsigned char i;

for(i=0;i<7;i++)

{

相关文档
最新文档