久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3743|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

DS12C887的C51驅(qū)動(dòng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
#
ID:70976 發(fā)表于 2014-12-26 21:17 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
   DS12C887自帶電池,并且芯片內(nèi)部具有一定的掉電保存RAM,而且價(jià)格也還可以,因此使用的比較多。DS12C887地址與數(shù)據(jù)總線復(fù)用,因此與51接口方便,51的ALE接入DS12C887的ALE,51的讀信號(hào)RD接入DS12C887的DS,51的寫信號(hào)WR接入D12C887的RW即可。驅(qū)動(dòng)代碼如下:


  1. #define YEANUM  6
  2. #define MONNUM  5
  3. #define DAYNUM  4
  4. #define WEENUM  3
  5. #define HOUNUM  2
  6. #define MINNUM  1
  7. #define SECNUM  0

  8. extern unsigned char idata time[];

  9. // DS12C887寄存器定義
  10. #define RTCSECOND   (*(volatile unsigned char xdata *)DS12C887ADR)
  11. #define RTCSECONDALRM (*(volatile unsigned char xdata *)(DS12C887ADR+1))
  12. #define RTCMINUTE   (*(volatile unsigned char xdata *)(DS12C887ADR+2))
  13. #define RTCMINUTEALRM  (*(volatile unsigned char xdata *)(DS12C887ADR+3))
  14. #define RTCHOUR    (*(volatile unsigned char xdata *)(DS12C887ADR+4))
  15. #define RTCHOURALRM  (*(volatile unsigned char xdata *)(DS12C887ADR+5))
  16. #define RTCWEEK   (*(volatile unsigned char xdata *)(DS12C887ADR+6))
  17. #define RTCDAY    (*(volatile unsigned char xdata *)(DS12C887ADR+7))
  18. #define RTCMONTH   (*(volatile unsigned char xdata *)(DS12C887ADR+8))
  19. #define RTCYEAR    (*(volatile unsigned char xdata *)(DS12C887ADR+9))
  20. #define RTCREGA    (*(volatile unsigned char xdata *)(DS12C887ADR+10))
  21. #define RTCREGB    (*(volatile unsigned char xdata *)(DS12C887ADR+11))
  22. #define RTCREGC    (*(volatile unsigned char xdata *)(DS12C887ADR+12))
  23. #define RTCCENTURY   (*(volatile unsigned char xdata *)(DS12C887ADR+50))

  24. unsigned char idata time[7];

  25. void DS12C887Init(void)
  26. {
  27.     // 關(guān)閉RTC
  28.     RTCREGA = 0x70;     // 寄存器A
  29.     // 芯片停止工作, BIN模式, 24小時(shí)制, 在此期間初始化初始化時(shí)標(biāo)寄存器
  30.     RTCREGB = 0x86;   // 寄存器B, 時(shí)標(biāo)寄存器用二進(jìn)制表示,為24小時(shí)工作模式
  31.     RTCSECOND = time[SECNUM];  // 0秒
  32.     RTCSECONDALRM = 0xff;   // 秒鬧
  33.     RTCMINUTE = time[MINNUM];  // 0分
  34.     RTCMINUTEALRM = 0xff;   // 分鬧
  35.     RTCHOUR = time[HOUNUM];   // 0時(shí)
  36.     RTCHOURALRM = 0xff;    // 時(shí)鬧
  37.     RTCWEEK = time[WEENUM];   // 星期一
  38.     RTCDAY = time[DAYNUM];   // 一日
  39.     RTCMONTH = time[MONNUM];  // 一月
  40.     RTCYEAR = time[YEANUM];   // 05年
  41.     RTCCENTURY = 0x20;    // 20世紀(jì)
  42.     time[0] = RTCREGC;    // 寄存器C, 清楚C標(biāo)志
  43.     RTCREGA = 0x20;     // 開啟RTC
  44.     RTCREGB = 0x06;     // 芯片處于正常工作狀態(tài), BIN模式
  45. }

  46. void ReadTime(void)
  47. {
  48.     do{
  49.         CLR_DOG;
  50.         time[0] = RTCREGA;   // 判斷DS12C887是否處于更新周期
  51.     } while(time[0]&0x80);
  52.     time[SECNUM] = RTCSECOND;
  53.     time[SECNUM] = RTCSECOND;  // 秒
  54.     time[MINNUM] = RTCMINUTE;  // 分
  55.     time[HOUNUM] = RTCHOUR;   // 時(shí)
  56.     time[WEENUM] = RTCWEEK;   // 星期
  57.     time[DAYNUM] = RTCDAY;   // 日
  58.     time[MONNUM] = RTCMONTH;  // 月
  59.     time[YEANUM] = RTCYEAR;   // 年
  60. }

  61. void WriteTime(void)
  62. {
  63.     // 關(guān)閉RTC
  64.     RTCREGA = 0x70;     // 寄存器A
  65.     RTCSECOND = time[SECNUM];  // 秒
  66.     RTCMINUTE = time[MINNUM];  // 分
  67.     RTCHOUR = time[HOUNUM];   // 時(shí)
  68.     RTCWEEK = time[WEENUM];   // 星期
  69.     RTCDAY = time[DAYNUM];   // 日
  70.     RTCMONTH = time[MONNUM];  // 月
  71.     RTCYEAR = time[YEANUM];   // 年
  72.     RTCREGA = 0x20;     // 開啟RTC
  73. }


  74. // 設(shè)置定時(shí)時(shí)間
  75. void SetAlarmClock(unsigned char hour, unsigned char minute, unsigned char second)
  76. {
  77.     unsigned char tmp;

  78.     // 關(guān)閉RTC
  79.     RTCREGA = 0x70;     // 寄存器A
  80.     // 芯片停止工作, BIN模式, 24小時(shí)制, 在此期間初始化初始化時(shí)標(biāo)寄存器
  81.     RTCREGB = 0x84;     // 寄存器B
  82.     RTCSECONDALRM = second;   // 秒鬧
  83.     RTCMINUTEALRM = minute;   // 分鬧
  84.     RTCHOURALRM = hour;    // 時(shí)鬧
  85.     tmp = RTCREGC;     // 寄存器C, 清楚C標(biāo)志
  86.     RTCREGA = 0x20;     // 開啟RTC
  87.     RTCREGB = 0x02;     // 芯片處于正常工作狀態(tài), BCD模式
  88.          // BCD模式方便讀出顯示
  89. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产免费av网 | 国产精品国产成人国产三级 | 久草影视在线 | 国产高清在线 | 亚洲天堂免费在线 | 成在线人视频免费视频 | 黄网免费 | 午夜视频在线观看网站 | avav在线看 | 奇米久久久| 91视频观看| 久久久www成人免费无遮挡大片 | 久久在线 | 国产免费一区二区 | 成人国产a | 毛片站| 俺去俺来也www色官网cms | 欧美日韩在线成人 | 一区二区蜜桃 | 中文字幕亚洲视频 | 国产精品一区二区在线播放 | 成人免费在线视频 | 日本欧美在线观看视频 | 国产一区二区三区 | 久久五月婷 | 91小视频 | 天天综合国产 | 一级欧美一级日韩片免费观看 | 99视频在线免费观看 | 国产精品美女久久久久久免费 | 91久久国产 | 欧美一级观看 | 亚洲综合视频一区 | 久久综合九色综合欧美狠狠 | 国产精品3区 | 国产亚洲精品精品国产亚洲综合 | 久久久久久国产 | 一区二区三区四区视频 | 欧美国产视频 | 天天想天天干 | 一区二区三区免费 |