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

📄 commrs485.lst

📁 STC12C5410AD模拟串口再现多串口通讯
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   COMMRS485                                                             10/30/2008 13:20:06 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE COMMRS485
OBJECT MODULE PLACED IN CommRS485.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CommRS485.C OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1           #include"include.h"
   2          
   3           /********************************************************************************************************
             -*
   4          ** 函数名称: void Initiate_RS232(void)
   5          ** 功能描述: 串口初始化函数
   6          ** 输   入: 无
   7          ** 输   出: 无
   8          ** 全局变量: 
   9          ** 调用模块: 
  10          **
  11          ** 作   者: 李伟
  12          ** 日   期: 2008年12月09日
  13          **-------------------------------------------------------------------------------------------------------
  14          ** 修 改 人:
  15          ** 日   期:
  16          **-------------------------------------------------------------------------------------------------------
  17          ********************************************************************************************************/
  18          void Initiate_RS485(void)
  19          {
  20   1          ES    = 0;
  21   1          PCON |= 0x80;                   //SMOD=1
  22   1          SCON  = 0x50;                   //0101,0001 8位数据位,无奇偶校验
  23   1              TMOD &= 0x0F;
  24   1          TMOD |= 0x20;                   //设置T1为波特率发生器
  25   1          TH1   = 0xFA;                   //11.0592MHz 晶振,波特率=9600
  26   1          TL1   = 0xFA;
  27   1      //    AUXR |=0x10;
  28   1          ES    = 1;                      //允许串口中断
  29   1          EA    = 1;                      //开总中断
  30   1          TR1   = 1;                      //开定时器1
  31   1      }
  32          /*********************************************************************************************************
  33          ** 函数名称: void Suart_Send_Byte(uint8 Send_Byte)
  34          ** 功能描述: 串口发送函数
  35          ** 输   入: 无
  36          ** 输   出: 无
  37          ** 全局变量: 
  38          ** 调用模块: 
  39          **
  40          ** 作   者: 李伟
  41          ** 日   期: 2008年12月09日
  42          **-------------------------------------------------------------------------------------------------------
  43          ** 修 改 人:
  44          ** 日   期:
  45          **-------------------------------------------------------------------------------------------------------
  46          ********************************************************************************************************/
  47          void Suart_Send_Byte(uint8 Send_Byte)
  48          {
  49   1          ES = 0;                      //关串口中断
  50   1          TI = 0;                      //清零串口发送完成中断请求标志
  51   1          SBUF = Send_Byte;
  52   1          //WDT_CONTR = 0x3c;            /**********************喂狗**********************/
  53   1          while(TI == 0);              //等待发送完成
  54   1          TI = 0;                      //清零串口发送完成中断请求标志
C51 COMPILER V7.06   COMMRS485                                                             10/30/2008 13:20:06 PAGE 2   

  55   1          ES = 1;                      //允许串口中断
  56   1      
  57   1      }
  58          /*********************************************************************************************************
  59          ** 函数名称: void  CommSendByteWithChk(uint8 Commdata)
  60          ** 功能描述: 
  61          ** 输   入: 无
  62          ** 输   出: 无
  63          ** 全局变量: 
  64          ** 调用模块: 
  65          **
  66          ** 作   者: 李伟
  67          ** 日   期: 2008年12月09日
  68          **-------------------------------------------------------------------------------------------------------
  69          ** 修 改 人:
  70          ** 日   期:
  71          **-------------------------------------------------------------------------------------------------------
  72          ********************************************************************************************************/
  73          void  CommSendByteWithChk(uint8 Commdata)
  74          {
  75   1          uint8 i,j;
  76   1          i = Commdata >> 4;
  77   1          j = Commdata & 0x0F;
  78   1          if(i<10)
  79   1              i += 0x30;
  80   1          else
  81   1              i += 0x37;
  82   1          if(j<10)
  83   1              j += 0x30;
  84   1          else
  85   1              j += 0x37;
  86   1          ComCalculChkSum += i;
  87   1          ComCalculChkSum += j;
  88   1          Suart_Send_Byte(i);
  89   1          Suart_Send_Byte(j);
  90   1      }
  91          /*********************************************************************************************************
  92          ** 函数名称: void CommSendByteWithoutChk(uint8 Commdata)
  93          ** 功能描述: 
  94          ** 输   入: 无
  95          ** 输   出: 无
  96          ** 全局变量: 
  97          ** 调用模块: 
  98          **
  99          ** 作   者: 李伟
 100          ** 日   期: 2008年12月10日
 101          **-------------------------------------------------------------------------------------------------------
 102          ** 修 改 人:
 103          ** 日   期:
 104          **-------------------------------------------------------------------------------------------------------
 105          ********************************************************************************************************/
 106          void CommSendByteWithoutChk(uint8 Commdata)
 107          {
 108   1          uint8 i,j;
 109   1          i = Commdata >> 4;
 110   1          j = Commdata & 0x0F;
 111   1          if(i<10)
 112   1              i += 0x30;
 113   1          else
 114   1              i += 0x37;
 115   1          Suart_Send_Byte(i);
 116   1          if(j<10)
C51 COMPILER V7.06   COMMRS485                                                             10/30/2008 13:20:06 PAGE 3   

 117   1              j += 0x30;
 118   1          else
 119   1              j += 0x37;
 120   1          Suart_Send_Byte(j);
 121   1      }
 122          /*********************************************************************************************************
 123          ** 函数名称: void CommSendWordWithChk(uint16 Commword)
 124          ** 功能描述: 
 125          ** 输   入: 无
 126          ** 输   出: 无
 127          ** 全局变量: 
 128          ** 调用模块: 
 129          **
 130          ** 作   者: 李伟
 131          ** 日   期: 2008年12月10日
 132          **-------------------------------------------------------------------------------------------------------
 133          ** 修 改 人:
 134          ** 日   期:
 135          **-------------------------------------------------------------------------------------------------------
 136          ********************************************************************************************************/
 137          void CommSendWordWithChk(uint16 Commword)
 138          {
 139   1          CommSendByteWithChk((uint8)(Commword>>8));
 140   1          CommSendByteWithChk((uint8)(Commword));
 141   1      }
 142          /*********************************************************************************************************
 143          ** 函数名称: void Comm(void) interrupt 4
 144          ** 功能描述: 串口中断函数
 145          ** 输   入: 无
 146          ** 输   出: 无
 147          ** 全局变量: 
 148          ** 调用模块: 
 149          **
 150          ** 作   者: 李伟
 151          ** 日   期: 2008年12月10日
 152          **-------------------------------------------------------------------------------------------------------
 153          ** 修 改 人:
 154          ** 日   期:
 155          **-------------------------------------------------------------------------------------------------------
 156          ********************************************************************************************************/
 157          void Comm(void) interrupt 4
 158          {
 159   1          uint8 ea_time;
 160   1          ea_time = EA;
 161   1          EA = 0;
 162   1          if(RI == 1)
 163   1          {
 164   2              CommTemp0 = SBUF;
 165   2              if(CommTemp0 == 0x7e)
 166   2              {
 167   3                  CommState       = 0;
 168   3                  CommAscii       = 0;
 169   3                  CommBytehilow   = 0;
 170   3                              ComCalculChkSum = 0;
 171   3              }
 172   2              if(CommState != 0 && CommState != 5 && CommState != 6)
 173   2              {
 174   3                  ComCalculChkSum += CommTemp0;
 175   3              }
 176   2              if(CommState != 0 && CommState != 6)
 177   2              {
 178   3                  if(CommAscii == 0)
C51 COMPILER V7.06   COMMRS485                                                             10/30/2008 13:20:06 PAGE 4   

 179   3                  {
 180   4                      CommAscii = 1;
 181   4                      CommTemp1 = CommTemp0;
 182   4                      if(CommTemp1 < 0x3a)
 183   4                          CommTemp1 -= 0x30;
 184   4                      else
 185   4                          CommTemp1 -= 0x37;
 186   4                  }
 187   3                  else
 188   3                  {
 189   4                      CommAscii = 0;
 190   4                      if(CommTemp0 < 0x3a)
 191   4                          CommTemp0 -= 0x30;
 192   4                      else
 193   4                          CommTemp0 -= 0x37;
 194   4                      CommTemp1 <<= 4;
 195   4                      CommTemp1 |= CommTemp0;
 196   4                 }
 197   3              }
 198   2              if(CommAscii == 0)
 199   2              {
 200   3                  switch(CommState)
 201   3                  {
 202   4                      case 0:                    /*SOI*/
 203   4                      {
 204   5                          if(CommTemp0 == 0x7e)
 205   5                          {
 206   6                              CommState++;                        
 207   6                          }
 208   5                      }break;
 209   4                      case 1:                    /*ADD*/
 210   4                      {
 211   5                          if(CommTemp1 == (uint8)(ModeSysConfig[8]))   //BoardAddress
 212   5                          {
 213   6                                                      CommState++;
 214   6                                              }
 215   5                                              else 
 216   5                                              {
 217   6                                                      CommState = 0;
 218   6                                              }
 219   5                      }break;
 220   4                      case 2:                    /*CID*/
 221   4                      {
 222   5                          CommCid = CommTemp1;
 223   5                          CommState++;
 224   5                          if(CommCid > 0x10) CommState = 0;
 225   5      
 226   5                      }break;
 227   4                      case 3:                    /*LENGTH*/
 228   4                      {
 229   5                          if(CommBytehilow == 0 )
 230   5                          {
 231   6                              CommLengthH = CommTemp1;

⌨️ 快捷键说明

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