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

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

QQ登錄

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

搜索
查看: 2425|回復(fù): 3
收起左側(cè)

我懸賞一百黑幣,請(qǐng)求幫我解答這個(gè)疑惑,關(guān)于ds1302的程序的一點(diǎn)問(wèn)題

[復(fù)制鏈接]
ID:329253 發(fā)表于 2018-5-25 22:01 來(lái)自觸屏版 | 顯示全部樓層 |閱讀模式
100黑幣
麻煩幫我看看,最后我用串口打印出來(lái)的數(shù)值始終不對(duì),最后打印出來(lái)的是00 08 F8  08  00 F8跟我設(shè)置好的時(shí)間不一樣呀
#include "reg51.h"
sbit RST= P3^5;
sbit SCLK= P3^6;
sbit DPIO= P3^4;
unsigned char code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
unsigned char code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
unsigned char time[7];       
void delay()
{         
         unsigned char i;
     unsigned char j;
         for(i=0;i<6;i++)
       for(j=0;j<6;j++);
}
void sendbyte(unsigned char addr ,unsigned char dat)
{
  unsigned char i;
  RST        =0;
   delay();
  SCLK =0;
   delay() ;
  RST        =1;
   delay();
        for(i=0;i<8;i++)
        {
         DPIO=addr&0x01;
         addr>>=1;
         SCLK =1;
         delay();
          SCLK =0;
          delay();
        }
           for(i=0;i<8;i++)
        {
         DPIO=dat&0x01;
         dat>>=1;
         delay();
         SCLK =1;
         delay();
         delay();
          SCLK =0;
          delay();
        }

         RST=0;
         delay();
         SCLK =0;
         delay();
}
unsigned char read(unsigned char addr)
{
  unsigned char i;
  unsigned char dat;
  unsigned char tmp;
  RST        =0;
  delay();
  SCLK =0;
  RST        =1;
  delay();
        for(i=0;i<8;i++)
        {
         DPIO=addr&0x01;
         addr>>=1;
         SCLK =1;
         delay();
          SCLK =0;
          delay();
        }
           for(i=0;i<8;i++)
        {
          DPIO=tmp;
         dat|=tmp<<7;
         SCLK =1;
         delay();
          SCLK =0;
          delay();
        }

         RST=0;
         delay();
         SCLK =0;
         delay();
         DPIO = 0;
         delay();
         return dat;
}
void read_reg()
{
        unsigned char i;
    for(i=0;i<8;i++)

        {
        time[i]=read( READ_RTC_ADDR[i]);
        }
}
void write()
{
   unsigned char i;
        sendbyte(0x8e,0x00);
         time[0]=0x30;
         time[1]=0x35;
         time[2]=0x20;
         time[3]=0x25;
         time[4]=0x05;
         time[5]=0x05;
         time[6]=0x18;
        for(i=0;i<7;i++)
   {
   sendbyte(WRITE_RTC_ADDR[i],time[i]);
   delay();
        }
        sendbyte(0x8E, 0x80);
}
void uart_init(void)
{
        // 波特率9600
        SCON = 0x50;           // 串口工作在模式1(8位串口)、允許接收
        PCON = 0x00;        // 波特率不加倍

        // 通信波特率相關(guān)的設(shè)置
        TMOD = 0x20;        // 設(shè)置T1為模式2
        TH1 = 253;
        TL1 = 253;                   // 8位自動(dòng)重裝,意思就是TH1用完了之后下一個(gè)周期TL1會(huì)
                                        // 自動(dòng)重裝到TH1去

        TR1 = 1;                // 開(kāi)啟T1讓它開(kāi)始工作
}

// 通過(guò)串口發(fā)送1個(gè)字節(jié)出去
void uart_send_byte(unsigned char c)
{
   // 第1步,發(fā)送一個(gè)字節(jié)
   SBUF = c;

   // 第2步,先確認(rèn)串口發(fā)送部分沒(méi)有在忙
   while (!TI);

   // 第3步,軟件復(fù)位TI標(biāo)志位
   TI = 0;
}
void main()
{         
    unsigned char k;
         uart_init();
     write();
       
         while(1)
    {
            read_reg();
               for(k=0;k<7;k++)
            {
              uart_send_byte(time[k]);
              }
            delay();
     }

}

