📄 i2c.lst
字号:
C51 COMPILER V7.02b I2C 05/24/2006 17:59:20 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN .\I2C.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\source\I2C.C LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\I2C.lst) OBJECT(.\I
-2C.obj)
stmt level source
1 /*-------------------------------------------------------------------------
2 I2C.C
3 (I2C+I2L)
4 Copyright 2004 Macronix International Co., Ltd.
5 -------------------------------------------------------------------------*/
6 #define _I2C_
7
8 #include "..\inc\public2.h"
9
10 #define I2C_ACK 0
11 #define I2C_NACK 1
12 //-------------------------------------------------------------------
13 // I2C_ReleaseBus(void)
14 //-------------------------------------------------------------------
15 void I2C_ReleaseBus(void)
16 {
17 1 I2C_SCL = 1;
18 1 I2C_SDA = 1;
19 1 }
20 //-------------------------------------------------------------------
21 // I2C_SendStart(void)
22 //-------------------------------------------------------------------
23 void I2C_SendStart(void)
24 {
25 1 I2C_SDA = 1;
26 1 I2C_SCL = 1;
27 1 DELAY(2);
28 1 I2C_SDA = 0;
29 1 DELAY(2);
30 1 I2C_SCL = 0;
31 1 }
32
33 //-------------------------------------------------------------------
34 // I2C_SendStop(void)
35 //-------------------------------------------------------------------
36 void I2C_SendStop(void)
37 {
38 1 I2C_SDA = 0;
39 1 I2C_SCL = 1;
40 1 DELAY(2);
41 1 I2C_SDA = 1;
42 1 DELAY(2);
43 1 I2C_SCL = 1;
44 1 }
45
46 //-------------------------------------------------------------------
47 // I2C_GetACK(void)
48 //-------------------------------------------------------------------
49 bit I2C_GetACK(void)
50 {
51 1 bit value;
52 1 I2C_SDA = 1;
53 1 I2C_SCL = 1;
54 1 DELAY(5);
C51 COMPILER V7.02b I2C 05/24/2006 17:59:20 PAGE 2
55 1 value = I2C_SDA;
56 1 I2C_SCL = 0;
57 1 DELAY(2);
58 1
59 1 return (!value);
60 1 }
61
62 // if success return 1, fail return 0
63 //-------------------------------------------------------------------
64 // I2C_SendByte(BYTE val)
65 //-------------------------------------------------------------------
66 bit I2C_SendByte(BYTE val)
67 {
68 1 BYTE i;
69 1
70 1 for (i=0; i<8; i++)
71 1 {
72 2 if (val & 0x80) I2C_SDA = 1;
73 2 else I2C_SDA = 0;
74 2
75 2 I2C_SCL = 1;
76 2 DELAY(2);
77 2 I2C_SCL = 0;
78 2 DELAY(2);
79 2
80 2 val <<= 1;
81 2 }
82 1
83 1 return(I2C_GetACK());
84 1 }
85
86 //-------------------------------------------------------------------
87 // I2C_GetByte(bit ACK_NACK)
88 // ACK ->I2C_SDA = 0
89 // NACK ->I2C_SDA = 1
90 //-------------------------------------------------------------------
91 BYTE I2C_GetByte(bit ACK_NACK)
92 {
93 1 BYTE i;
94 1 BYTE temp;
95 1
96 1 temp = 0;
97 1
98 1 for(i=0; i<8; i++)
99 1 {
100 2 temp <<= 1;
101 2 I2C_SCL = 1;
102 2 DELAY(2);
103 2 temp |= I2C_SDA;
104 2 I2C_SCL = 0;
105 2 DELAY(2);
106 2 }
107 1
108 1 I2C_SDA = ACK_NACK;
109 1 I2C_SCL = 1;
110 1 DELAY(2);
111 1 I2C_SCL = 0;
112 1 I2C_SDA = 1;
113 1 DELAY(2);
114 1 return(temp);
115 1 }
116
C51 COMPILER V7.02b I2C 05/24/2006 17:59:20 PAGE 3
117 //-------------------------------------------------------------------
118 // I2C_SendByteWithStart(BYTE val)
119 //-------------------------------------------------------------------
120 bit I2C_SendByteWithStart(BYTE val)
121 {
122 1 bit retVal;
123 1
124 1 I2C_SendStart();
125 1 retVal = I2C_SendByte(val);
126 1 //delay(1); // delay 1ms
127 1 return(retVal);
128 1 }
129
130 //-------------------------------------------------------------------
131 //Description: DELAY(int)
132 //-------------------------------------------------------------------
133 void DELAY(unsigned int value)
134 {
135 1 while(value>0)
136 1 value--;
137 1 }
138
139 /**--------------------------------------------------------------------------
140 * Name void I2L_Write(BYTE addr, BYTE i2ldata);
141 *
142 * Description I2L write a byte data to 15xx
143 *
144 * Flow Chart
145 *
146 * Return None
147 *
148 * DATE Author Description
149 * ===========================================================================
150 * 2004-07-09 K.M. Ho This is first time implement
151 **/
152 /*
153 void I2L_Write(BYTE addr, BYTE i2ldata)
154 {
155 BYTE i;
156
157 I2L_SCS = 1; //Init
158 I2L_SCL = 1;
159 I2L_SDQ = 1;
160
161 I2L_SCS = 0; //Serial Interface Chip Select
162
163 I2L_SDQ = 0; //Write command
164
165 I2L_SCL = 0;
166 DELAY(2);
167 I2L_SCL = 1; //rising edge latch data
168
169 for (i=0; i<8; i++) //move out 8 bit addr to 15xx
170 {
171 I2L_SDQ = addr & 0x01; //move out the LSB
172 I2L_SCL = 0;
173 addr >>= 1; //shift bit to LSB
174 I2L_SCL = 1;
175 }
176
177 for (i=0; i<8; i++) //move out 8 bit data to 15xx
178 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -