📄 ds1302.lst
字号:
C51 COMPILER V7.02a DS1302 12/05/2007 16:04:24 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE DS1302.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /****************************************Copyright (c)**************************************************
2 **--------------文件信息--------------------------------------------------------------------------------
3 **文 件 名: ds1302.c
4 **创 建 人:
5 **创 建 日 期:
6 **最后修改日期:
7 **描 述: 中断处理初始化及中断处理
8 ********************************************************************************************************/
9 #define _DS1302_C_
10
11 #include "Intrins.h"
12 #include "reg51.h"
13 #include "DS1302.h"
14
15 sbit T_CLK = P1^1;
16 sbit T_IO = P1^2;
17 sbit T_RST = P1^3;
18 sbit BIT7 = ACC^7;
19 sbit BIT0 = ACC^0;
20
21 unsigned int *pCurrentTime; //用于*GetTime()函数中存放读到的时间值
22 unsigned char CurrentTime[7]; //用于*GetTime()函数中存放读到的时间值
23 unsigned char i,j,k,x,m,n; //用于循环次数
24 unsigned char OutData; //用于Read1302(unsigned char ucAddress)函数中返回读取的值
25 unsigned char InitTime[7] = {0x00,0x01,0x01,0x01,0x01,0x01,0x01};
26 // 秒 分 时 日 月 星期 年
27 /****************************************************************************
28 * 名 称:Initial1302()
29 * 功 能:DS1302初始化
30 * 入口参数:无
31 * 出口参数:无
32 * 说 明:设置时间初值
33 ****************************************************************************/
34 #ifdef _INITIAL_1302_
35 void Initial1302()
36 {
37 1 unsigned char wAddress = 0x80; //秒寄存器写地址
38 1 Write1302(0x8e,0x00); //将控制寄存器值设为0,最高位WP=0允许写
39 1 for(i=0;i<7;i++) //将7个时间初值写入对应的寄存器
40 1 {
41 2 Write1302(wAddress,InitTime[i]);
42 2 wAddress += 2;
43 2 }
44 1 Write1302(0x8e,0x80); //写保护,防止干扰影响时间值
45 1 }
46 #endif
47 /****************************************************************************
48 * 名 称:InputByte(unsigned char InData)
49 * 功 能:写入一个字节数据
50 * 入口参数:unsigned char InData
51 * 出口参数:无
52 * 说 明:8位数据写入函数
53 ****************************************************************************/
54 #ifdef _INPUT_BYTE_
55 InputByte(unsigned char InByte)
C51 COMPILER V7.02a DS1302 12/05/2007 16:04:24 PAGE 2
56 {
57 1 ACC = InByte; //将要写入的数放在ACC中
58 1 for(j=8;j>0;j--) //循环8次,写入8位数据,从低位到高位
59 1 {
60 2 T_IO = BIT0; //将ACC的低位放在I/O线上
61 2 _nop_();
62 2 T_CLK = 0;
63 2 T_CLK = 1; //在时钟线的上升沿写入1位数据
64 2 ACC = ACC >> 1; //将待写入数据的高位移至ACC^0
65 2 }
66 1 }
67 #endif
68 /****************************************************************************
69 * 名 称:OutputByte()
70 * 功 能:读出一个字节数据
71 * 入口参数:无
72 * 出口参数:ACC
73 * 说 明://8位数据读出函数
74 ****************************************************************************/
75 #ifdef _OUTPUT_BYTE_
76 unsigned char OutputByte()
77 {
78 1 ACC = 0;
79 1 for(k=8;k>0;k--)
80 1 {
81 2 ACC = ACC >> 1; //先收到的是低位,所以将其往低位移
82 2 T_CLK = 1;
83 2 T_CLK = 0; //时钟下降沿读出1位数据
84 2 BIT7 = T_IO;
85 2 }
86 1 return ACC;
87 1 }
88 #endif
89 /****************************************************************************
90 * 名 称:Write1302()
91 * 功 能:将指令或数据写入对应的寄存器
92 * 入口参数:unsigned char Address,unsigned char InData
93 * 出口参数:无
94 * 说 明:
95 ****************************************************************************/
96 #ifdef _WRITE_1302_
97 void Write1302(unsigned char xAddress,unsigned char InData)
98 {
99 1 T_CLK = 0;
100 1 T_RST = 0;
101 1
102 1 T_RST = 1; //启动数据传送
103 1 _nop_();
104 1 InputByte(xAddress); //调用写入函数,先写入地址
105 1 InputByte(InData); //调用写入函数将指令或数据写入
106 1 T_RST = 0;
107 1 //T_CLK = 1;
108 1 }
109 #endif
110 /****************************************************************************
111 * 名 称:Read1302(unsigned char Address)
112 * 功 能:读出对应寄存器的内容
113 * 入口参数:unsigned char Address
114 * 出口参数:OutData
115 * 说 明:
116 ****************************************************************************/
117 #ifdef _READ_1302_
C51 COMPILER V7.02a DS1302 12/05/2007 16:04:24 PAGE 3
118 unsigned char Read1302(unsigned char dAddress)
119 {
120 1 T_CLK = 0;
121 1 T_RST = 0;
122 1 T_RST = 1;
123 1 _nop_();
124 1 InputByte(dAddress); //调用写入函数,先写入地址
125 1 OutData = OutputByte();
126 1 T_RST = 0;
127 1 // T_CLK = 1;
128 1 return OutData;
129 1 }
130 #endif
131
132 /****************************************************************************
133 * 名 称:GetTime
134 * 功 能:读取当前时间值
135 * 入口参数:无
136 * 出口参数:CurrentTime
137 * 说 明:
138 ****************************************************************************/
139 #ifdef _GET_TIME_
140 unsigned int *GetTime()
141 {
142 1 unsigned char rAddress = 0x81; //秒寄存器读地址
143 1 for(x=0;x<7;x++)
144 1 {
145 2 // *(pCurrentTime + x) = Read1302(rAddress); //读对应时钟寄存器的值
146 2 CurrentTime[x] = Read1302(rAddress);
147 2 rAddress += 2;
148 2 }
149 1 return pCurrentTime;
150 1 }
151 #endif
152
153 /****************************************************************************
154 * 名 称:Delay10ms()
155 * 功 能:延时10ms
156 * 入口参数:无
157 * 出口参数:无
158 * 说 明:1us每周期
159 ****************************************************************************/
160 #ifdef _DELAY_10_MS_
161 void Delay10ms()
162 {
163 1 for(m=20;m>0;m--)
164 1 for(n=250;n>0;n--);
165 1 }
166 #endif
*** WARNING C316 IN LINE 166 OF DS1302.c: unterminated conditionals
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 169 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 24 1
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -