📄 clock.lst
字号:
172 1 else
173 1 SDA=1; // 发非应答信号
174 1
175 1 _Nop(); // 等待
176 1 _Nop();
177 1 _Nop();
178 1 SCL=1; // SCL时钟上跳
179 1 Some_NOP; // SCL时钟高电平最小4.7us
C51 COMPILER V7.07 CLOCK 09/14/2005 15:20:46 PAGE 4
180 1 SCL=0; // 钳住I2C总线,继续接收下一个字节
181 1 _Nop(); // 等待
182 1 _Nop();
183 1 }
184
185 //
186 // 向有子地址器件8563时钟芯片发送多字节数据函数
187 // 函数原型: bit ISendStr8563(uchar sla,uchar suba,ucahr *s,uchar no);
188 // 功能:
189 // 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
190 // 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
191 // 如果返回1表示操作成功,否则操作有误。
192 // 注意:
193 // 使用前必须已结束总线。
194 //
195 bit ISendStr8563(uchar sla,uchar suba,uchar *s,uchar no)
196 {
197 1 idata uchar i;
198 1
199 1 Start_I2c8563(); // 启动I2C总线
200 1 SendByte8563(sla&0xfe); // 发送主地址
201 1 if(ack==FALSE)
202 1 return ERROR; // 发送数据错误
203 1
204 1 SendByte8563(suba); // 发送子地址
205 1 if(ack==FALSE)
206 1 return ERROR; // 发送数据错误
207 1
208 1 for(i=0;i<no;i++)
209 1 {
210 2 SendByte8563(s[i]); // 发送一个字节
211 2 if(ack==FALSE)
212 2 return ERROR; // 发送数据错误
213 2 }
214 1 Stop_I2c8563(); // 停止I2C总线
215 1
216 1 return OK; // 成功返回
217 1 }
218
219 //
220 // 子地址器件8563时钟芯片读取多字节数据函数
221 // 函数原型: bit IRcvStr8563(uchar sla,uchar suba,ucahr *s,uchar no);
222 // 功能:
223 // 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
224 // 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
225 // 如果返回1表示操作成功,否则操作有误。
226 // 注意?
227 // 使用前必须已结束总线。
228 //
229 bit IRcvStr8563(uchar sla,uchar suba,uchar *s,uchar no)
230 {
231 1 idata uchar i;
232 1
233 1 Start_I2c8563(); // 启动8563时钟芯片I2C总线
234 1 SendByte8563(sla&0xfe); // 向8563发送主地址
235 1 if(ack==FALSE)
236 1 return ERROR; // 发送数据错误
237 1 SendByte8563(suba); // 向8563发送子地址
238 1 if(ack==FALSE)
239 1 return ERROR; // 发送数据错误
240 1
241 1 Start_I2c8563(); // 启动8563时钟芯片I2C总线
C51 COMPILER V7.07 CLOCK 09/14/2005 15:20:46 PAGE 5
242 1 SendByte8563(sla|0x01); // 向8563发送主地址
243 1 if(ack==FALSE)
244 1 return ERROR; // 发送数据错误
245 1
246 1 for(i=0;i<no-1;i++)
247 1 {
248 2 s[i]=RcvByte8563(); // 读8563一个字节
249 2 Ack_I2c8563(0); // 发送I2C应答位
250 2 }
251 1 s[i]=RcvByte8563(); // 读8563一个字节
252 1 Ack_I2c8563(1); // 发送I2C非应答位
253 1 Stop_I2c8563(); // 停止I2C总线
254 1 return OK; // 成功返回
255 1 }
256
257
258 ///////////////////////////////////////////////////////////////////////////////
259 // 读取时间
260 ///////////////////////////////////////////////////////////////////////////////
261 void read_time()
262 {
263 1 idata uchar i;
264 1
265 1 DISABLE;
266 1 IRcvStr8563(0xa2,0x02,time,0x07); // 读时间
267 1 ENABLE;
268 1
269 1 for(i=0;i<7;i++)
270 1 {
271 2 switch(i) // 时间格式化
272 2 {
273 3 case 0:time[i]=time[i]&0x7f;break;
274 3 case 1:time[i]=time[i]&0x7f;break;
275 3 case 2:time[i]=time[i]&0x3f;break;
276 3 case 3:time[i]=time[i]&0x3f;break;
277 3 case 4:time[i]=time[i]&0x07;break;
278 3 case 5:time[i]=time[i]&0x9f;break;
279 3 case 6:time[i]=time[i]&0xff;break;
280 3 default:break;
281 3 }
282 2 }
283 1
284 1 if(time[5]&0x80) // 世纪
285 1 {
286 2 cur_time[0]='1';cur_time[1]='9';
287 2 }
288 1 else
289 1 {
290 2 cur_time[0]='2';cur_time[1]='0';
291 2 }
292 1
293 1 cur_time[2]=((time[6]>>4)&0x0f)+0x30; // 年
294 1 cur_time[3]=(time[6]&0x0f)+0x30;
295 1 cur_time[4]=((time[5]>>4)&0x01)+0x30; // 月
296 1 cur_time[5]=(time[5]&0x0f)+0x30;
297 1 cur_time[6]=((time[3]>>4)&0x03)+0x30; // 日
298 1 cur_time[7]=(time[3]&0x0f)+0x30;
299 1 cur_time[8]=((time[2]>>4)&0x03)+0x30; // 时
300 1 cur_time[9]=(time[2]&0x0f)+0x30;
301 1 cur_time[10]=((time[1]>>4)&0x07)+0x30; // 分
302 1 cur_time[11]=(time[1]&0x0f)+0x30;
303 1 cur_time[12]=((time[0]>>4)&0x07)+0x30; // 秒
C51 COMPILER V7.07 CLOCK 09/14/2005 15:20:46 PAGE 6
304 1 cur_time[13]=(time[0]&0x0f)+0x30;
305 1 cur_time[14]=(time[4]&0x07)+0x30;
306 1 }
307
308 ///////////////////////////////////////////////////////////////////////////////
309 // 设置时间
310 ///////////////////////////////////////////////////////////////////////////////
311 void set_time()
312 {
313 1 time[0]=0x08;
314 1 time[1]=0x00;
315 1 time[2]=((cur_time[12]-0x30)<<4)|((cur_time[13]-0x30)&0x0f);
316 1 time[3]=((cur_time[10]-0x30)<<4)|((cur_time[11]-0x30)&0x0f);
317 1 time[4]=((cur_time[8]-0x30)<<4)|((cur_time[9]-0x30)&0x0f);
318 1 time[5]=((cur_time[6]-0x30)<<4)|((cur_time[7]-0x30)&0x0f);
319 1 time[6]=(cur_time[14]-0x30)&0x07;
320 1 time[7]=((cur_time[4]-0x30)<<4)|((cur_time[5]-0x30)&0x0f);
321 1 time[8]=((cur_time[2]-0x30)<<4)|((cur_time[3]-0x30)&0x0f);
322 1
323 1 DISABLE;
324 1 ISendStr8563(0xa2,0x00,time,0x09);
325 1 ENABLE;
326 1 }
327
328
329
330
331
332
333
334
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 918 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 12
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- 6
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -