📄 i2c_c51.lst
字号:
C51 COMPILER V7.20 I2C_C51 11/16/2007 15:11:15 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE I2C_C51
OBJECT MODULE PLACED IN I2c_C51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2c_C51.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2
3 /*********************************************************************************
4 I2c_C51.c
5 **********************************************************************************/
6
7 #include < reg922.h >
8 #include < intrins.h>
9 #include "I2c_C51.h"
10 #define uchar unsigned char
11 #define uint unsigned int
12 #define _Nop() _nop_(); _nop_(); _nop_()
13 bit ack ;
14
15 void Start_I2c(void);
16 void Stop_I2c(void);
17 void SendByte(uchar c);
18 uchar RcvByte(void);
19 void Ack_I2c(bit a);
20 bit ISendByte(uchar sla,uchar c);
21 bit IRcvByte(uchar sla, uchar *c);
22
23 bit I2c_bit(bit SetBit,unsigned char BitNum,unsigned char Addr)
24 {
25 1 unsigned char C_set=1;
26 1 unsigned char BitSta;
27 1 unsigned char KK=C_set<<BitNum;//=2的BitNum次方
28 1
29 1 if(IRcvByte(Addr,&C_set) == 0)
30 1 return (0);
31 1
32 1 BitSta=C_set&KK;
33 1
34 1 if(SetBit==BitSta)
35 1 return(1); //!RETURN !If current status equal to status want to be set then return
36 1
37 1 if(SetBit==1)
38 1 C_set=(C_set | KK);
39 1 else
40 1 C_set=(C_set&(255-KK));//!ZJ
41 1
42 1 return ( ISendByte(Addr,C_set) );
43 1 }
44 unsigned char Read_port_bit(unsigned char Addr,unsigned char BitNum)
45 {
46 1 unsigned char C_set=1;
47 1 unsigned char KK=C_set<<BitNum;//=2的BitNum次方
48 1
49 1 if(IRcvByte(Addr,&C_set) == 0)
50 1 return (0xaa);//无ACK返回错误码0xaa
51 1 if( (C_set&KK) != 0 )
52 1 return (1);
53 1 else
54 1 return (0);//返回实际的位状态
55 1 }
C51 COMPILER V7.20 I2C_C51 11/16/2007 15:11:15 PAGE 2
56 bit ISendByte(uchar sla,uchar c)
57 {
58 1 Start_I2c();
59 1 SendByte(sla);
60 1 if(ack==0) return (0);
61 1 SendByte(c);
62 1 if (ack==0) return (0);
63 1 Stop_I2c();
64 1 return(1);
65 1 }
66 bit IRcvByte(uchar sla, uchar *c)
67 {
68 1 Start_I2c();
69 1 SendByte(sla+1);
70 1 if(ack==0)return(0);
71 1 *c=RcvByte();
72 1 Ack_I2c(1);
73 1 Stop_I2c();
74 1 return(1);
75 1 }
76 void SendByte(uchar c)
77 {
78 1 uchar BitCnt ;
79 1 for(BitCnt=0;BitCnt<8;BitCnt++)
80 1 {
81 2 if((c<<BitCnt)&0x80)
82 2 SDA=1;
83 2 else
84 2 SDA=0;
85 2 _Nop();
86 2 SCL=1;
87 2 _Nop();
88 2 _Nop();
89 2 _Nop();
90 2 _Nop();
91 2 _Nop();
92 2 SCL=0;
93 2 }
94 1 _Nop();
95 1 _Nop();
96 1 SDA=1;
97 1 _Nop();
98 1 _Nop();
99 1 SCL=1;
100 1 _Nop();
101 1 _Nop();
102 1 _Nop();
103 1 if(SDA==1)
104 1 ack=0;
105 1 else
106 1 ack=1;
107 1 SCL=0;
108 1 _Nop();
109 1 _Nop();
110 1 }
111
112 uchar RcvByte()
113 {
114 1 uchar retc;
115 1 uchar BitCnt;
116 1 retc = 0;
117 1 SDA=1;
C51 COMPILER V7.20 I2C_C51 11/16/2007 15:11:15 PAGE 3
118 1 for(BitCnt=0;BitCnt<8;BitCnt++)
119 1 {
120 2 _Nop();
121 2 SCL=0;
122 2 _Nop();
123 2 _Nop();
124 2 _Nop();
125 2 _Nop();
126 2 _Nop();
127 2 SCL=1;
128 2 _Nop();
129 2 _Nop();
130 2 retc=retc<<1;
131 2 if(SDA==1) retc=retc+1;
132 2 _Nop();
133 2 _Nop();
134 2 }
135 1 SCL=0;
136 1 _Nop();
137 1 _Nop();
138 1 return(retc);
139 1 }
140 void Ack_I2c(bit a )
141 {
142 1 if(a==0)
143 1 SDA =0;
144 1 else
145 1 SDA =1;
146 1 _Nop();
147 1 _Nop();
148 1 _Nop();
149 1 SCL=1;
150 1 _Nop();
151 1 _Nop();
152 1 _Nop();
153 1 _Nop();
154 1 _Nop();
155 1 SCL=0;
156 1 _Nop();
157 1 _Nop();
158 1 }
159 void Start_I2c()
160 {
161 1 SDA=1 ;
162 1 _Nop();
163 1 SCL=1;
164 1 _Nop();
165 1 _Nop();
166 1 _Nop();
167 1 _Nop();
168 1 _Nop();
169 1 SDA=0 ;
170 1 _Nop();
171 1 _Nop();
172 1 _Nop();
173 1 _Nop();
174 1 _Nop();
175 1 SCL=0;
176 1 _Nop();
177 1 _Nop();
178 1 }
179 void Stop_I2c()
C51 COMPILER V7.20 I2C_C51 11/16/2007 15:11:15 PAGE 4
180 {
181 1 SDA=0;
182 1 _Nop();
183 1 SCL=1;
184 1 _Nop();
185 1 _Nop();
186 1 _Nop();
187 1 _Nop();
188 1 _Nop();
189 1 SDA=1;
190 1 _Nop();
191 1 _Nop();
192 1 _Nop();
193 1 _Nop();
194 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 471 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
IDATA SIZE = ---- ----
BIT SIZE = 1 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -