📄 24c02读写成功.lst
字号:
C51 COMPILER V8.02 24C02读写成功 06/01/2007 22:49:53 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 24C02读写成功
OBJECT MODULE PLACED IN 24c02读写成功.OBJ
COMPILER INVOKED BY: G:\8.02\C51\BIN\C51.EXE 24c02读写成功.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <AT89X52.H>
2 #include <INTRINS.h>
3 #ifndef I2C_H
4 #define I2C_H
5 typedef unsigned char uchar; //重新定义数据类型
6 typedef unsigned int uint;
7 const uchar WR24C02 = 0xa0; //读写控制命令 //EEPROM地址+写命令
8 const uchar RD24C02 = 0xA1; //EEPROM地址+读命令
9 sbit I2C_SCL = P2^4; //I/O口定义
10 sbit I2C_SDA = P2^5;
11 bit ErrorBit; //用户变量声明 //读写错误标志 1错误 0 正确
12 uchar idata ErrorCode; //错误码
13 uchar date_txd[18]={1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8}; //发送数据存放数组
14 uchar date_rxd[18]={0}; //接收数据存放数组
15 uchar da=0;
16 //************************函数声明***************************
17 void Start(void);
18 void Stop(void);
19 void Ack(void);
20 void NoAck(void);
21 void TestAck(void);
22 void Write_I2c(uchar date);
23 uchar Read_I2c(void);
24 void DelayMs(uchar time);
25 void Write_Date(uchar StartAddress,uchar *date,uchar bytes);
26 void Read_Date(uchar StartAddress,uchar *date,uchar bytes);
27 #endif
28 unsigned char code Tab[]={0xff,0Xfd,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xff,0xdf,0xff,0xef,0xff,0x7f,0xff,0xbf
-,
29 0Xfd,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xff,0xdf,0xff,0xef,0xff,0x7f,0xff,0xbf,0xff
-};
30 unsigned char code codedisplay[]={0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7,0
-xFF,0xFF,/*"0",0*/
31 0xFF,0xFF,0xFF,0xEF,0x8F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0x83,0
-xFF,0xFF,/*"1",1*/
32 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xFB,0xFB,0xF7,0xEF,0xDF,0xBD,0x81,0
-xFF,0xFF,/*"2",2*/
33 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xFB,0xE7,0xFB,0xFD,0xFD,0xBD,0xBB,0xC7,0xFF,0xFF,/*"3",3*/
34 0xFF,0xFF,0xFF,0xFB,0xF3,0xEB,0xDB,0xDB,0xBB,0xBB,0x81,0xFB,0xFB,0xE1,0
-xFF,0xFF,/*"4",4*/
35 0xFF,0xFF,0xFF,0x81,0xBF,0xBF,0xBF,0xA7,0x9B,0xFD,0xFD,0xBD,0xBB,0xC7,0
-xFF,0xFF,/*"5",5*/
36 0xFF,0xFF,0xFF,0xE3,0xDB,0xBF,0xBF,0xA7,0x9B,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,/*"6",6*/
37 0xFF,0xFF,0xFF,0x81,0xBB,0xBB,0xF7,0xF7,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xFF,0xFF,/*"7",7*/
38 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xDB,0xE7,0xDB,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF,/*"8",8*/
39 0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xD9,0xE5,0xFD,0xFD,0xDB,0xC7,0xFF,0xFF};/*"9",9*/
40
41
42
43 unsigned char m;
44 unsigned int result,count=0;
45 void Start(void)
46 { I2C_SDA = 1; //起始条件的数据信号
47 1 _nop_();
48 1 I2C_SCL = 1; //起始条件时钟信号
C51 COMPILER V8.02 24C02读写成功 06/01/2007 22:49:53 PAGE 2
49 1 _nop_(); //信号建立时间>4.7us
50 1 _nop_();
51 1 _nop_();
52 1 _nop_();
53 1 _nop_();
54 1 I2C_SDA = 0; //起始信号
55 1 _nop_();
56 1 _nop_();
57 1 _nop_();
58 1 _nop_();
59 1 _nop_();
60 1 I2C_SCL = 0; //钳住I2C总线, 准备发送或者接受数据
61 1 _nop_();
62 1 _nop_();
63 1 }
64 void Stop(void)
65 { I2C_SDA = 0; //结束条件的数据信号
66 1 _nop_();
67 1 I2C_SCL = 1; //结束条件的时钟信号
68 1 _nop_();
69 1 _nop_();
70 1 _nop_();
71 1 _nop_();
72 1 _nop_();
73 1 I2C_SDA = 1; //结束信号
74 1 _nop_();
75 1 _nop_();
76 1 _nop_();
77 1 _nop_();
78 1 }
79 void Ack(void)
80 { I2C_SDA = 0;
81 1 _nop_();
82 1 _nop_();
83 1 I2C_SCL = 1;
84 1 _nop_();
85 1 _nop_();
86 1 _nop_();
87 1 _nop_();
88 1 _nop_();
89 1 I2C_SCL = 0;
90 1 _nop_();
91 1 _nop_();
92 1 I2C_SDA = 1;
93 1 }
94 void NoAck(void)
95 { I2C_SDA = 1;
96 1 _nop_();
97 1 _nop_();
98 1 I2C_SCL = 1;
99 1 _nop_();
100 1 _nop_();
101 1 _nop_();
102 1 _nop_();
103 1 _nop_();
104 1 I2C_SCL = 0;
105 1 _nop_();
106 1 _nop_();
107 1 }
108 void TestAck(void)
109 { I2C_SDA = 1;
110 1 _nop_();
C51 COMPILER V8.02 24C02读写成功 06/01/2007 22:49:53 PAGE 3
111 1 _nop_();
112 1 I2C_SCL = 1;
113 1 _nop_();
114 1 _nop_();
115 1 _nop_();
116 1 ErrorBit = I2C_SDA;
117 1 I2C_SCL = 0;
118 1 _nop_();
119 1 _nop_();
120 1 }
121 void Write_I2c(uchar date)
122 { uchar i;
123 1 for(i=0;i<8;i++)
124 1 {
125 2 I2C_SDA=date&0x80; //送数据到数据线上
126 2 date<<=1;
127 2 _nop_();
128 2 I2C_SCL=1; //置时钟信号为高电平,使数据有效
129 2 _nop_();
130 2 _nop_();
131 2 _nop_();
132 2 _nop_();
133 2 _nop_();
134 2 I2C_SCL=0;
135 2 _nop_();
136 2 _nop_();
137 2
138 2 }
139 1 }
140 uchar Read_I2c(void)
141 { uchar i;
142 1 uchar byte = 0;
143 1 for(i = 0; i < 8; i++)
144 1 { I2C_SCL = 0; //置时钟为低电平,准备接受数据
145 2 _nop_();
146 2 _nop_();
147 2 _nop_();
148 2 _nop_();
149 2 _nop_();
150 2 I2C_SCL = 1; //置时钟为高电平,使数据线数据有效
151 2 _nop_();
152 2 _nop_();
153 2 byte <<= 1;
154 2 byte |= I2C_SDA;
155 2 _nop_();
156 2 _nop_();
157 2 I2C_SCL = 0;
158 2 }
159 1 return(byte);
160 1 }
161 void DelayMs(uchar time)
162 { uchar i;
163 1 do
164 1 { for(i = 0; i < 125 ; i++); //*延时 8us x 125 = 1ms
165 2 }
166 1 while (time--);
167 1 }
168 void Write_Date(uchar StartAddress,uchar *date,uchar bytes)
169 { uchar i = 0;
170 1 Start();
171 1 Write_I2c(WR24C02);
172 1 TestAck();
C51 COMPILER V8.02 24C02读写成功 06/01/2007 22:49:53 PAGE 4
173 1 Write_I2c(StartAddress);
174 1 TestAck();
175 1 for(i = 0;i < bytes; i++)
176 1 {
177 2 Write_I2c(*date);
178 2 TestAck();
179 2 date++;
180 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -