实时时钟DS1302读写程序(C51)

发布者:TranquilSmile最新更新时间:2023-01-03 来源: zhihu关键字:实时时钟  DS1302  读写程序  C51 手机看文章 扫描二维码
随时随地手机看文章

//打开DS1302
void TimeSpiOpen(void)
{
TIMECLK = 0;
TIMERST = 0;//禁止DS1302
TIMEIO = 1;//释放数据总线
TIMERST = 1;//使能DS1302
}
//关闭DS1302
void TimeSpiClose(void)
{
TIMERST = 0;//禁止DS1302
TIMEIO = 1;//释放数据总线
TIMECLK = 1;
}
//读写DS1302
unsigned char TimeSpiReadWrite(unsigned char val)
{
unsigned char i;
ACC = val;//取8位数据
for (i = 8;i > 0; i--)
{
TIMECLK = 0;//时钟下降沿输入数据(DS1302读)
_nop_();//延时
CY = TIMEIO;//接收串行数据到CY
_rrca_();//右移一位数据到CY(先存后取)
TIMEIO = CY;//发送串行数据
TIMECLK = 1;//时钟上升沿打入数据(DS1302写)
TIMEIO = 1;//释放数据总线
}
val = ACC;
return val;
}
//读DS1302字节
unsigned char TimeByteRead(unsigned char address)
{
TimeSpiOpen();//打开DS1302
TimeSpiReadWrite(address);//写入DS1302命令
address = TimeSpiReadWrite(0xff);//读入DS1302数据
TimeSpiClose();//关闭DS1302
return address;//返回数据
}
//读DS1302RAM字节
unsigned char TimeRamByteRead(unsigned char address)
{
TimeSpiOpen();//打开DS1302
TimeSpiReadWrite((address << 1) | 0xc1);//写入DS1302命令
address = TimeSpiReadWrite(0xff);//读入DS1302数据
TimeSpiClose();//关闭DS1302
return address;//返回数据
}
//写DS1302字节
void TimeByteWrite(unsigned char address, unsigned char val)
{
TimeSpiOpen();//打开DS1302
TimeSpiReadWrite(address);//写地址
TimeSpiReadWrite(val);//写数据
TimeSpiClose();//关闭DS1302
}
//写DS1302字节
void TimeRamByteWrite(unsigned char address, unsigned char val)
{
TimeSpiOpen();//打开DS1302
TimeSpiReadWrite((address << 1) | 0xc0);//写地址
TimeSpiReadWrite(val);//写数据
TimeSpiClose();//关闭DS1302
}
//使能DS1302写保护
void TimeWriteEnable(void)
{
TimeByteWrite(timewriteregall, timewriteseg);//使能DS1302写保护
}
//开放DS1302写保护
void TimeWrieDisbale(void)
{
TimeByteWrite(timewriteregall, 0);//开放DS1302写保护
}
//DS1302工作开始
void TimeWorkStart(void)
{
unsigned char val;
val = TimeByteRead(timereadseg);//读秒数据
val &= 0x7f;//打开晶振
TimeWrieDisbale();//开放DS1302写保护
TimeByteWrite(timewriteseg, val);//打开晶振
TimeByteWrite(tricklewrite, 0xa5);//打开充电二极管
TimeWriteEnable();//使能DS1302写保护
}

关键字:实时时钟  DS1302  读写程序  C51 引用地址:实时时钟DS1302读写程序(C51)

上一篇:CH375读写U盘C51示例源程序
下一篇:时钟芯片ds12c887的C51驱动程序

推荐阅读最新更新时间:2024-11-17 07:56

