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

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

QQ登錄

只需一步,快速開(kāi)始

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

STC89單片機(jī)驅(qū)動(dòng)DS12C887的代碼,以及請(qǐng)教如何用STC12驅(qū)動(dòng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:912806 發(fā)表于 2021-8-22 20:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
下面的代碼能正確讀出三個(gè)控制位以及年月日時(shí)分秒.

但是同樣的代碼, 在STC12C5A52S2 (包括STC12C5A56S2)上不行, 懷疑在所有1T模式的STC系列(STC10, STC11, STC12, STC15)上都不行.
各位大佬如果有條件請(qǐng)麻煩試一下是否是這個(gè)情況.

這個(gè)代碼是用于STC89C5x系列的, 實(shí)測(cè)可以使用
  1. #include <reg52.h>
  2. #include <stdio.h>

  3. typedef unsigned int u16;
  4. typedef unsigned char u8;

  5. u8 year, month, date, hour, minute, second, week_day;
  6. u8 alarm_hour, alarm_minute, alarm_second;
  7. u8 reg_a, reg_b, reg_c;

  8. void delay(u16 z) {
  9.   u16 x,y;
  10.   for(x=z;x>0;x--)
  11.     for(y=110;y>0;y--);
  12. }

  13. sbit DS12_DS  = P1^0;
  14. sbit DS12_RW  = P1^1;
  15. sbit DS12_AS  = P1^2;
  16. sbit DS12_CS  = P1^4;
  17. sbit DS12_IRQ = P3^2;

  18. void DS12C887_write(u8 addr, u8 dat)
  19. {
  20.   delay(1);
  21.   DS12_CS = 0; //  ds12c887de 使能端 cs=0
  22.   delay(1);
  23.   DS12_AS=1;
  24.   DS12_DS=1;
  25.   DS12_RW=1;
  26.   delay(1);
  27.   P0 = addr;
  28.   delay(1);
  29.   DS12_AS=0;
  30.   DS12_RW=0;
  31.   P0 = dat;
  32.   DS12_RW=1;
  33.   DS12_AS=1;
  34.   delay(1);
  35.   DS12_CS = 1; //  ds12c887de 使能端 cs=1
  36.   delay(1);
  37. }

  38. u8 DS12C887_read(u8 addr)
  39. {
  40.   u8 ds_date;
  41.   DS12_AS=1;
  42.   DS12_DS=1;
  43.   DS12_RW=1;
  44.   delay(1);
  45.   DS12_CS = 0;
  46.   delay(1);
  47.   P0 = addr;
  48.   delay(1);
  49.   DS12_AS=0;
  50.   DS12_DS=0;
  51.   P0 = 0XFF;
  52.   ds_date=P0;
  53.   DS12_DS=1;
  54.   DS12_AS=1;
  55.   DS12_CS = 1;
  56.   return ds_date;
  57. }

  58. void DS12C887_init()
  59. {
  60.     DS12C887_write(0x0b, 0x26);
  61.     DS12C887_write(0x0a, 0x20);
  62. }

  63. void main()
  64. {
  65.   P0 = 0x00; // P0口清零
  66.   P1 = 0xff; // P1口全1

  67.   DS12C887_init();//ds12c887 初始化

  68.   EA  =1; // 開(kāi)啟中斷, 開(kāi)啟TIM1中斷, 開(kāi)啟外部中斷0
  69.   IT0 =1;
  70.   EX0 =1;

  71.   // 初始化UART
  72.   TMOD = 0x20;
  73.   SCON = 0x40;
  74.   TH1 = 256 - 11.0592 * 1000 * 1000 / 12 / 32 / 9600 + 0.5;
  75.   TCON |= 0x40;
  76.   SCON |= 0x02;
  77.   // 初始化UART結(jié)束

  78.   /* 初始化寫(xiě)入
  79.   DS12C887_write(9,11);     // Year
  80.   DS12C887_write(8,8);      // Month
  81.   DS12C887_write(7,7);      // Date
  82.   DS12C887_write(6,7);      // Week Day
  83.   DS12C887_write(4,9);      // Hour
  84.   DS12C887_write(2,27);     // Minute
  85.   DS12C887_write(0,25);     // Second
  86.   */

  87.   while(1) {
  88.     second       = DS12C887_read(0x00);
  89.     alarm_second = DS12C887_read(0x01);
  90.     minute       = DS12C887_read(0x02);
  91.     alarm_minute = DS12C887_read(0x03);
  92.     hour         = DS12C887_read(0x04);
  93.     alarm_hour   = DS12C887_read(0x05);
  94.     date         = DS12C887_read(0x07);
  95.     month        = DS12C887_read(0x08);
  96.     year         = DS12C887_read(0x09);

  97.     reg_a        = DS12C887_read(0x0a);
  98.     reg_b        = DS12C887_read(0x0b);
  99.     reg_c        = DS12C887_read(0x0c);

  100.     printf("%bX-%bX-%bX ", reg_a, reg_b, reg_c);
  101.     printf("%bX-%bX-%bX ", year, month, date);
  102.     printf("%bX:%bX:%bX\r\n", hour, minute, second);
  103.   }      
  104. }

  105. void exter() interrupt 0
  106. {   
  107.      // 這里處理中斷
  108. }
復(fù)制代碼


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

使用道具 舉報(bào)

沙發(fā)
ID:328014 發(fā)表于 2021-8-23 04:30 | 只看該作者
一般在1t單片機(jī)上運(yùn)行把延時(shí)函數(shù)修改一下 即可
回復(fù)

使用道具 舉報(bào)

板凳
ID:624769 發(fā)表于 2021-8-28 16:06 | 只看該作者
你說(shuō)的不行,具體是什么?
你代碼不全,很多東西不好判斷。
就說(shuō),代碼中看到幾個(gè)問(wèn)題。
首先頭文件,STC15,12,11系列,必須用他們的頭文件,不能用reg51,不然,可能有不可預(yù)知的問(wèn)題。
其次,15系列單片機(jī),大多沒(méi)有T1, 你串口必須要用T2來(lái)定速,并且,AUXR里面必須把T2設(shè)置為1T模式,并且16位自動(dòng)重載。然后延時(shí)問(wèn)題,建議用15系列,12系列的話,還是下載一個(gè)STC下載器,里面自帶延時(shí)計(jì)算。不然,你很難調(diào)整,雖然15,12,11系列號(hào)稱1T,但是對(duì)于延時(shí),只有NOP做到的真正一個(gè)時(shí)鐘,其他的類似While所牽涉的DJNZ代碼都是4-5個(gè)時(shí)鐘的。
回復(fù)

使用道具 舉報(bào)

地板
ID:912806 發(fā)表于 2021-10-23 22:21 | 只看該作者
今天難得有空, 上邏輯分析儀測(cè)了一下問(wèn)題原因, 跟時(shí)序和延遲沒(méi)有關(guān)系, 出錯(cuò)是因?yàn)镾TC12和STC89的GPIO驅(qū)動(dòng)能力不一樣, STC12在讀取時(shí)不能用準(zhǔn)雙向模式, 必須切換到高阻態(tài). 這樣讀取就沒(méi)問(wèn)題了.
詳細(xì)說(shuō)明都寫(xiě)在這里了: https://www.cnblogs.com/milton/p/15168730.html
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区四区五区加勒比 | 日韩aⅴ在线观看 | 亚洲深夜福利 | 在线a视频 | 精品久久久久久久久久久久 | 亚洲欧美日韩在线一区二区 | 成人精品鲁一区一区二区 | 国产亚洲精品久久久久久豆腐 | 欧美成人免费在线视频 | 久草视频在线播放 | 久久久久久国产精品mv | 亚洲日本一区二区三区四区 | 亚洲美女av网站 | 日韩无| 日日天天 | 国产一级电影在线 | 成人视屏在线观看 | 精品视频一区二区三区在线观看 | 国产一区日韩在线 | 国产 欧美 日韩 一区 | 日韩三 | 欧美一区二区免费 | 久久久久久久国产 | av在线免费观看网站 | 视频一区在线观看 | 国产99免费| 超碰国产在线 | 九九九久久国产免费 | 性福视频在线观看 | 97av视频| 亚洲不卡在线观看 | 久久国产精品一区 | 久久久天堂 | www.蜜桃av| 色婷婷久久久亚洲一区二区三区 | 九九激情视频 | 午夜影院| 97久久久久久 | 中文字幕亚洲专区 | 欧美视频中文字幕 | 一区二区免费在线视频 |