AVR单片机的DS1302操作程序

发布者:数据迷航者最新更新时间:2017-12-20 来源: eefocus关键字:AVR单片机  DS1302  操作程序 手机看文章 扫描二维码
随时随地手机看文章

file://---by 变成浪子
//mega16 7.3728MHz石英晶体 iCCavr6.31a
//相关定义:
#define uint unsigned int
#define uchar unsigned char
#define DS1302_RST 0 //pc0
#define DS1302_SDA 1 //pc1

#define DS1302_SCLK 6 //pc6
//ds1302相关
//DS1302_RST=1
#define Set_DS1302_RST() PORTC|=1<//DS1302_RST=0
#define Clr_DS1302_RST() PORTC&=~(1<//DS1302_SDA=1
#define Set_DS1302_SDA() PORTC|=1<//DS1302_SDA=0
#define Clr_DS1302_SDA() PORTC&=~(1<//DS1302_SCLK=1
#define Set_DS1302_SCLK() PORTC|=1<//DS1302_SCLK=0
#define Clr_DS1302_SCLK() PORTC&=~(1<//DS1302的SDA置为输出脚
#define Set_DS1302_DDRSDA() DDRC|=1<//DS1302的SDA置为输入脚
#define Clr_DS1302_DDRSDA() DDRC&=~(1<#define DS1302_SEC_Reg 0x80
#define DS1302_MIN_Reg 0x82
#define DS1302_HR_Reg 0x84
#define DS1302_DATE_Reg 0x86
#define DS1302_MONTH_Reg 0x88
#define DS1302_DAY_Reg 0x8a
#define DS1302_YEAR_Reg 0x8c
#define DS1302_CONTROL_Reg 0x8e
#define DS1302_CHARGER_Reg 0x90
#define DS1302_CLKBURST_Reg 0xbe
//全局变量
//为了方便,我把个位和十位分开了
uchar year1=0x88;
uchar year0=0x88;
uchar month1=0x88;
uchar month0=0x88;
uchar date0=0x88;
uchar date1=0x88;
uchar day=0x88;
uchar hour1=0x88;
uchar hour0=0x88;
uchar minute1=0x88;
uchar minute0=0x88;
uchar second1=0x88;
uchar second0=0x88;
//自程序开始
void DS1302_Write(uchar reg,uchar data)
{
uchar i;
Set_DS1302_DDRSDA();
Clr_DS1302_RST();
asm("nop");
asm("nop");
Clr_DS1302_SCLK();
asm("nop");
asm("nop");
Set_DS1302_RST();
asm("nop");
asm("nop");
for(i=8;i>0;i--)

if(reg&0x01) Set_DS1302_SDA();
else Clr_DS1302_SDA();
asm("nop");
asm("nop");
Set_DS1302_SCLK(); 
asm("nop");
asm("nop");
Clr_DS1302_SCLK();
asm("nop");
asm("nop");
reg>>=1;
}
for(i=8;i>0;i--)

if(data&0x01) Set_DS1302_SDA();
else Clr_DS1302_SDA();
asm("nop");
asm("nop");
Set_DS1302_SCLK();
asm("nop");
asm("nop");
Clr_DS1302_SCLK();
asm("nop");
asm("nop");
data>>=1;
}
Clr_DS1302_RST();
asm("nop");
asm("nop");
Clr_DS1302_DDRSDA();
}
uchar DS1302_Read(uchar reg)
{
uchar data=0,i;
reg+=1;//读标志
Set_DS1302_DDRSDA();
Clr_DS1302_RST();
asm("nop");
asm("nop");
Clr_DS1302_SCLK();
asm("nop");
asm("nop");
Set_DS1302_RST();
asm("nop");
asm("nop");
for(i=8;i>0;i--)
{

if(reg&0x01) Set_DS1302_SDA();
else Clr_DS1302_SDA();
asm("nop");
asm("nop");
Set_DS1302_SCLK(); 
asm("nop");
asm("nop"); 
Clr_DS1302_SCLK();
asm("nop");
asm("nop");
reg>>=1;
}
Clr_DS1302_DDRSDA();
for(i=8;i>0;i--)

data>>=1;
if((PINC&(1<Set_DS1302_SCLK();
asm("nop");
asm("nop");
Clr_DS1302_SCLK();
asm("nop");
asm("nop"); 
}
Clr_DS1302_RST();
asm("nop");
asm("nop");
return(data);
}
uchar Check_DS1302(void)
{
    DS1302_Write(DS1302_CONTROL_Reg,0x80);
    if(DS1302_Read(DS1302_CONTROL_Reg)==0x80) return 1;
    return 0;
}
void DS1302_Init(void)
{
DS1302_Write(DS1302_CONTROL_Reg,0x00);//关闭写保护 
DS1302_Write(DS1302_SEC_Reg,0x80);//暂停 
DS1302_Write(DS1302_CHARGER_Reg,0xa9);//涓流充电
DS1302_Write(DS1302_YEAR_Reg,0x04); //年
DS1302_Write(DS1302_MONTH_Reg,0x12); //月
DS1302_Write(DS1302_DATE_Reg,0x09); //日
DS1302_Write(DS1302_DAY_Reg,0x04); //周
DS1302_Write(DS1302_HR_Reg,0x10); //时
DS1302_Write(DS1302_MIN_Reg,0x25); //分
DS1302_Write(DS1302_SEC_Reg,0x00); //秒

DS1302_Write(DS1302_CONTROL_Reg,0x80);//打开写保护
}
void ReadTime(void)
{
uchar data;
data=DS1302_Read(DS1302_YEAR_Reg);//年
year0=data&0x0f;
year1=data>>4;
data=DS1302_Read(DS1302_MONTH_Reg);//月
month0=data&0x0f;
month1=(data>>4)&0x01;
data=DS1302_Read(DS1302_DATE_Reg);//日
date0=data&0x0f;
date1=(data>>4)&0x03;
data=DS1302_Read(DS1302_DAY_Reg);//周
day=data&0x07;
data=DS1302_Read(DS1302_HR_Reg);//时
hour0=data&0x0f;
hour1=(data>>4)&0x03;
data=DS1302_Read(DS1302_MIN_Reg);//分
minute0=data&0x0f;
minute1=(data>>4)&0x07;
data=DS1302_Read(DS1302_SEC_Reg);//秒
second0=data&0x0f;
second1=(data>>4)&0x07;


关键字:AVR单片机  DS1302  操作程序 引用地址:AVR单片机的DS1302操作程序

上一篇:AVR的IO端口特性与应用
下一篇:使用AVR定时/计数器的PWM功能设计要点

推荐阅读最新更新时间:2024-05-03 02:10

LCD1602子程序
/********************************************************************* 目 的: 建立LCD1602操作库 目标系统: 基于AVR单片机 应用软件: ICCAVR 版 本: Version 1.0 *********************************************************************/ /*0101010101010101010
[单片机]
proteus仿真之DS1302+8位数码管显示试验
proteus仿真之DS1302+8位数码管显示试验。 仿真效果如下图: 源程序如下: /* 51单片机:DS1302+数码管 Proteus 仿真程序。 功能:数码管时钟显示。 仿真结果: (1)8位数码管显示设定的时间与日期。 (2)通过按键切换时间与日期的显示。 */ #include reg52.h sbit LE_DUAN = P2^0; //定义573锁存使能端口 数码管段锁存 sbit LE_WEI = P2^1; //定义573锁存使能端口 数码管位锁存 #define SEGPORT P0 //定义数码管连接端口 sbit SCK = P3^6; // DS1302时钟线 sbit SDA =
[单片机]
proteus仿真之<font color='red'>DS1302</font>+8位数码管显示试验
AVR单片机及其特点
什么是AVR单片机? AVR单片机有什么优点? 什么要选择AVR单片机? AVR单片机是ATMEL公司研制开发的一种新型单片机,它与51单片机、PIC单片机相比具有一系列的优点: 1:在相同的系统时钟下AVR运行速度最快; 2: 芯片内部的Flsah、EEPROM、SRAM容量较大; 3:所有型号的Flash、EEPROM都可以反复烧写、全部支持在线编程烧写(ISP); 4:多种频率的内部RC振荡器、上电自动复位、看门狗、启动延时等功能,零外围电路也可以工作; 5:每个IO口都可以以推换驱动的方式输出高、低电平,驱动能力强; 6:内部资源丰富,一般都集成AD、DA模数器;PWM;SPI、USART、TW
[单片机]
基于AVR单片机的中频电源测试系统的设计
1 引言   电参数的测量和监控是电力系统的重要组成部分,本文从测试系统的工程学实际出发,完成了对中频电源系统的电压、电流、频率、功率因数、有功功率等参数的测量和实时监控,较好的实现了中频电源测试系统的功能和工程要求。   AVR单片机相对传统的 51系列单片机,具有更高的集成度和更强的功能,与 C语言有很好的兼容性,RISC指令架构使其运行速度可达 1MIPS/MHZ。随着其越来越广泛的应用,必将取代 51系列成为单片机的主流。其主要功能包括看门狗、FLASH程序存储器、 E2PROM、 A/D转换器、定时器、计数器、USART接口等多种功能,这使得本测试系统的硬件实现变得简单,可靠。   2 硬件结构设计与实现  
[单片机]
采用AVR单片机对FPGA进行配置
Altera公司的ACEX、FLEX等系列的FPGA芯片应用广泛,但其FPGA基于SRAM结构,决定电路逻辑功能的编程数据存储于SRAM中。由于SRAM的易失性,每次上电时必须重新把编程数据装载到SRAM中,这一过程就是FPGA的配置过程。FPGA的配置分为主动式和被动式。在主动模式下,FPGA上电后主动将配置数据从专用的EPROM(如EPC1,EPC2等)加载到SRAM中。被动模式下,FPGA为从属器件,由相应的控制电路或微处理器控制配置过程,包括通过下载电缆由计算机控制配置和单片机模拟配置时序配置。其中,专用的EPROM价格高,可编程次数少,而计算机配置在现场应用中又很不现实,因此本文提出一种基于AVR单片机的被动配置方式。由于
[单片机]
采用<font color='red'>AVR单片机</font>对FPGA进行配置
AVR单片机TC0快速PWM
PWM:脉冲宽度调制,图中T为脉冲周期,t为高电平时间,t与T的比值t/T称为占空比,脉宽调制指的是调整t的大小,即改变脉冲的占空比,占空比值越大,输出的电压越高。改变占空比就改变输出的电压,常用于实现D/A,调节电压或电流,改变电动机的转速等。 快速PWM模式:它的计数方式是TCNT0由0开始计数到255式,计数加1返回到0,然后继续加1计数,相对于相位PWM修正模式(由0计数到255,再从255计数到0),只有一个斜坡,因此PWM输出频率高。在快速PWM模式下,计数器的最大值决定了PWM的频率,而比较寄存器OCR0决定了占空比的大小。T/C0是8位计数器, 输出PWM的频率=系统时钟频率/(分频系数*255) 。 PW
[单片机]
<font color='red'>AVR单片机</font>TC0快速PWM
建立一个AVR单片机RTOS(7)—占先式内核(只带延时服务)
第七篇:占先式内核(只带延时服务) Preemptive Multitasking 当大家理解时间片轮番调度法的任务调度方式后,占先式的内核的原理,已经伸手可及了。 先想想,占先式内核是在什么地方实现任务调度的呢?对了,它在可以在任务中进行调度,这个在协作式的内核中已经做到了;同时,它也可以在中断结束后进行调度,这个问题,已经在时间片轮番调度法中已经做到了。 由于中断是可以嵌套的,只有当各层嵌套中要求调度,并且中断嵌套返回到最初进入的中断的那一层时,才能进行任务调度。 #include avr/io.h #include avr/Interrupt.h #include avr/signal.h unsigned
[单片机]
如何用AVR单片机设计太阳能电池控制器
随着能源危机和环境污染的加深,太阳能的研究和利用受到广泛的关注。太阳能是人类取之不尽用之不竭的可再生能源,也是清洁能源,不产生任何的环境污染,在太阳能的有效利用中,太阳能充电是近些年发展最快,最具活力的研究领域,是其中最受瞩目的项目之一。太阳能电池发电是基于“光生伏打效应”原理,将太阳能转化为电能,利用充电效应将太阳辐射直接转化为电能。它具有永久性、清洁性和灵活性大的优点,是其他能源无法比拟的。 1 太阳能控制器的设计 1.1 太阳能电池的输出特性 由它的输出特性曲线(见图1) 可知,太阳能电池的伏安特性具有很强的非线性,即当日照强度改变时,其开路电压不会有太大的改变,但所产生的最大电流会有相当大的变化,所以其输出功率与最大功
[单片机]
如何用<font color='red'>AVR单片机</font>设计太阳能电池控制器
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved