📄 i2c.lst
字号:
C51 COMPILER V8.02 I2C 09/22/2008 11:37:52 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN .\output\bin\i2c.obj
COMPILER INVOKED BY: C:\Keil802\C51\BIN\C51.EXE eeprom\i2c.c LARGE BROWSE INCDIR(audio\;eeprom\;extendUART\;flash\;gps\;
-inter\;key\;mcu\;menu\;usb\;gprs\;main\;1wire\) DEBUG OBJECTEXTEND PRINT(.\output\i2c.lst) OBJECT(.\output\bin\i2c.obj)
line level source
1 #include "i2c.h"
2 #include <intrins.h>
3 #include "w77e532.h"
4 /*SDA P4_2 SCL P4_3 WP P4_0*/
5 /*#define SDA P1_0
6 #define SCL P1_1
7 extern Uchar volatile xdata D12_Y5;
8 extern idata Uchar D18CS;//代替WP的作用*/
9 #define SDA_ON P4|=0x4//SDA=1
10 #define SDA_OFF P4&=0xb//SDA=0
11 //#define IIC_CLOCK_HIGH SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
-();SCL=1;_nop_();_nop_()
12 //#define IIC_CLOCK_LOW SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();SCL=0
-;_nop_();_nop_()
13 #define IIC_CLOCK_HIGH P4&=0x7;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
-();P4|=0x8;_nop_();_nop_()
14 #define IIC_CLOCK_LOW P4|=0x8;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();P4&=0
-x7;_nop_();_nop_()
15
16 unsigned char sda_equalzero()
17 {
18 1 char P4_reg;
19 1 P4_reg = P4;
20 1 P4_reg &= 0x4;
21 1 if (0 == P4_reg)
22 1 return 1;
23 1 else
24 1 return 0;
25 1 }
26
27 void i2c_wp(char flag)
28 {
29 1 if( flag )
30 1 //WP = 1;
31 1 P4 |= 0x1;
32 1 else
33 1 //WP = 0;
34 1 P4 &= 0xe;
35 1 }
36
37 /***************i2c起始位************************/
38 void i2c_start(void)
39 {
40 1 IIC_CLOCK_HIGH;
41 1 //SDA=1;
42 1 SDA_ON;
43 1 _nop_();
44 1 _nop_();
45 1 _nop_();
46 1 //SDA=0;
47 1 SDA_OFF;
48 1 _nop_();
49 1 _nop_();
50 1 IIC_CLOCK_LOW;
C51 COMPILER V8.02 I2C 09/22/2008 11:37:52 PAGE 2
51 1 }
52
53 /***************i2c停止位********************/
54 void i2c_stop(void)
55 {
56 1 //SDA=0;
57 1 SDA_OFF;
58 1 _nop_();
59 1 _nop_();
60 1 IIC_CLOCK_HIGH;
61 1 _nop_();
62 1 _nop_();
63 1 _nop_();
64 1 _nop_();
65 1 _nop_();
66 1 _nop_();
67 1 _nop_();
68 1 _nop_();
69 1 _nop_();
70 1 _nop_();
71 1 //SDA=1;
72 1 SDA_ON;
73 1 }
74
75 /***************i2c等应答函数******************/
76
77 char i2c_get_ack(void)
78 {
79 1 //SDA=1;
80 1 SDA_ON;
81 1 _nop_();
82 1 _nop_();
83 1 IIC_CLOCK_HIGH;
84 1
85 1 /* if( SDA == 0 )
86 1 {
87 1 IIC_CLOCK_LOW;
88 1 return OK;
89 1 }
90 1 else
91 1 {
92 1 IIC_CLOCK_LOW;
93 1 return ERROR;
94 1 } */
95 1 if( 1 == sda_equalzero() )
96 1 {
97 2 IIC_CLOCK_LOW;
98 2 return OK;
99 2 }
100 1 else
101 1 {
102 2 IIC_CLOCK_LOW;
103 2 return ERROR;
104 2 }
105 1 }
106
107 /*主机发应答,连续读数据用*/
108 void i2c_send_ack(void)
109 {
110 1 // SDA=0;
111 1 SDA_OFF;
112 1 _nop_();
C51 COMPILER V8.02 I2C 09/22/2008 11:37:52 PAGE 3
113 1 IIC_CLOCK_LOW;
114 1
115 1 // SDA=1; /*释放总线给24C16*/
116 1 SDA_ON;
117 1 }
118
119 /*无需应答位 noack*/
120 void i2c_send_no_ack(void)
121 {
122 1 // SDA=1;
123 1 SDA_ON;
124 1 _nop_();
125 1 IIC_CLOCK_LOW;
126 1 }
127 /***************写i2c******************/
128 void i2c_writeByte(unsigned char dat)
129 {
130 1 char i;
131 1 unsigned char temp;
132 1
133 1 temp = dat;
134 1 for(i=0;i<8;i++)
135 1 {
136 2 if(temp & 0x80)
137 2 {
138 3 // SDA=1;
139 3 SDA_ON;
140 3 }
141 2 else
142 2 {
143 3 // SDA=0;
144 3 SDA_OFF;
145 3 }
146 2
147 2 temp <<= 1;
148 2 IIC_CLOCK_LOW;
149 2 }
150 1 }
151
152 /***************读i2c************************/
153 char i2c_readByte(void)
154 {
155 1 unsigned char dat;
156 1 unsigned char i;
157 1
158 1 i = 8;
159 1 dat = 0x00;
160 1 while(i--)
161 1 {
162 2 dat <<= 1;
163 2 IIC_CLOCK_HIGH;
164 2 // if(SDA)
165 2 if (0 == sda_equalzero())
166 2 dat |= 0x01;
167 2 }
168 1 IIC_CLOCK_LOW;
169 1
170 1 return dat;
171 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.02 I2C 09/22/2008 11:37:52 PAGE 4
CODE SIZE = 319 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -