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

📄 ppdatar.lst

📁 包含电路图及c语言程序
💻 LST
字号:
C51 COMPILER V7.02b   PPDATAR                                                              12/10/2005 20:40:39 PAGE 1   


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

stmt level    source

   1          /*****************************************/
   2          /* Copyright (c) 2005, 通信工程学院      */
   3          /* All rights reserved.                  */
   4          /* 作    者:戴 佳                                               */
   5          /*****************************************/
   6          
   7          #include "PPDataR.h"
   8          
   9          /* 发送数据函数 */
  10          uchar recvdata(uchar *buf)
  11          {
  12   1              uchar i,tmp;
  13   1              uchar len;                                      // 保存数据长度
  14   1              uchar ecc;                                      // 保存校验字节
  15   1              
  16   1              /* 接收数据长度字节 */
  17   1              RI = 0;
  18   1              while(!RI);
  19   1              len = SBUF;
  20   1              RI = 0;
  21   1              
  22   1              /* 使用len的值为校验字节ecc赋初值 */
  23   1              ecc = len;                                      
  24   1      
  25   1              /* 接收数据 */
  26   1              for (i=0;i<len;i++)
  27   1              {
  28   2                      while(!RI);
  29   2                      *buf = SBUF;    
  30   2                      ecc = ecc^(*buf);               // 进行字节校验
  31   2                      RI = 0; 
  32   2                      buf++;          
  33   2              }
  34   1              *buf = 0;                                       // 表示数据结束
  35   1              
  36   1              /* 接收校验字节 */
  37   1              while(!RI);
  38   1              tmp = SBUF;
  39   1              RI = 0;
  40   1      
  41   1              /* 进行数据校验 */
  42   1              ecc = tmp^ecc;
  43   1              if (ecc!=0)                                     // 如果校验错误
  44   1              {
  45   2                      *(buf-len) = 0;                 // 清空数据缓冲区
  46   2                      
  47   2                      /* 发送校验错误信号ERR */
  48   2                      TI = 0; 
  49   2                      SBUF = ERR;
  50   2                      while(!TI);
  51   2                      TI = 0;
  52   2      
  53   2                      return 0xff;                    // 返回0xff表示校验错误
  54   2              }
  55   1      
C51 COMPILER V7.02b   PPDATAR                                                              12/10/2005 20:40:39 PAGE 2   

  56   1              /* 发送校验成功信号SUCC */
  57   1              TI = 0;
  58   1              SBUF = SUCC;
  59   1              while(!TI);
  60   1              TI = 0;
  61   1      
  62   1              return 0;                                       // 校验成功,返回0
  63   1      }
  64          
  65          void init_serial()
  66          {
  67   1              TMOD = 0x20;                            // 定时器T1使用工作方式2
  68   1              TH1 = 250;
  69   1              TL1 = 250;
  70   1              TR1 = 1;                                        // 开始计时
  71   1              PCON = 0x80;                            // SMOD = 1
  72   1              SCON = 0x50;                            // 工作方式1,波特率9600kbit/s,允许接收 
  73   1      }
  74          
  75          /* 主程序 */
  76          void main()
  77          { 
  78   1              uchar tmp = 0;
  79   1              /* 串口初始化 */
  80   1              init_serial();
  81   1      
  82   1              EA = 0;                                 // 关闭所有中断
  83   1      
  84   1              while(1)
  85   1              {
  86   2                      /* 如果接收到的数据不是CALL,则继续等待 */
  87   2                      while (tmp!=CALL)
  88   2                      {
  89   3                              RI = 0;
  90   3                              while(!RI)
  91   3                              tmp = SBUF;
  92   3                              RI = 0;
  93   3                      }
  94   2              
  95   2                      /* 检测P0口判断当前是否工作忙,若P0=0xBB,则为忙状态 */
  96   2                      P0 = 0xff;
  97   2                      tmp = P0;
  98   2                      if(tmp==0xBB)           // 如果P0口为0xBB,发送BUSY信号
  99   2                      {
 100   3                              TI = 0;
 101   3                              SBUF = BUSY;
 102   3                              while(!TI);
 103   3                              TI = 0;
 104   3                              continue;
 105   3                      }
 106   2      
 107   2                      /* 否则发送OK信号,表示从机可以接收数据 */
 108   2                      TI = 0;                         
 109   2                      SBUF = OK;
 110   2                      while(!TI);
 111   2                      TI = 0;
 112   2      
 113   2                      /* 数据接收 */
 114   2                      tmp = 0xff;
 115   2                      while(tmp==0xff)
 116   2                      {
 117   3                              tmp = recvdata(buf);    // 校验失败返回0xff,接收成功返回0
C51 COMPILER V7.02b   PPDATAR                                                              12/10/2005 20:40:39 PAGE 3   

 118   3                      }
 119   2              }
 120   1      }


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