📄 iic.lst
字号:
C51 COMPILER V8.02 IIC 10/13/2008 11:41:32 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN IIC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IIC.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include<intrins.h>
3 #include"IIC.h"
4 //#include"common.h"
5 extern uchar m_count;
6
7 void mDelay(uint t) //延时
8 {
9 1 uchar i;
10 1 while(t--)
11 1 {
12 2 for(i=0;i<125;i++)
13 2 {
14 3 ;
15 3 }
16 2 }
17 1 }
18
19
20 void Nop(void) //空操作
21 {
22 1 _nop_();
23 1 _nop_();
24 1 _nop_();
25 1 _nop_();
26 1 }
27
28
29 /*起始条件*/
30
31 void Start(void)
32 {
33 1 Sda=1;
34 1 Scl=1;
35 1 Nop();
36 1 Sda=0;
37 1 Nop();
38 1 }
39
40
41 /*停止条件*/
42
43 void Stop(void)
44 {
45 1 Sda=0;
46 1 Scl=1;
47 1 Nop();
48 1 Sda=1;
49 1 Nop();
50 1 }
51
52 /*应答位*/
53
54 void Ack(void)
55 {
C51 COMPILER V8.02 IIC 10/13/2008 11:41:32 PAGE 2
56 1 Sda=0;
57 1 Nop();
58 1 Scl=1;
59 1 Nop();
60 1 Scl=0;
61 1 }
62
63 /*反向应答位*/
64
65 void NoAck(void)
66 {
67 1 Sda=1;
68 1 Nop();
69 1 Scl=1;
70 1 Nop();
71 1 Scl=0;
72 1 }
73
74 /*发送数据子程序,Data为要求发送的数据*/
75 void Send(uchar Data)
76 {
77 1 uchar BitCounter=8;
78 1 uchar temp;
79 1 do
80 1 {
81 2 temp=Data;
82 2 Scl=0;
83 2 Nop();
84 2 if((temp&0x80)==0x80)
85 2 Sda=1;
86 2 else
87 2 Sda=0;
88 2 Scl=1;
89 2 temp=Data<<1;
90 2 Data=temp;
91 2 BitCounter--;
92 2 }
93 1 while(BitCounter);
94 1 Scl=0;
95 1 }
96
97 /*读一字节的数据,并返回该字节值*/
98 uchar Read(void)
99 {
100 1 uchar temp=0;
101 1 uchar temp1=0;
102 1 uchar BitCounter=8;
103 1 Sda=1;
104 1 do
105 1 {
106 2 Scl=0;
107 2 Nop();
108 2 Scl=1;
109 2 Nop();
110 2 if(Sda)
111 2 temp=temp|0x01;
112 2 else
113 2 temp=temp&0xfe;
114 2 if(BitCounter-1)
115 2 {
116 3 temp1=temp<<1;
117 3 temp=temp1;
C51 COMPILER V8.02 IIC 10/13/2008 11:41:32 PAGE 3
118 3 }
119 2 BitCounter--;
120 2 }
121 1 while(BitCounter);
122 1 return(temp);
123 1 }
124
125 void WrToROM(uchar Data[],uchar Address,uchar Num)
126 {
127 1 uchar i;
128 1 uchar *PData;
129 1 PData=Data;
130 1 for(i=0;i<Num;i++)
131 1 {
132 2 Start();
133 2 Send(0xa0);
134 2 Ack();
135 2 Send(Address+i);
136 2 Ack();
137 2 Send(*(PData+i));
138 2 Ack();
139 2 Stop();
140 2 mDelay(20);
141 2 }
142 1 }
143 /*
144 void WrToROMBlok(uchar Data[],uchar Address,uchar LowNum,uchar Num)
145 {
146 uchar i;
147 uchar *PData;
148 PData=Data;
149 for(i=LowNum;i<Num;i++)
150 {
151 Start();
152 Send(0xa0);
153 Ack();
154 Send(Address+i);
155 Ack();
156 Send(*(PData+i));
157 Ack();
158 Stop();
159 mDelay(20);
160 }
161 }
162
163 void RdFromROMblok(uchar Data[],uchar Address,uchar LowNum,uchar Num)
164 {
165 uchar i;
166 uchar *PData;
167 PData=Data;
168 for(i=LowNum;i<Num;i++)
169 {
170 Start();
171 Send(0xa0);
172 Ack();
173 Send(Address+i);
174 Ack();
175 Start();
176 Send(0xa1);
177 Ack();
178 *(PData+i)=Read();
179 Scl=0;
C51 COMPILER V8.02 IIC 10/13/2008 11:41:32 PAGE 4
180 NoAck();
181 Stop();
182 }
183 }
184 */
185 void RdFromROM(uchar Data[],uchar Address,uchar Num)
186 {
187 1 uchar i;
188 1 uchar *PData;
189 1 PData=Data;
190 1 for(i=0;i<Num;i++)
191 1 {
192 2 Start();
193 2 Send(0xa0);
194 2 Ack();
195 2 Send(Address+i);
196 2 Ack();
197 2 Start();
198 2 Send(0xa1);
199 2 Ack();
200 2 *(PData+i)=Read();
201 2 Scl=0;
202 2 NoAck();
203 2 Stop();
204 2 }
205 1 }
206 void init_iic(void)
207 {
208 1 uchar temp1[1];
209 1 RdFromROM(temp1,2000,1);
210 1 m_count=temp1[0];
211 1 if((m_count<0)||(m_count>6))
212 1 {
213 2 temp1[0]=0;
214 2 WrToROM(temp1,2000,1);
215 2 }
216 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 328 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 17
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 + -