ds1302中的31个ram的读写控制怎样用?求助大侠。。。 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;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;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;。
DS1302的工作原理是什么? 1、DS1302工作时为了对任何数据传送进行初始化,需要将复位脚(RST)置为高电平且将8位地址和命令信息装入移位寄存器。数据在时钟(SCLK)的上升沿串行输入,前8位指定访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输出数据。时钟脉冲的个数在单字节方式下为8+8(8位地址+8位数据),在多字节方式下为8加最多可达248的数据。2、对DS1302的操作就是对其内部寄存器的操作,DS1302内部共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器以外的寄存器。日历、时间寄存器及控制字如表1所示:DS1302:DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。
DS1302的问题说明 DS1302 与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位Write Protect(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,在此方式下可一次性读、写所有的RAM的31个字节。要特别说明的是备用电源B1,可以用电池或者超级电容器(0.1F以上)。虽然DS1302在主电源掉电后的耗电很小,但是,如果要长时间保证时钟正常,最好选用小型充电电池。可以用老式电脑主板上的3.6V充电电池。如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替。100 μF就可以保证1小时的正常走时。DS1302在第一次加。
ds1302的c语言程序 这是一个PIC16F877A单片机的源程序,你参考一下include<;pic.h>;/包含单片机内部资源预定义CONFIG(0x1832);芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡define i_o RB4/定义DS1302的数据口define sclk RB0/定义DS1302的时钟口define rst RB5/定义DS1302的复位口unsigned char time_rx;unsigned char time_rx@0x30;定义接收寄存器static volatile bit time_rx7@(unsigned)&time_rx*8+7;接收寄存器的最高位static volatile bit temp0@(unsigned)&temp*8+0;void port_init();申明引脚初始化函数void ds1302_init();申明DS1302初始化函数void set_time();申明设置时间函数void get_time();申明读取时间函数void display();申明显示函数void time_write_1(unsigned char time_tx);申明写一个字节函数unsigned char time_read_1();申明读一个字节函数void delay();申明延时函数定义待设置的时间:秒、分、时、日、月、星期、年、控制字const char table[]={0x00,0x58,0x12,0x8,0x3,0x06,0x06,0x00};定义读取时间和日期存放表格char table1[7];定义0-9的显示代码const char table2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0。
DS1302芯片的控制字节 控制字节的最高有效位(位7)必须是zd逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为回1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到答高位7。