




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
手把手教你学单片机第十六课: DS1302实时 时钟学习BCD码介绍英文手册阅读对DS1302的操作包括读、写两个部分,我们根据程序来介绍芯片操作。从上图看出,无论我们是读、还是写,数据都是以1个字节(8bit)为单位的,所以在程序的最底层我问要先写出字节的读写程序: voidwrite_ds1302_byte(uint8dat) { uint8i; SCK=0; for(i=0;i<8;i++) { SDA=dat&0x01; SCK=1; dat>>=1; SCK=0; } }uint8read_ds1302_byte(void) { uint8i,dat=0; for(i=0;i<8;i++) { dat>>=1; if(SDA) dat|=0x80; SCK=1; SCK=0; } returndat; }在每次发起数据传输之前,要先复位DS1302: voidreset_ds1302(void) { RST=0; SCK=0; RST=1; }由于上电之后WP的状态并不确定,所以我们每次写操作时都要打开写保护。写保护程序: /** *清除写保护 */ voidclear_ds1302_WP(void) { reset_ds1302(); RST=1; write_ds1302_byte(0x8E); write_ds1302_byte(0); SDA=0; RST=0; }/** *设置写保护 */ voidset_ds1302_WP(void) { reset_ds1302(); RST=1; write_ds1302_byte(0x8E); write_ds1302_byte(0x80); SDA=0; RST=0; }我们每次的读写时间,时间上是对DS1302的相应地址进行操作,图中列出了各个信息的读写地址,为了方便对地址操作,我们封装了以下两个函数: /** *写入DS1302 */ voidwrite_ds1302(uint8addr,uint8dat) { reset_ds1302(); RST=1; write_ds1302_byte(addr); write_ds1302_byte(dat); SDA=0; RST=0; }/** *读出DS1302数据 */ uint8read_ds1302(uint8addr) { uint8temp=0; reset_ds1302(); RST=1; write_ds1302_byte(addr); temp=read_ds1302_byte(); SDA=0; RST=0; return(temp); }作业如有疑问,请登录http://www.kingst.org交流

王子****青蛙
实名认证
内容提供者


最近下载
最新上传
浙江省宁波市2024-2025学年高三下学期4月高考模拟考试语文试题及参考答案.docx
汤成难《漂浮于万有引力中的房屋》阅读答案.docx
四川省达州市普通高中2025届第二次诊断性检测语文试卷及参考答案.docx
山西省吕梁市2025年高三下学期第二次模拟考试语文试题及参考答案.docx
山西省部分学校2024-2025学年高二下学期3月月考语文试题及参考答案.docx
山西省2025年届高考考前适应性测试(冲刺卷)语文试卷及参考答案.docx
全国各地市语文中考真题名著阅读分类汇编.docx
七年级历史下册易混易错84条.docx
湖北省2024-2025学年高一下学期4月期中联考语文试题及参考答案.docx
黑龙江省大庆市2025届高三第三次教学质量检测语文试卷及参考答案.docx