📄 serial.lst
字号:
271 1
272 1 char idata c ;
273 1 while (!inbufsign_1); //缓冲区空等待
274 1 ES1=0;
275 1 c= *getlast_1; //取数据
276 1 getlast_1++; //最后取走的数据位置加一
277 1 inbufful_1=0; //输入缓冲区的满标志清零
278 1 if (getlast_1==inbuf_1+ILEN1) getlast_1=inbuf_1; //地址到顶部回到底部
279 1 if (getlast_1==inlast_1) inbufsign_1=0; //地址相等置接收缓冲区空空标志,再取数前要检该标志
280 1 ES1=1;
281 1 return (c); //取回数据
282 1
283 1
284 1 }
285
286
287 uchar getdp310(void)
288 {
289 1
290 1 char idata c ;
291 1 SysTimer=3;
292 1 while(1)
293 1 {
C51 COMPILER V7.50 SERIAL 04/04/2007 15:49:17 PAGE 6
294 2 if(inbufsign_1) break; //缓冲区空等待
295 2 else
296 2 if(SysTimer==0) return NULL;
297 2 }
298 1 ES1=0;
299 1 c= *getlast_1; //取数据
300 1 getlast_1++; //最后取走的数据位置加一
301 1 inbufful_1=0; //输入缓冲区的满标志清零
302 1 if (getlast_1==inbuf_1+ILEN1) getlast_1=inbuf_1; //地址到顶部回到底部
303 1 if (getlast_1==inlast_1) inbufsign_1=0; //地址相等置接收缓冲区空空标志,再取数前要检该标志
304 1 ES1=1;
305 1 return (c); //取回数据
306 1
307 1
308 1
309 1 }
310
311
312 //void ReadSerail(char xdata *pData, int nLength, int nNumRead,int time_out)
313 void ReadSerail(char* pData, int nLength, int nNumRead,int time_out)
314
315 {
316 1 int i;
317 1 ClearBuf(pData,nLength);
318 1 nNumRead=0;
319 1 for(i=0;i<nLength;i++)
320 1 {
321 2 if((pData[i]=getUartWait())==0)break;
322 2 nNumRead++;
323 2 }
324 1
325 1 }
*** WARNING C280 IN LINE 313 OF SERIAL.C: 'time_out': unreferenced local variable
326
327
328 #if 0
//*****************************************
//接收一行数据,必须定义放数据串的指针位置和大小 del=0x7f,backspace=0x08,cr=0x0d,lf=0x0a
void getline (uchar idata *line, unsigned char xdata n)
{
unsigned char xdata cnt = 0; //定义已接收的长度
char xdata c;
do
{
if ((c = getbyte ()) == 0x0d) c = 0x00; //读一个字节,如果是回车换成结束符
if (c == 0x08 || c == 0x7f) //BACKSPACE 和 DEL 的处理
{ if (cnt != 0) //已经输入退掉一个字符
{
cnt--; //总数目减一
line--; //指针减一
putbyte (0x08); //屏幕回显的处理
putbyte (' ');
putbyte (0x08);
}
}
else
{
putbyte (*line = c); //其他字符取入,回显
line++; //指针加一
cnt++; //总数目加一
}
} while (cnt < n - 1 && c != 0x00 && c!=0x1b); //数目到了,回车或ESC停止
C51 COMPILER V7.50 SERIAL 04/04/2007 15:49:17 PAGE 7
*line = 0; //再加上停止符0
}
#endif
358
359
360 #if 0
//****************************
//人工输入一个字符到输入缓冲区
putinbuf(uchar xdata c)
{
ES=0;
if(!inbufful)
{
*inlast= c; //放入数据
inlast++; //最后放入的位置加一
if (inlast==inbuf+ILEN) inlast=inbuf; //地址到顶部回到底部
if (inlast==getlast)inbufful=1; //接收缓冲区满置满标志
inbufsign=1;
}
ES=1;
}
#endif
377
378
379
380 //*****************************************
381 //串口中断处理
382 //serial_0 0023H
383 void serial(void) interrupt 4 //using 2
384 {
385 1 if (TI)
386 1 {
387 2
388 2 TI = 0;
389 2 if (outbufsign)
390 2 {
391 3 SBUF=*outlast; //未发送完继续发送
392 3 outlast++; //最后传出去的字节位置加一
393 3 if (outlast==outbuf+OLEN) outlast=outbuf; //地址到顶部回到底部
394 3 if (putlast==outlast) outbufsign=0; //数据发送完置发送缓冲区空标志
395 3 }
396 2 else outbufsign0=0;
397 2
398 2 }
399 1 if (RI)
400 1 {
401 2 RI = 0;
402 2 if(!inbufful)
403 2 {
404 3 *inlast= SBUF; //放入数据
405 3 inlast++; //最后放入的位置加一
406 3 inbufsign=1;
407 3 if (inlast==inbuf+ILEN) inlast=inbuf; //地址到顶部回到底部
408 3 if (inlast==getlast) inbufful=1; //接收缓冲区满置满标志
409 3 }
410 2 }
411 1
412 1 }
413
414
415
416
C51 COMPILER V7.50 SERIAL 04/04/2007 15:49:17 PAGE 8
417 //SERIAL 1 003BH
418 void serial_1(void) interrupt 7 //using 2
419 {
420 1
421 1 if(RI_1)
422 1 {
423 2 RI_1 = 0;
424 2
425 2 if(!inbufful_1)
426 2 {
427 3 *inlast_1= SBUF1; //放入数据
428 3 inlast_1++; //最后放入的位置加一
429 3 inbufsign_1=1;
430 3 if (inlast_1==inbuf_1+ILEN1) inlast_1=inbuf_1; //地址到顶部回到底部
431 3 if (inlast_1==getlast_1) inbufful_1=1; //接收缓冲区满置满标志
432 3 }
433 2
434 2 }
435 1 if(TI_1)
436 1 {
437 2 TI_1=0;
438 2 if (outbufsign1)
439 2 {
440 3 SBUF1=*outlast1; //未发送完继续发送
441 3 outlast1++; //最后传出去的字节位置加一
442 3 if (outlast1==outbuf1+OLEN) outlast1=outbuf1; //地址到顶部回到底部
443 3 if (putlast1==outlast1) outbufsign1=0; //数据发送完置发送缓冲区空标志
444 3 }
445 2 else outbufsign01=0;
446 2
447 2 }
448 1 }
449
450
451 #if 0
void main(void)
{char c;
idata unsigned char free[16];
unsigned char idata *freep=free;
serial_init();</P><P>
putstring("jdioptuejls;j;klj");
delay(10);</P><P> while(1)
{ putstring("com is ready! ");}
c=getbyte();
putbyte(0x20);
puthex(c);
switch(c)
{case 'r':
putbytes(inbuf,ILEN);
break;
case 'g':
getline(freep,10);
putbyte(0x20);
putstring(freep);
break;
default:
putbyte(c);
// }
}
}
#endif
C51 COMPILER V7.50 SERIAL 04/04/2007 15:49:17 PAGE 9
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _putbyte (BEGIN)
; SOURCE LINE # 71
;---- Variable 'c' assigned to Register 'R7' ----
; SOURCE LINE # 72
; SOURCE LINE # 74
0000 C2AC CLR ES
0002 ?C0001:
; SOURCE LINE # 76
0002 C3 CLR C
0003 E500 R MOV A,outlast+01H
0005 9500 R SUBB A,putlast+01H
0007 FD MOV R5,A
0008 E500 R MOV A,outlast
000A 9500 R SUBB A,putlast
000C FC MOV R4,A
000D ED MOV A,R5
000E 6402 XRL A,#02H
0010 4C ORL A,R4
0011 700B JNZ ?C0004
0013 D3 SETB C
0014 E500 R MOV A,outlast+01H
0016 9500 R SUBB A,putlast+01H
0018 E500 R MOV A,outlast
001A 9500 R SUBB A,putlast
001C 5024 JNC ?C0003
001E ?C0004:
001E C3 CLR C
001F E500 R MOV A,outlast+01H
0021 9500 R SUBB A,putlast+01H
0023 E500 R MOV A,outlast
0025 9500 R SUBB A,putlast
0027 5021 JNC ?C0002
0029 C3 CLR C
002A E500 R MOV A,putlast+01H
002C 9500 R SUBB A,outlast+01H
002E FD MOV R5,A
002F E500 R MOV A,putlast
0031 9500 R SUBB A,outlast
0033 FC MOV R4,A
0034 C3 CLR C
0035 7420 MOV A,#020H
0037 9D SUBB A,R5
0038 FD MOV R5,A
0039 E4 CLR A
003A 9C SUBB A,R4
003B FC MOV R4,A
003C ED MOV A,R5
003D 6402 XRL A,#02H
003F 4C ORL A,R4
0040 7008 JNZ ?C0002
0042 ?C0003:
; SOURCE LINE # 77
0042 D2AC SETB ES
0044 0F INC R7
0045 1F DEC R7
0046 C2AC CLR ES
; SOURCE LINE # 80
0048 80B8 SJMP ?C0001
004A ?C0002:
C51 COMPILER V7.50 SERIAL 04/04/2007 15:49:17 PAGE 10
; SOURCE LINE # 81
004A 850082 R MOV DPL,putlast+01H
004D 850083 R MOV DPH,putlast
0050 EF MOV A,R7
0051 F0 MOVX @DPTR,A
; SOURCE LINE # 82
0052 0500 R INC putlast+01H
0054 E500 R MOV A,putlast+01H
0056 7002 JNZ ?C0074
0058 0500 R INC putlast
005A ?C0074:
; SOURCE LINE # 83
005A B4000B R CJNE A,#LOW outbuf+020H,?C0005
005D 7400 R MOV A,#HIGH outbuf+020H
005F B50006 R CJNE A,putlast,?C0005
0062 750000 R MOV putlast,#HIGH outbuf
0065 750000 R MOV putlast+01H,#LOW outbuf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -