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

📄 wireless0.lst

📁 一个温度采集系统的单片机程序与WINDOWS 串口通信程序
💻 LST
字号:
C51 COMPILER V7.00  WIRELESS0                                                              03/14/2005 16:53:05 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE WIRELESS0
OBJECT MODULE PLACED IN wireless0.OBJ
COMPILER INVOKED BY: C:\PROGRA~1\Keil\C51\BIN\c51.exe wireless0.c DB OE SMALL ROM(LARGE)

stmt level    source

   1          //修改:串行通信变量定义,receive_cmd()函数修改
   2          
   3          #include<reg51.h>
   4          #include<intrins.h>
   5          
   6          #define identity        0x01       //仓库号
   7          #define columne 0x01       //列号
   8          
   9          #define collect 67              //C ASCII 码为67
  10          #define transmit        84
  11          
  12          unsigned char data receive_data[15];      //串行通信变量,设为全局变量确保快速响应
  13          unsigned char data command;
  14          unsigned char data *cmd_p=&receive_data[0];
  15          
  16          unsigned char k =0;
  17          /////////////////////////////////////////
  18          //名称:串行口初始化
  19          //功能:设置串行通信波特率,开放串行中断
  20          void serial_init(void)
  21          {
  22   1      SCON    =0x50;           //设置串行通信方式为1 
  23   1      TMOD    =0x20;
  24   1      TH1     =0xE8;           //串行通信波特率为1200bps
  25   1      TL1     =0xE8;
  26   1      TR1     =1;
  27   1      
  28   1      ES      =1;
  29   1      EA      =1;
  30   1      }
  31          ///////////////////////////////////////////
  32          //名称:无线字节接收子程序
  33          //功能:从串口以查询的方式接收一字节数据,数据返回
  34          //////////////////////////////////////////
  35          unsigned char receive_byte(void)
  36          {
  37   1      unsigned char pc_data;
  38   1      unsigned char i,j;
  39   1              
  40   1              while(RI==0&&j<255)
  41   1              {
  42   2                 i++;                      //等待接收一字节数据,设定超限时间值
  43   2                 if(i>254)
  44   2                 {
  45   3                      i       =0;
  46   3                      j++;
  47   3                 }    
  48   2              };
  49   1                      
  50   1              while(RI==1)
  51   1              {
  52   2                      RI=0;
  53   2                  pc_data     =SBUF;
  54   2                  break;
  55   2            }
C51 COMPILER V7.00  WIRELESS0                                                              03/14/2005 16:53:05 PAGE 2   

  56   1              return pc_data;
  57   1      }    
  58          
  59          ////////////////////////////////////////////
  60          //名称:串口查询方式接收程序
  61          //功能:中断后,关中断使能,以查询方式接收PC命令字节,
  62          //      并对命令进行解析,返回命令值 
  63          /////////////////////////////////////////////
  64          unsigned char receive_cmd(us)
  65          unsigned char *us;
  66          {
  67   1      unsigned char i;
  68   1      unsigned char data_tmp[3];
  69   1      //data_tmp[0]   =*(us+1);
  70   1      //unsigned char data_chk[15]={0xff,0x55,0x55,0xFF,0xAA,0x01,0x01,84}; //为观察指针变量引入测试变量
  71   1      //unsigned char data *us=&data_chk[0];
  72   1        
  73   1            for(i=0;i<15;)
  74   1              {
  75   2                      if( (*(us+i)==0xFF)&( *(us+i+1)==0xAA ) )         //识别帧同步字节      
  76   2                      {
  77   3                              data_tmp[0]     =*(us+i+2);               // 此处采用for语句得不到正确值?
  78   3                              data_tmp[1]     =*(us+i+3);
  79   3                              data_tmp[2]     =*(us+i+4);
  80   3                              
  81   3                              goto next;
  82   3                      }
  83   2                      i++;
  84   2            }     
  85   1       
  86   1      next:   if( (data_tmp[0]==identity)&(data_tmp[1]==columne) )      //判断是否为对本2051系统                  
             -                          
  87   1              return (data_tmp[2]);                                               //返回控制指令
  88   1              else
  89   1              return (0x00);                                       
  90   1      }
  91          
  92          ////////////////////////////////////////
  93          //名称:出错处理
  94          //功能:接收到PC非法命令,作显示提示
  95          ////////////////////////////////////////
  96          void error_set(void)
  97          {
  98   1      //printf("Command Error!\n");
  99   1              _nop_();
 100   1              _nop_();        
 101   1      }
 102          
 103          /////////////////////////////*
 104          /*
 105          名称:串口 ISR
 106          功能:接收PC主机命令,作相应处理:温度采集,数据传送,初始参数设置
 107          ////////////////////////////*/
 108          void init1_isr(void) interrupt 4 using 3
 109          {
 110   1      unsigned char i;
 111   1      ES      =0;
 112   1      
 113   1      for(i=0;i<15;i++)                                     //接收PC命令帧               
 114   1              {
 115   2                      receive_data[i] =receive_byte();        //考虑可能丢失几个字节,使进入死循环
 116   2            }
C51 COMPILER V7.00  WIRELESS0                                                              03/14/2005 16:53:05 PAGE 3   

 117   1      
 118   1      command=receive_cmd(cmd_p);     //接收PC主机命令字节
 119   1      //命令处理
 120   1      if(command==collect)       //温度采集命令
 121   1        {
 122   2              //send_ds_cmd();       //发温度采集命令给所有DS18B20
 123   2              _nop_();
 124   2        }
 125   1      else if(command==transmit) //数据传送命令
 126   1        {
 127   2            //send_data_pc();     //EEPROM 数据包发送给PC
 128   2              _nop_();
 129   2        }
 130   1      //else if(command==init)  //设置定时器中断间隔
 131   1      //  {
 132   1      //      t0_count        =t0_data;
 133   1      //        t1_count0   =t1_data0;
 134   1      //        t1_count1     =t1_data1;
 135   1      //  }
 136   1      else                       //非法命令
 137   1            error_set();         //非法命令转出错处理
 138   1      
 139   1      //开中断,继续等待PC呼叫
 140   1      k++;
 141   1              if(k==2)
 142   1              while(1);
 143   1      serial_init();               //串行口重新初始化
 144   1      }
 145          
 146          main()
 147          {
 148   1      serial_init();           //串行口初始化
 149   1      
 150   1      //使能定时器中断,串行口中断,外部中断0
 151   1      IP      =0x01;             //外部中断0中断优先级最高
 152   1      //IT1   =1;                     //外部中断1为边缘触发
 153   1      //ET0   =1;
 154   1      //EX0   =1;
 155   1      //ET1   =0;                //定时器1用于串行通信波特率发生器,禁止中断  
 156   1      EX1     =0;                //外部中断1使能,接收PC命令
 157   1      
 158   1      //无限循环,等待
 159   1        while(1);
 160   1      }


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