回復(fù)

使用道具 舉報(bào)

ID:155507 發(fā)表于 2018-5-26 10:11 | 顯示全部樓層
DS1302 須要BCD處理


  1. #include "reg51.h"
  2. #define ds1302_sec_add                        0x80                //秒數(shù)據(jù)地址
  3. #define ds1302_min_add                        0x82                //分?jǐn)?shù)據(jù)地址
  4. #define ds1302_hr_add                        0x84                //時(shí)數(shù)據(jù)地址
  5. #define ds1302_date_add                        0x86                //日數(shù)據(jù)地址
  6. #define ds1302_month_add                0x88                //月數(shù)據(jù)地址
  7. #define ds1302_day_add                        0x8a                //星期數(shù)據(jù)地址
  8. #define ds1302_year_add                        0x8c                //年數(shù)據(jù)地址
  9. #define ds1302_control_add                0x8e                //控制數(shù)據(jù)地址
  10. #define ds1302_charger_add                0x90                                          
  11. #define ds1302_clkburst_add                0xbe
  12. sbit RST= P3^5;
  13. sbit SCLK= P3^6;
  14. sbit DPIO= P3^4;
  15. unsigned char code READ_RTC_ADDR[7]  = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
  16. unsigned char code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
  17. unsigned char time[7];        

  18. void delay()
  19. {         
  20.         unsigned char i;
  21.         unsigned char j;
  22.         for(i=0;i<6;i++)
  23.         for(j=0;j<6;j++);
  24. }

  25. void sendbyte(unsigned char addr ,unsigned char dat)
  26. {
  27.         unsigned char i;
  28.         RST  =0;
  29.         delay();
  30.         SCLK =0;
  31.         delay() ;
  32.         RST  =1;
  33.         delay();
  34.         for(i=0;i<8;i++)
  35.         {
  36.                 DPIO=addr&0x01;
  37.                 addr>>=1;
  38.                 SCLK =1;
  39.                 delay();
  40.                 SCLK =0;
  41.                 delay();
  42.         }
  43.         for(i=0;i<8;i++)
  44.         {
  45.                 DPIO=dat&0x01;
  46.                 dat>>=1;
  47.                 delay();
  48.                 SCLK =1;
  49.                 delay();
  50.                 delay();
  51.                 SCLK =0;
  52.                 delay();
  53.         }

  54.         RST=0;
  55.         delay();
  56.         SCLK =0;
  57.         delay();
  58. }

  59. unsigned char read(unsigned char addr)
  60. {
  61.         unsigned char i;
  62.         unsigned char dat;
  63.         unsigned char tmp;
  64.         RST  =0;
  65.         delay();
  66.         SCLK =0;
  67.         RST  =1;
  68.         delay();
  69.         for(i=0;i<8;i++)
  70.         {
  71.                 DPIO=addr&0x01;
  72.                 addr>>=1;
  73.                 SCLK =1;
  74.                 delay();
  75.                 SCLK =0;
  76.                 delay();
  77.         }
  78.         for(i=0;i<8;i++)
  79.         {
  80.                 DPIO=tmp;
  81.                 dat|=tmp<<7;
  82.                 SCLK =1;
  83.                 delay();
  84.                 SCLK =0;
  85.                 delay();
  86.         }

  87.         RST=0;
  88.         delay();
  89.         SCLK =0;
  90.         delay();
  91.         DPIO = 0;
  92.         delay();
  93.         return dat;
  94. }
  95. void read_reg()
  96. {
  97.         unsigned char i, tmp;
  98.         unsigned char time_buf[8] ;
  99.         for(i=0;i<8;i++)

  100.         {
  101.                 time_buf[i]=read( READ_RTC_ADDR[i]);
  102.         }
  103.         for(i=0;i<8;i++)
  104.         {           //BCD處理
  105.                 tmp=time_buf[i]/16;
  106.                 time[i]=time_buf[i]%16;
  107.                 time[i]=time[i]+tmp*10;
  108.         }
  109. }
  110. void write()
  111. {
  112.         unsigned char i, tmp;
  113.         unsigned char time_buf[8] ;
  114.         sendbyte(0x8e,0x00);
  115.         time[0]=0x30;
  116.         time[1]=0x35;
  117.         time[2]=0x20;
  118.         time[3]=0x25;
  119.         time[4]=0x05;
  120.         time[5]=0x05;
  121.         time[6]=0x18;
  122.         for(i=0;i<7;i++)
  123.         {                  //DS1302 須要BCD處理
  124.                 tmp=time[i]/10;
  125.                 time_buf[i]=time[i]%10;
  126.                 time_buf[i]=time_buf[i]+tmp*16;
  127.         }
  128.         for(i=0;i<7;i++)
  129.         {
  130.                 sendbyte(WRITE_RTC_ADDR[i],time_buf[i]);
  131.                 delay();
  132.         }
  133.         sendbyte(0x8E, 0x80);
  134. }
  135. void uart_init(void)
  136. {
  137.         // 波特率9600
  138.         SCON = 0x50;           // 串口工作在模式1(8位串口)、允許接收
  139.         PCON = 0x00;        // 波特率不加倍

  140.         // 通信波特率相關(guān)的設(shè)置
  141.         TMOD = 0x20;        // 設(shè)置T1為模式2
  142.         TH1 = 253;
  143.         TL1 = 253;                   // 8位自動(dòng)重裝,意思就是TH1用完了之后下一個(gè)周期TL1會(huì)
  144.         // 自動(dòng)重裝到TH1去

  145.         TR1 = 1;                // 開(kāi)啟T1讓它開(kāi)始工作
  146. }

  147. // 通過(guò)串口發(fā)送1個(gè)字節(jié)出去
  148. void uart_send_byte(unsigned char c)
  149. {
  150.         // 第1步,發(fā)送一個(gè)字節(jié)
  151.         SBUF = c;

  152.         // 第2步,先確認(rèn)串口發(fā)送部分沒(méi)有在忙
  153.         while (!TI);

  154.         // 第3步,軟件復(fù)位TI標(biāo)志位
  155.         TI = 0;
  156. }

  157. void main()
  158. {         
  159.         unsigned char k;
  160.         uart_init();
  161.         write();
  162.        
  163.         while(1)
  164.         {
  165.                 read_reg();
  166.                 for(k=0;k<7;k++)
  167.                 {
  168.                         uart_send_byte(time[k]);
  169.                 }
  170.                 delay();
  171.         }

  172. }

