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

📄 serial.lst

📁 c8051f020实现4个 产UART 口
💻 LST
字号:
C51 COMPILER V7.50   SERIAL                                                                06/10/2007 23:11:21 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN .\out\Serial.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Serial.c LARGE OPTIMIZE(SIZE) REGFILE(.\out\mbtest.ORC) BROWSE INCDIR(C:\Ke
                    -il\C51\LIB\;D:\TEST_C020\MC_55_C\) DEBUG OBJECTEXTEND OBJECT(.\out\Serial.obj)

line level    source

   1          #include "all.h"
   2          
   3          //串口0 中断服务程序,仅需做简单调用即可完成串口输入输出的处理
   4          //出入均设有缓冲区,大小可任意设置。
   5          //*************************************************************************
   6          
   7          
   8          
   9          #define BAUDRATE0               4800            // 用户定义的UART0 波特率
  10          
  11          uchar    *Poiter_GPRS_TX;
  12          uchar xdata    GPRS_RX_Buff[GPRS_RX_Buff_MAX];
  13          uchar xdata    GPRS_TX_Buff[GPRS_RX_Buff_MAX];
  14          uint   xdata     GPRS_TX_cnt=0;
  15          //uchar    *Poiter_GPRS_TX=GPRS_RX_Buff;
  16           uint xdata GPRS_TX_Len;
  17          
  18          
  19          bit GPRS_TX_is_over_B=1;    //所完标志位
  20                                            // GPRS_TX_is_over_B=0表示串口忙被 占用,
  21                                            //谁得到 GPRS_TX_is_over_B=1谁就得到串口生理权
  22          
  23          xdata uchar  GPRS_Xin_485_b_FLAG=0;    //GPRS 标志寄存器
  24          
  25          
  26          
  27          
  28          xdata uchar  GPRS_Es_jie_cnt;   //时限计时值
  29          
  30           
  31          xdata uchar GPRS_Es_jie_cnt;   //时限计时值
  32          xdata uint  Gprs_i_485;
  33          xdata uchar Tem_sbuf;
  34          
  35          
  36          uchar   DABAO_EEEE_GPRA_buffer(uchar qian1,uchar qian2,uchar Fun,uchar *Poit,uint Lenthg,uchar *Re_Poit) r
             -eentrant ;
  37          //void  Get_Fa_Gprs_buffer_Right( );
  38          
  39          
  40          
  41          
  42          
  43          
  44            
  45          
  46          void Open_URRA_0(void) 
  47          {
  48   1              PCON |= 0x80;           // SMOD=1 (HW_UART uses Timer 1 overflow with no divide down).
  49   1              TMOD = 0x20;            // Configure Timer 1 for use by UART0
  50   1              CKCON |= 0x10;          // Timer 1 derived from SYSCLK
  51   1      
  52   1              RCAP2H=(65536-(SYSCLK/BAUDRATE0/32))/256;
  53   1              RCAP2L=(65536-(SYSCLK/BAUDRATE0/32))%256;
C51 COMPILER V7.50   SERIAL                                                                06/10/2007 23:11:21 PAGE 2   

  54   1              TH2=RCAP2H;TL2=RCAP2L;
  55   1              CT2=0;                          //T2:timer mode 
  56   1              TR2=1;
  57   1              TCLK0=1;
  58   1              RCLK0=1;                //说明:52,对于SIO0,可选择T1(TCLK=0,RCLK=0)或T2(TCLK=1,RCLK=1)作为波特率发生器
  59   1                                                  //            SIO1只能用T1作为波特率发生器
  60   1                                                  //baud=OSC/(32*(65536-[RCAP2H,RCAP2L])
  61   1              
  62   1              RI0=0;                                  // Clear HW_UART receive and transmit
  63   1              TI0=0;                                  // complete indicators.
  64   1              SCON0 = 0x50;                   // Configure UART0 for mode 1, receiver enabled.
  65   1              ES0=1;                                  // allow the serial interrupt
  66   1              
  67   1      }
  68          
  69          
  70          
  71          
  72          
  73          
  74          
  75          
  76          
  77          /**********************************************************************
  78          **函数原型:   void DiJi_ZhengJuan()
  79          **入口参数:
  80          **出口参数:   无
  81          **返 回 值:   无
  82          **说    明:   uart0 中断 用于GPRS
  83          ************************************************************************/
  84          void URRA_0_ISR(void) interrupt 4  using 3  {
  85   1                          
  86   1              
  87   1        if (_testbit_(RI0))   
  88   1              {        
  89   2                       RI0=0;
  90   2                      //if(GPRS_Xin_485_b_FLAG==0)  { //数据未处理就是来新数据也不能接收  
  91   2                               if(Gprs_i_485>=GPRS_RX_Buff_MAX)   //防止超出数组范围
  92   2                                       Gprs_i_485=0;
  93   2                              GPRS_Es_jie_cnt=20; //时限计时值 100ms
  94   2                              GPRS_RX_Buff[Gprs_i_485++]=SBUF0;
  95   2                      //}     
  96   2          }
  97   1          if (_testbit_(TI0))
  98   1              {
  99   2                      TI0=0;      //发送中断  发送入口,TX_Len:所发送的字节数
 100   2                           // TX_Buff[]: 发送缓冲区
 101   2                 if(GPRS_TX_Len>=GPRS_RX_Buff_MAX)  
 102   2                               GPRS_TX_Len=GPRS_RX_Buff_MAX;
 103   2                  if(GPRS_TX_Len!=0)  {
 104   3                         // GPRS_TX_is_over_B=0;
 105   3                          Tem_sbuf=GPRS_TX_Buff[1+GPRS_TX_cnt++];
 106   3                          SBUF0=Tem_sbuf;
 107   3                  }
 108   2                  else  {
 109   3                         GPRS_TX_cnt=0;
 110   3                        // GPRS_TX_is_over_B=1;    //所完标志位
 111   3                  }
 112   2                  GPRS_TX_Len--;
 113   2          }
 114   1       }
 115          
