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

📄 vfdb.lst

📁 该工程是通过RS485方式控制远程变频器实例
💻 LST
字号:
C51 COMPILER V8.08   VFDB                                                                  01/08/2008 15:03:27 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE VFDB
OBJECT MODULE PLACED IN vfdb.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\vfdb.c LARGE OPTIMIZE(0,SPEED) BROWSE INCDIR(.\include) DEBUG OBJECTEXT
                    -END PRINT(.\vfdb.lst) OBJECT(vfdb.obj)

line level    source

   1           /****************************************
   2          *名称:vfdb.c
   3          *功能:
   4          ****************************************/
   5          #include "includes.h"
   6          
   7          /*address*/
   8          # define    BROADCAST   0x00
   9          /*starting address*/
  10          # define    TEL_ADDR    0x0900      //通讯地址
  11          /*function*/
  12          # define    READREG     0x03        //读出寄存器内容
  13          # define    WRITEONE    0x06        //写入一笔资料至寄存器
  14          # define    WRITECHECK  0x08        //回路侦测
  15          # define    WRITEMORE   0x10        //写入多笔资料至寄存器
  16          
  17          # define    STX         0x3A        
  18          # define    CR          0x0D
  19          # define    LF          0x0A
  20          /****************************************
  21          *名称:Send_datatrans()
  22          *功能:发送前将输入数据转换成相应HEX格式,例如将0(0x00)-->'0'(0x30),A(0x0a)-->'A'(0x41)
  23          *说明:输入数据必须要在0~F(HEX)之间
  24          *入口函数:
  25          *出口函数:
  26          ****************************************/
  27          static UINT8 Send_datatrans(UINT8 t_data)
  28          {
  29   1        UINT8 r_data;
  30   1        if(( t_data >= 0 )&&( t_data <= 9 ))  r_data = t_data + 0x30;
  31   1        else if(( t_data >=10 )&&( t_data <= 15 ))    r_data =  t_data + 0x37;
  32   1        else r_data = 0;
  33   1      
  34   1        return r_data;
  35   1      
  36   1      }
  37          
  38           /****************************************
  39          *名称:Send_vfdbbyte()
  40          *功能:
  41          ****************************************/
  42          static void send_vfdbbyte( UINT8 s_data)
  43          {
  44   1        Sendbyte(Send_datatrans(s_data>>4));
  45   1        Sendbyte(Send_datatrans(s_data & 0x0f));
  46   1      }
  47           /****************************************
  48          *名称:Send_vfdbword()
  49          *功能:
  50          ****************************************/
  51          static void send_vfdbword( UINT16 s_data)
  52          {
  53   1        Sendbyte(Send_datatrans((UINT8)(s_data>>12)));
  54   1        Sendbyte(Send_datatrans((UINT8)((s_data & 0x0f00)>>8)));
C51 COMPILER V8.08   VFDB                                                                  01/08/2008 15:03:27 PAGE 2   

  55   1        Sendbyte(Send_datatrans((UINT8)((s_data & 0x00f0)>>4)));
  56   1        Sendbyte(Send_datatrans((UINT8)(s_data & 0x000f)));
  57   1      }
  58          
  59          /****************************************
  60          *名称:Send_readreg()
  61          *功能:完成读出寄存器数据发送指令
  62          *说明:
  63          
  64          STX---Address---Function---Starting Address---Number of data(count by word)---LRC Check---END
  65          
  66          *入口函数:addr:通讯地址;s_addr:操作起始地址;num:操作数据笔数(word)
  67          *出口函数:
  68          ****************************************/
  69          void Send_readreg(UINT8 addr, UINT16 s_addr,UINT16 num)
  70          {
  71   1        UINT8 lrc_data;
  72   1        //lrc_data = 0xff - (addr + READREG + (UINT8)(s_addr>>8) + (UINT8)(s_addr&0x00ff) + (UINT8)(num>>8) + (U
             -INT8)(num&0x00ff));
  73   1        
  74   1              lrc_data = ~(addr + READREG + (UINT8)(s_addr>>8) + (UINT8)(s_addr&0x00ff) + (UINT8)(num>>8) + (UINT8)(num
             -&0x00ff)) + 1;
  75   1      
  76   1      //  lrc_data =0xd7;
  77   1      
  78   1        /*START*/
  79   1        Sendbyte(STX);
  80   1        /*address*/
  81   1        send_vfdbbyte(addr);
  82   1        /*function*/
  83   1        send_vfdbbyte(READREG);
  84   1        /*starting address*/
  85   1        send_vfdbword(s_addr);
  86   1        /*number of data (count by word)*/
  87   1        send_vfdbword(num);
  88   1        /*LRC check*/
  89   1        send_vfdbbyte(lrc_data);
  90   1        /*END*/
  91   1        Sendbyte(CR); 
  92   1        Sendbyte(LF); 
  93   1      }
  94          /****************************************
  95          *名称:Send_writeone()
  96          *功能:完成发送一笔数据到固定地址
  97          *说明:
  98          
  99          STX---Address---Function---Data Address---Data content---LRC Check---END
 100          
 101          *入口函数:addr:通讯地址;d_addr:写入数据起始地址;w_data:写入数据
 102          *出口函数:
 103          ****************************************/
 104          void Send_writeone(UINT8 addr,UINT16 d_addr,volatile UINT16 w_data)
 105          {
 106   1        UINT8 lrc_data;
 107   1        lrc_data = ~(addr + WRITEONE + (UINT8)(d_addr>>8) + (UINT8)(d_addr&0x00ff) + (UINT8)(w_data>>8) + (UINT8
             -)(w_data&0x00ff)) + 1;
 108   1        /*START*/
 109   1        Sendbyte(STX);
 110   1        /*address*/
 111   1        send_vfdbbyte(addr);
 112   1        /*function*/
 113   1        send_vfdbbyte(WRITEONE);
C51 COMPILER V8.08   VFDB                                                                  01/08/2008 15:03:27 PAGE 3   

 114   1        /*data address*/
 115   1        send_vfdbword(d_addr);
 116   1        /*data content*/
 117   1        send_vfdbword(w_data);
 118   1        /*LRC check*/
 119   1        send_vfdbbyte(lrc_data);
 120   1        /*END*/
 121   1        Sendbyte(CR); 
 122   1        Sendbyte(LF); 
 123   1      }
 124          /****************************************
 125          *名称:Send_writecheck()
 126          *功能:完成一次数据发送,回路侦测
 127          *说明:
 128          
 129          STX---Address---Function---Starting Address---Number of data(count by word)---LRC Check---END
 130          
 131          *入口函数:addr:通讯地址;d_addr:写入数据起始地址;w_data:写入数据
 132          *出口函数:
 133          ****************************************/
 134          void Send_writecheck(UINT8 addr,UINT16 d_addr,volatile UINT16 w_data)
 135          {
 136   1        UINT8 lrc_data;
 137   1        lrc_data = ~(addr + WRITECHECK + (UINT8)(d_addr>>8) + (UINT8)(d_addr&0x00ff) + (UINT8)(w_data>>8) + (UIN
             -T8)(w_data&0x00ff)) + 1;
 138   1        /*START*/
 139   1        Sendbyte(STX);
 140   1        /*address*/
 141   1        send_vfdbbyte(addr);
 142   1        /*function*/
 143   1        send_vfdbbyte(WRITECHECK);
 144   1        /*data address*/
 145   1        send_vfdbword(d_addr);
 146   1        /*data content*/
 147   1        send_vfdbword(w_data);
 148   1        /*LRC check*/
 149   1        send_vfdbbyte(lrc_data);
 150   1        /*END*/
 151   1        Sendbyte(CR); 
 152   1        Sendbyte(LF); 
 153   1      }
 154          /****************************************
 155          *名称:Send_writemore()
 156          *功能:完成发送一笔数据到固定地址
 157          *说明:
 158          
 159          STX---Address---Function---Data Address---Data content---LRC Check---END
 160          
 161          *入口函数:addr:通讯地址;d_addr:写入数据起始地址;w_data:写入数据地址
 162          *出口函数:
 163          ****************************************/
 164          void Send_writemore(UINT8 addr,UINT16 d_addr, UINT16 num,volatile UINT16 *w_data)
 165          {
 166   1        UINT8 lrc_data;
 167   1        UINT8 num_byte;
 168   1        volatile  UINT16 i,w_datareg;
 169   1      
 170   1        num_byte = (UINT8)num*2;
 171   1      
 172   1        lrc_data = addr + WRITEMORE + (UINT8)(d_addr>>8) + (UINT8)(d_addr&0x00ff) + (UINT8)(num>>8) + (UINT8)(nu
             -m&0x00ff);
 173   1        /*START*/
C51 COMPILER V8.08   VFDB                                                                  01/08/2008 15:03:27 PAGE 4   

 174   1        Sendbyte(STX);
 175   1        /*address*/
 176   1        send_vfdbbyte(addr);
 177   1        /*function*/
 178   1        send_vfdbbyte(WRITEMORE);
 179   1        /*data address*/
 180   1        send_vfdbword(d_addr);
 181   1        /*number of data(word)*/
 182   1        send_vfdbword(num);
 183   1        /*number of data(byte)*/
 184   1        send_vfdbbyte(num_byte);
 185   1        for(i=0;i<num;i++)
 186   1        {
 187   2              w_datareg = *w_data;
 188   2              lrc_data += ((UINT8)(w_datareg>>8) + (UINT8)(w_datareg&0x00ff));
 189   2              w_data++;
 190   2              /*data content*/
 191   2              send_vfdbword(w_datareg);
 192   2        }
 193   1        /*LRC check*/
 194   1        lrc_data = ~lrc_data + 1; 
 195   1        send_vfdbbyte(lrc_data);
 196   1        /*END*/
 197   1        Sendbyte(CR); 
 198   1        Sendbyte(LF); 
 199   1      }
 200          
 201          
 202          
 203          
 204          /****************************************
 205          *名称:Send_testbyte()
 206          *功能:测试函数,测试接收后的函数发送出去,数据以字节格式提供
 207          ****************************************/
 208          void Send_testbyte(UINT8 *p_data,UINT8 num) 
 209          {
 210   1        UINT8 i;
 211   1        UINT8 test_data;
 212   1        UINT8 *p_datareg;
 213   1      
 214   1        p_datareg = p_data;
 215   1      
 216   1        for(i=0;i<num;i++)
 217   1        {
 218   2              test_data = *p_datareg;
 219   2              send_vfdbbyte(test_data);
 220   2              p_datareg++;
 221   2        }
 222   1      
 223   1        Sendbyte(CR); 
 224   1        Sendbyte(LF); 
 225   1      
 226   1      }
 227          /****************************************
 228          *名称:Send_testword()
 229          *功能:测试函数,测试接收后的函数发送出去,数据以字节格式提供
 230          ****************************************/
 231          void Send_testword(UINT16 *p_data,UINT8 num) 
 232          {
 233   1        UINT8 i;
 234   1        UINT16 test_data;
 235   1        UINT16 *p_datareg;
C51 COMPILER V8.08   VFDB                                                                  01/08/2008 15:03:27 PAGE 5   

 236   1      
 237   1        p_datareg = p_data;
 238   1      
 239   1        for(i=0;i<num;i++)
 240   1        {
 241   2              test_data = *p_datareg;
 242   2              send_vfdbbyte((UINT8)(test_data>>8));
 243   2              send_vfdbbyte((UINT8)test_data);
 244   2              p_datareg++;
 245   2        }
 246   1      
 247   1        Sendbyte(CR); 
 248   1        Sendbyte(LF); 
 249   1      
 250   1      }
 251          
 252          /****************************************
 253          *
 254          *Broadcast all and get the Address
 255          *****************************************/
 256          void Broadcast (void)
 257          {
 258   1        Send_readreg(BROADCAST,TEL_ADDR,1);
 259   1      }


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