📄 i2c.lst
字号:
C51 COMPILER V8.02 I2C 10/17/2006 16:52:42 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2C.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 ###############################################################################
3 Wiznet.
4 5F Simmtech Bldg., 228-3, Nonhyun-dong, Kangnam-gu,
5 Seoul, Korea
6
7 (c) Copyright 2002, Wiznet, Seoul, Korea
8
9 File Name : I2C.C
10
11 Version : 1.0
12
13 Created : 2002/01/29
14
15 Description : I2C Interface definition
16 It's implemented using 8051MCU Port 1 and defined with SDA(P1.3) and SCL(P1.4)
17 Function Delay() depends on the performance of MCU.
18
19 Modified History
20 Modified : 2002/04/13
21
22
23 ###############################################################################
24 */
25
26
27 /*
28 ###############################################################################
29 Include Part
30 ###############################################################################
31 */
32 #include <reg51.h>
33 #include "i2c.h"
34
35
36 /*
37 ###############################################################################
38 Function Implementation Part
39 ###############################################################################
40 */
41
42 /*
43 Description : START Bit-Pattern Generate
44 ----|________ SDA
45 -------|_____ SCL
46 Argument :
47 Return Value :
48 Note :
49 */
50 void GEN_START()
51 {
52 1 P1 |= SDA_H;Delay(1); //SDA HIGH
53 1 P1 |= SCL_H;Delay(1); //SCL HIGH
54 1 P1 &= SDA_L;Delay(1); //SDA LOW
55 1 P1 &= SCL_L;Delay(1); //SCL LOW
C51 COMPILER V8.02 I2C 10/17/2006 16:52:42 PAGE 2
56 1 }
57
58 /*
59 Description : END Bit-Pattern Generate
60 ______|----- SDA
61 ___|-------- SCL
62 Argument :
63 Return Value :
64 Note :
65 */
66 void GEN_STOP()
67 {
68 1 P1 &= SCL_L;Delay(1); // SCL LOW
69 1 P1 &= SDA_L;Delay(1); // SDA LOW
70 1 P1 |= SCL_H;Delay(1); // SCL HIGH;
71 1 P1 |= SDA_H;Delay(1); // SDA HIGH;
72 1 }
73
74
75 /*
76 Description : Send ACK or NACK Signal
77 Argument : ack - ACK or NACK (INPUT)
78 Return Value :
79 Note : It's sent ACK and NACK by MCU.
80 */
81 void SEND_ACK(char ack)
82 {
83 1 P1 &= SCL_L;Delay(1); // Send ACK(LOW) or NACK(HIGH) and Generate SCL clock.
84 1 if(ack == ACK) // If ACK?
85 1 P1 &= SDA_L;
86 1 else // If NACK?
87 1 P1 |= SDA_H;
88 1 Delay(2);
89 1 P1 |= SCL_H;Delay(1); // SCL Clock
90 1 P1 &= SCL_L;Delay(1);
91 1 }
92
93 /*
94 Description : Wait ACK or NACK Siganl
95 Argument :
96 Return Value : ACK or NACK
97 Note : It's sent ACK or NACK by Device interfaced using i2C with MCU.That is, MCU wait for ACK or
- NACK signal.
98 */
99 char WAIT_ACK()
100 {
101 1 char ack; // Wait for ACK or NACK
102 1 P1 &= SCL_L;Delay(1);
103 1 P1 |= SCL_H;Delay(1);
104 1 if(P1 & SDA_H) // If Signal is HIGH,then NACK, else if LOW,then ACK
105 1 ack = NACK;
106 1 else
107 1 ack = ACK;
108 1 P1 &= SCL_L;Delay(1);
109 1 return ack;
110 1 }
111
112
113
114 /*
115 Description : Write Byte via I2C
116 Argument : b - To be writted a byte value
C51 COMPILER V8.02 I2C 10/17/2006 16:52:42 PAGE 3
117 Return Value :
118 Note :
119 */
120 void WriteByte(char b)
121 {
122 1 char i =0;
123 1 for( ; i < 8 ; i++) // Send data by SCL from MSB to LSB by SDA on I2C BUS.
124 1 {
125 2 P1 &= SCL_L;Delay(1); //SCL LOW
126 2
127 2 /* Read by shift each 1 Bit from MSB in Data 'b'. */
128 2 if( ((b << i) & 0x80) ) // If '1'-> 'High' to SDA
129 2 P1 |= SDA_H;
130 2 else // If '0'-> 'Low' to SDA
131 2 P1 &= SDA_L;
132 2 Delay(1);
133 2 P1 |= SCL_H;Delay(1); //SCL HIGH
134 2 }
135 1 P1 &= SCL_L;Delay(1); // SCL LOW
136 1 }
137
138
139 /*
140 Description : Read a Byte via I2C, Read data by SCL from MSB to LSB by SDA on I2C BUS..
141 Argument :
142 Return Value : Read Byte Value
143 Note :
144 */
145 char ReadByte()
146 {
147 1 char ret;
148 1 char i = 0;
149 1 ret = 0;
150 1 P1 &= SCL_L;Delay(1); // SCL LOW
151 1 for(; i<8 ; i++)
152 1 {
153 2 P1 |= SCL_H;Delay(1); // SCL HIGH
154 2 ret = (ret << 1);
155 2 if(P1 & SDA_H) ret++;
156 2 P1 &= SCL_L;Delay(1); // SCL LOW
157 2 }
158 1 return ret;
159 1 }
160
161 /*
162 Description : Delay Function
163 Argument : i - about i*1ms Delay At 24MHz (INPUT)
164 Return Value : Read Byte Value
165 Note : Delay is not from exact measuring but arbitrarily value.This value depends on system.
166 */
167 void Delay(int i)
168 {
169 1 int j;
170 1 for(; i != 0 ; i--)
171 1 for( j = 0;j < 512;j++);
172 1 }
173
174
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 277 ----
C51 COMPILER V8.02 I2C 10/17/2006 16:52:42 PAGE 4
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -