ds12c887.zip

  • smallsmall2008
    了解作者
  • C/C++
    开发工具
  • 3KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2016-12-06 16:26
    上传日期
实时时钟ds12c887驱动程序,atmega128平台测试通过
ds12c887.zip
  • ds12c887
  • myds12c887.c
    16.4KB
  • myds12c887.h
    1.4KB
内容介绍
/* ******************************************************************************************** * REVISION HISTORY ******************************************************************************************** */ /* ******************************************************************************************** * INCLUDE FILES ******************************************************************************************** */ #define DS12C887_GLOBALS #include <MyCpu.h> #include <MyAvrmega128.h> /* ******************************************************************************************** * CONSTANTS ******************************************************************************************** */ //世纪存放地址 #define D887_CENT_ADR 50 //寄存器D地址 #define D887_REGD_ADR 13 //寄存器C地址 #define D887_REGC_ADR 12 //寄存器B地址 #define D887_REGB_ADR 11 //寄存器A地址 #define D887_REGA_ADR 10 //年存放地址 #define D887_YEAR_ADR 9 //月存放地址 #define D887_MONTH_ADR 8 //天存放地址 #define D887_DAY_ADR 7 //星期存放地址 #define D887_WEEK_ADR 6 //小时报警地址 #define D887_HOURARM_ADR 5 //小时存放地址 #define D887_HOUR_ADR 4 //分钟报警地址 #define D887_MINARM_ADR 3 //分钟存放地址 #define D887_MIN_ADR 2 //秒报警地址 #define D887_SECARM_ADR 1 //秒存放地址 #define D887_SEC_ADR 0 //定义RAM最大可用字节数 #define D887_MAX_SIZE 128 //定义测试用字节地址 #define DS12C887_TEST_ADR 127 /* ******************************************************************************************** * VARIABLES ******************************************************************************************** */ //INT8U D887_ADR[D887_MAX_SIZE] @DS12C887_ADR; static INT16U D887_AdrStar; /* ******************************************************************************************** * Ds12c887_SerStarAdr * *Description :设置12c887的起始地址 *Arguments :'staradr'ds12c887的首地址 *Returns :None *Notes :None ******************************************************************************************** */ void Ds12c887_SetStarAdr(INT16U staradr) { INT8U *padr; D887_AdrStar = staradr; ENTER_CRITICAL(); padr = D887_AdrStar; *(padr + D887_REGA_ADR) = 0x2f; EXIT_CRITICAL(); } /* ******************************************************************************************** * Ds12c887_Read * *Description :从ds12c887的寄存器或sram中读一个字节数据 *Arguments :fadr - 需要读取的寄存器或sram地址 * *data - 存放读取的数据 * 'staradr'ds12c887的首地址 *Returns :None *Notes :None ******************************************************************************************** */ INT8U Ds12c887_Read(INT8U fadr, INT8U *data) { INT8U delaynum; INT8U *padr; if (fadr >= D887_MAX_SIZE) { return 0; } ENTER_CRITICAL(); padr = D887_AdrStar; *data = *(padr + fadr); EXIT_CRITICAL(); //PORTD.7 = 1; return 1; } /* ******************************************************************************************** * Ds12c887_ReadBlock * *Description :从ds12c887的寄存器或sram中读一批字节数据 *Arguments :'adrst'需要读取的首地址 * 'num' 需要读的字节数目 * '*data'存放读取的数据 *Returns :None *Notes :None ******************************************************************************************** */ INT8U Ds12c887_ReadBlock(INT8U adrst, INT8U num, INT8U *data) { INT8U i; for (i = 0; i < num; i++) { Ds12c887_Read((adrst + i), (data + i)); } return 1; } /* ******************************************************************************************** * Ds12c887_Write * *Description :向ds12c887的寄存器或sram中写入一个字节数据,数据值来自fvalue *Arguments :fadr - 需要写值的地址 * fvalue - 需要写的值 *Returns :None *Notes :None ******************************************************************************************** */ INT8U Ds12c887_Write(INT8U fadr, INT8U fvalue) { INT8U delaynum; INT8U *padr; if (fadr >= D887_MAX_SIZE) { return 0; } ENTER_CRITICAL(); padr = D887_AdrStar; *(padr + fadr) = fvalue; EXIT_CRITICAL(); return 1; } /* ******************************************************************************************** * Ds12c887_WriteBlock * *Description :向ds12c887的寄存器或sram中写入一批字节数据,数据值来自data *Arguments :'adrst' 需要写值的首地址 * 'num' 需要写的字节数 * '*data' 需要写的内容 *Returns :None *Notes :None ******************************************************************************************** */ INT8U Ds12c887_WriteBlock(INT8U adrst, INT8U num, INT8U *data) { INT8U i; for (i = 0; i < num; i++) { Ds12c887_Write((adrst + i), *(data + i)); } return 1; } /* ******************************************************************************************** * Ds12c887_SetCent * *Description :设置世纪 *Arguments :'data'需要设置的世纪值,19,20 *Returns :None *Notes :注意二进制模式下没用用 ******************************************************************************************** */ INT8U Ds12c887_SetCent(INT8U data) { INT8U *padr; if ((data < 19) || (data > 20)) { return 0; } ENTER_CRITICAL(); padr = D887_AdrStar; *(padr + D887_REGB_ADR) = 0x86; *(padr + D887_REGA_ADR) = 0x2f; *(padr + D887_CENT_ADR) = data; *(padr + D887_REGB_ADR) = 0x06; EXIT_CRITICAL(); return 1; } /* ******************************************************************************************** * Ds12c887_SetYear * *Description :设置年 *Arguments :'data'需要设置的年,0-99 *Returns :None *Notes :None ******************************************************************************************** */ INT8U Ds12c887_SetYear(INT8U data) { INT8U *padr; if (data > 99) { return 0; } ENTER_CRITICAL(); padr = D887_AdrStar; *(padr + D887_REGB_ADR) = 0x86; *(padr + D887_REGA_ADR) = 0x2f; *(padr + D887_YEAR_ADR) = data; *(padr + D887_REGB_ADR) = 0x06; EXIT_CRITICAL(); return 1; } /* ******************************************************************************************** * Ds12c887_SetMonth * *Description :设置月 *Arguments :'data'需要设置的月,1-12 *Returns :None *Notes :None ******************************************************************************************** */ INT8U Ds12c887_SetMonth(INT8U data) { INT8U *padr; if (data == 0) { return 0; } if (data > 12) { return 0; } ENTER_CRITICAL(); padr = D887_AdrStar; *(padr + D887_REGB_ADR) = 0x86; *(
评论
    相关推荐
    • DS12C887.rar
      ds12cr887源程序,亲测可用。可以实现精确计时,闹钟定时等功能。
    • ds12c887时钟.rar
      51单片机驱动DS12C887时钟芯片制作的LCD时钟,有温湿度,农历显示
    • DS12c887.zip
      C51程序运用stc12c5a系列的单片机即可驱动,DS12c887时钟芯片的正常工作,利用共阴数码管显示。已测试完成。
    • RTC_DS12C887.zip
      使用keil编程,用51单片机和DS12C887芯片实现实时时钟
    • DS12C887.zip
      DS12C887是一款时钟芯片,精度高,误差小。驱动简单。
    • AT89C52+DS12C887
      DS12C887时钟芯片 DS18B20温度传感器 74HC595,UN2803静态驱动 光敏电阻+STC12C2052AD PWM(光耦+P-MOS)自动亮度调节 旋转编码器调节 短按调时,长按(5秒)调参数,调节时长按退出。 参数说明:C1正负校准,C2每天校准...
    • DS12C887程序
      DS12C887程序.可以助你一臂之力。C语言更能懂
    • 仿真 ds12c887时钟芯片
      ds12c887时钟芯片仿真 ,c语言写的,参照郭天详
    • DS12C887时钟51程序
      压缩包包括调好的DS12C887时钟51单片机的C语言程序,以及需要的参考资料。
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路