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

📄 scomservice.lst

📁 带时钟功能温度和湿度测量的仪器
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.20   SCOMSERVICE                                                           11/09/2002 21:11:16 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE SCOMSERVICE
OBJECT MODULE PLACED IN ScomService.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ScomModule\ScomService.c BROWSE DEBUG OBJECTEXTEND PRINT(.\ScomService.lst)
                    - OBJECT(ScomService.obj)

line level    source

   1          /*#######################################################################################//
   2          文件名:  ScomService.c
   3          功能:    串行通信服务函数实现
   4          单位:    浙江工商大学-信电学院
   5          创建日期:2004-09-24
   6          创建人:  Houseivan
   7          修改人:  Houseivan
   8          修改日期:2005-03-11
   9          ########################################################################################*/
  10          //##########################智能数据采集系统串行通讯协议简要:############################//
  11          //#数据帧帧头:0xEB 0x90 0xEB 0x90 0xEB 0x90 
  12          //#有效数据块:远程主机地址 本地主机地址 命令 参数和校验数据总长度 命令参数
  13          //#帧序号(FrameNumHigh FrameNumLow) 校验码(CRCHigh CRCLow)#
  14          //#数据帧帧尾:0x7E /*SCOM空闲时保持Mark状态即逻辑'1'*/
  15          //#######################################################################################//
  16          #include"Includes.h"
  17          /*检测是否配置了网络通信功能*/
  18          #if _SCOM_TASK>0
  19          
  20                  extern uchar code FrameHead[];                          //协议帧头
  21          
  22                  extern uchar data TempInteger;                          //温度值整数和符号字节
  23                  extern uchar data TempDecimal;                          //温度值小数位字节
  24                  extern uchar data HumiInteger;                          //湿度值整数和符号字节
  25                  extern uchar data HumiDecimal;                          //湿度值小数位字节
  26                  extern uchar data UartRecBuf[];                         //数据通讯缓冲器
  27                  extern uchar data ClkLcmBuf[_MAX_LCM_NUM];      //显示和时钟操作缓冲器  
  28                  extern uchar data DataBlockCount;                       //接收缓冲中有效数据个数
  29                  extern uchar data RecUpFlg;                                     //接收数据用标志变量
  30                  extern uchar data UartHead;                                     //接收检验帧头存放变量
  31                  extern uchar data SystemState;                          //当前系统工作状态指示变量
  32                  extern uchar data SlaveAddr;                            //本地主机地址
  33                  extern uchar data MasterAddr;                           //远程主机地址
  34                  extern uchar data CurRecNum;                            //记录计数器 循环队列形式
  35                  extern uchar data LcmMode;                                      //显示模式选择
  36          
  37                  extern bit   RecReady;                                          //正确的数据接收完成标志
  38                  extern bit       WorkMode;              
  39                  #if(_SCOM_TEST>0)
                              extern uchar TestCom;
                      #endif                                  //根据登陆成功与否确定站点工作的模式
  42                  
  43          #endif
  44          /*检测是否配置了网络通信功能*/
  45          #if _SCOM_TASK>0
  46          
  47          //#######################################################################################//
  48          //#include "ScomService.h"                                                                   
  49          //#######################################################################################//
  50          //#Function:           void Uart0Init(void)
  51          //#Description:        51串行口初始化
  52          //#Input:              无
  53          //#Output:             无
  54          //#Return:              无
C51 COMPILER V7.20   SCOMSERVICE                                                           11/09/2002 21:11:16 PAGE 2   

  55          //#Others:              文件级公共函数
  56          //#SBUF-串行口数据寄存器;TMOD,T2MOD,TCON,T2CON设置波特率发生器的工作方式
  57          //#SCON-串行控制寄存器[7..0]=SM0 SM1 SM2 REN TB8 RB8 TI RI
  58          //#PCON-电源控制寄存器[7..0]=SMOD - - - GF1 GF0 PD ID
  59          //#IE  -中断允许控制寄存器[7..0]=EA -ET2 ES ET1 EX1 ET0 EX0
  60          //#######################################################################################//
  61          void Uart0Init(void)
  62          {       
  63   1      /*公共属性设置寄存器*/
  64   1              ChooseScomMode1();
  65   1      #if _RATE_ADJUST_EN>0
  66   1              #if (_BAUD_TIMER>0)             //52模式可以选择T1或T2作为波特率发生器
  67   1                      T2CON|=0x30;            //作为波特率发生器RCLK=TCLK=1
  68   1                      //T2MOD|=;
  69   1                      TH2   =_T2_HIGH;
  70   1                      TL2   =_T2_LOW ;
  71   1                      RCAP2H=_T2_HIGH;
  72   1                      RCAP2L=_T2_LOW ;
  73   1                      TR2   =       1;
  74   1              #else                                   //51模式只能采用T1做波特率发生器
                              TCON&=0x0f     ;        //清除标志位
                              TMOD|=0x20     ;        //mode2 BR=(2^smod)*fsoc/(32*12*(MAX-Ti))
                              TH1  =_T1_HIGH  ;
                              TL1  =_T1_LOW   ;
                              TR1  =        1;
                      #endif
  81   1      #endif
  82   1                      RecReady=0;
  83   1                      DataBlockCount=0;
  84   1                      RecUpFlg=0;
  85   1                      UartHead=0xeb;
  86   1                      AllowRx();
  87   1                      OpenScom();
  88   1                      EA=1;
  89   1      }
  90          //##################################################
  91          //#Function:   SendByte
  92          //#Description:51串行口字节发送函数
  93          //#Input:              无
  94          //#Output:             无
  95          //#Return:              无
  96          //#Others:              文件级公共函数
  97          //##################################################
  98          void SendByte(uchar sdata)
  99          {
 100   1              AllowTx();
 101   1              TI=0;
 102   1              SBUF=sdata;
 103   1              while(!TI);
 104   1              TI=0;
 105   1              AllowRx();
 106   1      }
 107          
 108          //##################################################
 109          //#Function:   LoginMaster
 110          //#Description:登陆到系统服务器
 111          //#Input:              无
 112          //#Output:             无
 113          //#Return:              无
 114          //#Others:              文件级公共函数
 115          //##################################################
 116          bit     LoginMaster(void)
