📄 test.lst
字号:
134 1 CY=SDA; /* 因为返回值总是放在CY中的 */
135 1 SCL=0;
136 1 return(CY);
137 1 }
138 /* * * * *对IIC总线产生应答 * * * * */
139 void Ack(void)
140 {
141 1 SDA=0; /* EEPROM通过在收到每个地址或数据之后, */
142 1 SCL=1; /* 置SDA低电平的方式确认表示收到读SDA口状态 */
143 1 _nop_(); _nop_(); _nop_(); _nop_();
144 1 SCL=0;
145 1 _nop_();
146 1 SDA=1;
147 1 }
148 /* * * * * * * * * 不对IIC总线产生应答 * * * * */
149 void NoAck(void)
150 {
151 1 SDA=1;
152 1 SCL=1;
153 1 _nop_(); _nop_(); _nop_(); _nop_();
154 1 SCL=0;
155 1 }
156 /* * * * * * * * * 向IIC总线写数据 * * * * */
157 void Send(unsigned char sendbyte)
158 {
159 1 unsigned char data j=8;
160 1 for(;j>0;j--)
161 1 {
162 2 SCL=0;
163 2 sendbyte <<= 1; /* 使CY=sendbyte^7; */
164 2 SDA=CY; /* CY 进位标志位 */
165 2 SCL=1;
166 2 }
167 1 SCL=0;
168 1 }
169 /* * * * * * * * * 从IIC总线上读数据子程序 * * * * */
170 unsigned char Receive(void)
171 {
172 1 register receivebyte,i=8;
173 1 SCL=0;
174 1 while(i--)
175 1 {
176 2 SCL=1;
177 2 receivebyte = (receivebyte <<1 ) | SDA;
178 2 SCL=0;
179 2 }
C51 COMPILER V8.02 TEST 11/11/2007 21:15:12 PAGE 4
180 1 return(receivebyte);
181 1 }
182 /* 以上为AT24C01~AT24C256的读写程序,各人可根据自己的需要应用。
183 在buf1中填入需要写入的内容,buf2的大小可根据需要定义。
184 addr可根据使用的芯片选择,可从任何位置读写,只要在该芯片的范围内。
185 enumer=ATxxx,根据使用的芯片赋值。各函数中的形式参数不需改变。
186 本程序只要在调用的程序中定义实际参数即可,上述各子程序不必改动。*/
187
188 /* * * * * * * * 一个简单延时程序 * * * * * * * * * * * * */
189 void Delay(unsigned int DelayCount)
190 {
191 1 while(DelayCount--);
192 1 }
193 /*-------------数码管显示函数--------------------
194 参数:number 要显示的数字
195 参数:pos 要显示的位置(从左到右为1--4)
196 返回值:无
197 ------------------------------------------------*/
198 /* * * * * * * * * *数码管显示函数* * * * * * * * * * * */
199 void display(unsigned char number,unsigned char pos)//数码管显示函数
200 {
201 1 unsigned char temp; //临时变量
202 1 if(number<10 && pos<5 && pos>0)//确定数据合法
203 1 {
204 2 temp=(number<<4)&0xf0; //获得要显示的数据
205 2 temp+=1<<(pos-1); //送位置位
206 2 LEDPORT=temp; ////送显示数据,开始显示
207 2 }
208 1 else return;
209 1 }
210
211 void leddisplay(unsigned int count)
212 {
213 1 unsigned int i=6000;
214 1 while(i--)
215 1 {
216 2 if(count>=1000)
217 2 {
218 3 display(count/1000,1);
219 3 display(count%1000/100,2);
220 3 display(count%100/10,3);
221 3 display(count%10,4);
222 3 }
223 2 else if(count>=100)
224 2 {
225 3 display(count/100,2);
226 3 display(count%100/10,3);
227 3 display(count%10,4);
228 3 }
229 2 else if(count>=10)
230 2 {
231 3 display(count/10,3);
232 3 display(count%10,4);
233 3 }
234 2 else
235 2 {
236 3 display(count,4);
237 3 }
238 2 }
239 1 }
240 /* * * * * * * * * * * * * * * * * * * * * * * * * * */
241 void main()
C51 COMPILER V8.02 TEST 11/11/2007 21:15:12 PAGE 5
242 {
243 1 unsigned char Control,*p1,*p2;
244 1 unsigned char Length,i=0;
245 1 unsigned int addr ; /* 24Cxx片内地址 */
246 1 p1=buf1;p2=&buf2[0];
247 1 addr=0; /* 片内地址 AT24C02为0~255 */
248 1 Length=10; /* 读写长度 */
249 1 enumer=AT2402; /* 读写AT24C02 */
250 1 Control=0xa0; /* 写操作 */
251 1 RW24xx(p1,Length,addr,Control,enumer); /* 写 */
252 1 Control=0xa1; /* 读操作 */
253 1 RW24xx(p2,Length,addr,Control,enumer); /* 读 */
254 1 while(1)
255 1 {
256 2 leddisplay(buf2[i]);//数码管显示读出来的数据
257 2 i++;
258 2 if(i==10){i=0;}
259 2 }
260 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 670 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 24
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -