void Ds1302Write(uchar addr, uchar dat) { uchar n; RST(0); delay_us(1); SCLK(0);//ÏȽ«SCLKÖõ͵çƽ¡£ delay_us(1); RST(1); //È»ºó½«RST(CE)Öøߵçƽ¡£ delay_us(1); IO_OUTPUT(); for (n=0; n<8; n++)//¿ªÊ¼´«ËÍ°ËλµØÖ·ÃüÁî { if(addr & 0x01){DSIO(1);}//Êý¾Ý´ÓµÍλ¿ªÊ¼´«ËÍ else{DSIO(0);} addr >>= 1; SCLK(1);//Êý¾ÝÔÚÉÏÉýÑØʱ£¬DS1302¶ÁÈ¡Êý¾Ý delay_us(1); SCLK(0); delay_us(1); } for (n=0; n<8; n++)//дÈë8λÊý¾Ý { if(dat & 0x01){DSIO(1);} else{DSIO(0);} dat >>= 1; SCLK(1);//Êý¾ÝÔÚÉÏÉýÑØʱ£¬DS1302¶ÁÈ¡Êý¾Ý delay_us(1); SCLK(0); delay_us(1); } RST(0);//´«ËÍÊý¾Ý½áÊø delay_us(1);
时间: 2024-03-07 18:53:44 浏览: 86
ds1302的简单编程
这段代码是用来向 DS1302 实时时钟模块写入数据的函数。其中 addr 参数表示要写入数据的地址,dat 参数表示要写入的数据。具体来说,这段代码首先设置 DS1302 模块的时钟和复位引脚,然后将 IO_OUTPUT 函数设置为输出模式,准备向 DS1302 模块写入数据。
接着,通过一个循环将 addr 和 dat 的每一位数据依次写入到 DS1302 模块中。具体做法是,将 addr 和 dat 的最低位取出,通过 DSIO 函数写入到 DS1302 模块中,然后将 addr 和 dat 右移一位,继续取下一位数据,直到所有数据都写入完成。在每一位数据写入完成后,都需要将 SCLK 引脚拉高一段时间,然后再拉低一段时间,以便 DS1302 模块正确地读取数据。
最后,将 RST 引脚拉低,表示本次数据写入完成。整个函数的作用是将一个字节的数据写入到 DS1302 实时时钟模块的指定地址中。
阅读全文