📄 sd2k3drv.lst
字号:
175 /* 函数名:sd2300_receive_byte */
176 /* 功 能:MCU从sd2300设备接收一个字节 */
177 /* 作 者:spot */
178 /* 输 入:无 */
179 /* 输 出:ddata 接收数据 */
C51 COMPILER V7.09 SD2K3DRV 10/07/2005 16:00:25 PAGE 4
180 /* */
181 /* 历史记录: */
182 /* spot 2005-10-05 Creat Inital version. (Version 1.0) */
183 /****************************************************************************/
184 u_char sd2300_receive_byte(void)
185 {
186 1 u_char i=8;
187 1 u_char ddata=0;
188 1
189 1 SDA=1;
190 1 while(i--)
191 1 {
192 2 ddata <<= 1;
193 2 SCL=0;
194 2 sd2300_wait();
195 2 SCL=1;
196 2 sd2300_wait();
197 2 if(SDA)
198 2 {
199 3 ddata |= 0x01;
200 3 }
201 2
202 2 }
203 1 SCL=0;
204 1 return ddata;
205 1 }
206
207 /****************************************************************************/
208 /* 函数名:sd2300_read_date */
209 /* 功 能:读取sd2300时钟数据 */
210 /* 作 者:spot */
211 /* 输 入:无 */
212 /* 输 出:无 */
213 /* */
214 /* 历史记录: */
215 /* spot 2005-10-05 Creat Inital version. (Version 1.0) */
216 /****************************************************************************/
217 void sd2300_read_date(void)
218 {
219 1 u_char i;
220 1
221 1 sd2300_start();
222 1 sd2300_send_byte(0x64);
223 1 sd2300_wait_ack();
224 1 sd2300_send_byte(0x00); /* 从秒开始读取数据 */
225 1 sd2300_wait_ack();
226 1
227 1 sd2300_start();
228 1 sd2300_send_byte(0x65);
229 1 sd2300_wait_ack();
230 1
231 1 for (i=0; i<7; i++)
232 1 {
233 2 date[6-i] = sd2300_receive_byte();
234 2
235 2 if (i != 6) /* 最后一个数据不应答 */
236 2 {
237 3 sd2300_ack();
238 3 }
239 2 }
240 1
241 1 sd2300_no_ack();
C51 COMPILER V7.09 SD2K3DRV 10/07/2005 16:00:25 PAGE 5
242 1 sd2300_stop();
243 1 }
244
245 /****************************************************************************/
246 /* 函数名:sd2300_write_config */
247 /* 功 能:写sd2300控制寄存器 */
248 /* 作 者:spot */
249 /* 输 入:无 */
250 /* 输 出:无 */
251 /* */
252 /* 历史记录: */
253 /* spot 2005-10-05 Creat Inital version. (Version 1.0) */
254 /****************************************************************************/
255 void sd2300_write_config(void)
256 {
257 1 sd2300_start();
258 1 sd2300_send_byte(0x64);
259 1 sd2300_wait_ack();
260 1 sd2300_send_byte(0xf0); /* 写控制寄存器2 */
261 1 sd2300_wait_ack();
262 1 sd2300_send_byte(0x20); /* 24小时制,关中断 */
263 1 sd2300_wait_ack();
264 1 sd2300_stop();
265 1 }
266
267 /* 在数码管上显示当前湿度 */
268 void display_time(u_char current_time[2])
269 {
270 1 u_char second = 0;
271 1 u_char hour = 0;
272 1
273 1 hour = ( ((current_time[0] & 0xf0) >> 4) * 10) + (current_time[0] & 0x0f);
274 1 second = ( ((current_time[1] & 0xf0) >> 4) * 10) + (current_time[1] & 0x0f);
275 1
276 1 load_number( (second %10), 0);
277 1 load_number( (second /10), 0);
278 1
279 1 load_number( (hour %10), 1);
280 1 load_number( (hour /10), 0);
281 1 send_latch_clock();
282 1 }
283
284 main()
285 {
286 1
287 1 sd2300_write_config();
288 1
289 1 while(1)
290 1 {
291 2 sd2300_read_date();
292 2 clear_led();
293 2 display_time(&date[4]);
294 2 }
295 1 }
C51 COMPILER V7.09 SD2K3DRV 10/07/2005 16:00:25 PAGE 6
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
sd2300_write_config. . . . . . . . . . PUBLIC CODE PROC 0000H -----
u_long . . . . . . . . . . . . . . . . TYPEDEF ----- U_LONG ----- 4
u_short. . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2
send_latch_clock . . . . . . . . . . . EXTERN CODE PROC ----- -----
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
IP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1
sd2300_read_date . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0004H 1
date . . . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0000H 7
clear_led. . . . . . . . . . . . . . . EXTERN CODE PROC ----- -----
_sd2300_send_byte. . . . . . . . . . . PUBLIC CODE PROC 0000H -----
demand . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
u_int. . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
sd2300_ack . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
sd2300_start . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
sd2300_wait. . . . . . . . . . . . . . PUBLIC CODE PROC 0009H -----
sd2300_wait_ack. . . . . . . . . . . . PUBLIC CODE PROC 0008H -----
errtime. . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
sd2300_stop. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
SDA. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0086H 1
SCL. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0087H 1
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
_display_time. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
current_time . . . . . . . . . . . . * REG * DATA PTR 0001H 3
second . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
hour . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
sd2300_no_ack. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
_load_number . . . . . . . . . . . . . EXTERN CODE PROC ----- -----
u_char . . . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1
PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1
sd2300_receive_byte. . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
ddata. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 331 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -