📄 sd2k3drv.lst
字号:
C51 COMPILER V7.09 SD2K3DRV 10/07/2005 16:00:25 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE SD2K3DRV
OBJECT MODULE PLACED IN E:\C51PRJ\RTIMELED\SD2K3DRV.OBJ
COMPILER INVOKED BY: d:\keil\c51\BIN\C51.EXE E:\C51PRJ\RTIMELED\SD2K3DRV.C DB SB OE
line level source
1 /****************************************************************************/
2 /* */
3 /* Copyright (c) 2005, 老树工作室 */
4 /* All rights reserved. */
5 /* */
6 /* http://www.saintone.net Email:hxm0902@163.com */
7 /* QQ:112431149 Tel:010-62966630 */
8 /* */
9 /****************************************************************************/
10 /****************************************************************************/
11 /* 文件名:sd2300drv.c */
12 /* 版 本:Version 1.0 */
13 /* 描 述:sd2300驱动代码 */
14 /* 作 者:spot */
15 /* 函 数: */
16 /* sd2300_wait */
17 /* sd2300_start */
18 /* sd2300_stop */
19 /* sd2300_ack */
20 /* sd2300_no_ack */
21 /* sd2300_wait_ack */
22 /* sd2300_send_byte */
23 /* sd2300_receive_byte */
24 /* sd2300_read_date */
25 /* sd2300_write_config */
26 /* */
27 /* 参考资料: http://www.whwave.com.cn */
28 /* */
29 /* 历史记录: */
30 /* spot 2005-10-05 Creat Inital version. (Version 1.0) */
31 /****************************************************************************/
32 #include <reg52.h>
33 #include <absacc.h>
34 #include <intrins.h>
35 #include "../includes/types.h"
36
37 sbit SDA = P0^6; /* sd2300数据传送位 */
38 sbit SCL = P0^7; /* sd2300时钟控制位 */
39
40 /* 函数声明 */
41 void sd2300_wait(void); /* sd2300延时 */
42 void sd2300_start(void); /* 开启sd2300总线 */
43 void sd2300_stop(void); /* 关闭sd2300总线 */
44 void sd2300_ack(void); /* 发送ACK信号 */
45 void sd2300_no_ack(void); /* 发送NOACK信号 */
46 bit sd2300_wait_ack(void); /* 等待ACK信号 */
47 void sd2300_send_byte(u_char demand); /* MCU向sd2300发送一个字节 */
48 u_char sd2300_receive_byte(void); /* MCU从sd2300接收一个字节 */
49 void sd2300_read_date(void); /* 读取sd2300时钟数据 */
50 void sd2300_write_config(void); /* 写sd2300控制寄存器 */
51
52 void display_time(u_char current_time[2]);/* 在数码管上显示当前时间 */
53
54 extern void load_number(u_char number, bit dp);
55 extern void send_latch_clock(void);
C51 COMPILER V7.09 SD2K3DRV 10/07/2005 16:00:25 PAGE 2
56 extern void clear_led(void);
57 /* 声明结束 */
58
59 u_char date[7];
60
61 /* sd2300延时 */
62 void sd2300_wait(void)
63 {
64 1 _nop_();
65 1 _nop_();
66 1 _nop_();
67 1 _nop_();
68 1 }
69
70 /* 开启sd2300总线 */
71 void sd2300_start(void)
72 {
73 1 SDA = 1;
74 1 SCL = 1;
75 1 sd2300_wait();
76 1 SDA = 0;
77 1 sd2300_wait();
78 1 SCL = 0;
79 1 }
80
81 /* 关闭sd2300总线 */
82 void sd2300_stop(void)
83 {
84 1 SDA=0;
85 1 SCL=0;
86 1 sd2300_wait();
87 1 SCL=1;
88 1 sd2300_wait();
89 1 SDA=1;
90 1 }
91
92 /* 发送ACK信号 */
93 void sd2300_ack(void)
94 {
95 1 SDA=0;
96 1 SCL=0;
97 1 sd2300_wait();
98 1 SCL=1;
99 1 sd2300_wait();
100 1 SCL=0;
101 1 }
102
103 /* 发送NOACK信号 */
104 void sd2300_no_ack(void)
105 {
106 1 SDA=1;
107 1 SCL=0;
108 1 sd2300_wait();
109 1 SCL=1;
110 1 sd2300_wait();
111 1 SCL=0;
112 1 }
113
114 /****************************************************************************/
115 /* 函数名:sd2300_wait_ack */
116 /* 功 能:等待ACK信号 */
117 /* 作 者:spot */
C51 COMPILER V7.09 SD2K3DRV 10/07/2005 16:00:25 PAGE 3
118 /* 输 入:无 */
119 /* 输 出:1-ACK 0-ERROR */
120 /* */
121 /* 历史记录: */
122 /* spot 2005-10-05 Creat Inital version. (Version 1.0) */
123 /****************************************************************************/
124 bit sd2300_wait_ack(void)
125 {
126 1 u_char errtime=255;
127 1
128 1 SCL=0;
129 1 SDA=1;
130 1 sd2300_wait();
131 1 SCL=1;
132 1 sd2300_wait();
133 1
134 1 while(SDA)
135 1 {
136 2 errtime--;
137 2 if(!errtime)
138 2 return 0;
139 2 }
140 1
141 1 SCL=0;
142 1 return 1;
143 1 }
144
145 /****************************************************************************/
146 /* 函数名:sd2300_send_byte */
147 /* 功 能:MCU向sd2300设备发送一个字节 */
148 /* 作 者:spot */
149 /* 输 入: */
150 /* demand 待发送命令或数据 */
151 /* */
152 /* 输 出:无 */
153 /* */
154 /* 历史记录: */
155 /* spot 2005-10-05 Creat Inital version. (Version 1.0) */
156 /****************************************************************************/
157 void sd2300_send_byte(u_char demand)
158 {
159 1 u_char i = 8;
160 1
161 1 while(i--)
162 1 {
163 2 SCL = 0;
164 2 _nop_();
165 2 SDA = (bit)(demand&0x80);
166 2 demand <<= 1;
167 2 sd2300_wait();
168 2 SCL = 1;
169 2 sd2300_wait();
170 2 }
171 1 SCL=0;
172 1 }
173
174 /****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -