📄 i2c.lst
字号:
C51 COMPILER V7.50 I2C 12/14/2006 10:36:32 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN .\I2C.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\source\I2C.C LARGE DEBUG OBJECTEXTEND PRINT(.\I2C.lst) OBJECT(.\I2C.obj)
line level source
1 /*-------------------------------------------------------------------------
2 I2C.C
3 Copyright 2004 Macronix International Co., Ltd.
4 -------------------------------------------------------------------------*/
5 #define _I2C_
6
7 #include "..\inc\public2.h"
8
9 #define I2C_ACK 0
10 #define I2C_NACK 1
11
12 void I2C_SendStart(void);
13 void I2C_SendStop(void);
14 void I2C_SendACK(bit);
15 void I2C_SendByte(unsigned char );
16 unsigned char I2C_GetByte(bit);
17
18 //-------------------------------------------------------------------
19 // I2C_ReleaseBus(void)
20 //-------------------------------------------------------------------
21 void I2C_Delay(unsigned char value)
22 {
23 1 while(value>0)
24 1 value--;
25 1 }
26
27 //-------------------------------------------------------------------
28 // I2C_SendStart(void)
29 //-------------------------------------------------------------------
30 void I2C_SendStart(void)
31 {
32 1 I2C_SDA = 1;
33 1 I2C_SCL = 1;
34 1 I2C_Delay(2);
35 1
36 1 I2C_SDA = 0;
37 1 I2C_Delay(2);
38 1 I2C_SCL = 0;
39 1 }
40
41 //-------------------------------------------------------------------
42 // I2C_SendStop(void)
43 //-------------------------------------------------------------------
44 void I2C_SendStop(void)
45 {
46 1 I2C_SDA = 0;
47 1 I2C_SCL = 1;
48 1 I2C_Delay(2);
49 1 I2C_SDA = 1;
50 1 I2C_Delay(2);
51 1 }
52
53 //-------------------------------------------------------------------
54 // I2C_SendByte(unsigned char val)
55 //-------------------------------------------------------------------
C51 COMPILER V7.50 I2C 12/14/2006 10:36:32 PAGE 2
56 void I2C_SendByte(unsigned char val)
57 {
58 1 unsigned char i;
59 1
60 1 for (i=0; i<8; i++)
61 1 {
62 2 I2C_SDA = (bit)(val & 0X80);
63 2 I2C_SCL = 1;
64 2 val <<= 1;
65 2 I2C_Delay(1);
66 2 I2C_SCL = 0;
67 2 }
68 1
69 1 I2C_SDA = 1;
70 1 I2C_SCL = 1;
71 1 I2C_Delay(1);
72 1 I2C_SCL = 0;
73 1 }
74
75 //-------------------------------------------------------------------
76 // I2C_GetByte(bit ACK_NACK)
77 // ACK ->I2C_SDA = 0
78 // NACK ->I2C_SDA = 1
79 //-------------------------------------------------------------------
80 unsigned char I2C_GetByte(bit ACK_NACK)
81 {
82 1 unsigned char i;
83 1 unsigned char rd_byte;
84 1
85 1 rd_byte = 0;
86 1
87 1 for(i=0; i<8; i++)
88 1 {
89 2 I2C_SCL = 1;
90 2 rd_byte <<= 1;
91 2 I2C_Delay(1);
92 2 rd_byte |= I2C_SDA;
93 2 I2C_SCL = 0;
94 2 }
95 1
96 1 I2C_SDA = ACK_NACK;
97 1 I2C_SCL = 1;
98 1 I2C_Delay(1);
99 1 I2C_SCL = 0;
100 1 I2C_SDA = 1;
101 1
102 1 return(rd_byte);
103 1 }
104
105 /**--------------------------------------------------------------------------
106 * Name void I2C_Write(unsigned char dev_addr, unsigned char start_addr,
107 * unsigned char count , unsigned char *write_buf)
108 *
109 * Description WRITE Control register BY I2C
110 *
111 * Flow Chart 1.Send Module Write ID address
112 * 2.Send Subaddress
113 * 3.Send Data(n byte)
114 *
115 * Return
116 *
117 * DATE Author Description
C51 COMPILER V7.50 I2C 12/14/2006 10:36:32 PAGE 3
118 * ===========================================================================
119 **/
120 void I2C_Write(unsigned char dev_addr, unsigned char start_addr, unsigned char count , unsigned char *writ
-e_buf)
121 {
122 1 unsigned char i;
123 1
124 1 I2C_SendStart();
125 1 I2C_SendByte(dev_addr); //Write W_ID
126 1 I2C_SendByte(start_addr); //Write Address
127 1
128 1 for(i=0;i<count;i++)
129 1 {
130 2 I2C_SendByte(*(write_buf+i)); //Write multi-data
131 2 }
132 1 I2C_SendStop(); //Stop
133 1 }
134
135 void I2C_WriteByte(unsigned char dev_addr, unsigned char start_addr, unsigned char write_byte)
136 {
137 1 I2C_SendStart();
138 1 I2C_SendByte(dev_addr); //Write W_ID
139 1 I2C_SendByte(start_addr); //Write Address
140 1
141 1 I2C_SendByte(write_byte); //Write data
142 1
143 1 I2C_SendStop(); //Stop
144 1 }
145
146 /**--------------------------------------------------------------------------
147 * Name void I2C_Read(unsigned char dev_addr, unsigned char start_addr,
148 * unsigned char count, unsigned char *DATA_BUF )
149 *
150 * Description READ Control register BY I2C
151 *
152 * Flow Chart 1.Send Module Write ID address
153 * 2.Send Subaddress
154 * 3.Send Module Read ID address
155 * 4.Read Data(n byte)
156 *
157 * Return
158 *
159 * DATE Author Description
160 * ===========================================================================
161 **/
162 void I2C_Read(unsigned char dev_addr, unsigned char start_addr, unsigned char count, unsigned char *DATA_B
-UF)
163 {
164 1 unsigned char i;
165 1
166 1 I2C_SendStart();
167 1 I2C_SendByte(dev_addr); //Write W_ID
168 1 I2C_SendByte(start_addr); //Write Address
169 1
170 1 I2C_SendStart();
171 1 I2C_SendByte(dev_addr|0X01); //Write W_ID
172 1
173 1 for(i=0;i<count-1;i++)
174 1 {
175 2 *(DATA_BUF+i)=I2C_GetByte(I2C_ACK); //Read data from device(burst mode)
176 2 }
177 1 *(DATA_BUF+i) = I2C_GetByte(I2C_NACK); //Read the last data then send NACK to STOP
C51 COMPILER V7.50 I2C 12/14/2006 10:36:32 PAGE 4
178 1
179 1 I2C_SendStop(); //Stop
180 1 }
181
182 unsigned char I2C_ReadByte(unsigned char dev_addr, unsigned char start_addr)
183 {
184 1 unsigned char rd_byte;
185 1
186 1 I2C_SendStart();
187 1 I2C_SendByte(dev_addr); //Write W_ID
188 1 I2C_SendByte(start_addr); //Write Address
189 1
190 1 I2C_SendStart();
191 1 I2C_SendByte(dev_addr|0X01); //Write W_ID
192 1
193 1 rd_byte = I2C_GetByte(I2C_NACK); //Read the last data then send NACK to STOP
194 1
195 1 I2C_SendStop(); //Stop
196 1
197 1 return(rd_byte);
198 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 337 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 12
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
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 + -