?? ds1302.lst
字號:
C51 COMPILER V9.00 DS1302 07/01/2013 12:13:29 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ..\output\ds1302.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ..\c_file\ds1302.c BROWSE INCDIR(..\c_file;..\h_file;..\output;..\project)
-DEBUG OBJECTEXTEND PRINT(.\ds1302.lst) OBJECT(..\output\ds1302.obj)
line level source
1 /**************************************************************************************
2 * 子程序:底層程序 *
3 * 功能:時間日期數據處理; *
4 * *
5 * *
6 ***************************************************************************************/
7 # include <intrins.h>
8 # include "macroandconst.h"
9 # include "stc12c5a60s2.h"
10 # include "nokia5110.h"
11
12
13 sbit SCK = P0^2; //DS1302時鐘;
14 sbit SDA = P0^1; //DS1302數據;
15 sbit RST = P0^0;// DS1302復位;
16
17 uchar l_tmpDate[]={0,0,0,1,1,1,13};//秒分時日月周年08-05-15 12:00:00
18 uchar l_tmpdisplay[13];
19
20
21
22 code uchar Write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分時日月周年 最低位讀寫位
23
24 code uchar Read_RTC_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
25
26 /******************************************************************/
27 /* 寫一個字節 */
28 /******************************************************************/
29 void Write_Ds1302_Byte(unsigned char temp)
30 {
31 1 unsigned char i;
32 1 for (i=0;i<8;i++) //循環8次 寫入數據
33 1 {
34 2 SCK=0;
35 2 SDA=temp&0x01; //每次傳輸低字節
36 2 temp>>=1; //右移一位
37 2 SCK=1;
38 2 }
39 1 }
40 /******************************************************************/
41 /* 寫入DS1302 */
42 /******************************************************************/
43 void Write_Ds1302( unsigned char address,unsigned char dat )
44 {
45 1 RST=0;
46 1 _nop_();
47 1 SCK=0;
48 1 _nop_();
49 1 RST=1;
50 1 _nop_(); //啟動
51 1 Write_Ds1302_Byte(address); //發送地址
52 1 Write_Ds1302_Byte(dat); //發送數據
53 1 RST=0; //恢復
54 1 }
C51 COMPILER V9.00 DS1302 07/01/2013 12:13:29 PAGE 2
55 /******************************************************************/
56 /* 讀出DS1302數據 */
57 /******************************************************************/
58 unsigned char Read_Ds1302 ( uchar address )
59 {
60 1
61 1 unsigned char i,temp=0x00;
62 1
63 1 RST=0;
64 1 _nop_();
65 1 _nop_();
66 1 SCK=0;
67 1 _nop_();
68 1 _nop_();
69 1 RST=1;
70 1 _nop_();
71 1 _nop_();
72 1 Write_Ds1302_Byte(address);
73 1
74 1 for (i=0;i<8;i++) //循環8次 讀取數據
75 1 {
76 2 if(SDA)
77 2 {
78 3 temp|=0x80;
79 3 } //每次傳輸低字節
80 2 temp>>=1; //右移一位
81 2 SCK=1;
82 2 _nop_();
83 2 _nop_();
84 2 SCK=0;
85 2
86 2 }
87 1 RST=0;
88 1 _nop_(); //以下為DS1302復位的穩定時間
89 1 _nop_();
90 1 RST=0;
91 1 SCK=0;
92 1 _nop_();
93 1 _nop_();
94 1 _nop_();
95 1 _nop_();
96 1 SCK=1;
97 1 _nop_();
98 1 _nop_();
99 1 SDA=0;
100 1 _nop_();
101 1 _nop_();
102 1 SDA=1;
103 1 _nop_();
104 1 _nop_();
105 1 return (temp); //返回
106 1 }
107 /******************************************************************/
108 /* 讀時鐘數據 */
109 /******************************************************************/
110 void Read_RTC(void) //讀取 日歷
111 {
112 1 unsigned char i,*p;
113 1 p=Read_RTC_address; //地址傳遞
114 1 for(i=0;i<7;i++) //分7次讀取 秒分時日月周年
115 1 {
116 2 l_tmpDate[i]=Read_Ds1302(*p);
C51 COMPILER V9.00 DS1302 07/01/2013 12:13:29 PAGE 3
117 2 p++;
118 2 }
119 1
120 1
121 1
122 1 }
123 /******************************************************************/
124 /* 設定時鐘數據 */
125 /******************************************************************/
126 void Set_RTC(void) //設定 日歷
127 {
128 1 uchar i,*p,tmp;
129 1 for(i=0;i<7;i++)
130 1 { //BCD處理
131 2 tmp=l_tmpDate[i]/10;
132 2 l_tmpDate[i]=l_tmpDate[i]%10;
133 2 l_tmpDate[i]=l_tmpDate[i]+tmp*16;
134 2
135 2 }
136 1 Write_Ds1302(0x8E,0X00); //關閉寫保護;
137 1
138 1 p=Write_rtc_address; //傳地址
139 1 for(i=0;i<7;i++) //7次寫入 秒分時日月周年
140 1 {
141 2 Write_Ds1302(*p,l_tmpDate[i]);
142 2 p++;
143 2 }
144 1 Write_Ds1302(0x8E,0x80); //打開寫保護;
145 1 }
146
147
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 220 ----
CONSTANT SIZE = 14 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 20 ----
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 + -