C51 COMPILER V7.20   SCOMSERVICE                                                           11/09/2002 21:11:16 PAGE 3   

 117          {
 118   1              bit rel=0;
 119   1              CallMaster(_CMD_LOG_IN);                                                //发送帧到PC    
 120   1              /*等待PC响应的登陆成功反馈信息*/
 121   1              DelayTime(2,1000);                                                      //等待反馈
 122   1              if(ProcessFrameTask()==_CMD_ACK)                        //登陆成功标志
 123   1                      rel=_NET_MODE;
 124   1              return rel;     
 125   1      }
 126          
 127          //##################################################
 128          //#Function:   SendFrame(uchar *UartRecBuf,uchar Len)
 129          //#Description:带上头对数据进行校验计算,按协议打包数据发送帧到PC
 130          //#Input:              数据存储缓冲首地址,数据长度
 131          //#Output:             无
 132          //#Return:              无
 133          //#Others:              文件级公共函数UartRecBuf[0]:Cmd,UartRecBuf[1]:Len
 134          //##################################################
 135          void    SendFrame(uchar *UartBuf,uchar Len)
 136          {
 137   1              uchar nCount;
 138   1              uint  nCrc;
 139   1      
 140   1              CloseScom();
 141   1      
 142   1              nCrc=CRCverify(UartBuf,Len);
 143   1              for(nCount=0;nCount<_F_HEAD_SIZE;nCount++)
 144   1                      SendByte(FrameHead[nCount]);    //发送固定的头
 145   1              for(nCount=0;nCount<Len;nCount++)
 146   1              {       
 147   2                      SendByte(UartBuf[nCount]);      //发送数据
 148   2                      UartBuf[nCount]=0x00;               //然后清空单元
 149   2              }
 150   1              SendByte(nCrc/256);
 151   1              SendByte(nCrc%256);
 152   1      
 153   1              SendByte(_CMD_END);                                     //发送固定尾
 154   1      
 155   1              OpenScom();
 156   1      }
 157          
 158          //##################################################
 159          //#Function:   CallMaster
 160          //#Description:主动呼叫主机发送命令和数据进行通讯
 161          //#Input:              呼叫类型
 162          //#Output:             无
 163          //#Return:              无
 164          //#Others:              文件级公共函数,它负责将要发送的数据整合到缓冲中
 165          //##################################################
 166          void    CallMaster(uchar nCmd) 
 167          {
 168   1              uchar   nCount;
 169   1              #if ((_DETECT_TASK>0)&&(_E2PROM_TASK>0))
 170   1                      uchar   i;
 171   1              #endif
 172   1      
 173   1              CloseScom();                                                            //禁止中断保护共享缓冲
 174   1              nCount=0;
 175   1              UartRecBuf[nCount++]=SlaveAddr;                         //发送人
 176   1              UartRecBuf[nCount++]=MasterAddr;
 177   1              UartRecBuf[nCount++]=nCmd;
 178   1              switch(nCmd)
C51 COMPILER V7.20   SCOMSERVICE                                                           11/09/2002 21:11:16 PAGE 4   

 179   1                      {
 180   2                              case    _CMD_WR_TEMP:                           //LENG == 2
 181   2                              #if _DETECT_TASK>0
 182   2                                      UartRecBuf[nCount++]=2+_F_EXTRA_LEN;
 183   2                                      UartRecBuf[nCount++]=TempInteger;
 184   2                                      UartRecBuf[nCount++]=TempDecimal;
 185   2                                      UartRecBuf[nCount++]=_F_SINGLE_NUM;
 186   2                              #else
                                              UartRecBuf[nCount++]=_F_EXTRA_LEN;              //表示数据长度0一个序号和Crc常数
                                              UartRecBuf[nCount++]=_F_SINGLE_NUM;             //It's a single frame
                                      #endif  
 190   2                              break;
 191   2                              case    _CMD_WR_HUMI:                           //LENG == 2
 192   2                              #if _DETECT_TASK>0
 193   2                                      UartRecBuf[nCount++]=2+_F_EXTRA_LEN;
 194   2                                      UartRecBuf[nCount++]=HumiInteger;
 195   2                                      UartRecBuf[nCount++]=HumiDecimal;
 196   2                                      UartRecBuf[nCount++]=_F_SINGLE_NUM;
 197   2                              #else
                                              UartRecBuf[nCount++]=_F_EXTRA_LEN;              //表示数据长度0一个序号和Crc常数
                                              UartRecBuf[nCount++]=_F_SINGLE_NUM;             //It's a single frame
                                      #endif
 201   2                              break;
 202   2                              case    _CMD_WR_TIME:                           //LENG == 3
 203   2                              #if _CLOCK_TASK>0
 204   2                                      ReadClock(ClkLcmBuf);

⌨️ 快捷键说明

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