復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:329253 發(fā)表于 2018-5-26 21:14 | 顯示全部樓層

打印出來(lái)和原來(lái)一樣呀,什么情況?
回復(fù)

使用道具 舉報(bào)

ID:155507 發(fā)表于 2018-5-26 22:21 | 顯示全部樓層
請(qǐng)檢查你的DS1302時(shí)鐘模塊和單片機(jī)怎樣接線
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人1区 | 欧美日韩精品一区二区三区四区 | 欧美成人精品一区二区三区 | 韩日一区二区三区 | 国产美女特级嫩嫩嫩bbb片 | 亚洲综合日韩精品欧美综合区 | 波多野结衣一区二区三区在线观看 | 国产情侣在线看 | 超碰伊人久久 | 麻豆av网站| 成年人网站在线观看视频 | 日韩在线视频免费观看 | 青草青草久热精品视频在线观看 | 亚洲小说图片 | 一道本不卡视频 | 国产精品福利网站 | 99pao成人国产永久免费视频 | 久久无毛| 亚洲人成在线观看 | 中文字幕一区二区三区在线观看 | 做a视频在线观看 | 91看片视频 | 精品久久久久久 | 亚洲精彩免费视频 | 日韩电影一区二区三区 | 国产高清视频在线 | 日本三级电影免费 | 天堂免费看片 | 久久久高清 | 最新中文字幕第一页视频 | 欧美一区二区三区免费电影 | 国产传媒在线观看 | 美女福利网站 | 一道本不卡视频 | 在线三级网址 | 狠狠干网站 | 国产精品毛片一区二区三区 | 日韩在线资源 | 91美女在线观看 | 成人av网站在线观看 | 成人欧美一区二区三区1314 |