历史上的今天
返回首页

历史上的今天

今天是:2025年02月01日(星期六)

2018年02月01日 | STC单片机控制DS1302 (1TMCU C程序)

2018-02-01 来源:eefocus

#include "REG51.H" 
#include "INTRINS.H" 

typedef unsigned char BYTE; 

sbit SCLK = P1^0;                   //DS1302时钟口P1.0

sbit IO = P1^1;                     //DS1302数据口P1.1 
sbit RST = P1^2;                    //DS1302片选口P1.2 

                    //秒    分    时    日    月  星期    年 
BYTE code init[] = {0x00, 0x00, 0x20, 0x01, 0x01, 0x05, 0x10}; 
BYTE data now[7]; 

void DS1302_Initial(); 
void DS1302_SetTime(BYTE *p); 
void DS1302_GetTime(BYTE *p); 

void main() 

    DS1302_Initial();               //初始化DS1302 
    DS1302_SetTime(init);           //设置初始时间 

    DS1302_GetTime(now);            //读取当前时间 
    while (1); 


/************************************** 
延时X微秒(STC12C5A60S2@12M) 
不同的工作环境,需要调整此函数 
此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同 
**************************************/ 
void Delay() 

    _nop_(); 
    _nop_(); 


/************************************** 
从DS1302读1字节数据 
**************************************/ 
BYTE DS1302_ReadByte() 

    BYTE i; 
    BYTE dat = 0; 

    for (i=0; i<8; i++)             //8位计数器 
    { 
        SCLK = 0;                   //时钟线拉低 
        Delay();                //延时等待 
        dat >>= 1;                    //数据右移一位 
        if (IO) dat |= 0x80;        //读取数据 
        SCLK = 1;                   //时钟线拉高 
        Delay();                //延时等待 
    } 

    return dat; 


/************************************** 
向DS1302写1字节数据 
**************************************/ 
void DS1302_WriteByte(BYTE dat) 

    char i; 

    for (i=0; i<8; i++)             //8位计数器 
    { 
        SCLK = 0;                   //时钟线拉低 
        Delay();                //延时等待 
        dat >>= 1;                  //移出数据 
        IO = CY;                    //送出到端口 
        SCLK = 1;                   //时钟线拉高 
        Delay();                //延时等待 
    } 


/************************************** 
读DS1302某地址的的数据 
**************************************/ 
BYTE DS1302_ReadData(BYTE addr) 

    BYTE dat; 

    RST = 0; 
    Delay(); 
    SCLK = 0; 
    Delay(); 
    RST = 1; 
    Delay(); 
    DS1302_WriteByte(addr);         //写地址 
    dat = DS1302_ReadByte();        //读数据 
    SCLK = 1; 
    RST = 0; 

    return dat; 


/************************************** 
往DS1302的某个地址写入数据 
**************************************/ 
void DS1302_WritEDAta(BYTE addr, BYTE dat) 

    RST = 0; 
    Delay(); 
    SCLK = 0; 
    Delay(); 
    RST = 1; 
    Delay(); 
    DS1302_WriteByte(addr);         //写地址 
    DS1302_WriteByte(dat);          //写数据 
    SCLK = 1; 
    RST = 0; 


/************************************** 
写入初始时间 
**************************************/ 
void DS1302_SetTime(BYTE *p) 

    BYTE addr = 0x80; 
    BYTE n = 7; 

    DS1302_WriteData(0x8e, 0x00);   //允许写操作 
    while (n--) 
    { 
        DS1302_WriteData(addr, *p++); 
        addr += 2; 
    } 
    DS1302_WriteData(0x8e, 0x80);   //写保护 


/************************************** 
读取当前时间 
**************************************/ 
void DS1302_GetTime(BYTE *p) 

    BYTE addr = 0x81; 
    BYTE n = 7; 

    while (n--) 
    { 
        *p++ = DS1302_ReadData(addr); 
        addr += 2; 
    } 


/************************************** 
初始化DS1302 
**************************************/ 
void DS1302_Initial() 

    RST = 0; 
    SCLK = 0; 
    DS1302_WriteData(0x8e, 0x00);   //允许写操作 
    DS1302_WriteData(0x80, 0x00);   //时钟启动 
    DS1302_WriteData(0x90, 0xa6);   //一个二极管+4K电阻充电 
    DS1302_WriteData(0x8e, 0x80);   //写保护 
}


STC 单片机 控制DS1302 (1TMCU C程序)


推荐阅读

史海拾趣

Harwin公司的发展小趣事

Harbour Industries始终将产品质量视为企业的生命线。为了确保产品质量达到国际一流水平,公司不断引入先进的质量管理体系。1990年代末期,Harbour成功通过了ISO9001产品质量认证。这一认证不仅标志着公司的质量管理体系已经达到了国际标准,也为其在全球市场中的竞争提供了有力保障。此外,Harbour还实行了“过程管理”来确定和控制产品成本,进一步提升了其市场竞争力和盈利能力。

广州奥松公司的发展小趣事

奥松电子自成立以来,一直致力于MEMS特色半导体芯片的研发与生产。公司凭借其国内领先的生产线技术,成功打造了一条高效、稳定的芯片生产线。这不仅提升了公司的生产效率,也为公司在电子行业中树立了良好的口碑。随着技术的不断进步,奥松电子的芯片性能也得到了显著提升,满足了市场对于高质量、高性能芯片的需求。

安美通(APPCON)公司的发展小趣事

为了进一步扩大市场份额,安美通积极开展市场推广和品牌建设。公司参加了多个国内外知名展会和技术交流会议,与众多客户建立了良好的合作关系。同时,安美通还加大了对营销网络的投入,建立了完善的销售体系和客户服务体系,提高了客户满意度和忠诚度。

Eurosil Electronics Ltd公司的发展小趣事

随着技术的不断成熟,Eurosil开始将产品推向市场。公司凭借优质的产品和卓越的服务,逐渐在电子行业中树立了良好的品牌形象。同时,Eurosil积极拓展国际市场,与多家国际知名企业建立了合作关系,将产品销往全球各地。这一过程中,Eurosil不仅扩大了市场份额,也积累了丰富的国际经验。

Good-Ark公司的发展小趣事
检查声音传感器是否有损坏或被遮挡,确保其能够正常接收声音信号。
Hi-Tech Resistors Pvt Ltd公司的发展小趣事
检查声音传感器是否有损坏或被遮挡,确保其能够正常接收声音信号。

问答坊 | AI 解惑

应用射频芯片怎样实现定向功能?

现有一块nRF24L01芯片和单片机,怎样实现较近距离上的定向功能??…

查看全部问答>

录像机输出的视频信号能传多远

我从汉邦16路录像机输出的16路视频信号 通过75-5 能传送多远的距离? 我实际要传送到1公里左右的距离,1公里外只要看就行了 中间要加视频信号放大器吗?…

查看全部问答>

单片机下C编程的问题

#include unsigned char i,j; unsigned char code tab[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,                         0x87,0xff,0xef} ; void Init_Com( ...…

查看全部问答>

wince连接的问题,在线等

Wince连PC2003时总报connect to device failed。是什么原因啊!…

查看全部问答>

lantronix程序对硬件进行设置时候出现问题,请高手帮忙解决!

单位购买了一套系统,使用非接触IC卡消费机实现对卡上消费数据的操作,串口处标识的为rs232 rs485。现在由于服务器故障,要重新安装调试服务器,但是我把当初对消费机设置的软件弄丢了,只能在网上找了lantronix的不同版本来做设置,总是不能通过。 ...…

查看全部问答>

本来感觉万利不错,以前买的SE52的仿真器还可以但是这次然

本来感觉万利不错,以前买的SE52的仿真器还可以但是这次然我失望……昨天打打电话到杭州万利的销售,倒也满爽快的报价也是199。当天发货,今天收到货拆开就感觉到不对。首先、映入眼帘的是CR1220的时钟电池没有安装。那到算了,自己加一个。其 ...…

查看全部问答>

紧急啊!紧急!求问

我在下载lm3s811时 出现了 如图情况,终解决不了。以至于下载无法完成!!紧急求解!!我该如何办!!…

查看全部问答>

CMRR & PSRR

为求取得最大不失真输出,最简差动放大器两臂的初始电位皆应居中,而静态电流则该小于 Icm 之半。…

查看全部问答>

一个小白电子工程师采购物料的经验分享

和很多痴迷电子的工程师一样,自己家中常常进行一些实验,螺丝刀到示波器,必须的开发及测试设备虽然简单却也一应俱全,平常用的电子器件和芯片也是大袋小兜的数不尽,如果用到外国的料,一般只好到外国网站找,好像Findchips,oemtrade,但都需要用信 ...…

查看全部问答>

电脑硬盘

哪位大侠能分析一下我的电脑硬盘…

查看全部问答>