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

📄 rs485.lst

📁 输出视频的字符的软件
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.02b   RS485                                                                06/20/2006 18:46:34 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE RS485
OBJECT MODULE PLACED IN rs485.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE rs485.c DEBUG OBJECTEXTEND

stmt level    source

   1          /*------------------------------------------------*/
   2          /*
   3          串口通讯程序,分与分机通讯程序和与管理机通讯程序,
   4          Rs_int是中断程序, 负责对通讯的接收、发送
   5          Message_treat是主要的针对通讯以后的处理程序
   6          */
   7          /*----------------------------------------------------*/
   8          #include "defineh.h"
   9          #include "sbitdef.h"
  10          #include "Rs485.h"
  11          /*----------------------------------------------------*/
  12          extern void Count_Flash_Offset(void);
  13          
  14          extern void Clr_Display(void);
  15          extern void disp_detail(void);
  16          extern void disp_main(void);
  17          extern void No_Message_Guide(void);
  18          extern void Inqire_Frame(void);
  19          extern void disp_color(uchar row);
  20          extern void init_timer2(void);
  21          extern void init_timer0();
  22          extern void clr_timer2();
  23          extern void delay();
  24          
  25          void answer_comm();
  26          /*---------------------------------------*/
  27          void delays60ms()
  28          {
  29   1        uchar data j;
  30   1        uint data i;
  31   1        for(j=0;j<3;j++)
  32   1        for(i=0;i<=4000;i++);
  33   1      }
  34          
  35          /*-----------------------------------------*/
  36          void Clr_Rx()
  37          {         
  38   1              Rx_bit=0;//no received a valid frame
  39   1              Rx_count=0;//count for  bytes
  40   1              Rx_sum=0; //a frame check_sum
  41   1      
  42   1      }
  43          /*----------------------------------------*/
  44          void txstart()
  45          {
  46   1       mRs485G=send;
  47   1       Tx_bit=transiting;
  48   1       Tx_count=0;
  49   1       SBUF=SENDSTART;
  50   1       Tx_sum=SENDSTART;
  51   1      }
  52          /*----------------------------------------*/
  53          void  save_homemessage()
  54          {
  55   1              if(*(info_buffer+1)==ALLINFO)
C51 COMPILER V7.02b   RS485                                                                06/20/2006 18:46:34 PAGE 2   

  56   1                 {
  57   2             lounumH=0;
  58   2             lounumL=0;
  59   2                 infonumber=*(info_buffer+5);
  60   2                 }
  61   1           else
  62   1             {           
  63   2             lounumH=*(info_buffer+3);
  64   2             lounumL=*(info_buffer+4);
  65   2                 infonumber=*(info_buffer+5);
  66   2                 }
  67   1      
  68   1      }
  69          /*----------------------------------------------------*/
  70          /*         Dec_Cem Rountine
  71          
  72          DESCRIPTION:this rountine used to transfer a data from 10进制to 16进制
  73          */
  74          /*-----------------------------------------------------*/
  75          uchar Dec_Cem(uchar dec_data)
  76          {
  77   1                uchar data i,k;
  78   1      
  79   1                    i=dec_data;
  80   1                    k=dec_data;
  81   1                    i=i>>4;
  82   1                    i=i&0x0f;
  83   1      
  84   1                    k=k&0x0f;
  85   1                    k=i&0x0a+k;
  86   1                    return(k);
  87   1      }
  88          /*-------------------------------------------*/
  89          /*                         确认命令的实际意义
  90          Description: 一共有几种方式:节能型没有下翻,03智能没有取消
  91                       返回数据0x0f 代表下翻, 0xf0代表上翻
  92                                   返回数据0xaa 代表取消,0x55代表确认
  93                                   0X00代表命令无效
  94          */
  95          /*-------------------------------------------*/
  96          uchar check_page_command()
  97          {
  98   1                
  99   1            if((*info_buffer==RESEIVESTART)&&(*(info_buffer+1)==NEXTMSN))
 100   1             {
 101   2              Clr_Rx();
 102   2              return (pagedown);     //MEAN PAGE DOWN
 103   2              }
 104   1      
 105   1               else if((*info_buffer==RESEIVESTART)&&(*(info_buffer+1)==UPMSN))
 106   1              {
 107   2                  Clr_Rx();
 108   2                  return( pageup);    //MEAN  PAGE UP
 109   2              }
 110   1      
 111   1               else if((*info_buffer==RESEIVESTART)&&(*(info_buffer+1)==CANCELMSN))
 112   1              {
 113   2                  Clr_Rx();
 114   2                  return( cancel);    //MEAN  cancel
 115   2              }
 116   1      
 117   1               else if((*info_buffer==RESEIVESTART)&&(*(info_buffer+1)==DELMSN))
C51 COMPILER V7.02b   RS485                                                                06/20/2006 18:46:34 PAGE 3   

 118   1              {
 119   2                  Clr_Rx();
 120   2                  return( delete);    //MEAN  cancel
 121   2                      }
 122   1      
 123   1               else if((*info_buffer==RESEIVESTART)&&(*(info_buffer+1)==CONFIRMMSN))
 124   1              {
 125   2                  Clr_Rx();
 126   2                  return( confirm);    //MEAN  PAGE UP
 127   2              }
 128   1      
 129   1               else if((*info_buffer==RESEIVESTART)&&(*(info_buffer+1)==EXTEXIT))
 130   1              {
 131   2                  Clr_Rx();
 132   2                  return( exit);    //MEAN  PAGE UP
 133   2              }
 134   1           else
 135   1              {
 136   2               Clr_Rx();
 137   2           return( 0x00);
 138   2              }
 139   1               
 140   1      }
 141          /*------------------------------------------*/
 142          /*          进入信息处理周期
 143          描述:
 144                       进入前带来有关楼层信息:号码,户内形式,
 145                       进入后,通过纪录信息的情况变量 self_bigoffset,self_smalloffset; pub_bigoffset,pub_smalloffset;
 146                       以及wink_offset
 147          */
 148          /*---------------------------------------------*/
 149          void message_treat()                /*返回应答*/
 150          {
 151   1          uchar data  i;
 152   1           
 153   1               answer_comm();
 154   1               
 155   1               read_block=0x1000*(0X20*(Dec_Cem(lounumH)+Dec_Cem(lounumL-1)/0x10)+Dec_Cem(lounumL-1)%0x10); //房号<33..
             -读编号x0x10,读信息初识地址x1000
 156   1           address_pointer=read_block;
 157   1               Count_Flash_Offset();
 158   1      
 159   1               self_newscount=offset_biggest;       //现在offset_biggest记录的是信息数量
 160   1               self_smalloffset=offset_smallest;   //现在已经修改,offset_smallest记录的是最小的位置
 161   1           self_bigoffset=offset_biggestplace;
 162   1      
 163   1           read_block=0x00000000;
 164   1               Count_Flash_Offset();
 165   1               pub_newscount=offset_biggest;      //现在offset_biggest记录的是信息数量
 166   1               pub_smalloffset=offset_smallest;  //现在已经修改,offset_smallest记录的是最小的位置
 167   1           pub_bigoffset=offset_biggestplace;
 168   1                      
 169   1               wink_offset=self_newscount+pub_newscount;
 170   1               Clr_Display();
 171   1      
 172   1               if(wink_offset==0)
 173   1                      {
 174   2                   No_Message_Guide();
 175   2                      }
 176   1           else
 177   1                      {
 178   2                       disp_detail();
C51 COMPILER V7.02b   RS485                                                                06/20/2006 18:46:34 PAGE 4   

 179   2                       }
 180   1      
 181   1               CNTRL=TRUE; //USED TO RELAY
 182   1           init_timer2();
 183   1                      
 184   1         while((timeout2<0x3e8)&&EnWork_bit)    //lookup message for 30s or home-user close,finished a cycle
 185   1              {
 186   2               if(Rx_bit)
 187   2                      {
 188   3               i=check_page_command();
 189   3                      }
 190   2      
 191   2                if(((self_newscount+pub_newscount)==0)&&(i==exit)) //NO MESSAGE,if push the spec key ,out the operation
 192   2                  {
 193   3               EnWork_bit=FALSE;
 194   3                       i=0;
 195   3                   }
 196   2      
 197   2                      else if((i==pagedown)&&((self_newscount+pub_newscount)!=0)) 
 198   2                      {
 199   3                        if(wink_offset!=0)
 200   3                                      {
 201   4                                      wink_offset--;
 202   4                                              if((self_newscount+pub_newscount-wink_offset)%rowcharacter==0)  //换页
 203   4                                              {
 204   5                                              Clr_Display();
 205   5                          disp_detail();
 206   5                                              disp_color((self_newscount+pub_newscount-wink_offset)%rowcharacter);
 207   5                                              }
 208   4                                              else
 209   4                                              {
 210   5                                       disp_color((self_newscount+pub_newscount-wink_offset)%rowcharacter);
 211   5                                          }
 212   4                                      }
 213   3                                      else                     //到达最后,等待退出到上一层
 214   3                                      {
 215   4                                         Inqire_Frame();
 216   4                                         i=0;
 217   4                                         while((timeout2<0x3e8)&&(i!=pagedown)&&((i!=cancel)&&(kindBYTE==1)))
 218   4                                            {
 219   5                                                 if(Rx_bit)
 220   5                                                    {
 221   6                                                         i=check_page_command();
 222   6                                                         }
 223   5                                                 }
 224   4                                              Clr_Display();
 225   4                                              wink_offset=self_newscount+pub_newscount;
 226   4                                              disp_detail();
 227   4                                              disp_color(0);
 228   4                                      }
 229   3                      i=0;
 230   3                      }
 231   2                      
 232   2                      else if((i==pageup)&&(self_newscount+pub_newscount!=0))
 233   2                      {
 234   3                              if(wink_offset==(self_newscount+pub_newscount))            //top of the detail
 235   3                                      {
 236   4                       EnWork_bit=0;
 237   4                                       }
 238   3                              else
 239   3                                      {
 240   4                                       wink_offset++;
C51 COMPILER V7.02b   RS485                                                                06/20/2006 18:46:34 PAGE 5   

 241   4                                      if((self_newscount+pub_newscount-wink_offset)%rowcharacter==0)  //换页
 242   4                                                 {
 243   5                                                      Clr_Display();
 244   5                              disp_detail();
 245   5                                                      disp_color((self_newscount+pub_newscount-wink_offset)%rowcharacter);

⌨️ 快捷键说明

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