首页 > 算法 > 自动驾驶 > ds1302附加多少个静态ram地址,ds1302 是什么

ds1302附加多少个静态ram地址,ds1302 是什么

来源:整理 时间:2024-06-19 07:14:58 编辑:亚灵电子网 手机版

本文目录一览

1,ds1302 是什么

DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示及内部结构如图2所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。

ds1302 是什么

2,ds1302是什么

时钟芯片
ds1302是美国dallas公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态ram,采用spi三线接口与cpu进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和ram数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5v。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。ds1302的外部引脚分配如图1所示及内部结构如图2所示。ds1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。

ds1302是什么

3,日历时钟芯片DS1302的31个RAM究竟怎样用

DS1302一般都有用备用电源,当系统断电时,你可以保存一些重要数据,到下次系统上电时就再读出来就行了
void delay_ds1302() _nop_(); _nop_();}void delaynms(uint t) uint x,y; for(x=t;x>0;x--) for(y=125;y>0;y--);/*1ms延时*/} /**************************************从ds1302读1字节数据**************************************/byte ds1302_readbyte() byte i; byte dat = 0; for (i=0; i<8; i++) //8位计数器 sclk = 0; //时钟线拉低 上升沿数据有效 delay_ds1302(); //延时等待 dat >>= 1; //数据右移一位 if (io) dat |= 0x80; //读取数据 sclk = 1; //时钟线拉高 delay_ds1302(); //延时等待 } return dat;}/**************************************向ds1302写1字节数据**************************************/void ds1302_writebyte(byte dat) char i; for (i=0; i<8; i++) //8位计数器 sclk = 0; //时钟线拉低 delay_ds1302(); //延时等待 dat >>= 1; //移出数据 io = cy; //送出到端口 sclk = 1; //时钟线拉高 delay_ds1302(); //延时等待 }}/**************************************读ds1302某地址的的数据**************************************/byte ds1302_readdata(byte addr) byte dat; rst = 0; delay_ds1302(); sclk = 0; delay_ds1302(); rst = 1; delay_ds1302(); ds1302_writebyte(addr); //写地址 dat = ds1302_readbyte(); //读数据 sclk = 1; rst = 0; return dat;}/**************************************往ds1302的某个地址写入数据**************************************/void ds1302_writedata(byte addr, byte dat) rst = 0; delay_ds1302(); sclk = 0; delay_ds1302(); rst = 1; delay_ds1302(); ds1302_writebyte(addr); //写地址 ds1302_writebyte(dat); //写数据 sclk = 1; rst = 0;}根据上面的代码,只需要传递相应ram的地址即可。

日历时钟芯片DS1302的31个RAM究竟怎样用

4,下面是一个单片机中ds302芯片用的读程序请大虾指导

SDA 是自定义的数据线 SCLK 定义为时钟线, 这两根线是接DS1302芯片的数据线和时钟线date>>=1;//要返回的数据右移一位if(SDA==1)//当数据线为高时,证明该位数据为 1date|=0x80;//要传输数据的当前值置为 1,若不是,则为 0上面的意思是当SDA数据线上是高电平时, 接收数据的最高位设置成1, 如果SDA是低电平就不去改变data的数据, data因为上面的data>>=1; 这一句, 最高位已经是0,既然已经是0就不需要去设置为0了
读到的数据是1 就赋值 不是1 就不管了 然后右移(自动补0) SDA是数据线 我写的一个程序 可以参考下/*程序作者:yuki1406程序作用:STC89CXX的对DS1302进行读取时间写入时间 没有实现突发模式工作编写时间:2012年07月16日结束时间:2012年07月17日程序版本:V1.0程序大小:256字节使用说名: DS1302内部有31字节静态RAM(随机存储器)读取地址C1H-FDH写入地址C0H-FCH数值范围0-255DS1302是SPI总线驱动方式DS1302控制字 7 6 5 4 3 2 1 0|-------------------------|| 1 |RAM|A4|A3|A2|A1|A0|RD|| |CK | | | | | |WR||-------------------------|控制字最高位必须是逻辑1,如果它为0,则不能把数据写入到DS1302中位6:如果为0表示存取日历时钟数据,为1表示存取RAM数据位5至位1(A4-A0):操作单元地址位0;如果为0表示进行写操作 为1表示读操作寄存器名称 命令字 取值范围 各位内容 写 读 7 6 5 4 3 2 1 0 秒寄存器 80H 81H 00-59 CH 分寄存器 82H 83H 00-59 0小时寄存器 84H 85H 01-12或00-23 12/2日期寄存器 86H 87H 01-28,29,30,31 0月份寄存器 88H 89H 01-12 0 周寄存器 8AH 8BH 01-07 0年份寄存器 8CH 8DH 00-99更新时间:2012年07月17日更新版本:无更新日志:2012年07月17日 文件大小:256字节2012年07月17日 开始优化代码 将相同的代码写成函数以便调用 2012年07月17日 文件大小:276字节2012年07月17日 除了突发功能没有编写其他的均已写出 2012年07月16日 开始编写驱动函数*/#ifndef __DS_1302_H__#define __DS_1302_H__#include<stc89.h> //包含单片机寄存器的头文件#define uchar unsigned char#define uint unsigned int/*DS1302秒寄存器地址*/#define Read_ss 0x81 //读取的秒地址#define Write_ss 0x80 //写入的秒地址//////////////////////////////////////////////#define ds_run 0x7f //允许时钟运行 在秒寄存器最高位 &运算#define ds_stop 0x80 //停止时钟运行 在秒寄存器最高位/*DS1302分钟寄存器地址*/#define Read_mm 0x83 //读取的分地址#define Write_mm 0x82 //写入的分地址/*DS1302小时寄存器地址*/#define Read_H 0x85 //读取的时地址#define Write_H 0x84 //写入的时地址//////////////////////////////////////////////#define ds_way10 0x7f //24小时模式 在时寄存器最高位 &运算#define ds_way24 0x80 //12小时模式 在时寄存器最高位//当运行在12小时模式时 时寄存器第五位 为0时表示上午 为1表示下午/*DS1302日期寄存器地址*/#define Read_th 0x87 //读取的日地址#define Write_th 0x86 //写入的日地址/*DS1302月份寄存器地址*/#define Read_month 0x89 //读取的月地址#define Write_month 0x88 //写入的月地址/*DS1302星期寄存器地址*/#define Read_week 0x8b //读取的周地址#define Write_week 0x8a //写入的周地址/*DS1302年份寄存器地址*/#define Read_years 0x8d //读取的年地址#define Write_years 0x8c //写入的年地址/*DS1302写保护寄存器地址*/#define Read_wp 0x8f //读取的写保护地址#define Write_wp 0x8e //写入的写保护地址//////////////////////////////////////////////#define ds_wp_off 0x00 //关写保护功能 #define ds_wp_on 0x80 //开写保护功能/*DS1302涓流充电寄存器地址*/#define Read_charging 0x90 //读取的涓流充电寄存器地址#define Write_charging 0x91 //写入的涓流充电寄存器地址//////////////////////////////////////////////#define ds_cr0 0xA5 //一个二极管 电阻2K#define ds_cr1 0xA6 //一个二极管 电阻4K#define ds_cr2 0xA7 //一个二极管 电阻8K#define ds_cr3 0xA9 //两个二极管 电阻2K#define ds_cr4 0xAA //两个二极管 电阻4K#define ds_cr5 0xAB //两个二极管 电阻8K#define ds_cr6 0x5C //初始化电源 不充电/*DS1302时钟突发寄存器地址*///#define rd_clock_burst 0xbf //时钟突发模式寄存器读地址 //#define wr_clock_burst 0xbe //时钟突发模式寄存器写地址/*DS1302RAM突发寄存器地址*/ //#define rd_ram_burst 0xff //RAM突发模式寄存器读地址 //#define wr_ram_burst 0xfe //RAM突发模式寄存器写地址//DS1302内部有31字节静态RAM(随机存储器)//读取地址C1H-FDH写入地址C0H-FCH数值范围0-255/*DS1302操作的引脚定义*/#define ds_sclk P16 //串行时钟,输入,控制数据的输入输出#define ds_io P35 //三线接口时的双向数据线#define ds_ce P17 //输入信号,在读写数据期间,必须为高。该引脚有两个功能://sbit ds_sclk=P1^6;//串行时钟,输入,控制数据的输入输出//sbit ds_io =P3^5;//三线接口时的双向数据线//sbit ds_ce =P1^7;//输入信号,在读写数据期间,必须为高。该引脚有两个功能://第一,CE开始控制字访问移位寄存器的控制逻辑:其次,CE提供结束单字节或多字节数据传输的方法。/*程序中需要用到的函数*/void ds1302_init(); //ds1302初始化函数void ds1302_write(uchar ds_address,write_data);//ds1302芯片写入函数ds_address写入地址,write_data写入数据uchar ds1302_read(uchar ds_address); //DS1302读取函数 ds_address是读取的地址void ds1302_rwcom(uchar ds_variables); //DS1302读写操作的公用函数 ds_variables操作的变量(为了减少空间把相同的代码写成的函数)uchar ds1302_rd(); //DS1302字节读取公函数uchar bcd_Hex(uchar BCD_numerical); //BCD转16进制数 BCD_numerical需要转码的BCDuchar Decimal_bcd(uchar Decimal_numerical); //10进制数转BCD Decimal_numerical需要转码的10进制数/*以下是程序的编写*//*程序名称ds1302_init()程序作用:初始化DS1302判断时钟是否运行没有运行则写入初始时间 以及是否充电运行则跳过*/void ds1302_init() //ds1302初始化函数 ds1302_data=ds1302_read(Read_ss);//读取秒寄存器并赋值到变量中 ds1302_data=ds1302_data&ds_wp_on;//获得运行标志 if(ds_wp_on==ds1302_data) //判断运行标志为 没有运行 ds1302_write(Write_wp ,ds_wp_off ); //写关闭写保护 ds1302_write(Write_ss ,Decimal_bcd(40));//写入时间秒 ds1302_write(Write_mm ,Decimal_bcd(35));//写入时间分 ds1302_write(Write_H ,Decimal_bcd(21));//写入时间时 ds1302_write(Write_th ,Decimal_bcd(19));//写入时间日 ds1302_write(Write_month ,Decimal_bcd( 7));//写入时间月 ds1302_write(Write_week ,Decimal_bcd( 4));//写入时间周 ds1302_write(Write_years ,Decimal_bcd(12));//写入时间年 ds1302_write(Write_charging,ds_cr6 ); //写入是否涓流充电 不充电 ds1302_write(Write_wp ,ds_wp_on ); //写启动写保护 }}/*ds1302芯片写入函数ds_address写入地址,write_data写入数据 */void ds1302_write(uchar ds_address,write_data)//ds1302芯片写入函数address写入地址,write_data写入数据 ds_ce =0; //拉低以便形成上升沿 ds_sclk=0; //拉低时钟信号线 ds_ce =1; //打开 允许通信 ds1302_rwcom(ds_address);//调用DS1302读写操作的公用函数 写入地址 ds1302_rwcom(write_data);//调用DS1302读写操作的公用函数 写入数据 ds_ce =0; //拉低 通讯结束}/*DS1302读取函数 address是读取的地址*/uchar ds1302_read(uchar ds_address)//DS1302读取函数 address是读取的地址 uchar read_data; ds_ce =0; //拉低以便形成上升沿 ds_sclk=0; //拉低时钟信号线 ds_ce =1; //打开 允许通信 ds1302_rwcom(ds_address);//调用DS1302读写操作的公用函数 写入地址 read_data=ds1302_rd(); //调用读取函数 读取数据 ds_ce =0; //拉低 通讯结束 return(read_data); //把数据返回去}/*DS1302读写操作的公用函数 variables操作的变量 由读写函数调用*/void ds1302_rwcom(uchar ds_variables) uchar ds_num; //定义一个8位变量 用来做循环8次移位 for(ds_num=0;ds_num<8;ds_num++) ds_io=ds_variables&0x01; //IO口赋值 ds_sclk=1; //拉高时钟信号线 ds_sclk=0; //拉低时钟信号线锁存数据 ds_variables=ds_variables>>1; //地址移位 }}/*DS1302字节读取函数 由读函数调用*/uchar ds1302_rd() uchar ds_num,read_data; for(ds_num=0;ds_num<8;ds_num++) read_data=read_data>>1; //数据移位 if(1==ds_io) //判断IO口为高 read_data=read_data|0x80;//为高则数据最高位赋值1 ds_sclk=1; //拉高时钟信号线 ds_sclk=0; //拉低时钟信号线锁存数据 } return(read_data); //把数据返回去}/*BCD转16进制数 BCD_numerical需要转码的BCD*/uchar bcd_Hex(uchar BCD_numerical) //BCD转16进制数 BCD_numerical需要转码的BCD return(((BCD_numerical&0x0f)+((BCD_numerical&0x70)>>4)*10)); //进制转换//返回(((BCD码数值取低四位数)+((BCD码数值取高三位)右移4位)*10)); }/*10进制数转BCD Decimal_numerical需要转码的10进制数*/uchar Decimal_bcd(uchar Decimal_numerical) //10进制数转BCD Decimal_numerical需要转码的10进制数 if(Decimal_numerical>=10) //判断10进制数超过或等于数值10 //进制转换 //返回(10进制变量-(临时变量=(10进制变量/10))*10)+(10进制变量/10*16)); else //不超过数值10 }
SDA为数据通道,就是1302上的DIO口,date|=0x80;//要传输数据的当前值置为 1,若不是,则为 0这句话什么用途?这句话则是与上面的if(SDA==1)对应的,意思是如果当前的SDA==1了,则date的最高位置1,这里用date|=0x80这种方式来表达,便于接下来的移位。
文章TAG:附加ds1302附加多少个静态ram地址ds1302是什么