C51 COMPILER V7.50   SERIAL                                                                06/10/2007 23:11:21 PAGE 3   

 116           //==========================================================
 117           //================以上是串口中断,用于接收GPRS
 118          
 119          
 120          //等待得到控制权
 121          //等待得到控制权
 122          //只有得到权限才能更新缓冲区数据
 123           /*
 124          void  Get_Fa_Gprs_buffer_Right( )
 125                {      xdata uchar ttt=0;
 126          
 127                          while(GPRS_TX_is_over_B==0)   {     //TX所完标志位,没发完再发时要等待                  
 128                                   os_wait2(K_TMO, 50);   //100ms
 129                                   if(ttt++>100)               //延时5秒  到也认为发送有空
 130                                           break;
 131                          }               
 132                           GPRS_TX_is_over_B=0;   //抢到标志,处暑、延时100MS再发, 串间隔
 133                           os_wait2(K_TMO, 50);    //100ms
 134                                    
 135                }
 136          //==============================w2812837@163.com=================================================
 137             */
 138          
 139          
 140          
 141           /**********************************************************************
 142          **函数原型:   void  Fa_Gprs_buffer(uint Lenthg)
 143          **入口参数:   无
 144          **出口参数:   无
 145          **返 回 值:   无
 146          **说    明:  将GPRS_TX_Buff[]发送子程序。
 147                      // 发送入口,TX_Len:所发送的字节数
 148                      //           GPRS_TX_Buff[]: 发送缓冲区
 149                      //           TxIe=1;
 150                      //           GPRS_TX_cnt=0;       100MS 串间隔
 151          ************************************************************************/
 152          
 153          /*
 154          void  Fa_Gprs_buffer(uint Lenthg)
 155                {  
 156          
 157                          // En_FA_485;
 158                           GPRS_TX_Len=Lenthg-1;       //TX_LEN发送前置好数值
 159                           GPRS_TX_cnt=0;    
 160                           SBUF0=GPRS_TX_Buff[0];           
 161                }
 162          //==============================w2812837@163.com=================================================
 163          
 164          */
 165          
 166          
 167          
 168          
 169          
 170           /**********************************************************************
 171          **函数原型:   void  Fa_Gprs_buffer(uint Lenthg)
 172          **入口参数:   无
 173          **出口参数:   无
 174          **返 回 值:   无
 175          **说    明:          先取得控制权,然后
 176                    、、将指针指向的数组发给GPRS_TX_Buff[] 发送子程序。
 177                      // 发送入口,TX_Len:所发送的字节数
C51 COMPILER V7.50   SERIAL                                                                06/10/2007 23:11:21 PAGE 4   

 178                      //           GPRS_TX_Buff[]: 发送缓冲区
 179                      //           TxIe=1;
 180                      //           GPRS_TX_cnt=0;       100MS 串间隔
 181          ************************************************************************/
 182          /*
 183          void  Fa_Gprs_Other2buffer(char *Poiter,uint Lenthg)
 184                {  
 185                          uchar i;
 186                                          
 187                            Get_Fa_Gprs_buffer_Right( );
 188                            Clr_GPRS_RX_Buff();
 189                             GPRS_Xin_485_b_FLAG=GPRS_Xin_485_b_FLAG&(~XIN_GSM_R_B);       //clr  bit
 190                             
 191                            for(i=0;i<Lenthg;i++)
 192                                  GPRS_TX_Buff[i]=*Poiter++;
 193                            
 194                          // En_FA_485;
 195                           GPRS_TX_Len=Lenthg-1;       //TX_LEN发送前置好数值
 196                           GPRS_TX_cnt=0;    
 197                           SBUF0=GPRS_TX_Buff[0];           
 198                }
 199          //==============================w2812837@163.com=================================================
 200          
 201          */
 202          
 203          
 204          
 205          
 206          
 207          
 208          
 209          //清接收区为0 
 210          void Clr_GPRS_RX_Buff()  reentrant  {
 211   1            uint i;
 212   1      
 213   1                for (i=0;i<GPRS_RX_Buff_MAX;i++)
 214   1                         GPRS_RX_Buff[i]=0;  
 215   1      
 216   1      }
 217          
 218          
 219          /**********************************************************************
 220          **函数原型:  void  DABAO_EEEE_GPRA_buffer(uchar qian1,uchar qian2,uchar Fun,uchar *Poit,uint Lenthg)
 221          **入口参数:        ttt X 2ms =  时限            char  *pppp 为要找的字符串
 222          **出口参数:   无
 223          **返 回 值:     整个包的长度
 224          **说    明:  发GPRS数据
 225          ************************************************************************/
 226          uchar   DABAO_EEEE_GPRA_buffer(uchar qian1,uchar qian2,uchar Fun,uchar *Poit,uint Lenthg,uchar *Re_Poit) r
             -eentrant 
 227                { 
 228   1                      uchar i,j;
 229   1                      
 230   1                
 231   1                        Gprs_i_485=0;    //接收数组下标复位;
 232   1      
 233   1                       Re_Poit[0]=qian1;
 234   1                               Re_Poit[1]=qian2;
 235   1                        Re_Poit[2]=Fun ;
 236   1                        Re_Poit[3]=Lenthg;
 237   1                       for(i=0;i<Lenthg;i++) {
 238   2                              Re_Poit[4+i]=*Poit++;
C51 COMPILER V7.50   SERIAL                                                                06/10/2007 23:11:21 PAGE 5   

 239   2                       }
 240   1                        Re_Poit[4+i]=0;
 241   1                       j=0;
 242   1                       for(j=0;j<(Lenthg+2);j++)
 243   1                             Re_Poit[4+i]+= Re_Poit[j+2];
 244   1                        Re_Poit[4+i+1]=0xab;
 245   1                         Re_Poit[4+i+2]=0x1A;    // ctr+z
 246   1                           Re_Poit[4+i+3]=0;    // '0'
 247   1      
 248   1      
 249   1                
 250   1                        //GPRS_TX_Len=Lenthg+6+1;       //TX_LEN发送前置好数值
 251   1                       return(Lenthg+6+1);
 252   1                       //Fa_F76_buffer(uchar Fun, uchar * Poit, uint Lenthg)
 253   1                 
 254   1            }
 255          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    694    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    732    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -