⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serial.lst

📁 这是用W77E58编写的控制GSM模块
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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 + -