程序员书籍笔记 程序员书籍笔记
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • Linux

  • MySQL

  • 51单片机

    • 基础
    • 元器件
    • 中断
    • 定时计数器
    • 中断程序
    • DS1302模块
      • DS1302时钟模块
      • DS1302时序图
      • 基本使用
    • BCD码转换
    • 串口
    • 时序图入门74HC165
    • AD转换
    • SD卡
  • exam

  • 系统和硬件
  • 51单片机
yuadh
2022-02-03
目录

DS1302模块

# DS1302时钟模块

涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态 RAM ,通过简单的串行接口与单片机进行通信

实时时钟/日历电路提供秒、分、时、日、月、周、年的信息,每天的天数和闰年的天数可自动调整

时钟操作可通过 RAM/PM 指示决定采用 24或12 小时格式。DS1302与单片机间能简单采用同步串行的方式进行通信

  1. RST 复位 高位允许读写 低位禁止读写
  2. I / O 数据线 双向输入线
  3. SCLK 串行时钟 输入端,控制数据输入与输出

ds1302原理图

ds1302地址

  • 秒寄存器 0x80:当 CH = 0时,ds1302 内部时钟运行,反之停止
  • 写保护寄存器 0x8e :WP = 1无法写入,WP = 0可以写。每次写操作 0x8e = 0x00
  • 充电保护寄存器:0x90
  • 寄存器内容都是按 BCD 码存放(0-9) 如 83地址读到 0x28 代表的就是28分钟

# DS1302时序图

ds1302时序

  • RST 从低到高时,CLK 必须为低
  • 上升沿写入,下降沿读出
  • 写操作:写完命令的紧接着的上升沿写入数据
  • 读操作:写完命令的紧接着的下降沿读出数据

# 基本使用


#include <>
sbit SCK = P;
sbit IO = p;
sbit RST = P;
//函数声明
int sec,min,hour;
void main(){
    DS_wData(0x8E,0x00); //打开写保护,允许写入
    DS_wData(0x84,0x12);//写入时
    DS_wData(0x82,0x00);//写入分
    DS_wData(0x80,0x00);//写入秒
    DS_wData(0x8E,0x80);//禁止写入
    while(1){
        sec = DS_rData(0x81);
        min = DS_rData(0x83);
        hour = DS_rData(0x85);
    }
}

//写入数据  上升沿写入 下降沿读出
void writeData(uchar dat){
    uchar i;
    for(i=0;i<8;i++){
        sck = 0;
        _nop_();
        io = dat & 0x01;//取出低位
        _nop_();
        sck = 1;
        _nop_();
        dat>>1;
    }
}	
//读出数据 
uchar readData(){
    uchar i,dat;
    for(i=0;i<8;i++){
     	dat>>=1;
        sck = 0;
        _nop_();
        if(io==1){
            dat = dat|0x80;
        }else {
            dat = dat|0x00;
        }
        sck=1;
        _nop_();
    }
    return dat;
}

void DS_wData(uchar addr,uchar dat){
    rst = 0;
    sck = 0;
    rst = 1;
    writeDate(addr);
    writeDate(dat);
    rst = 0;
}

uchar DS_rData(uchar addr){
    uchar dat;
    rst = 0;
    sck = 0;
    rst = 1;
    writeDate(addr);
    dat = readData();
    rst = 0;
    return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
编辑 (opens new window)
上次更新: 2023/02/07, 14:51:48
中断程序
BCD码转换

← 中断程序 BCD码转换→

Theme by Vdoing | Copyright © 2021-2023 yuadh
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×