📄 iic.lst
字号:
C51 COMPILER V8.02 IIC 06/21/2008 15:17: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
6 void mDelay(uint t) //延时
7 {
8 1 uchar i;
9 1 while(t--)
10 1 {
11 2 for(i=0;i<125;i++)
12 2 {
13 3 ;
14 3 }
15 2 }
16 1 }
17
18
19 void Nop(void) //空操作
20 {
21 1 _nop_();
22 1 _nop_();
23 1 _nop_();
24 1 _nop_();
25 1 }
26
27
28 /*起始条件*/
29
30 void Start(void)
31 {
32 1 Sda=1;
33 1 Scl=1;
34 1 Nop();
35 1 Sda=0;
36 1 Nop();
37 1 }
38
39
40 /*停止条件*/
41
42 void Stop(void)
43 {
44 1 Sda=0;
45 1 Scl=1;
46 1 Nop();
47 1 Sda=1;
48 1 Nop();
49 1 }
50
51 /*应答位*/
52
53 void Ack(void)
54 {
55 1 Sda=0;
C51 COMPILER V8.02 IIC 06/21/2008 15:17:32 PAGE 2
56 1 Nop();
57 1 Scl=1;
58 1 Nop();
59 1 Scl=0;
60 1 }
61
62 /*反向应答位*/
63
64 void NoAck(void)
65 {
66 1 Sda=1;
67 1 Nop();
68 1 Scl=1;
69 1 Nop();
70 1 Scl=0;
71 1 }
72
73 /*发送数据子程序,Data为要求发送的数据*/
74 void Send(uchar Data)
75 {
76 1 uchar BitCounter=8;
77 1 uchar temp;
78 1 do
79 1 {
80 2 temp=Data;
81 2 Scl=0;
82 2 Nop();
83 2 if((temp&0x80)==0x80)
84 2 Sda=1;
85 2 else
86 2 Sda=0;
87 2 Scl=1;
88 2 temp=Data<<1;
89 2 Data=temp;
90 2 BitCounter--;
91 2 }
92 1 while(BitCounter);
93 1 Scl=0;
94 1 }
95
96 /*读一字节的数据,并返回该字节值*/
97 uchar Read(void)
98 {
99 1 uchar temp=0;
100 1 uchar temp1=0;
101 1 uchar BitCounter=8;
102 1 Sda=1;
103 1 do
104 1 {
105 2 Scl=0;
106 2 Nop();
107 2 Scl=1;
108 2 Nop();
109 2 if(Sda)
110 2 temp=temp|0x01;
111 2 else
112 2 temp=temp&0xfe;
113 2 if(BitCounter-1)
114 2 {
115 3 temp1=temp<<1;
116 3 temp=temp1;
117 3 }
C51 COMPILER V8.02 IIC 06/21/2008 15:17:32 PAGE 3
118 2 BitCounter--;
119 2 }
120 1 while(BitCounter);
121 1 return(temp);
122 1 }
123
124 void WrToROM(uchar Data[],uchar Address,uchar Num)
125 {
126 1 uchar i;
127 1 uchar *PData;
128 1 PData=Data;
129 1 for(i=0;i<Num;i++)
130 1 {
131 2 Start();
132 2 Send(0xa0);
133 2 Ack();
134 2 Send(Address+i);
135 2 Ack();
136 2 Send(*(PData+i));
137 2 Ack();
138 2 Stop();
139 2 mDelay(20);
140 2 }
141 1 }
142
143
144 void RdFromROM(uchar Data[],uchar Address,uchar Num)
145 {
146 1 uchar i;
147 1 uchar *PData;
148 1 PData=Data;
149 1 for(i=0;i<Num;i++)
150 1 {
151 2 Start();
152 2 Send(0xa0);
153 2 Ack();
154 2 Send(Address+i);
155 2 Ack();
156 2 Start();
157 2 Send(0xa1);
158 2 Ack();
159 2 *(PData+i)=Read();
160 2 Scl=0;
161 2 NoAck();
162 2 Stop();
163 2 }
164 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 280 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 16
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 + -