📄 maintest_20050712_6.lst
字号:
C51 COMPILER V7.06 MAINTEST_20050712_6 07/15/2005 21:33:30 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAINTEST_20050712_6
OBJECT MODULE PLACED IN maintest_20050712_6.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe maintest_20050712_6.c DB OE SMALL ROM(LARGE)
stmt level source
1 #include <intrins.h>
2 #include <ctype.h>
3 #include <absacc.h>
4 #include <reg52.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8
9
10 sbit P1_0=P1^0;
11 sbit P1_1=P1^1;
12 sbit P1_7=P1^7;
13 sbit T_CLK = P1^4; /*实时时钟时钟线引脚 */
14 sbit T_IO = P1^3; /*实时时钟数据线引脚 */
15 sbit T_RST = P1^2; /*实时时钟复位线引脚 */
16 sbit ACC0 = ACC^0;
17 sbit ACC7 = ACC^7;
18 #define uchar unsigned char
19 #define WriteIO(addr,value) XBYTE[addr]=value
20
21 uchar b[7]={0x10,0x10,0x10,0x10,0x10,0x10,0x10};
22 uchar CmdBuff[10];
23 uchar CmdPointer = 0;
24 uchar RcvCmd = 0;
25
26 //sbit P1_0 = P1^0;
27 sbit P3_5 = P3^5;
28 unsigned char count = 0;
29 unsigned long HeadL = 0;
30 unsigned char finding = 0, findhead = 0,finded = 0;
31 unsigned int cardid[11]={0,0,0,0,0,0,0,0,0,0,0};
32 unsigned int olddata1,olddata;
33 unsigned int data1 = 0;
34 unsigned char pointer = 0;
35 unsigned char counter = 0;
36
37 unsigned int show = 0,showtimecounter = 0;
38 unsigned char showflag = 1;
39 uchar h0,h1,m0,m1;
40
41
42 changdata(uchar c)
43 {
44 1 uchar d;
45 1 switch(c)
46 1 {
47 2 case 0: d=0Xfc;break;
48 2 case 1: d=0X60;break;
49 2 case 2: d=0Xda;break;
50 2 case 3: d=0Xf2;break;
51 2 case 4: d=0X66;break;
52 2 case 5: d=0Xb6;break;
53 2 case 6: d=0Xbe;break;
54 2 case 7: d=0Xe0;break;
55 2 case 8: d=0Xfe;break;
C51 COMPILER V7.06 MAINTEST_20050712_6 07/15/2005 21:33:30 PAGE 2
56 2 case 9: d=0Xf6;break;
57 2 }
58 1 return(d);
59 1
60 1 }
61
62
63
64 writetime1(uchar ucTime[],uchar flag)
65 {
66 1
67 1
68 1 h0=changdata(ucTime[1]>>4);
69 1 h1=changdata(ucTime[1]&0xF);
70 1 m0=changdata(ucTime[0]>>4);
71 1 m1=changdata(ucTime[0]&0xF);
72 1
73 1
74 1 if(flag==1)
75 1 h1=h1+flag;
76 1 }
77
78
79 writetime2( )
80 {
81 1 // WriteIO(0X6000,0X00);
82 1 //P1_7=0;
83 1 show++;
84 1 P1_7=1;
85 1 if(show == 1)
86 1 {
87 2 WriteIO(0X6000,0X00);
88 2
89 2 P1_0=0;
90 2 P1_1=0;
91 2 //WriteIO(0X6000,0X00);
92 2 WriteIO(0X6000,h0);
93 2 //for(counter=0;counter<10000;counter++);
94 2 }
95 1 else if(show == 2)
96 1 {
97 2 WriteIO(0X6000,0X00);
98 2
99 2 P1_0=1;
100 2 P1_1=0;
101 2 //WriteIO(0X6000,0X00);
102 2 WriteIO(0Xdb00,h1);
103 2 //for(counter=0;counter<10000;counter++);
104 2 }
105 1 else if(show == 3)
106 1 {
107 2 WriteIO(0X6000,0X00);
108 2
109 2 P1_0=0;
110 2 P1_1=1;
111 2 //WriteIO(0X6000,0X00);
112 2 WriteIO(0X6000,m0);
113 2 //for(counter=0;counter<10000;counter++);
114 2 }
115 1 else
116 1 {
117 2 WriteIO(0X6000,0X00);
C51 COMPILER V7.06 MAINTEST_20050712_6 07/15/2005 21:33:30 PAGE 3
118 2
119 2 P1_0=1;
120 2 P1_1=1;
121 2 //WriteIO(0X6000,0X00);
122 2 WriteIO(0Xda00,m1);
123 2 show = 0;
124 2 //for(counter=0;counter<10000;counter++);
125 2 }
126 1
127 1 //WriteIO(0X6000,0X00);
128 1 P1_7=0;
129 1
130 1 }
131
132
133 /********************************************************************
134 *
135 * 名称: v_RTInputByte
136 * 说明:
137 * 功能: 往DS1302写入1Byte数据
138 * 调用:
139 * 输入: ucDa 写入的数据
140 * 返回值: 无
141 ***********************************************************************/
142 void v_RTInputByte(uchar ucDa)
143 {
144 1 uchar i;
145 1 ACC = ucDa;
146 1 for(i=8; i>0; i--)
147 1 {
148 2 T_IO = ACC0; /*相当于汇编中的 RRC */
149 2 T_CLK = 1;
150 2 T_CLK = 0;
151 2 ACC = ACC >> 1;
152 2 }
153 1 }
154 /********************************************************************
155 *
156 * 名称: uchar uc_RTOutputByte
157 * 说明:
158 * 功能: 从DS1302读取1Byte数据
159 * 调用:
160 * 输入:
161 * 返回值: ACC
162 ***********************************************************************/
163 uchar uc_RTOutputByte(void)
164 {
165 1 uchar i;
166 1 for(i=8; i>0; i--)
167 1 {
168 2 ACC = ACC >>1; /*相当于汇编中的 RRC */
169 2 ACC7 = T_IO;
170 2 T_CLK = 1;
171 2 T_CLK = 0;
172 2 }
173 1 return(ACC);
174 1 }
175 /********************************************************************
176 *
177 * 名称: v_W1302
178 * 说明: 先写地址,后写命令/数据
179 * 功能: 往DS1302写入数据
C51 COMPILER V7.06 MAINTEST_20050712_6 07/15/2005 21:33:30 PAGE 4
180 * 调用: v_RTInputByte()
181 * 输入: ucAddr: DS1302地址, ucDa: 要写的数据
182 * 返回值: 无
183 ***********************************************************************/
184 void v_W1302(uchar ucAddr, uchar ucDa)
185 {
186 1 T_RST = 0;
187 1 T_CLK = 0;
188 1 T_RST = 1;
189 1 v_RTInputByte(ucAddr); /* 地址,命令 */
190 1 v_RTInputByte(ucDa); /* 写1Byte数据*/
191 1 T_CLK = 1;
192 1 T_RST =0;
193 1 }
194 /********************************************************************
195 *
196 * 名称: uc_R1302
197 * 说明: 先写地址,后读命令/数据
198 * 功能: 读取DS1302某地址的数据
199 * 调用: v_RTInputByte() , uc_RTOutputByte()
200 * 输入: ucAddr: DS1302地址
201 * 返回值: ucDa :读取的数据
202 ***********************************************************************/
203 uchar uc_R1302(uchar ucAddr)
204 {
205 1 uchar ucDa;
206 1 T_RST = 0;
207 1 T_CLK = 0;
208 1 T_RST = 1;
209 1 v_RTInputByte(ucAddr); /* 地址,命令 */
210 1 ucDa = uc_RTOutputByte(); /* 读1Byte数据 */
211 1 T_CLK = 1;
212 1 T_RST =0;
213 1 return(ucDa);
214 1 }
215
216 /********************************************************************
217 *
218 * 名称: v_BurstW1302T
219 * 说明: 先写地址,后写数据(时钟多字节方式)
220 * 功能: 往DS1302写入时钟数据(多字节方式)
221 * 调用: v_RTInputByte()
222 * 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
223 * 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B
224 * 返回值: 无
225 ***********************************************************************/
226 /*
227 void v_BurstW1302T(uchar *pSecDa)
228 {
229 uchar i;
230 v_W1302(0x8e,0x00); // 控制命令,WP=0,写操作?
231 T_RST = 0;
232 T_CLK = 0;
233 T_RST = 1;
234 v_RTInputByte(0xbe); // 0xbe:时钟多字节写命令
235 for (i=8;i>0;i--) //8Byte = 7Byte 时钟数据 + 1Byte 控制
236 {
237 v_RTInputByte(*pSecDa);// 写1Byte数据
238 pSecDa++;
239 }
240 T_CLK = 1;
241 T_RST =0;
C51 COMPILER V7.06 MAINTEST_20050712_6 07/15/2005 21:33:30 PAGE 5
242 }
243 */
244 /********************************************************************
245 *
246 * 名称: v_BurstR1302T
247 * 说明: 先写地址,后读命令/数据(时钟多字节方式)
248 * 功能: 读取DS1302时钟数据
249 * 调用: v_RTInputByte() , uc_RTOutputByte()
250 * 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年
251 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
252 * 返回值: ucDa :读取的数据
253 ***********************************************************************/
254 /*
255 void v_BurstR1302T(uchar *pSecDa)
256 {
257 uchar i;
258 T_RST = 0;
259 T_CLK = 0;
260 T_RST = 1;
261 v_RTInputByte(0xbf); // 0xbf:时钟多字节读命令
262 for (i=8; i>0; i--)
263 {
264 *pSecDa = uc_RTOutputByte(); // 读1Byte数据
265 pSecDa++;
266 }
267 T_CLK = 1;
268 T_RST =0;
269 }
270 */
271 /********************************************************************
272 *
273 * 名称: v_BurstW1302R
274 * 说明: 先写地址,后写数据(寄存器多字节方式)
275 * 功能: 往DS1302寄存器数写入数据(多字节方式)
276 * 调用: v_RTInputByte()
277 * 输入: pReDa: 寄存器数据地址
278 * 返回值: 无
279 ***********************************************************************/
280 /*
281 void v_BurstW1302R(uchar *pReDa)
282 {
283 uchar i;
284 v_W1302(0x8e,0x00); // 控制命令,WP=0,写操作?
285 T_RST = 0;
286 T_CLK = 0;
287 T_RST = 1;
288 v_RTInputByte(0xfe); // 0xbe:时钟多字节写命令
289 for (i=31;i>0;i--) //31Byte 寄存器数据
290 {
291 v_RTInputByte(*pReDa); // 写1Byte数据
292 pReDa++;
293 }
294 T_CLK = 1;
295 T_RST =0;
296 }
297 */
298 /********************************************************************
299 *
300 * 名称: uc_BurstR1302R
301 * 说明: 先写地址,后读命令/数据(寄存器多字节方式)
302 * 功能: 读取DS1302寄存器数据
303 * 调用: v_RTInputByte() , uc_RTOutputByte()
C51 COMPILER V7.06 MAINTEST_20050712_6 07/15/2005 21:33:30 PAGE 6
304 * 输入: pReDa: 寄存器数据地址
305 * 返回值: 无
306 ***********************************************************************/
307 /*
308 void v_BurstR1302R(uchar *pReDa)
309 {
310 uchar i;
311 T_RST = 0;
312 T_CLK = 0;
313 T_RST = 1;
314 v_RTInputByte(0xff); // 0xbf:时钟多字节读命令
315 for (i=31; i>0; i--) //31Byte 寄存器数据
316 {
317 *pReDa = uc_RTOutputByte(); // 读1Byte数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -