📄 mcutest.lst
字号:
159 1 WriteI2CByte(thedata);
160 1 acktemp=Check_Acknowledge();
161 1 I2C_Stop();
162 1 }
163
164 unsigned char Read_One_Byte(unsigned char addr)
165 {
166 1 bit acktemp=1;
167 1 unsigned char mydata;
168 1 I2C_Start();
169 1 WriteI2CByte(0xa0);
C51 COMPILER V8.02 MCUTEST 03/26/2009 15:06:07 PAGE 6
170 1 acktemp=Check_Acknowledge();
171 1 WriteI2CByte(addr);
172 1 acktemp=Check_Acknowledge();
173 1 I2C_Start();
174 1 WriteI2CByte(0xa1);
175 1 acktemp=Check_Acknowledge();
176 1 mydata=ReadI2CByte();
177 1 acktemp=Check_Acknowledge();
178 1 return mydata;
179 1 I2C_Stop();
180 1 }
181
182 char Num2Char(unsigned char ch)
183 {
184 1 if(ch<=9)
185 1 return (ch+'0');
186 1 else return (ch-10+'a');
187 1 }
188
189 void System_Init(void)
190 {
191 1 TMOD=0x21; //串行口初始化
192 1 TH1=0xfd;TL1=0xfd; //设定波特率 9600
193 1 PCON=0x00;
194 1 TR1=1; //启动T1
195 1 SCON=0x50; //串行口工作在方式1,并允许接收
196 1 EA=1;
197 1 ES=1;
198 1 }
199
200 void main(void)
201 {
202 1 System_Init(); //初始化
203 1 LCD_Init();
204 1
205 1 while(1)
206 1 {
207 2 //////////////此代码用来测试IIC读写/////////////////
208 2 #ifdef _IIC_DUBG
Write_One_Byte(0,2); //ADD0 写入数据2
Write_One_Byte(1,7); //ADD1 写入数据3
LCD_Wr_Char(0,0,Read_One_Byte(0)+'0'); //读取24C02 并在LM016显示
LCD_Wr_Char(1,0,Read_One_Byte(1)+'0');
#endif
214 2 //////////////////IIC测试结束//////////////////////////
215 2 Money_num[6]=((money/10000)%10)+'0';
216 2 Money_num[7]=((money/1000)%10)+'0';
217 2 Money_num[8]=((money/100)%10)+'0';
218 2 Money_num[9]=((money/10)%10)+'0';
219 2 Money_num[11]=(money%10)+'0';
220 2
221 2 LCD_Wr_String(0,0,Card_num);
222 2 LCD_Wr_String(0,1,Money_num);
223 2 }
224 1
225 1 }
226
227 //IC卡读和写子程序,中断
228 void rxdata(void) interrupt 4 using 0
229 {
230 1 unsigned char i,j;
231 1 unsigned char rdbuf[20]; //读取卡中的数据缓冲
C51 COMPILER V8.02 MCUTEST 03/26/2009 15:06:07 PAGE 7
232 1 unsigned char RxBuf[20]; //读取串口数据缓冲
233 1 EA=0;
234 1 for(i=0;i<2;i++) ////读取命令,第一个字节为命令字节,第二个字节为在第二个字节之后还有多少个字节
235 1 {
236 2 while(!RI);
237 2 RI=0;
238 2 RxBuf[i]=SBUF;
239 2 }
240 1
241 1 if(RxBuf[1]!=0) //如果字节数不是0,则继续读取剩余的数据
242 1 {
243 2 for(i=0;i<RxBuf[1];i++)
244 2 {
245 3 while(!RI);
246 3 RI=0;
247 3 RxBuf[2+i]=SBUF;
248 3 }
249 2 }
250 1
251 1 if(RxBuf[0]==COM_RD_CARD) //读卡命令
252 1 {
253 2 err_flag=0;
254 2 rdbuf[0]=Read_One_Byte(CardID_Addr); //读卡中的ID号
255 2 rdbuf[1]=Read_One_Byte(CardID_Addr+1);
256 2 rdbuf[2]=Read_One_Byte(CardID_Addr+2);
257 2 rdbuf[3]=Read_One_Byte(CardID_Addr+3);
258 2 rdbuf[4]=Read_One_Byte(CardID_Addr+4);
259 2
260 2 rdbuf[5]=Read_One_Byte(Money_Addr);
261 2 rdbuf[6]=Read_One_Byte(Money_Addr+1);
262 2
263 2 SBUF= COM_RD_CARD; //发送读卡命令返回PC
264 2
265 2 while(!TI);
266 2 TI=0;
267 2
268 2 for(j=0;j<7;j++) //发送卡数据返回PC
269 2 {
270 3 SBUF=rdbuf[j];
271 3 while(!TI);
272 3 TI=0;
273 3 }
274 2
275 2 Card_num[3]=(rdbuf[0]>>4) +'0';
276 2 Card_num[4]=(rdbuf[0]&0x0f) +'0';
277 2 Card_num[5]=(rdbuf[1]>>4) + '0';
278 2 Card_num[6]=(rdbuf[1]&0x0f) + '0';
279 2 Card_num[7]=(rdbuf[2]>>4) + '0';
280 2 Card_num[8]=(rdbuf[2]&0x0f) + '0';
281 2 Card_num[9]=(rdbuf[3]>>4) + '0';
282 2 Card_num[10]=(rdbuf[3]&0x0f) + '0';
283 2 Card_num[11]=(rdbuf[4]>>4) + '0';
284 2 Card_num[12]=(rdbuf[4]&0x0f) + '0';
285 2
286 2 money=rdbuf[5]*256+rdbuf[6];
287 2
288 2 }
289 1 else if(RxBuf[0]==COM_WR_CARD) //写卡命令
290 1 {
291 2 err_flag=0;
292 2 Write_One_Byte(CardID_Addr,RxBuf[2]); //写卡号
293 2 Write_One_Byte(CardID_Addr+1,RxBuf[3]);
C51 COMPILER V8.02 MCUTEST 03/26/2009 15:06:07 PAGE 8
294 2 Write_One_Byte(CardID_Addr+2,RxBuf[4]);
295 2 Write_One_Byte(CardID_Addr+3,RxBuf[5]);
296 2 Write_One_Byte(CardID_Addr+4,RxBuf[6]);
297 2
298 2 Write_One_Byte(Money_Addr,RxBuf[7]);
299 2 Write_One_Byte(Money_Addr+1,RxBuf[8]);
300 2 SBUF=COM_WR_CARD;while(!TI);TI=0;
301 2 SBUF=COM_WR_CARD;while(!TI);TI=0;
302 2 SBUF=COM_WR_CARD;while(!TI);TI=0;
303 2 /*if((Read_One_Byte(CardID_Addr)!=RxBuf[2])
304 2 ||(Read_One_Byte(CardID_Addr+1)!=RxBuf[3])
305 2 ||(Read_One_Byte(CardID_Addr+2)!=RxBuf[4])
306 2 ||(Read_One_Byte(CardID_Addr+3)!=RxBuf[5])
307 2 ||(Read_One_Byte(CardID_Addr+4)!=RxBuf[6]))
308 2 err_flag=1;
309 2
310 2 if(!err_flag)
311 2 {
312 2 SBUF=COM_WR_CARD;while(!TI);TI=0;
313 2 SBUF=COM_WR_CARD;while(!TI);TI=0;
314 2 SBUF=COM_WR_CARD;while(!TI);TI=0;
315 2 SBUF=COM_WR_CARD;while(!TI);TI=0;
316 2 }
317 2 else
318 2 {
319 2 SBUF=COM_WR_ERROR;
320 2 while(!TI);
321 2 TI=0;
322 2 } */
323 2 }
324 1 else if(RxBuf[0]==COM_ADD_MONEY) //充钱命令
325 1 {
326 2 err_flag=0;
327 2 money=Read_One_Byte(Money_Addr)*256+Read_One_Byte(Money_Addr+1);
328 2 money += (RxBuf[7]*256 + RxBuf[8]);
329 2
330 2 if( Read_One_Byte(Money_Addr)!=(money/256)
331 2 || Read_One_Byte(Money_Addr+1)!=(money%256))
332 2 err_flag=1;
333 2
334 2 if(!err_flag)
335 2 {
336 3 SBUF=COM_ADD_MONEY;
337 3 while(!TI);
338 3 TI=0;
339 3 }else
340 2 {
341 3 SBUF=COM_WR_ERROR;
342 3 while(!TI);
343 3 TI=0;
344 3 }
345 2 }
346 1 else if(RxBuf[0]==COM_DEC_MONEY)
347 1 {
348 2 err_flag=0;
349 2 money=Read_One_Byte(Money_Addr)*256+Read_One_Byte(Money_Addr+1);
350 2 money -= (RxBuf[7]*256 + RxBuf[8]);
351 2
352 2 Write_One_Byte(Money_Addr,money/256);
353 2 Write_One_Byte(Money_Addr+1,money%256);
354 2
355 2 if( Read_One_Byte(Money_Addr)!=(money/256)
C51 COMPILER V8.02 MCUTEST 03/26/2009 15:06:07 PAGE 9
356 2 || Read_One_Byte(Money_Addr+1)!=(money%256))
357 2 err_flag=1;
358 2
359 2 if(!err_flag)
360 2 {
361 3 SBUF=COM_DEC_MONEY;
362 3 while(!TI);
363 3 TI=0;
364 3 }else
365 2 {
366 3 SBUF=COM_WR_ERROR;
367 3 while(!TI);
368 3 TI=0;
369 3 }
370 2 }
371 1 EA=1;
372 1
373 1 }
C51 COMPILER V8.02 MCUTEST 03/26/2009 15:06:07 PAGE 10
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
System_Init. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
EA . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AFH 1
_DELAY_IIC . . . . . . . . . . . . . . PUBLIC CODE PROC 0008H -----
t. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
rxdata . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
j. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
rdbuf. . . . . . . . . . . . . . . . AUTO DATA ARRAY 0000H 20
RxBuf. . . . . . . . . . . . . . . . AUTO DATA ARRAY 0014H 20
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
ES . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ACH 1
IP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1
RI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0098H 1
Send_0 . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
Send_1 . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
TI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0099H 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
money. . . . . . . . . . . . . . . . . PUBLIC DATA U_INT 0000H 2
Check_Acknowledge. . . . . . . . . . . PUBLIC CODE PROC 0008H -----
Card_num . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0002H 14
I2C_Start. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
SBUF . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0099H 1
PCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0087H 1
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
TMOD . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0089H 1
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
_LCD_Wr_String . . . . . . . . . . . . EXTERN CODE PROC ----- -----
Money_num. . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0010H 14
_Num2Char. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
ch . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
_WriteI2CByte. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
b. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA CHAR 0004H 1
I2C_Stop . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
err_flag . . . . . . . . . . . . . . . PUBLIC DATA BIT 0000H 1
LCD_Init . . . . . . . . . . . . . . . EXTERN CODE PROC ----- -----
TH1. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008DH 1
TL1. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008BH 1
ReadI2CByte. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
b. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0004H 1
TR1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008EH 1
_Read_One_Byte . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
addr . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0003H 1
acktemp. . . . . . . . . . . . . . . AUTO DATA BIT 0000H 1
mydata . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
SDA. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0091H 1
Rec_Buffer . . . . . . . . . . . . . . PUBLIC DATA ARRAY 001EH 4
SCL. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0090H 1
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
_Write_One_Byte. . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
addr . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0002H 1
thedata. . . . . . . . . . . . . . . * REG * DATA U_CHAR 0003H 1
acktemp. . . . . . . . . . . . . . . AUTO DATA BIT 0000H 1
C51 COMPILER V8.02 MCUTEST 03/26/2009 15:06:07 PAGE 11
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
F0 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D5H 1
PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1022 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 34 40
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 + -