C51填坑记:中断处理导致主程序函数参数改变
1.现象 平台:keil c51,中颖SH79F7019A 现象:在增加了一个中断处理逻辑后,发现主程序异常,断点调试发现某个函数的参数被改变了,程序使用了错误的数据导致逻辑出错。 2.排查 初步分析,可能原因如下: 1.参数寄存器(R0-R7)的值,被中断函数改变。 2.堆栈溢出。 2.1参数寄存器 首先排查参数寄存器(中断里面调用了函数,有参数传递)。通过仿真器观察中断函数汇编代码,发现在进入中断之前是对R0-R7进行了压栈操作的。进一步将中断有关的函数全部用“using”关键字知道不同的寄存器组,发现问题没有得到改善。到此可以排除参数寄存器原因。 2.2堆栈溢出 排除寄存器之后,进一步
[单片机]
<font color='red'>C51</font>填坑记:中断处理导致主程序函数参数改变
C51中的内存单元与位地址
单片机中的RAM8个bit为一个单元,就是说每8位二进制数为一个存储单元,RAM共有256个这样的存储单元,前128个单元是一般的存储单元,后128个单元为特殊功能寄存器 每一个存储单元就像一个房子一样,而这个房子里面的房间就表示各自的具体的位地址 sfr P1 = 0x90; P1=0xff; 其中0x90就是这个房子的所在位置,P1=0xff;就是在给这个房子的不同房间赋值 其中P1就是地址,0xff就是内容。
[单片机]
C51最小单片机系统
1.芯片部分 其中P1是给烧写器留的接口,J3和J4是留的排插,用于拓展模块,比如万年历,温度照度传感器,语音播报等。 2.独立键盘部分 这里参考我的STC12C5A60S2的数据手册,P0口已经有内部上拉电阻,所以外部不需要再接电阻,直接接地。 3.稳压电路 9V直流进5V直流出 4.蜂鸣器部分 选用封装时候注意8550和8050的一三脚别搞错 选TO-220封装。 5.LED部分 只留了两个灯,足够用,不够的可以用其他空的IO口照着这个画。电阻560欧姆灯的亮度会比较亮,可以选更大的阻值 10K 20K都可。 6.晶振部分 选用11.0592M的晶振,这个频率的晶振用于串口通信合适,波特率误差最小。
[单片机]
<font color='red'>C51</font>最小单片机系统
C51 库函数(3)
3.3 STRING.H:串函数 串函数通常将指针串作输入值。一个串就包括2个或多个字符。串结以空字符表示。在函数memcmp,memcpy,memchr,memccpy,memmove和memset中,串长度由调用者明确规定,使这些函数可工作在任何模式下。 函数名: memchr 原 型: extern void *memchr(void *sl, char val,int len); 功 能: memchr顺序搜索s1中的len个字符找出字符val,成功时返回s1中指向val的 指针,失败时返回NULL。 函数名: memcmp 原 型: extern char memcmp(void *sl, void *s2,in
[单片机]
Stm32 RTC介绍相关笔记
1.由于最近一段时间要进行期末考试,所以很久没有动32了,从现在开始,可以再开始学了 2.RTC(REAL TIME CLOCK) 1.作为Stm32内部的实时时钟,可以看做一个独立的定时器,在代码的配置下,可以作为时钟日历的功能 2.注意:RTC的配置过程十分敏感,因为对于RTC的配置过程中,是在后备区域进行,由于系统在自动复位以后,自动会禁止后备寄存器和RTC(写保护),所以在配置的过程中要进行对写保护的撤销 3.RTC简图 4.配置重点: 因为RTC配置需要对后备区域进行配置,配置的时候要判断是否寄存器完成和同步,也要取消对备份区的写保护 1.初始化过程 #include del
[单片机]
Stm32 RTC介绍相关笔记
c51软复位,实在经典,分析实在透彻
现单列复位部分如下: main() { unsigned char code rst ={0xe4,0xc0,0xe0,0xc0,0xe0,0x32}; // 复位代码 (*((void (*)())(rst)))(); // 执行上一行代码,将rst数组当函数调用 } 本来我告诉他嵌入如下代码: clr a push acc push acc reti 结果他却玩了前面哪一段,而数组rst 中的内容恰恰是上面的汇编机器码,他的做法是将 rst数组的数据当作代码保存,然后采用绝对地址方式指向该数组,将该数组中的代码当作 函数来运行。居然通过了! 我觉得有问题,我说即使如此,那绝对地址调用也应该写成(*((void (*)(
[单片机]
AVR/C51和PIC八位单片机性能比较
八位单片机由于内部构造简单,体积小,成本低廉,在一些较简单的控制器中应用很广。即便到了本世纪,在单片机应用中,仍占有相当的份额。由于八位单片机种类繁多,本文仅将常用的几种在性能上作一个简单的比较,供读者在使用时作参考。 1. 51系列   应用最广泛的八位单片机首推Intel的51系列,由于产品硬件结构合理,指令系统规范,加之生产历史 悠久 ,有先入为主的优势。世界有许多著名的芯片公司都购买了51芯片的核心专利技术,并在其基础上进行性能上的扩充,使得芯片得到进一步的完善,形成了一个庞大的体系,直到现在仍在不断翻新,把单片机世界炒得沸沸扬扬。有人推测,51芯片可能最终形成事实上的标准MCU芯片。   51系列优点之一是它从内部的
[单片机]
基于C51单片机的MP3播放器设计与实现
0 引言     便携式MP3播放器作为一种集音频播放、数据存储为一身的数码产品,其功能结构为电子设计人员所津津乐道。MP3是MPEG一1音频III(1ayerIII)的简称。MPEG一1音频(ISO/IECll 172—3)是目前普遍应用的音频压缩标准,其中层III的算法最为复杂,但压缩比最大,效果也最好,在低码率的条件下基本能达到CD的音质效果。MP3标准用尽可能低的码流实现CD音质的声音而不会产生数据损失。如果对于一段声音不进行压缩的话,那么每存储一秒钟的立体声CD音质音乐必须用1.4Mbit,这是个十分大的开销。通过运用MPEG音频标准的压缩技术,我们可以把存储空间压缩到原来的1/12而不会降低声音的音质。即使使用1/
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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