?? pcf8563-01.lst
字號:
146 1 {
147 2 SystemError = 1;
148 2 return; // 若非應答表明器件錯誤或已壞,置錯誤標志位SystemError
149 2 }
150 1 IICSendByte(CFG_add); // 發送寄存器地址
151 1 check_ACK(); // 檢查應答位
152 1 if(F0 == 1)
153 1 {
154 2 SystemError = 1;
155 2 return; // 若非應答表明器件錯誤或已壞,置錯誤標志位SystemError
156 2 }
157 1 IICSendByte(CFG_data); // 發送寄存器數據
158 1 check_ACK(); // 檢查應答位
159 1 if(F0 == 1)
160 1 {
161 2 SystemError = 1;
162 2 return; // 若非應答表明器件錯誤或已壞,置錯誤標志位SystemError
163 2 }
164 1 iic_stop(); // 全部發完則停止
165 1 }
166 //--------------------------------------------------------------------------------------------------
167 // 用戶調用子程序
168 // 函數名稱: receiveNbyte
169 // 入口參數: CFG_add寄存器地址地址
170 // 出口參數: receive_da
171 // 函數功能: 接收某個寄存器數據子程序
172 //--------------------------------------------------------------------------------------------------
173 unsigned char receive_CFGbyte(unsigned char idata CFG_add)
174 {
175 1 unsigned char idata receive_da;
176 1 iic_start();
177 1 IICSendByte(write_ADD); //器件寫地址
178 1 check_ACK();
179 1 if(F0 == 1)
C51 COMPILER V7.06 PCF8563_01 05/05/2005 00:25:59 PAGE 4
180 1 {
181 2 SystemError = 1;
182 2 return(0);
183 2 }
184 1 IICSendByte(CFG_add); //寄存器地址
185 1 check_ACK();
186 1 if(F0 == 1)
187 1 {
188 2 SystemError = 1;
189 2 return(0);
190 2 }
191 1 iic_start();
192 1 IICSendByte(read_ADD); //器件讀地址
193 1 if(F0 == 1)
194 1 {
195 2 SystemError = 1;
196 2 return(0);
197 2 }
198 1 receive_da=IICreceiveByte();
199 1 slave_NOACK(); // 收到最后一個字節后發送一個非應答位
200 1 iic_stop();
201 1 return(receive_da);
202 1 }
203 //--------------------------------------------------------------------------------------------------
204 // 用戶調用函數
205 // 函數名稱: receive_CFGNbyte
206 // 入口參數: CFG_add寄存器地址地址,n連續讀數位,* buff存儲區地址
207 // 函數功能: 接收n個寄存器數據子程序
208 //--------------------------------------------------------------------------------------------------
209 void receive_CFGNbyte(unsigned char CFG_add, unsigned char n,unsigned char * buff)
210 {
211 1 unsigned char receive_da,i=0;
212 1 iic_start();
213 1 IICSendByte(write_ADD); //器件寫地址
214 1 check_ACK();
215 1 if(F0 == 1)
216 1 {
217 2 SystemError = 1;
218 2 return;
219 2 }
220 1 IICSendByte(CFG_add); //寄存器地址
221 1 check_ACK();
222 1 if(F0 == 1)
223 1 {
224 2 SystemError = 1;
225 2 return;
226 2 }
227 1 iic_start();
228 1 IICSendByte(read_ADD); //器件讀地址
229 1 if(F0 == 1)
230 1 {
231 2 SystemError = 1;
232 2 return;
233 2 }
234 1 while(n--)
235 1 {
236 2 receive_da=IICreceiveByte();
237 2 buff[i++]=receive_da;
238 2 slave_ACK(); // 收到一個字節后發送一個應答位
239 2 }
240 1 slave_NOACK(); // 收到最后一個字節后發送一個非應答位
241 1 iic_stop();
C51 COMPILER V7.06 PCF8563_01 05/05/2005 00:25:59 PAGE 5
242 1 }
243 //--------------------------------------------------------------------------------------------------
244 // 用戶調用函數
245 // 函數名稱: P8563_Readtime
246 // 函數功能: 讀出時間信息
247 //--------------------------------------------------------------------------------------------------
248 void P8563_Readtime()
249 { unsigned char time[7];
250 1 receive_CFGNbyte(MIN,0x07,time);
251 1 g8563_Store[0]=time[0]&0x7f; /*秒*/
252 1 g8563_Store[1]=time[1]&0x7f; /*分*/
253 1 g8563_Store[2]=time[2]&0x3f; /*小時*/
254 1 g8563_Store[3]=time[4]&0x07; /*星期*/
255 1 }
256 //--------------------------------------------------------------------------------------------------
257 // 用戶調用函數
258 // 函數名稱: P8563_settime
259 // 函數功能: 寫時間修改值
260 //--------------------------------------------------------------------------------------------------
261 void P8563_settime()
262 {
263 1 unsigned char i;
264 1 for(i=2;i<=4;i++) { write_CFGbyte(i,g8563_Store[i-2]); }
265 1 write_CFGbyte(6,g8563_Store[3]);
266 1 }
267 /********************************************
268 P8563的初始化-----外部調用
269 ********************************************/
270 void P8563_init()
271 {
272 1 unsigned char i;
273 1 if((receive_CFGbyte(0x0a))!=0x8) /*檢查是否第一次啟動,是則初始化時間*/
274 1 {
275 2 for(i=0;i<=3;i++)
276 2 g8563_Store[i]=c8563_Store[i]; /*初始化時間*/
277 2 P8563_settime();
278 2 write_CFGbyte(0x0,0x00);
279 2 write_CFGbyte(0xa,0x8); /*8:00報警*/
280 2 write_CFGbyte(0x01,0x12); /*報警有效*/
281 2 write_CFGbyte(0xd,0xf0);
282 2 }
283 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 476 ----
CONSTANT SIZE = 4 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 10
IDATA SIZE = ---- 3
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 + -