最近更新

  • 爱华Nsx一320多少钱,NSX 国内二手大概多少钱爱华Nsx一320多少钱,NSX 国内二手大概多少钱

    NSX国内二手大概多少钱2,爱华nsx360怎么样以前卖多少钱3,本田nsx2020款多少钱4,爱华nsx系列最高档是哪一款5,爱华视听液晶电视32寸报价6,请问爱华音响NSX520的激光头买多少钱7,香港爱华电子.....

    自动驾驶 日期:2024-06-19

  • 电路里的电场,什么是电路中的电场?电路里的电场,什么是电路中的电场?

    阻抗是指电路的电阻、电容、电感、电子元件对电路中电流的影响。串联电路中的电场是均匀电场,定义:电压是电路中并联电场的电场强度,也是作用在电阻两端的力差加力矩差的强度,电源与电动.....

    自动驾驶 日期:2024-06-19

  • 测量电参数芯片,电量测量芯片测量电参数芯片,电量测量芯片

    这款电笔的智能测量芯片不仅可以检测是否有电,还可以检测电压、电流等信息,非常方便。这是普通万用表的测量速度,我们来看看带有高速芯片的万用表,立即测量并立即显示,芯片放大后,可以清楚地.....

    自动驾驶 日期:2024-06-19

  • 彩电起振电路110,电路振动的情况彩电起振电路110,电路振动的情况

    CRT彩电的电路板上,电源线不能振动,电源B检测到灯泡会闪烁,说明电路的初始振动电路良好,也就是说振荡电路基本良好。应使用假负载法远程控制电源电压是否低,表明故障出在开关电源的稳压电路.....

    自动驾驶 日期:2024-06-18

  • 29寸电视高压包多少钱,换个长虹29寸纯平电视高压包多少钱29寸电视高压包多少钱,换个长虹29寸纯平电视高压包多少钱

    换个长虹29寸纯平电视高压包多少钱29的高压包如果是双聚焦的,150也基本正常.如果是普通的,正常收费在80元左右.如果你的是普通高压包,收150太离谱了.2,长虹29寸电视机高压包坏了修理费.....

    自动驾驶 日期:2024-06-18

  • 温度测量检测电路,模拟电-温度测量电路课程设计温度测量检测电路,模拟电-温度测量电路课程设计

    检测电路。电磁离合器是否通电由温度检测电路、发动机转速检测电路和安全控制电路控制,在电路中添加短路可以快速检测电路的状态和性能,水温传感器采用分压电路,其中串联两个电阻,ECU通过.....

    自动驾驶 日期:2024-06-18

  • usb音箱内部电路,音响上的usb是什么?usb音箱内部电路,音响上的usb是什么?

    低端扬声器:功率放大器电缆直接连接到低音扬声器高音扬声器电路,串联极的电解电容频率必须连接衰减电阻。具有高级聚丙烯电容器表面的低端系统的重叠范围太宽,无法实现HIFI播放;低端扬声.....

    自动驾驶 日期:2024-06-18

  • 铂电阻铂金有多少钱,铂金价格是多少铂电阻铂金有多少钱,铂金价格是多少

    铂金价格是多少2,铂金多少钱一克3,铂金价格是多少4,铂金现在市场价多少钱一克5,铂金现在多少钱一克6,现在铂金多少钱一克pt950和pt900分别是多少7,现在铂金多少钱一克1,铂金价格是多少PT990是.....

    自动驾驶 日期:2024-06-18