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

📄 wireless.lst

📁 此源码利用单片机实现短距离无线传输
💻 LST
字号:
C51 COMPILER V7.02b   WIRELESS                                                             12/10/2005 21:06:49 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE WIRELESS
OBJECT MODULE PLACED IN wireless.OBJ
COMPILER INVOKED BY: E:\EDATOOLS\KEILC7.0\C51\BIN\C51.EXE wireless.c LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*****************************************/
   2          /* Copyright (c) 2005, 通信工程学院        */
   3          /* All rights reserved.                  */
   4          /* /* 作    者:戴佳                                  */
   5          /*****************************************/
   6          
   7          #include "wireless.h"
   8          
   9          /* 定时器0中断服务子程序 */
  10          void timer() interrupt 1 using 2
  11          {       
  12   1              Flag_Delay5ms = 0;
  13   1              TH0 = -5000/256;
  14   1              TL0 = -5000%256;        
  15   1      }
  16          
  17          void main(void)
  18          {
  19   1              ClearT_buf();
  20   1              ClearR_buf();
  21   1              TXEN = 0;                                       //初始为接收状态
  22   1              PWR = 1;                                        //正常工作模式
  23   1              CS = 0;                                         //选择频道0
  24   1              EA=0;
  25   1                      
  26   1              /* 11.0592MHz下,设置串行口9600波特率,工作方式1
  27   1                      8位数据位,1位停止位,无奇偶校验,*/
  28   1              TMOD = 0x21;                            //定时器1工作模式1,定时器0工作模式2    
  29   1              SCON = 0x50;                            //串行口工作方式1,REN=1
  30   1              PCON = 0x00;                            //SMOD=0
  31   1      
  32   1              TL1 = 0xfd;
  33   1              TH1 = 0xfd;     
  34   1              TR1=1;                                          //定时器1开始计时       
  35   1              
  36   1              PT0 = 1;                                        //定时器0高优先级
  37   1              TH0 = -5000/256;                        //5ms
  38   1              TL0 = -5000%256;
  39   1                      
  40   1              IE = 0x90;                                      //EA=1,ES=1:打开串口中断
  41   1              
  42   1              while (1) 
  43   1              {
  44   2                      if (Flag_ReqSend)               //收到“请求发送”指令
  45   2                      {
  46   3                              TXEN = 1;                       //改变为发射状态
  47   3                              Delay5ms();                     //延时5ms
  48   3                              GetData();                      //采集数据
  49   3                              Send();                         //发送
  50   3                              Flag_ReqSend = 0;
  51   3                              SendOver();                     //通知PC机发送结束
  52   3                              TXEN = 0;                       //重设为接收状态
  53   3                      }
  54   2                      else if (Flag_ReqReSend)        //收到“请求重发”指令
  55   2                      {
C51 COMPILER V7.02b   WIRELESS                                                             12/10/2005 21:06:49 PAGE 2   

  56   3                              TXEN = 1;                       //改变为发射状态
  57   3                              Delay5ms();                     //延时5ms
  58   3                              Send();                         //重发
  59   3                              Flag_ReqReSend = 0;
  60   3                              SendOver();                     //通知PC机发送结束
  61   3                              TXEN = 0;                       //重设为接收状态
  62   3                      }               
  63   2              }
  64   1      }
  65          
  66          /* 串口中断服务子程序 */
  67          void serial ( ) interrupt 4 using 1 
  68          {
  69   1              RI = 0 ;
  70   1              /* 判断是否收到字符'$',其数值为0x24,置开始接收标志位*/
  71   1              if ((!Flag_StartRec) && (SBUF == 0x24))
  72   1              {
  73   2                      Flag_StartRec = 1;      
  74   2              }               
  75   1      
  76   1              if  (Flag_StartRec)
  77   1              {
  78   2                      if  (rCount <5)
  79   2                      {
  80   3                              r_buf[rCount] = SBUF;
  81   3                              rCount ++;              
  82   3                      }
  83   2                      /* 判断是否收到字符'*',其数值为0x2A,根据接收的指令设置相应标志位 */
  84   2                      if ((r_buf[rCount -1] == 0x2A)||(rCount  == 5))
  85   2                      {
  86   3                              rCount  = 0;            
  87   3                              Flag_StartRec = 0;
  88   3                              if (r_buf[2] == REQ_SEND)               //收到“请求发送”指令
  89   3                              {
  90   4                                      Flag_ReqSend = 1;
  91   4                              }
  92   3                              if (r_buf[2] == REQ_RESEND)             //收到“请求重发”指令
  93   3                              {
  94   4                                      Flag_ReqReSend = 1;     
  95   4                              }
  96   3                      }
  97   2                      else
  98   2                              ClearR_buf();
  99   2              }               
 100   1      }
 101          
 102          void ClearT_buf(void)
 103          {       
 104   1              uchar xdata k ;
 105   1              for (k=0;k++;k<11)
 106   1              {
 107   2                      t_buf[k] = 0;
 108   2              }       
 109   1      }
 110          
 111          void ClearR_buf(void)
 112          {       
 113   1              uchar xdata k ;
 114   1              for (k=0;k++;k<5)
 115   1              {
 116   2                      r_buf[k] = 0;
 117   2              }       
C51 COMPILER V7.02b   WIRELESS                                                             12/10/2005 21:06:49 PAGE 3   

 118   1      }
 119          
 120          void Delay5ms(void)
 121          {
 122   1              TR0=1;
 123   1              ET0=1;
 124   1              while( Flag_Delay5ms);  
 125   1              ET0 = 0;                                        
 126   1              TR0 = 0;        
 127   1              Flag_Delay5ms = 1;
 128   1      }
 129          
 130          //采集数据函数经过简化处理,取固定的7个字节数据
 131          void GetData(void)
 132          {
 133   1              Data[0]=DATA0;
 134   1              Data[1]=DATA1;
 135   1              Data[2]=DATA2;
 136   1              Data[3]=DATA3;
 137   1              Data[4]=DATA4;
 138   1              Data[5]=DATA5;
 139   1              Data[6]=DATA6;
 140   1      }
 141          
 142          //单片机端发送数据函数
 143          void Send(void)
 144          {
 145   1              uchar xdata j = 0;
 146   1              uchar xdata len = 0;
 147   1              uchar xdata CheckSum = 0 ;
 148   1              t_buf[0]=0x24;                          //起始位
 149   1              t_buf[1]=0x07;                          //7个数据字节
 150   1              len=t_buf[1];
 151   1              CheckSum = CheckSum + len;
 152   1              for ( j=0;j++;j<len)
 153   1              {
 154   2                      t_buf[j+2] = Data[j];
 155   2                      CheckSum = CheckSum + t_buf[j+2];
 156   2              }
 157   1              t_buf[9] = CheckSum;            //校验和字节
 158   1              t_buf[10] = 0x2A;                       //停止位
 159   1              
 160   1              for (j=0;j++;j<11)
 161   1              {
 162   2                      TI =0 ;
 163   2                      SBUF = t_buf[j];        
 164   2                      while ( TI ==0 );
 165   2                      TI =0 ; 
 166   2              }
 167   1      }
 168          
 169          //通知PC机端发送结束函数
 170          void SendOver(void)
 171          {
 172   1              TI =0 ;
 173   1              SBUF = 0x24;    
 174   1              while ( TI ==0 );
 175   1              TI =0 ;                 
 176   1              SBUF = 0x01;    
 177   1              while ( TI ==0 );
 178   1              TI =0 ; 
 179   1              SBUF = SEND_OVER;                       //通知PC机端“发送结束”        
C51 COMPILER V7.02b   WIRELESS                                                             12/10/2005 21:06:49 PAGE 4   

 180   1              while ( TI ==0 );
 181   1              TI =0 ; 
 182   1              SBUF = 0x99;                            //校验和字节    
 183   1              while ( TI ==0 );
 184   1              TI =0 ;         
 185   1              SBUF = 0x2A;    
 186   1              while ( TI ==0 );
 187   1              TI =0 ;         
 188   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    499    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     29    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -