标题:发第一个单片机程序DS1302芯片
只看楼主
朱三哥
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:311
专家分:359
注 册:2012-12-11
结帖率:62.07%
 问题点数:0 回复次数:3 
发第一个单片机程序DS1302芯片
程序代码:
#include <reg51.h>
sbit ds1302_nf=P1^2;  // p1.2控制CE
sbit ds1302_clk=P3^6; // p3.6控制时序
sbit ds1302_io=P3^7;  // p3.7控制的是IO口

void ds1302_init()    //准备传输数据的初始化,CE拉高,clk拉低
{
  ds1302_nf=1;
  ds1302_clk=0;
 // ds1302_io=0;
}
void ds1302_close()  //关闭数据传输 ,CE拉高,CLK拉低
{
  ds1302_nf=0;
  //ds1302_clk=0;
  //ds1302_io=0;
}
void ds1302_write_byte(unsigned char addr)   //写一个字节
{
   unsigned char i;
    for(i=0;i<8;i++)
    {
      ds1302_io=addr&1;
     ds1302_clk=0;
      addr>>=1;
      ds1302_clk=1;
     }
}
unsigned char ds1302_read_byte()       //读一个字节
{
  unsigned char i,datanum=0;
  for(i=0;i<8;i++){
      datanum>>=1;
      ds1302_clk=1;
        ds1302_clk=0;
        if(ds1302_io==1)
          datanum|=0x80;
    }
    return(datanum);
}

void ds1302_write_data(unsigned char addr,unsigned char datanum)    //数据的写入分两部分,寄存器的选择和读写方式这个是一个字节  后面是一个字节的数据
{
   ds1302_init();
   ds1302_write_byte(addr);
    ds1302_write_byte(datanum);
    ds1302_close();
}

unsigned char ds1302_read_data(unsigned char addr)    //数据的读入分两步,第一步写入 寄存器 的选择控制部分数据,第二步读出一个字节的内容      
{
  unsigned  char datanum;
  ds1302_init();
  ds1302_write_byte(addr);
  datanum=ds1302_read_byte();
  ds1302_close();
  return(datanum);
}

void ds1302_wp_set()                    //写保护位的设置
{
  ds1302_init();
  ds1302_write_data(0x8e,0x80);
  ds1302_close();
}
void ds1302_wp_clear()               //清楚保护位
{
  ds1302_init();
  ds1302_write_data(0x8e,0);
  ds1302_close();
}
void delay(unsigned char i)        //延时函数
{
   unsigned char j;
    for(i;i>0;i--)
      for(j=0;j<255;j++);
}
//从DS1302里面读出秒表的数据给P2口  P2口连接的是8个LED灯,看灯的效果
void main()
{      
   ds1302_wp_clear();
    ds1302_write_data(0x80,0);
   ds1302_wp_set();
   while(1){
    delay(1000);
   P2=ds1302_read_data(0x81);
   }
}     


[ 本帖最后由 朱三哥 于 2013-3-2 22:09 编辑 ]
搜索更多相关主题的帖子: void 单片机程序 include 
2013-03-02 21:52
朱三哥
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:311
专家分:359
注 册:2012-12-11
得分:0 
芯片解读:
可控制口 3个
CE      数据传输用的  拉高 传送数据,拉低,关闭数据传输
CLK     控制时序的
IO      输入输出段

CE 高时  
CLK  正跳变(0变1的过程) 代表写,一个跳变一个位
CLK  负跳变(1变0的过程 )代表读  一个跳变一个位  
数据的格式     两个字节
第一个字节     包含内容为 第7位恒为1 第6位 内部寄存器和RAM的选择  5-1位 为内部寄存器的选择位  最后一位是读写控制位
第二个字节     是我们要的数据
在内部寄存器中 有一个contorl的寄存器的最高位是WP位    是个写保护位,这个为1只读不写,为0 可以写

写操作    连续写两个字节内容即可
读操作    写入一个字节后读入一个字节

读写数从  IO口  1位 1位的拿

传输的数据 是从低到高 一字节

芯片使用注意 大概就这么几点了

   

哥,破你无线很难的,不要老是改,少看路由器上的灯,你会死啊
2013-03-02 22:05
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
没分

DO IT YOURSELF !
2013-03-03 05:55
abooll
Rank: 2
等 级:论坛游民
帖 子:15
专家分:58
注 册:2013-3-17
得分:0 
呵呵,,,
2013-03-21 18:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-399549-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012419 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved