📄 i2c.lst
字号:
C51 COMPILER V7.06 I2C 10/05/2007 20:01:58 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2C.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "I2C.h"
2
3 /**********************************************************************
4 * I2C_Delay()
5 * Delay
6 **********************************************************************/
7 void I2C_Delay(void)
8 {
9 1 _nop_();
10 1 _nop_();
11 1 _nop_();
12 1 _nop_();
13 1 }
14
15 /**********************************************************************
16 * void I2C_Start(void)
17 * Start the i2c device
18 **********************************************************************/
19 void I2C_Start(void)
20 {
21 1 SDA=1;SCL=1; // pull up
22 1 I2C_Delay();
23 1
24 1 SDA=0;
25 1 I2C_Delay();
26 1 SCL=0; // Start
27 1 }
28
29 /**********************************************************************
30 * I2C_Stop()
31 * Stop
32 **********************************************************************/
33 void I2C_Stop()
34 {
35 1 SDA=0;SCL=1;
36 1 I2C_Delay();
37 1
38 1 SDA=1;
39 1 I2C_Delay();
40 1 SCL=0;
41 1 }
42
43 /**********************************************************************
44 * I2C_ACK()
45 * ACK
46 **********************************************************************/
47 void I2C_SACK()
48 {
49 1 SDA=0;SCL=1;
50 1 I2C_Delay();
51 1
52 1 SCL=0;SDA=1;
53 1 }
54
55 /**********************************************************************
C51 COMPILER V7.06 I2C 10/05/2007 20:01:58 PAGE 2
56 * I2C_NACK()
57 * ACK
58 **********************************************************************/
59 void I2C_SNACK()
60 {
61 1 SDA=1;SCL=1;
62 1 I2C_Delay();
63 1
64 1 SCL=0;SDA=0;
65 1 }
66
67 /**********************************************************************
68 * I2C_CACK()
69 * Check ACK
70 **********************************************************************/
71 bit I2C_CACK()
72 {
73 1 bit bitTemp;
74 1 SDA=1; // wait input
75 1 SCL=1; // 9th pulse
76 1 I2C_Delay();
77 1 I2C_Delay();
78 1 if(SDA)
79 1 bitTemp= 1;
80 1 else
81 1 bitTemp= 0;
82 1 SCL=0;
83 1 return bitTemp;
84 1 }
85
86 /**********************************************************************
87 **********************************************************************/
88 void I2C_WriteOneByte(unsigned char tData) // first Hight Bit.
89 {
90 1 unsigned char i=8;
91 1 while(i--)
92 1 {
93 2 if(tData&0x80)
94 2 {SDA=1;SCL=1;I2C_Delay();SCL=0;SDA=0;}
95 2 else
96 2 {SDA=0;SCL=1;I2C_Delay();SCL=0;}
97 2 tData<<=1;
98 2 }
99 1 }
100
101 /**********************************************************************
102 **********************************************************************/
103 unsigned char I2C_ReadOneByte() // first Hight Bit
104 {
105 1
106 1 unsigned char i=8,tData=0;
107 1 while(i--)
108 1 {
109 2 tData<<=1;
110 2 SDA=1;SCL=1;
111 2 if(SDA)tData|=0x01;
112 2 I2C_Delay();SCL=0;
113 2 }
114 1 return tData;
115 1 }
116
117 /**********************************************************************
C51 COMPILER V7.06 I2C 10/05/2007 20:01:58 PAGE 3
118 * DeviceAddr=SLA
119 * ByteAddr=addr
120 **********************************************************************/
121 unsigned char I2C_ReadEEPROM_OneByte(unsigned char SLA,unsigned char addr)
122 {
123 1 unsigned char tdata;
124 1 bit bitACK=1;
125 1
126 1 I2C_Start();
127 1 I2C_WriteOneByte(SLA&(~(0x01))); // Write device
128 1 bitACK=I2C_CACK();
129 1 I2C_WriteOneByte(addr);
130 1 bitACK=I2C_CACK();
131 1 I2C_Start();
132 1 I2C_WriteOneByte(SLA|0x01); // read deviece
133 1 bitACK=I2C_CACK();
134 1 tdata=I2C_ReadOneByte();
135 1 I2C_Stop();
136 1 return tdata;
137 1 }
138
139 /**********************************************************************
140 **********************************************************************/
141 void I2C_WriteEEPROM_OneByte(unsigned char SLA,unsigned char addr,unsigned char tdata)
142 {
143 1 bit bitACK=1;
144 1
145 1 I2C_Start();
146 1 I2C_WriteOneByte(SLA&(~(0x01))); // write device
147 1 bitACK=I2C_CACK();
148 1 I2C_WriteOneByte(addr);
149 1 bitACK=I2C_CACK();
150 1 I2C_WriteOneByte(tdata);
151 1 bitACK=I2C_CACK();
152 1 I2C_Stop();
153 1 }
154 /**********************************************************************
155 **********************************************************************/
156 /*
157 void I2C_WriteEEPROM_OnePage(unsigned char SLA,unsigned char page,unsigned char *buff,unsigned int length)
158 {
159 ;;;;;
160 }
161 */
162 /**********************************************************************
163 **********************************************************************/
164
165 /*
166 void I2C_ReadEEPROM_OnePage(unsigned char SLA,unsigned char page,unsigned char *buff,unsigned int length)
167 {
168 ;;;;;
169 }
170 */
171
172
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 235 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.06 I2C 10/05/2007 20:01:58 PAGE 4
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -