📄 1302.lst
字号:
C51 COMPILER V7.50 1302 11/20/2007 23:46:12 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 1302
OBJECT MODULE PLACED IN 1302.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE 1302.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*********************************************************************
2
3 公司名称:
4 模块名称:DS1302.c
5 功 能:实时时钟模块 时钟芯片型号:DS1302
6 说 明:
7 程序设计:zhaojunjie
8 设计时间:2002.03.02
9 版 本 号: 20020302
10 *********************************************************************/
11 //#include <jyh.h>
12 #include <intrins.h>
13 #include "me.h"
14 #include "LCD1602.h"
15 unsigned char code ASCII[] ="0123456789ABCDEF";
16 #define uchar unsigned char
17 unsigned int XMS;
18 //sbit T_CLK = P2^7; /*实时时钟时钟线引脚 */
19 //sbit T_IO = P1^4; /*实时时钟数据线引脚 */
20 //sbit T_RST = P1^5; /*实时时钟复位线引脚 */
21 sbit T_CLK = P1^2; /*实时时钟时钟线引脚 */
22 sbit T_IO = P1^3; /*实时时钟数据线引脚 */
23 sbit T_RST = P3^5; /*实时时钟复位线引脚 */
24
25 sbit ACC0 = ACC^0;
26 sbit ACC7 = ACC^7;
27
28 //此处定义数码管各段位置
29 #define a 0x01 //D7
30 #define b 0x02 //D6
31 #define c 0x04 //D4
32 #define d 0x08 //D3
33 #define e 0x10 //D2
34 #define f 0x20 //D0
35 #define g 0x40 //D1
36 #define dot 0x80 //D5
37 //////////////////////////////
38
39 // ~(a+b+c+d+e+f), // 共阳极
40 // (a+b+c+d+e+f), // 共阴极
41 //定义特殊符号
42 //数码管显示时用的编码
43 unsigned char code seg[] =
44 {
45 ~(a+b+c+d+e+f), // 0
46 ~(b+c), // 1
47 ~(a+b+d+e+g), // 2
48 ~(a+b+c+d+g), // 3
49 ~(b+c+f+g), // 4
50 ~(a+c+d+f+g), // 5
51 ~(a+c+d+e+f+g), // 6
52 ~(a+b+c), // 7
53 ~(a+b+c+d+e+f+g), // 8
54 ~(a+b+c+d+f+g), // 9
55 ~(a+b+c+e+f+g), //A
C51 COMPILER V7.50 1302 11/20/2007 23:46:12 PAGE 2
56 ~(c+d+e+f+g), //b
57 ~(a+d+e+f), //C
58 ~(b+c+d+e+g), //d
59 ~(a+d+e+f+g), //E
60 ~(a+e+f+g) //F
61 };
62 char dispbuf[16]={0,1,2,3,4,5};
63 char low[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
64 unsigned char stacode=0; //进入设置位数状态
65 void RTInputByte(uchar); /* 输入 1Byte */
66 uchar RTOutputByte(void); /* 输出?1Byte */
67 void W1302(uchar, uchar);
68 uchar R1302(uchar);
69 void Set1302(uchar *); /* 设置时间 */
70 void Bcd2asc(uchar,uchar *);
71 void Get1302(uchar curtime[]); /* 读取1302当前时间 */
72
73 /********************************************************************
74
75 函 数 名:RTInputByte()
76 功 能:实时时钟写入一字节
77 说 明:往DS1302写入1Byte数据 (内部函数)
78 入口参数:d 写入的数据
79 返 回 值:无
80 设 计:zhaojunjie 日 期:2002-03-19
81 修 改: 日 期:
82 ***********************************************************************/
83 void RTInputByte(uchar dat)
84 {
85 1 uchar i;
86 1 ACC = dat;
87 1 for(i=8; i>0; i--)
88 1 {
89 2 T_IO = ACC0; /*相当于汇编中的 RRC */
90 2 T_CLK = 1;
91 2 T_CLK = 0;
92 2 ACC = ACC >> 1;
93 2 }
94 1 }
95 /********************************************************************
96
97 函 数 名:RTOutputByte()
98 功 能:实时时钟读取一字节
99 说 明:从DS1302读取1Byte数据 (内部函数)
100 入口参数:无
101 返 回 值:ACC
102 设 计:zhaojunjie 日 期:2002-03-19
103 修 改: 日 期:
104 ***********************************************************************/
105 uchar RTOutputByte(void)
106 {
107 1 uchar i;
108 1 for(i=8; i>0; i--)
109 1 {
110 2 ACC = ACC >>1; /*相当于汇编中的 RRC */
111 2 ACC7 = T_IO;
112 2 T_CLK = 1;
113 2 T_CLK = 0;
114 2 }
115 1 return(ACC);
116 1 }
117 /********************************************************************
C51 COMPILER V7.50 1302 11/20/2007 23:46:12 PAGE 3
118
119 函 数 名:W1302()
120 功 能:往DS1302写入数据
121 说 明:先写地址,后写命令/数据 (内部函数)
122 调 用:RTInputByte() , RTOutputByte()
123 入口参数:ucAddr: DS1302地址, ucData: 要写的数据
124 返 回 值:无
125 设 计:zhaojunjie 日 期:2002-03-19
126 修 改: 日 期:
127 ***********************************************************************/
128 void W1302(uchar ucAddr, uchar ucDa)
129 {
130 1 T_RST = 0;
131 1 T_CLK = 0;
132 1 T_RST = 1;
133 1 RTInputByte(ucAddr); /* 地址,命令 */
134 1 RTInputByte(ucDa); /* 写1Byte数据*/
135 1 T_CLK = 1;
136 1 T_RST = 0;
137 1 }
138 /********************************************************************
139
140 函 数 名:R1302()
141 功 能:读取DS1302某地址的数据
142 说 明:先写地址,后读命令/数据 (内部函数)
143 调 用:RTInputByte() , RTOutputByte()
144 入口参数:ucAddr: DS1302地址
145 返 回 值:ucData :读取的数据
146 设 计:zhaojunjie 日 期:2002-03-19
147 修 改: 日 期:
148 ***********************************************************************/
149 uchar R1302(uchar ucAddr)
150 {
151 1 uchar ucData;
152 1 T_RST = 0;
153 1 T_CLK = 0;
154 1 T_RST = 1;
155 1 RTInputByte(ucAddr); /* 地址,命令 */
156 1 ucData = RTOutputByte(); /* 读1Byte数据 */
157 1 T_CLK = 1;
158 1 T_RST = 0;
159 1 return(ucData);
160 1 }
161 /********************************************************************
162
163 函 数 名:BurstW1302T()
164 功 能:往DS1302写入时钟数据(多字节方式)
165 说 明:先写地址,后写命令/数据
166 调 用:RTInputByte()
167 入口参数:pWClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
168 8Byte (BCD码)1B 1B 1B 1B 1B 1B 1B 1B
169 返 回 值:无
170 设 计:zhaojunjie 日 期:2002-03-19
171 修 改: 日 期:
172 ***********************************************************************/
173 void BurstW1302T(uchar *pWClock)
174 {
175 1 uchar i;
176 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
177 1 T_RST = 0;
178 1 T_CLK = 0;
179 1 T_RST = 1;
C51 COMPILER V7.50 1302 11/20/2007 23:46:12 PAGE 4
180 1 RTInputByte(0xbe); /* 0xbe:时钟多字节写命令 */
181 1 for (i = 8; i>0; i--) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
182 1 {
183 2 RTInputByte(*pWClock); /* 写1Byte数据*/
184 2 pWClock++;
185 2 }
186 1 T_CLK = 1;
187 1 T_RST = 0;
188 1 }
189 /********************************************************************
190
191 函 数 名:BurstR1302T()
192 功 能:读取DS1302时钟数据
193 说 明:先写地址/命令,后读数据(时钟多字节方式)
194 调 用:RTInputByte() , RTOutputByte()
195 入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
196 7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
197 返 回 值:无
198 设 计:zhaojunjie 日 期:2002-03-19
199 修 改: 日 期:
200 ***********************************************************************/
201 void BurstR1302T(uchar *pRClock)
202 {
203 1 uchar i;
204 1 char j;
205 1 T_RST = 0;
206 1 T_CLK = 0;
207 1 T_RST = 1;
208 1 RTInputByte(0xbf); /* 0xbf:时钟多字节读命令 */
209 1 for (i=8; i>0; i--)
210 1 {
211 2 j = RTOutputByte(); /* 读1Byte数据 */
212 2 // if (j>=0)
213 2 *pRClock =j; /* 读1Byte数据 */
214 2 pRClock++;
215 2 }
216 1 T_CLK = 1;
217 1 T_RST = 0;
218 1 }
219 /********************************************************************
220
221 函 数 名:BurstW1302R()
222 功 能:往DS1302寄存器数写入数据(多字节方式)
223 说 明:先写地址,后写数据(寄存器多字节方式)
224 调 用:RTInputByte()
225 入口参数:pWReg: 寄存器数据地址
226 返 回 值:无
227 设 计:zhaojunjie 日 期:2002-03-19
228 修 改: 日 期:
229 ***********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -