📄 24c02程序段.lst
字号:
C51 COMPILER V8.02 24C02程序段 05/29/2007 16:11:27 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 void Start(void)
29 { I2C_SDA = 1; //起始条件的数据信号
30 1 _nop_();
31 1 I2C_SCL = 1; //起始条件时钟信号
32 1 _nop_(); //信号建立时间>4.7us
33 1 _nop_();
34 1 _nop_();
35 1 _nop_();
36 1 _nop_();
37 1 I2C_SDA = 0; //起始信号
38 1 _nop_();
39 1 _nop_();
40 1 _nop_();
41 1 _nop_();
42 1 _nop_();
43 1 I2C_SCL = 0; //钳住I2C总线, 准备发送或者接受数据
44 1 _nop_();
45 1 _nop_();
46 1 }
47 void Stop(void)
48 { I2C_SDA = 0; //结束条件的数据信号
49 1 _nop_();
50 1 I2C_SCL = 1; //结束条件的时钟信号
51 1 _nop_();
52 1 _nop_();
53 1 _nop_();
54 1 _nop_();
55 1 _nop_();
C51 COMPILER V8.02 24C02程序段 05/29/2007 16:11:27 PAGE 2
56 1 I2C_SDA = 1; //结束信号
57 1 _nop_();
58 1 _nop_();
59 1 _nop_();
60 1 _nop_();
61 1 }
62 void Ack(void)
63 { I2C_SDA = 0;
64 1 _nop_();
65 1 _nop_();
66 1 I2C_SCL = 1;
67 1 _nop_();
68 1 _nop_();
69 1 _nop_();
70 1 _nop_();
71 1 _nop_();
72 1 I2C_SCL = 0;
73 1 _nop_();
74 1 _nop_();
75 1 I2C_SDA = 1;
76 1 }
77 void NoAck(void)
78 { I2C_SDA = 1;
79 1 _nop_();
80 1 _nop_();
81 1 I2C_SCL = 1;
82 1 _nop_();
83 1 _nop_();
84 1 _nop_();
85 1 _nop_();
86 1 _nop_();
87 1 I2C_SCL = 0;
88 1 _nop_();
89 1 _nop_();
90 1 }
91 void TestAck(void)
92 { I2C_SDA = 1;
93 1 _nop_();
94 1 _nop_();
95 1 I2C_SCL = 1;
96 1 _nop_();
97 1 _nop_();
98 1 _nop_();
99 1 ErrorBit = I2C_SDA;
100 1 I2C_SCL = 0;
101 1 _nop_();
102 1 _nop_();
103 1 }
104 void Write_I2c(uchar date)
105 { uchar i;
106 1 for(i=0;i<8;i++)
107 1 {
108 2 I2C_SDA=date&0x80; //送数据到数据线上
109 2 date<<=1;
110 2 _nop_();
111 2 I2C_SCL=1; //置时钟信号为高电平,使数据有效
112 2 _nop_();
113 2 _nop_();
114 2 _nop_();
115 2 _nop_();
116 2 _nop_();
117 2 I2C_SCL=0;
C51 COMPILER V8.02 24C02程序段 05/29/2007 16:11:27 PAGE 3
118 2 _nop_();
119 2 _nop_();
120 2
121 2 }
122 1 }
123 uchar Read_I2c(void)
124 { uchar i;
125 1 uchar byte = 0;
126 1 for(i = 0; i < 8; i++)
127 1 { I2C_SCL = 0; //置时钟为低电平,准备接受数据
128 2 _nop_();
129 2 _nop_();
130 2 _nop_();
131 2 _nop_();
132 2 _nop_();
133 2 I2C_SCL = 1; //置时钟为高电平,使数据线数据有效
134 2 _nop_();
135 2 _nop_();
136 2 byte <<= 1;
137 2 byte |= I2C_SDA;
138 2 _nop_();
139 2 _nop_();
140 2 I2C_SCL = 0;
141 2 }
142 1 return(byte);
143 1 }
144 void DelayMs(uchar time)
145 { uchar i;
146 1 do
147 1 { for(i = 0; i < 125 ; i++); //*延时 8us x 125 = 1ms
148 2 }
149 1 while (time--);
150 1 }
151 void Write_Date(uchar StartAddress,uchar *date,uchar bytes)
152 { uchar i = 0;
153 1 Start();
154 1 Write_I2c(WR24C02);
155 1 TestAck();
156 1 Write_I2c(StartAddress);
157 1 TestAck();
158 1 for(i = 0;i < bytes; i++)
159 1 {
160 2 Write_I2c(*date);
161 2 TestAck();
162 2 date++;
163 2 }
164 1
165 1 Stop();
166 1 DelayMs(20);
167 1 }
168 void Read_Date(uchar StartAddress,uchar *date,uchar bytes)
169 { uchar i;
170 1 Start();
171 1 Write_I2c(WR24C02);
172 1 TestAck();
173 1 Write_I2c(StartAddress);
174 1 TestAck();
175 1 Start();
176 1 Write_I2c(RD24C02);
177 1 TestAck();
178 1 for (i = 0; i < bytes; i++)
179 1 {
C51 COMPILER V8.02 24C02程序段 05/29/2007 16:11:27 PAGE 4
180 2 *date= Read_I2c();
181 2
182 2 Ack();
183 2 date++;
184 2 }
185 1
186 1 NoAck();
187 1 Stop();
188 1 DelayMs(10);
189 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 276 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 39 10
IDATA SIZE = 1 ----
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 + -