📄 ds1302.lst
字号:
C51 COMPILER V7.50 DS1302 06/10/2006 08:26:02 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: D:\ExpertTools\Keil\C51\BIN\C51.EXE DS1302.C OPTIMIZE(5,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 /*********************************************************************
2 *Description: Real Time Clock Module For IC DS1302
3 *File Name: DS1302.C
4 *Use Compile Lanague: KEIL C51
5 *Version : V1.0
6 *Code Author: zhouhuanxi
7 *Date: 2005-01-19
8 CopyRight(C) 2005 -- SHENZHEN XINSANWEI Machine&Electronics CO.,LTD.
9 *********************************************************************/
10
11 //==== FILE Include And Macro Declare Segment=====
12
13 #include "Config.H"
14
15 code uint8 monthday[]={0x31,0x29,0x31,0x30,0x31,0x30,0x31,0x31,0x30,0x31,0x30,0x31};
16 //Define DS1302 Operate IO Pin
17 sbit IO = P3^6;
18 sbit SCLK = P3^5;
19 sbit RSTB = P3^7;
20
21 /********************************************************************
22 *
23 * 名称: DS1302_InputByte
24 * 说明:
25 * 功能: 往DS1302写入1Byte数据
26 * 调用:
27 * 输入: ucDa 写入的数据
28 * 返回值: 无
29 ***********************************************************************/
30 void DS1302_InputByte(uint8 ucDa)
31 {
32 1 uint8 i;
33 1
34 1 for(i=8; i>0; i--)
35 1 {
36 2 if((ucDa&0x01)==0x01)
37 2 IO=1;
38 2 else
39 2 IO=0;
40 2
41 2 SCLK = 1;
42 2 _NOP_();
43 2 SCLK = 0;
44 2 ucDa = ucDa >> 1;
45 2 }
46 1 }
47
48 /********************************************************************
49 *
50 * 名称: uint8 DS1302_OutputByte
51 * 说明:
52 * 功能: 从DS1302读取1Byte数据
53 * 调用:
54 * 输入:
55 * 返回值: ACC
C51 COMPILER V7.50 DS1302 06/10/2006 08:26:02 PAGE 2
56 ***********************************************************************/
57 uint8 DS1302_OutputByte(void)
58 {
59 1 uint8 i,ucDB=0x00;
60 1 CY = 0;
61 1 for(i=8; i>0; i--)
62 1 {
63 2 ucDB=ucDB>>1;
64 2 if (IO)
65 2 ucDB=ucDB|0x80;
66 2 SCLK = 1;
67 2 _NOP_();
68 2 SCLK = 0;
69 2 }
70 1 return(ucDB);
71 1 }
72
73 /********************************************************************
74 * 名称: v_W1302
75 * 说明: 先写地址,后写命令/数据
76 * 功能: 往DS1302写入数据
77 * 调用: DS1302_InputByte()
78 * 输入: ucAddr: DS1302地址, ucDa: 要写的数据
79 * 返回值: 无
80 ***********************************************************************/
81 void W_ByteToDS1302(uint8 ucAddr, uint8 ucDa)
82 {
83 1 RSTB = 0;
84 1 SCLK = 0;
85 1 RSTB = 1;
86 1 DS1302_InputByte(ucAddr); /* 地址,命令 */
87 1 DS1302_InputByte(ucDa); /* 写1Byte数据*/
88 1 SCLK = 1;
89 1 RSTB =0;
90 1 }
91
92 /********************************************************************
93 * 名称: RD_ByteFromDS1302
94 * 说明: 先写地址,后读命令/数据
95 * 功能: 读取DS1302某地址的数据
96 * 调用: DS1302_InputByte() , DS1302_OutputByte()
97 * 输入: ucAddr: DS1302地址
98 * 返回值: ucDa :读取的数据
99 ***********************************************************************/
100 uint8 RD_ByteFromDS1302(uint8 ucAddr)
101 {
102 1 uint8 ucDa;
103 1 RSTB = 0;
104 1 SCLK = 0;
105 1 RSTB = 1;
106 1 DS1302_InputByte(ucAddr); /* 地址,命令 */
107 1 ucDa = DS1302_OutputByte(); /* 读1Byte数据 */
108 1 SCLK = 1;
109 1 RSTB =0;
110 1 return(ucDa);
111 1 }
112
113 #ifdef MY_USE
/********************************************************************
*
* 名称: DS1302_REG_Burst_WR
* 说明: 先写地址,后写数据(时钟多字节方式)
C51 COMPILER V7.50 DS1302 06/10/2006 08:26:02 PAGE 3
* 功能: 往DS1302写入时钟数据(多字节方式)
* 调用: DS1302_InputByte()
* 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
* 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B
* 返回值: 无
***********************************************************************/
void DS1302_REG_Burst_WR(uint8 *pSecDa)
{
uint8 i;
W_ByteToDS1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
RSTB = 0;
SCLK = 0;
RSTB = 1;
DS1302_InputByte(0xbe); /* 0xbe:时钟多字节写命令 */
for (i=8;i>0;i--) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
{
DS1302_InputByte(*pSecDa);/* 写1Byte数据*/
pSecDa++;
}
SCLK = 1;
RSTB =0;
}
/********************************************************************
*
* 名称: DS1302_REG_Burst_RD
* 说明: 先写地址,后读命令/数据(时钟多字节方式)
* 功能: 读取DS1302时钟数据
* 调用: DS1302_InputByte() , DS1302_OutputByte()
* 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年
* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
* 返回值: ucDa :读取的数据
***********************************************************************/
void DS1302_REG_Burst_RD(uint8 *pSecDa)
{
uint8 i;
RSTB = 0;
SCLK = 0;
RSTB = 1;
DS1302_InputByte(0xbf); /* 0xbf:时钟多字节读命令 */
for (i=8; i>0; i--)
{
*pSecDa = DS1302_OutputByte(); /* 读1Byte数据 */
pSecDa++;
}
SCLK = 1;
RSTB =0;
}
/********************************************************************
*
* 名称: DS1302_RAM_Burst_WR
* 说明: 先写地址,后写数据(寄存器多字节方式)
* 功能: 往DS1302寄存器数写入数据(多字节方式)
* 调用: DS1302_InputByte()
* 输入: pReDa: 寄存器数据地址
* 返回值: 无
***********************************************************************/
void DS1302_RAM_Burst_WR(uint8 *pReDa)
{
C51 COMPILER V7.50 DS1302 06/10/2006 08:26:02 PAGE 4
uint8 i;
W_ByteToDS1302(0x8e,0x00); // 控制命令,WP=0,写操作?
RSTB = 0;
SCLK = 0;
RSTB = 1;
DS1302_InputByte(0xfe); // 0xbe:时钟多字节写命令
for (i=31;i>0;i--) //31Byte 寄存器数据
{
DS1302_InputByte(*pReDa); // 写1Byte数据
pReDa++;
}
SCLK = 1;
RSTB =0;
}
/********************************************************************
*
* 名称: DS1302_RAM_Burst_RD
* 说明: 先写地址,后读命令/数据(寄存器多字节方式)
* 功能: 读取DS1302寄存器数据
* 调用: DS1302_InputByte() , DS1302_OutputByte()
* 输入: pReDa: 寄存器数据地址
* 返回值: 无
***********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -