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

📄 modbusfunc.lst

📁 用于C51上的modbus协议
💻 LST
字号:
C51 COMPILER V7.50   MODBUSFUNC                                                            07/12/2005 11:40:45 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MODBUSFUNC
OBJECT MODULE PLACED IN MODBUSFUNC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MODBUSFUNC.c COMPACT ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "STC89C58.h"
   2          #include "TG01R.h"
   3          #include "Modbus.h"
   4          #include "ErrCheck.c"
   5          #include "HexAsc.c"
   6          #include "Serial.c"
   7          #include <stdio.h>
   8          
   9          void  Delay_50us(uint _time);                   //延时函数,非中断方式,延时时间基准50us
  10          void  TimeOut_Start(uint _time50us);            //开始时间溢出,中断方式,时间基准50us
  11          void  TimeOut_ReStart(uint _time);          //
  12          void  TimeOut_Stop(void);                       //停止时间溢出定时
  13          
  14          bit       T0IR;
  15          
  16          uchar ModeFlag;
  17          /*------------------------------------------------------------------------------------------*
  18           *  定义Modbus的模式关键字                                                                  *
  19           *------------------------------------------------------------------------------------------*/
  20          #define     ASCII          0                               /*ASCII  模式关键字    */
  21          #define     RTU            1                               /*RTU    模式关键字    */
  22                                   
  23          /*-------------------------------------------------------------------------------------------*
  24           *  定义波特率关键字@ 24M  (24.01065M)                                                       *
  25           *-------------------------------------------------------------------------------------------*/
  26          #define         ByteRate_4800k     0x00          //波特率4800kbps
  27          #define         ByteRate_9600k     0x01          //波特率9600kbps
  28          
  29          uchar   code    BTR_CODETAB[]={
  30              0xf3,                      //;4800KBPS的预设值
  31              0xf5                       //;9600KBPS的预设值
  32          };                      
  33          
  34          /*-------------------------------------------------------------------------------------------
  35           *函数原型:  void  ModbusInit(uchar Modbus_mode,uchar ByteRate)                                 *
  36           *参数说明:  Modbus_mode:modbus的运行模式,可选模式为ASCII_MODE或RTU_MODE;                   *
  37           *           ByteRate:串口的波特率,可选的参数为ByteRate_4800k或ByteRate_9600k;              *             
             -                         
  38           *返回值:    无                                                                             *
  39           *说明:          用于初始化串口                                                                 *
  40           -------------------------------------------------------------------------------------------*/
  41          void  ModbusInit(uchar Modbus_mode,uchar ByteRate)  {
  42   1          ModeFlag=Modbus_mode;
  43   1          if(ModeFlag==ASCII)  {                   //ASCII_MODE
  44   2              SCON =  0x50;                        //串口工作方式1,REN=1(Receive Enable),无TB8、RB8   
  45   2          }
  46   1               
  47   1          else if(ModeFlag==RTU) {                 //RTU_MODE
  48   2              SCON =  0xD0;                        //串口工作方式3,REN=1(Receive Enable),有TB8、RB8
  49   2          }
  50   1      
  51   1              TMOD|=  0x20;                        //T1,初值自动重装
  52   1              TH1  =  BTR_CODETAB[ByteRate];     
  53   1              TL1  =  BTR_CODETAB[ByteRate]; 
  54   1              TR1  =  1;                           //开始计数         
C51 COMPILER V7.50   MODBUSFUNC                                                            07/12/2005 11:40:45 PAGE 2   

  55   1              IE  |=  0x80;
  56   1      
  57   1      //        IE  |=  0x90;                        //开放串口中断        
  58   1      /********************************************************************************************
  59   1          if(Modbus_mode==ASCII_MODE)  {
  60   1              SCON =  0x50;                        //串口工作方式1,REN=1(Receive Enable),无TB8、RB8
  61   1              TMOD|=  0x20;                        //T1,初值自动重装
  62   1              TH1  =  BTR_CODETAB[ByteRate];     
  63   1              TL1  =  BTR_CODETAB[ByteRate]; 
  64   1              TR1  =  1;                           //开始计数         
  65   1              IE  |=  0x90;                        //开放串口中断
  66   1          }
  67   1          else  {
  68   1              SCON =  0x50;                        //串口工作方式1,REN=1(Receive Enable),无TB8、RB8
  69   1              TMOD|=  0x20;                        //T1,初值自动重装
  70   1              TH1  =  BTR_CODETAB[ByteRate];     
  71   1              TL1  =  BTR_CODETAB[ByteRate]; 
  72   1              TR1  =  1;                           //开始计数         
  73   1              IE  |=  0x90;                        //开放串口中断
  74   1          }        
  75   1      *********************************************************************************************/
  76   1      }
  77          
  78          
  79          
  80          ModbusFrame QueryFrame,                 //查询消息暂存器
  81                      RespFrame;                  //回应消息暂存器
  82          
  83          
  84          
  85          
  86          
  87          Frame_Style_A  Rd_Coil_St;
  88          
  89          
  90          
  91          uchar Rcv_Str_intime(uchar *RcvDataBuf)   {
  92   1              uchar counter,oyetempData;
  93   1              counter=0;
  94   1          while(RI==0);
  95   1          RI=0;
  96   1          oyetempData=SBUF;
  97   1          *(RcvDataBuf+counter)=SBUF;
  98   1          counter++;
  99   1          TimeOut_Start(10);
 100   1          while(1)  {
 101   2              while((RI==0)&&(T0IR==0));
 102   2              if(T0IR==1)  {
 103   3                  return(counter);
 104   3              }
 105   2              if(RI==1)  {
 106   3                  RI=0;
 107   3                  *(RcvDataBuf+counter)=SBUF;          
 108   3                      counter++;
 109   3                  TimeOut_ReStart(2); 
 110   3              }
 111   2          }           
 112   1      }
 113          
 114          
 115                                                  
 116          /*
C51 COMPILER V7.50   MODBUSFUNC                                                            07/12/2005 11:40:45 PAGE 3   

 117          main()  {
 118              uchar tempData,i;
 119              uchar xdata DataBuf[0x10];
 120              
 121              ModbusInit(RTU,ByteRate_4800k);
 122              printf("Start=%c",tempData);
 123              for(i=0;i<16;i++)  {
 124                  DataBuf[i]=0x03;
 125              }
 126              i=Rcv_Str_intime(DataBuf);
 127          //    Uart_Send_Str(DataBuf);
 128              Uart_Send_Char(i);
 129              while(1);
 130          }    
 131          */
 132          
 133          uchar idata trdata[10]={'M','C','S','-','5','1',0x0d,0x0a,0x00};
 134          main()  {
 135   1          uchar i;
 136   1          TMOD=0x20;
 137   1          TL1=0xf3;TH1=0xf3;
 138   1          SCON=0xd3;PCON=0x00;
 139   1          TR1=1;
 140   1          while(1)  {
 141   2              i=0;
 142   2              while(trdata[i]!=0x00)  {
 143   3      //            while(SBUF!=trdata[i])  {
 144   3                      SBUF=trdata[i];
 145   3      //            };
 146   3                  while(TI==0);
 147   3                  TI=0;
 148   3                  i++;
 149   3              }
 150   2              Delay_50us(10000);
 151   2          }
 152   1      }
 153          
 154              


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    650    ----
   CONSTANT SIZE    =    553    ----
   XDATA SIZE       =      2    ----
   PDATA SIZE       =     75      21
   DATA SIZE        =   ----    ----
   IDATA SIZE       =     10       3
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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