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

📄 pmpdatar.lst

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


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

stmt level    source

   1          /*****************************************/
   2          /* Copyright (c) 2005, 通信工程学院      */
   3          /* All rights reserved.                  */
   4          /* 作    者:戴 佳                                               */
   5          /*****************************************/
   6          
   7          #include "PMPDataR.h"
   8          
   9          /* 延时t毫秒 */
  10          void delay(uint t)
  11          {
  12   1              uint i;
  13   1              while(t--)
  14   1              {
  15   2                      /* 对于11.0592M时钟,约延时1ms */
  16   2                      for (i=0;i<125;i++)
  17   2                      {}
  18   2              }
  19   1      } 
  20          
  21          /* 发送数据函数 */
  22          uchar recvdata(uchar *buf)
  23          {
  24   1              uchar i,tmp;
  25   1              uchar len;                                      // 保存数据长度
  26   1              uchar ecc;                                      // 保存校验字节
  27   1              
  28   1              /* 接收数据长度字节 */
  29   1              RI = 0;
  30   1              while(!RI);
  31   1              if (RB8==1)                                     
  32   1                      return 0xee;                    // 若接收的为地址帧,则返回0xee
  33   1              len = SBUF;
  34   1              RI = 0;
  35   1              
  36   1              /* 使用len的值为校验字节ecc赋初值 */
  37   1              ecc = len;                                      
  38   1      
  39   1              /* 接收数据 */
  40   1              for (i=0;i<len;i++)
  41   1              {
  42   2                      while(!RI);
  43   2                      if (RB8==1)
  44   2                              return 0xee;            // 若接收的为地址帧,则返回0xee
  45   2                      *buf = SBUF;    
  46   2                      ecc = ecc^(*buf);               // 进行字节校验
  47   2                      RI = 0; 
  48   2                      buf++;          
  49   2              }
  50   1              *buf = 0;                                       // 表示数据结束
  51   1              
  52   1              /* 接收校验字节 */
  53   1              while(!RI);
  54   1              if (RB8==1)                                     
  55   1                      return 0xee;                    // 若接收的为地址帧,则返回0xee
C51 COMPILER V7.02b   PMPDATAR                                                             12/10/2005 20:50:40 PAGE 2   

  56   1              tmp = SBUF;
  57   1              RI = 0;
  58   1      
  59   1              /* 进行数据校验 */
  60   1              ecc = tmp^ecc;
  61   1              if (ecc!=0)                                     // 如果校验错误
  62   1              {
  63   2                      *(buf-len) = 0;                 // 清空数据缓冲区
  64   2                      
  65   2                      /* 发送校验错误信号ERR */
  66   2                      TI = 0; 
  67   2                      TB8 = 0;
  68   2                      SBUF = ERR;
  69   2                      while(!TI);
  70   2                      TI = 0;
  71   2      
  72   2                      return 0xff;                    // 返回0xff表示校验错误
  73   2              }
  74   1      
  75   1              /* 发送校验成功信号SUCC */
  76   1              TI = 0;
  77   1              TB8 = 0;
  78   1              SBUF = SUCC;
  79   1              while(!TI);
  80   1              TI = 0;
  81   1      
  82   1              return 0;                                       // 校验成功,返回0
  83   1      }
  84          
  85          /* 串口初始化函数 */
  86          void init_serial()
  87          {
  88   1              TMOD = 0x20;                            // 定时器T1使用工作方式2
  89   1              TH1 = 250;
  90   1              TL1 = 250;
  91   1              TR1 = 1;                                        // 开始计时
  92   1              PCON = 0x80;                            // SMOD = 1
  93   1              SCON = 0xd0;                            // 工作方式,9位数据位,波特率9600kbit/s,允许接收 
  94   1      }
  95          
  96          /* 主程序 */
  97          void main()
  98          { 
  99   1              uchar i = 0;
 100   1              uchar tmp = 0xff;
 101   1      
 102   1              addr = P1&0x0f;                         // 获取本机地址
 103   1      
 104   1              P20 = 1;                                        // 发光管不亮
 105   1              
 106   1              init_serial();                          // 串口初始化 
 107   1      
 108   1              EA = 0;                                         // 关闭所有中断
 109   1              
 110   1              /* 进入设备应答 */
 111   1              while(1)
 112   1              {
 113   2                      SM2 = 1;                                // 只接收地址帧
 114   2      
 115   2                      /* 如果接收到的地址帧不是本机地址,则继续等待 */
 116   2                      tmp = addr-1;
 117   2                      while (tmp!=addr)
C51 COMPILER V7.02b   PMPDATAR                                                             12/10/2005 20:50:40 PAGE 3   

 118   2                      {
 119   3                              RI = 0;
 120   3                              while(!RI)
 121   3                              tmp = SBUF;
 122   3                              RI = 0;
 123   3                      }       
 124   2      
 125   2                      /* 发送本机地址作为应答信号,准备接收数据 */
 126   2                      TI = 0;                         
 127   2                      TB8 = 0;                                // 主机不检测该位
 128   2                      SBUF = addr;
 129   2                      while(!TI);
 130   2                      TI = 0;
 131   2                      SM2 = 0;                                // 允许接收数据
 132   2      
 133   2                      /* 数据接收 */
 134   2                      tmp = 0xff;
 135   2                      while(tmp==0xff)                // 如果校验失败则重新接收数据
 136   2                      {
 137   3                              /* 校验失败返回0xff,检测到地址帧则返回0xee,接收成功返回0 */
 138   3                              tmp = recvdata(buf);    
 139   3                      }
 140   2                      if (tmp==0x00)                  // 校验正确,表示接收成功
 141   2                      {
 142   3                              /* 绿灯亮,持续500ms,表示接收数据成功 */
 143   3                              P20 = 0;                        
 144   3                              delay(500);
 145   3                              P20 = 1;        
 146   3                      }           
 147   2                      // 如果接收数据时发现地址帧,则重新开始整个接收过程
 148   2              }
 149   1      }


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