?? 66.lst
字號(hào):
C51 COMPILER V8.05a 66 03/06/2012 21:09:20 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE 66
OBJECT MODULE PLACED IN 66.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 66.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include<intrins.h>
3 #include "string.h"
4
5 #define DelayTime 10 //DelayTime用于控制IIC的速度,有些器件可能并不支持高速的IIC通信
6 //可以調(diào)整DelayTime來調(diào)節(jié)IIC的速度
7
8 sbit speak=P1^4;
9 struct Time //時(shí)間結(jié)構(gòu)體,包括了秒,分,時(shí),日,周,月,年
10 {
11 unsigned char second;
12 unsigned char minute;
13 unsigned char hour;
14 unsigned char day;
15 unsigned char week;
16 unsigned char month;
17 unsigned char year;
18 };
19
20
21 extern struct Time time; //用來裝時(shí)間數(shù)據(jù),需要在外部定義
22
23 //函數(shù)聲明
24 unsigned char P8563_Read_Time();
25 unsigned char P8563_Set_Time();
26
27 void delay1(unsigned int i)
28 {
29 1 while(i--);
30 1 }
31
32 void delay(unsigned int time)
33 {
34 1 while(time--);
35 1 }
36
37 unsigned char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //數(shù)字表
38
39
40 //端口定義
41 sbit SCL=P1^0; //IIC的時(shí)鐘線
42 sbit SDA=P1^1; //IIC的數(shù)據(jù)線
43
44 //函數(shù)聲明
45 void IIC_Start();
46 void IIC_Stop();
47 void IIC_Ack();
48 void IIC_NAck();
49 unsigned char IIC_Get_Ack();
50 unsigned char IIC_Write_Byte(unsigned char dat);
51 unsigned char IIC_Read_Byte();
52
53 struct Time time; //用于裝載時(shí)間數(shù)據(jù)的結(jié)構(gòu)體型的變量time
54
55 void IIC_Start()
C51 COMPILER V8.05a 66 03/06/2012 21:09:20 PAGE 2
56 {
57 1 SDA=1;
58 1 delay(DelayTime);
59 1 SCL=1;
60 1 delay(DelayTime);
61 1 SDA=0;
62 1 delay(DelayTime);
63 1 SCL=0;
64 1 delay(DelayTime);
65 1 }
66
67 /******************************************************************
68 - 功能描述:IIC結(jié)束
69 - 隸屬模塊:IIC模塊
70 - 函數(shù)屬性:外部,供用戶使用
71 - 參數(shù)說明:無
72 - 返回說明:無
73 - 注:無
74 ******************************************************************/
75
76 void IIC_Stop()
77 {
78 1 SDA=0;
79 1 delay(DelayTime);
80 1 SCL=1;
81 1 delay(DelayTime);
82 1 SDA=1;
83 1 delay(DelayTime);
84 1 SCL=0;
85 1 delay(DelayTime);
86 1 }
87
88 /*********************************************************************
89 - 功能描述:主設(shè)備發(fā)出應(yīng)答
90 - 隸屬模塊:IIC模塊
91 - 函數(shù)屬性:外部,供用戶使用
92 - 參數(shù)說明:無
93 - 返回說明:無
94 - 注:主設(shè)備(比如單片機(jī)),從從設(shè)備(比如PCF8563、AT24C64)讀取字節(jié)后,如果
95 要繼續(xù)讀取,就要給從設(shè)備一個(gè)ACK(即所謂的“應(yīng)答”,數(shù)據(jù)位SDA為0)
96 *********************************************************************/
97
98 void IIC_Ack()
99 {
100 1 SDA=0;
101 1 delay(DelayTime);
102 1 SCL=1;
103 1 delay(DelayTime);
104 1 SCL=0;
105 1 delay(DelayTime);
106 1 }
107
108 /*********************************************************************
109 - 功能描述:主設(shè)備發(fā)出無應(yīng)答
110 - 隸屬模塊:IIC模塊
111 - 函數(shù)屬性:外部,供用戶使用
112 - 參數(shù)說明:無
113 - 返回說明:無
114 - 注:主設(shè)備(比如單片機(jī)),從從設(shè)備(比如PCF8563、AT24C64)讀取字節(jié)后,如果不再
115 進(jìn)行讀取,就要給從設(shè)備一個(gè)NACK(即所謂的“無應(yīng)答”,數(shù)據(jù)位SDA為1)
116 *********************************************************************/
117
C51 COMPILER V8.05a 66 03/06/2012 21:09:20 PAGE 3
118 void IIC_NAck()
119 {
120 1 SDA=1;
121 1 delay(DelayTime);
122 1 SCL=1;
123 1 delay(DelayTime);
124 1 SCL=0;
125 1 delay(DelayTime);
126 1 }
127
128 /*********************************************************************
129 - 功能描述:主設(shè)備檢測(cè)從設(shè)備應(yīng)答
130 - 隸屬模塊:IIC模塊
131 - 函數(shù)屬性:外部,供用戶使用
132 - 參數(shù)說明:無
133 - 返回說明:從設(shè)備的應(yīng)答值
134 - 注:主設(shè)備(比如單片機(jī)),向從設(shè)備(比如PCF8563、AT24C64)寫入字節(jié)后,要檢測(cè)從
135 設(shè)備發(fā)出的應(yīng)答,如果數(shù)據(jù)位SDA為0,說明向從設(shè)備成功寫入了字節(jié)
136 *********************************************************************/
137
138 unsigned char IIC_Get_Ack()
139 {
140 1 unsigned char Error;
141 1 SDA=1;
142 1 delay(DelayTime);
143 1 SCL=1;
144 1 delay(DelayTime);
145 1 Error=SDA;
146 1 delay(DelayTime);
147 1 SCL=0;
148 1 delay(DelayTime);
149 1 return Error;
150 1 }
151
152 /*********************************************************************
153 - 功能描述:主設(shè)備向從設(shè)備寫入一字節(jié)
154 - 隸屬模塊:IIC模塊
155 - 函數(shù)屬性:外部,供用戶使用
156 - 參數(shù)說明:dat:將要寫入的字節(jié)
157 - 返回說明:從設(shè)備的應(yīng)答值
158 - 注:向從設(shè)備寫入一個(gè)字節(jié),并返回從設(shè)備的應(yīng)答值
159 *********************************************************************/
160
161 unsigned char IIC_Write_Byte(unsigned char dat)
162 {
163 1 unsigned char i;
164 1 for(i=0;i<8;i++)
165 1 {
166 2 SDA=((dat<<i)&0x80);
167 2 SCL=1;
168 2 delay(DelayTime);
169 2 SCL=0;
170 2 delay(DelayTime);
171 2 }
172 1 return IIC_Get_Ack();
173 1 }
174
175 /*********************************************************************
176 - 功能描述:主設(shè)備從從設(shè)備讀取一字節(jié)
177 - 隸屬模塊:IIC模塊
178 - 函數(shù)屬性:外部,供用戶使用
179 - 參數(shù)說明:無
C51 COMPILER V8.05a 66 03/06/2012 21:09:20 PAGE 4
180 - 返回說明:讀到的字節(jié)
181 - 注:無
182 *********************************************************************/
183
184 unsigned char IIC_Read_Byte()
185 {
186 1 unsigned char i,rbyte=0;
187 1 SDA=1;
188 1 for(i=0;i<8;i++)
189 1 {
190 2 SCL=1;
191 2 delay(DelayTime);
192 2 if(SDA) rbyte|=(0x80>>i);
193 2 SCL=0;
194 2 delay(DelayTime);
195 2 }
196 1 return rbyte;
197 1 }
198
199 unsigned char PCF8563_Write_Bytes(unsigned char addr,unsigned char length,unsigned char *pbuf)
200 {
201 1 unsigned char i=0;
202 1 IIC_Start(); //IIC通信開始
203 1 if(IIC_Write_Byte(0xa2)) return 1; //寫PCF8563的ID與讀寫控制位,通信有錯(cuò)誤立即返回
204 1 if(IIC_Write_Byte(addr)) return 1; //寫寄存器地址
205 1 for(i=0;i<length;i++) //寫入length個(gè)字節(jié)
206 1 {
207 2 if(IIC_Write_Byte(pbuf[i])) return 1;//寫數(shù)據(jù)
208 2 }
209 1 IIC_Stop();
210 1 return 0;
211 1 }
212
213 /******************************************************************
214 - 功能描述:從地址addr的寄存器讀取多個(gè)字節(jié)
215 - 隸屬模塊:PCF8563驅(qū)動(dòng)模塊
216 - 函數(shù)屬性:內(nèi)部
217 - 參數(shù)說明:addr:寄存器地址
218 length:要讀出的字節(jié)數(shù)
219 pbuf:指向數(shù)據(jù)緩沖區(qū)的指針
220 - 返回說明:操作結(jié)果,0表示成功,1表示失敗
221 - 注:無
222 ******************************************************************/
223
224 unsigned char PCF8563_Read_Bytes(unsigned char addr,unsigned char length,unsigned char *pbuf) //從地址addr
-連續(xù)讀取length個(gè)字節(jié)到pbuf
225 {
226 1 unsigned char i=0,err=0;
227 1 IIC_Start(); //IIC通信開始
228 1 if(IIC_Write_Byte(0xa2)) return 1; //寫PCF8563的ID與讀寫控制位,通信有錯(cuò)誤立即返回
229 1 if(IIC_Write_Byte(addr)) return 1; //寫寄存器地址
230 1
231 1 IIC_Start(); //IIC通信開始
232 1 if(IIC_Write_Byte(0xa3)) return 1; //寫PCF8563的ID與讀寫控制位
233 1 for(i=0;i<length-1;i++) //寫入前l(fā)ength-1個(gè)字節(jié),并作出應(yīng)答
234 1 {
235 2 pbuf[i]=IIC_Read_Byte();
236 2 IIC_Ack();
237 2 }
238 1 pbuf[i]=IIC_Read_Byte(); //寫入最后一個(gè)字節(jié),并作出無應(yīng)答
239 1 IIC_NAck();
240 1 IIC_Stop();
C51 COMPILER V8.05a 66 03/06/2012 21:09:20 PAGE 5
241 1 return 0;
242 1 }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -