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

📄 slave.lst

📁 基于RS485的多机通讯
💻 LST
字号:
C51 COMPILER V7.06   SLAVE                                                                 03/28/2005 18:51:49 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SLAVE
OBJECT MODULE PLACED IN slave.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE slave.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //-----------------------函数声明,变量定义--------------------------------------------------------
   2          #include <reg51.h>
   3          sbit RE_DE=P1^0;
   4          
   5          #define COUNT 10                // 定义接收缓冲区大小 
   6          #define ADD    5                                //定义设备地址
   7          unsigned char buffer[COUNT];    //定义接收缓冲区
   8          unsigned char point;            //定义接收数据个数指示变量
   9          
  10          void UART_init();               //串口初始化函数
  11          void COM_send(void);            //串口接收函数
  12          unsigned char CLU_checkdata(void);//计算校验位函数
  13          //--------------------------------------------------------------------------------------------------
  14          // 函数名称: UART_init()串口初始化函数
  15          // 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
  16          //            串口接收中断允许,发送中断禁止
  17          //--------------------------------------------------------------------------------------------------
  18          void UART_init()
  19          {
  20   1                           //初始化串行口和波特率发生器 
  21   1      SCON =0x0F0;          //选择串口工作方式为3,打开接收允许
  22   1      TMOD =0x21;          //定时器1工作在方式2,定时器0工作在方式1
  23   1      TH1 =0xfd;           //实现波特率9600(系统时钟11.0592MHZ)
  24   1      TL1 =0xfd;           //实现波特率9600(系统时钟11.0592MHZ)
  25   1      TR1 =1;              //启动定时器T1
  26   1      ET1 =0; 
  27   1      ES=1;                //允许串行口中断
  28   1      PS=1;                //设计串行口中断优先级
  29   1      EA =1;               //单片机中断允许
  30   1      SM2=1;                //设备处于地址监听状态
  31   1      }
  32          //--------------------------------------------------------------------------------------------------
  33          // 函数名称: com_interrup()串口接收中断处理函数
  34          // 函数功能: 接收包括起始位0xFE,地址位和终止位0xEF在内的十位数据到数据缓冲区,
  35          //            地址不匹配,则接收到的是无效数字,不写到接收缓冲区
  36          //--------------------------------------------------------------------------------------------------
  37          com_interrupt(void) interrupt 4 using 3
  38          {
  39   1        unsigned char RECEIVR_buffer;
  40   1        if(RI) 
  41   1        {                               //处理接收中断
  42   2         RI=0;                                 //清除中断标志位
  43   2         RECEIVR_buffer=SBUF;                     //接收串口数据
  44   2         if(point==0)                                             //如果还没有接收到起始位
  45   2              {
  46   3              if(RECEIVR_buffer==0xFE)         //判断是否起始标志位
  47   3                   buffer[point++]=RECEIVR_buffer;//起始正确,接收起始位
  48   3                      else
  49   3                           point=0;                               //不是,继续等待起始位
  50   3                              } 
  51   2           else if(point==1)                                          //是否地址位
  52   2              {
  53   3              if(RECEIVR_buffer==ADD)          //判断地址是否匹配
  54   3                buffer[point++]=RECEIVR_buffer;//地址匹配,接收开始接收
  55   3                      else
C51 COMPILER V7.06   SLAVE                                                                 03/28/2005 18:51:49 PAGE 2   

  56   3                           point=0;                               //不匹配,继续下一个起始位
  57   3                              } 
  58   2      else if(point>0&&point<10)                               //判断是否接收够十位数据
  59   2               buffer[point++]=RECEIVR_buffer;         //不够,把接收到的数据放入接收缓存区
  60   2      else point=0;                                    //缓冲区已满,清除缓存区内数据重新接收
  61   2      }
  62   1      if(TI)                                   //串口发送中断
  63   1      {
  64   2       TI=0;                                   //清除发送中断
  65   2       }
  66   1      }
  67          //--------------------------------------------------------------------------------------------------
  68          // 函数名称: COM_send()串口发送函数
  69          // 函数功能: 把数据缓冲区的十位数据发送出去
  70          //--------------------------------------------------------------------------------------------------
  71          void COM_send(void)
  72          {
  73   1       RE_DE=1;                                //设置MAX483进入发送状态
  74   1       for(point=0;point<=10,TI=1;point++)     //连续发送十位数据
  75   1                                               //把缓存区的数据都发送到串口
  76   1        {
  77   2         SBUF=buffer[point];
  78   2         TI=0;
  79   2         }
  80   1          RE_DE=0;                                //设置MAX483进入接收状态
  81   1      }
  82          
  83          //--------------------------------------------------------------------------------------------------
  84          // 函数名称: 主函数
  85          // 函数功能: 调度个子函数,完成通信过程
  86          //--------------------------------------------------------------------------------------------------
  87           void main(void)
  88           {
  89   1         UART_init();                                          //初始化串口
  90   1      
  91   1        do
  92   1        {
  93   2         }
  94   1         while(point!=10);            //判断数据是否接收完成
  95   1         COM_send();                          //地址匹配,数据完整接收,调用发送程序通知主机
  96   1        SM2=0;                  //设置为点对点通信状态   
  97   1       }


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