?? 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 + -