基于C8051F的DS1302程序

发布者:数字舞者最新更新时间:2015-05-19 来源: 51hei关键字:C8051F  DS1302 手机看文章 扫描二维码
随时随地手机看文章
#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总线

}[page]
//===============================================
//函数名称:byte Ds1302_Read_Byte ( byte addr )
//功能:    串行读取数据,先发低位,且在下降沿发送
//参数传递:有,地址
//返回值:  有,读取的数据
//===============================================
uchar Ds1302_Read_Byte ( uchar  addr )
  {
    uchar  i;
    uchar  temp;
    CE = 1;

//写入目标地址:addr
    addr = addr | 0x01;               //最低位置高
    for (i = 0; i < 8; i ++)
      {     
        if (addr & 0x01)
          {
            DIO = 1;
          }
        else
          {
            DIO = 0;
          }
       SCLK = 1;
       SCLK = 0;
       addr = addr >> 1;
      }
 
//输出数据:temp
    //DIOIN;                          //数据端口定义为输入
    for (i = 0; i < 8; i ++)
      {
        temp = temp >> 1;
        if (DIO)
          {
            temp |= 0x80;
          }
        else
          {
            temp &= 0x7F;
          }
        SCLK = 1;
        SCLK = 0;
      }
  CE = 0;                         //停止DS1302总线
  //DIOOUT;                         //数据端口定义为输出
  return temp;                   
}
//===============================================
//           向DS1302写入时钟数据
//===============================================
void Ds1302_Write_Time(void)
{
    
 uchar i,tmp;
 for(i=0;i<8;i++)
     {                                             //BCD处理
        tmp=time_buf1[i]/10;
        time_buf[i]=time_buf1[i]%10;
        time_buf[i]=time_buf[i]+tmp*16;
     }
 Ds1302_Write_Byte(WRITE_PROTECT,0x00);           //关闭写保护
 Ds1302_Write_Byte(WRITE_SECOND,0x80);            //暂停
 //Ds1302_Write_Byte(ds1302_charger_add,0xa9);    //涓流充电
 Ds1302_Write_Byte(WRITE_YEAR,time_buf[1]);       //年
 Ds1302_Write_Byte(WRITE_MONTH,time_buf[2]);      //月
 Ds1302_Write_Byte(WRITE_DAY,time_buf[3]);        //日
 Ds1302_Write_Byte(WRITE_HOUR,time_buf[4]);       //时
 Ds1302_Write_Byte(WRITE_MINUTE,time_buf[5]);     //分
 Ds1302_Write_Byte(WRITE_SECOND,time_buf[6]);     //秒
 Ds1302_Write_Byte(WRITE_WEEK,time_buf[7]);       //周
 Ds1302_Write_Byte(WRITE_PROTECT,0x80);           //打开写保护
}

//========================================
//           从DS1302读出时钟数据
//========================================
void Ds1302_Read_Time(void) 
{
 uchar  i,tmp;
 time_buf[1]=Ds1302_Read_Byte(READ_YEAR);          //年
 time_buf[2]=Ds1302_Read_Byte(READ_MONTH);         //月
 time_buf[3]=Ds1302_Read_Byte(READ_DAY);           //日
 time_buf[4]=Ds1302_Read_Byte(READ_HOUR);          //时
 time_buf[5]=Ds1302_Read_Byte(READ_MINUTE);        //分
 time_buf[6]=(Ds1302_Read_Byte(READ_SECOND))&0x7F; //秒
 time_buf[7]=Ds1302_Read_Byte(READ_WEEK);          //周


 for(i=0;i<8;i++)
  {                                                 //BCD处理
    tmp=time_buf[i]/16;
    time_buf1[i]=time_buf[i]%16;
    time_buf1[i]=time_buf1[i]+tmp*10;
  }
}
//==========================================
//                DS1302初始化
//==========================================
void Ds1302_Init(void)
{
  CE = 0;                                      //RST脚置低
  SCLK = 0;                                    //SCK脚置低
  Ds1302_Write_Byte(WRITE_SECOND,0x00);        //开始 
}

关键字:C8051F  DS1302 引用地址:基于C8051F的DS1302程序

上一篇:DS18B20和ADC0832共同使用
下一篇:基于C8051F的金鹏LCD19264(带字库)程序

推荐阅读最新更新时间:2024-03-16 14:02

PIC单片机读写时钟芯片DS1302汇编程序
#INCLUDE CBLOCK 20H SEC ;秒 MIN ;分 HOU ;小时 DATE ;日期 MON ;月 DAY ;日 YERR ;年 DDD ;写使能位 TIME_TX ;1302发送寄存器 TIME_RX ;1302接收寄存器 COUNT1 ; COUNT2 ; DELAY1 DELAY2 ENDC ******************************* ; ; 1302子程序说明 ; ;****************************** ; DS1302INI ;1302初始化,先禁止RST,设定充电方式 ; SET_TIME ;一次发送7个数据设定时间,包含写使能寄存器,8个数据 ; GET_T
[单片机]
基于C8051F系列单片机的低功耗设计
引言   在控制终端系统设计中,当系统要求整体功耗偏低时,C8051系列单片机是一个最佳的选择,它们拥有灵活的时钟硬件,使系统能够方便地在高效运作模式与低功耗模式间进行转换,智能的电源管理模式能够在正常工作及待机状态自由切换,从而降低整个系统的能量损耗,当工作频率低于10kHz时,时钟丢失检测器(MCD)能够引发系统产生复位,确保系统工作的安全可靠。 1 C8051F各部分组件的功耗   当一个系统对功耗要求严格时,可以在硬件电路建立前首先粗略计算一下整个系统所需的功耗,由于C8051F系列单片机为数模混合SOC系统,能够实现整个设计的大部分功能,因此整个设计系统的功耗将主要集中在C8015F系列单片机的能量消耗上。   整
[单片机]
基于c8051f020的远程电源监控系统设计
   1  引言   目前,以太网(ethernet)协议已经非常广泛地应用于各种计算机网络,如办公局域网、工业控制网络等场合,并且还不断地发展。基于以太网的新技术和联网设备不断出现,以太网已经成为事实上最常用的局域网络标准之一。但是,基于以太网的嵌入式系统目前并不是很多。其原因除了嵌入式系统本身运行速度较慢、资源较少且不足以实现以太网的各种协议外,更重要是设计以太网的接口及协议相对比较复杂,使人望而却步。本文将研讨基于c8051f系列单片机系统的嵌入式系统与10mbps以太网控制器芯片rtl8019as的接口电路实现及编程方法。    2  嵌入式以太网接口分析   2.1  接口组成   8位mcu的嵌入式设备
[电源管理]
使用AT24Cxx扩展C8051F EEPROM
系统功能 使用AT24Cxx扩展C8051F EEPROM。 硬件设计 使用AT24Cxx扩展C8051F EEPROM电路原理图 软件设计 下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解! I2C(SMBus)详细程序请查看C8051F I2C(SMBus)程序。 //目标系统: 基于C8051F单片机 //应用软件: Silicon IDE / Keil /*01010101010101010101010101010101010101010101010101010101010101010101 ------------------------------------------
[单片机]
使用AT24Cxx扩展<font color='red'>C8051F</font> EEPROM
C8051F仿真调试快速入门(Keil)
注:下载程序必须先安装Keil软件,以及对应的Silicon IDE驱动软件 ·Keil的安装   请到 Keil 官方网站: https://www.keil.com/c51/demo/eval/c51.htm 下载安装。 ·Keil μVision Driver 的安装   请到 Silabs 官方网站: http://www.silabs.com/products/mcu/Pages/KeilDriver.aspx 下载安装。 1、安装好Keil μVision Driver驱动并且设置好下载程序前的相关配置( 点击查看 ) 2、如下图所示,点击菜单栏中的 Debug - Start/Stop Debug Sessi
[单片机]
<font color='red'>C8051F</font>仿真调试快速入门(Keil)
采用C8051F单片机实现半导体激光器驱动电源的设计
半导体激光器(LD)体积小,重量轻,转换效率高,省电,并且可以直接调制。基于他的多种优点,现已在科研、工业、军事、医疗等领域得到了日益广泛的应用,同时其驱动电源的问题也更加受到人们的重视。使用单片机对激光器驱动电源的程序化控制,不仅能够有效地实现上述功能,而且可提高整机的自动化程度。同时为激光器驱动电源性能的提高和扩展提供了有利条件。 1总体结构框图 本系统原理如图1所示,主要实现电流源驱动及保护、光功率反馈控制、恒温控制、错误报警及键盘显示等功能,整个系统由单片机控制。本系统中选用了C8051F单片机。C8051F单片机是完全集成的混合信号系统级芯片(SOC),他在一个芯片内集成了构成一个单片机数据采集或控制系统所需要的几乎
[单片机]
采用<font color='red'>C8051F</font>单片机实现半导体激光器驱动电源的设计
ST7920液晶---DS1302时钟程序
//DS1302时钟程序 //液晶用的ST7920控制芯片的12864 #include reg52.h #include intrins.h /********************************************************************/ #define LCD12864_IO P0 #define CLERADISPLAY LCD12864_command(0x01); #define uchar unsigned char #define uint unsigned int /**************************************************
[单片机]
基于C8051F320 USB接口的数据采集存储电路
摘要: 介绍采用C8051F320 SOC与AM45DB321构成数据采集存储系统的设计方案。 关键词: 数据采集;USB接口;存储电路;SOC 在一些特殊的工业场合,有时需要将传感器的信号不断的实时采集和存储起来,并且到一定时间再把数据回放到PC机中进行分析和处理。在工作环境恶劣的情况下采用高性能的单片机和工业级大容量的FLASH存储器的方案恐怕就是最适当的选择了。CYGNAL公司的C8051F320 SOC是一种具有8051内核的高性能单片机,运行速度为普通8051的12倍。该芯片内部528字节随机RAM和2048字节XRAM为数据缓冲和程序运行提供了充足的空间。更受欢迎的是它的串行扩展功能为当前的各种串行芯片和外部设备接
[缓冲存储]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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