?? 2402.lst
字號(hào):
C51 COMPILER V7.50 2402 05/22/2007 00:53:54 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 2402
OBJECT MODULE PLACED IN 2402.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 2402.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /************************************************************************************/
2 /* 程序名:AT24C02的讀取操作 */
3 /* */
4 /* 晶振:12.0 M CPU型號(hào):AT89S52 */
5 /* */
6 /* */
7 /* 功能描述: 對(duì)單個(gè)AT24C02進(jìn)行讀和寫(xiě)的操作 */
8 /* */
9 /* http://www.mculover.net */
10 /* http://www.mculover.net/bbs */
11 /* */
12 /* */
13 /* 湘靈電子工作室 版權(quán)所有 */
14 /* 2006-02-20 */
15 /************************************************************************************/
16
17 #include<reg51.h>
18
19 sbit Key_in = P1 ^ 0; //按鍵存入數(shù)據(jù)
20 sbit Key_out = P1 ^ 1;//按鍵將數(shù)據(jù)讀出
21
22 sbit SCL = P1 ^ 2;
23 sbit SDA = P1 ^ 3;
24
25 sbit P2_7 = P2 ^ 7;//數(shù)碼管位選
26
27 #define TRUE 1
28 #define FALSE 0
29 #define Delay1_TIME 60 /*經(jīng)實(shí)驗(yàn),不要小于50!否則可能造成時(shí)序混亂*/
30
31 unsigned char SEG_TAB[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//0-9數(shù)字
32
33 /********** Function Definition 函數(shù)定義 ************/
34 void Delay1(unsigned int t) /*延時(shí)函數(shù)*/
35 {
36 1 while(t!=0)
37 1 t--;
38 1 }
39
40 void I2C_Start(void)
41 {
42 1 /*啟動(dòng)I2C總線的函數(shù),當(dāng)SCL為高電平時(shí)使SDA產(chǎn)生一個(gè)負(fù)跳變*/
43 1 SDA=1;
44 1 SCL=1;
45 1 Delay1(Delay1_TIME);
46 1 SDA=0;
47 1 Delay1(Delay1_TIME);
48 1 SCL=0;
49 1 Delay1(Delay1_TIME);
50 1 }
51
52 void I2C_Stop(void)
53 {
54 1 /*終止I2C總線,當(dāng)SCL為高電平時(shí)使SDA產(chǎn)生一個(gè)正跳變*/
55 1 SDA=0;
C51 COMPILER V7.50 2402 05/22/2007 00:53:54 PAGE 2
56 1 SCL=1;
57 1 Delay1(Delay1_TIME);
58 1 SDA=1;
59 1 Delay1(Delay1_TIME);
60 1 SCL=0;
61 1 Delay1(Delay1_TIME);
62 1 }
63
64 void SEND_0(void) /* SEND ACK */
65 {
66 1 /*發(fā)送0,在SCL為高電平時(shí)使SDA信號(hào)為低*/
67 1 SDA=0;
68 1 SCL=1;
69 1 Delay1(Delay1_TIME);
70 1 SCL=0;
71 1 Delay1(Delay1_TIME);
72 1 }
73
74 void SEND_1(void)
75 {
76 1 /*發(fā)送1,在SCL為高電平時(shí)使SDA信號(hào)為高*/
77 1 SDA=1;
78 1 SCL=1;
79 1 Delay1(Delay1_TIME);
80 1 SCL=0;
81 1 Delay1(Delay1_TIME);
82 1 }
83
84 bit Check_Acknowledge(void)
85 {
86 1 /*發(fā)送完一個(gè)字節(jié)后檢驗(yàn)設(shè)備的應(yīng)答信號(hào)*/
87 1 SDA=1;
88 1 SCL=1;
89 1 Delay1(Delay1_TIME/2);
90 1 F0=SDA;
91 1 Delay1(Delay1_TIME/2);
92 1 SCL=0;
93 1 Delay1(Delay1_TIME);
94 1 if(F0==1)
95 1 return FALSE;
96 1 return TRUE;
97 1 }
98
99 void WriteI2CByte(unsigned char b)reentrant
100 {
101 1 /*向I2C總線寫(xiě)一個(gè)字節(jié)*/
102 1 unsigned char i;
103 1 for(i=0;i<8;i++)
104 1 if((b<<i)&0x80)
105 1 SEND_1();
106 1 else
107 1 SEND_0();
108 1 }
109
110 unsigned char ReadI2CByte(void)reentrant
111 {
112 1 /*從I2C總線讀一個(gè)字節(jié)*/
113 1 unsigned char b=0,i;
114 1 for(i=0;i<8;i++)
115 1 {
116 2 SDA=1; /*釋放總線*/
117 2 SCL=1; /*接受數(shù)據(jù)*/
C51 COMPILER V7.50 2402 05/22/2007 00:53:54 PAGE 3
118 2 Delay1(10);
119 2 F0=SDA;
120 2 Delay1(10);
121 2 SCL=0;
122 2 if(F0==1)
123 2 {
124 3 b=b<<1;
125 3 b=b|0x01;
126 3 }
127 2 else
128 2 b=b<<1;
129 2 }
130 1 return b;
131 1 }
132
133 /**********以下為讀寫(xiě)24c02的函數(shù)******************************/
134 void Write_One_Byte(unsigned char addr,unsigned char thedata)
135 {
136 1 bit acktemp=1;
137 1 /*write a byte to mem*/
138 1 I2C_Start();
139 1 WriteI2CByte(0xa0);
140 1 acktemp=Check_Acknowledge();
141 1 WriteI2CByte(addr); /*address*/
142 1 acktemp=Check_Acknowledge();
143 1 WriteI2CByte(thedata); /*thedata*/
144 1 acktemp=Check_Acknowledge();
145 1 I2C_Stop();
146 1 }
147
148 /************************************************************/
149 char Read_One_Byte(unsigned char addr)
150 {
151 1 bit acktemp=1;
152 1 unsigned char mydata;
153 1 /*read a byte from mem*/
154 1 I2C_Start();
155 1 WriteI2CByte(0xa0);
156 1 acktemp=Check_Acknowledge();
157 1 WriteI2CByte(addr);/*address*/
158 1 acktemp=Check_Acknowledge();
159 1 I2C_Start();
160 1 WriteI2CByte(0xa1);
161 1 acktemp=Check_Acknowledge();
162 1 mydata=ReadI2CByte();
163 1 acktemp=Check_Acknowledge();
164 1 return mydata;
165 1 I2C_Stop();
166 1 }
167
168 //調(diào)用方式如下:
169 //Write_One_Byte(0x10,0x04);
170 //k=Read_One_Byte(0x10);
171 /******************************************************************************/
172 void main(void)
173 {
174 1 unsigned char tmp;
175 1
176 1 P2_7 = 0;//選擇數(shù)碼管的第一位顯示
177 1
178 1 while(1)
179 1 {
C51 COMPILER V7.50 2402 05/22/2007 00:53:54 PAGE 4
180 2 if(Key_in == 0)//判斷Key_in是否被按下
181 2 {
182 3 Delay1(500);//延時(shí)消抖
183 3 if(Key_in == 0)
184 3 {
185 4 Write_One_Byte(0x04,0x07);//往2402的0X04地址寫(xiě)如數(shù)值0X07
186 4 }
187 3 }
188 2
189 2 if(Key_out == 0)
190 2 {
191 3 Delay1(500);
192 3 if(Key_out == 0)
193 3 {
194 4 tmp = Read_One_Byte(0x04);//將讀出來(lái)的數(shù)值給tmp
195 4 P0 = SEG_TAB[tmp];
196 4 }
197 3 }
198 2 }
199 1 }
200
201
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 393 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -