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

📄 main.lst

📁 楼宇对讲系统里用的文字信息接收。用可视对讲话机的TFT屏可看到从管理中心发过来的广播信息和本户的特发信息
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   MAIN                                                                  06/15/2005 16:56:55 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAIN.C BROWSE DEBUG OBJECTEXTEND CODE SYMBOLS

stmt level    source

   1          /***********************************************************/
   2          /*                                                                                     */
   3          /*                CPU:AT89c55WD   20MHZ                    */
   4          /*                Copyright  2004.09  Comelit              */
   5          /*                AUTHOR: LV_XIAO_LU                       */
   6          /*                                                         */
   7          /***********************************************************/
   8          
   9          #include "reg52.h"
  10          #include "define.h"
  11          #include "variable.h"
  12          #include "typedef.h"
  13          #include "function.h"
  14          
  15          
  16          sfr WDTRST = 0xa6;
  17          sfr T2MOD  = 0xc9;
  18          
  19          sbit DIVA_STATUS_PORT = P3^2;
  20          sbit MES_SW = P1^7;
  21          sbit CALL_SW = P1^6 ;
  22          sbit DISP_CTR_PORT = P3^5;
  23          
  24          
  25          void Cpu_init(void);
  26          void Diva_sts_hd(void);
  27          void Judge_work_mode(void);
  28          void Timer2_init(void);
  29          sbit LED_CTR = P1^1 ;
  30          /************************************************/
  31          /*
  32          /************************************************/
  33          
  34          void main(void)
  35          {
  36   1      
  37   1       /*  special_addr1 = 0xaa;
  38   1         special_addr2 = 0x55;
  39   1         special_addr1 = 0xa0; 
  40   1         init_code_b[0]=0xff;
  41   1         init_code_b[1]=0xff;
  42   1         init_code_b[2]=0xff;*/
  43   1      
  44   1         Cpu_init(); 
  45   1         Mes_init();
  46   1         Init_mb9002_ic(1);        //BLUE
  47   1         Hsio_init(BPS4800);
  48   1         Judge_work_mode();          //先判别是否要设置本机地址
  49   1         /*启动狗*/
  50   1         WDTRST = 0x1e;
  51   1         WDTRST = 0xe1;
  52   1      
  53   1         EA = 1; 
  54   1         TR2 = 1;
  55   1         TR0 = 1;
C51 COMPILER V7.06   MAIN                                                                  06/15/2005 16:56:55 PAGE 2   

  56   1         main_step = 1;
  57   1         while(1)
  58   1         {
  59   2      
  60   2      
  61   2            if(TF0 == 1)
  62   2             {
  63   3               TF0 = 0 ;
  64   3               TH0 = TM20MS_H ;
  65   3               TL0 = TM20MS_L ;
  66   3               watch_dog_time = 0;                //主循环10MS清0一次
  67   3               Diva_sts_hd();
  68   3                       Write_flash_hd();                   //管理flash写的状态
  69   3               Key_hd();
  70   3                       Led_hd();
  71   3      //               Trm_hd();
  72   3               Message_hd();           
  73   3                       Backup_hd();
  74   3               switch(main_step)
  75   3               {
  76   4                case 1:       
  77   4      
  78   4                                              Key_prc();
  79   4                                          main_step++;
  80   4                          break;
  81   4                case 2:
  82   4                                 
  83   4                          Disp_prc();             
  84   4                          main_step++;
  85   4                      break;
  86   4                case 3:
  87   4                         Backup_prc();
  88   4                         main_step++;
  89   4                         break;
  90   4                case 4:
  91   4                                  Led_prc();        
  92   4                          main_step++;
  93   4                         break;
  94   4                case  5:
  95   4                                                              
  96   4                          main_step = 1;
  97   4                         break;
  98   4                        default:
  99   4                                  main_step = 1;
 100   4                                              break;
 101   4                }
 102   3             }
 103   2         }
 104   1      }
 105          
 106             
 107          /************************************************/
 108          /************************************************/
 109          void Cpu_init(void)
 110          {
 111   1          DISP_CTR_PORT = 1;
 112   1              LED_CTR = 1;          //led off
 113   1              EA = 0 ;           //disable all interrupt
 114   1      /*   timer0 20ms no interrupt */
 115   1      //      TMOD = 0x01 ;  
 116   1          IE = 0x00 ;
 117   1          TR0 = 0 ;                 // disable timer
C51 COMPILER V7.06   MAIN                                                                  06/15/2005 16:56:55 PAGE 3   

 118   1              TR1 = 0 ;
 119   1              TMOD = 0x01 ;       
 120   1              TH0 = TM20MS_H ;
 121   1              TL0 = TM20MS_L ; 
 122   1              Timer2_init();
 123   1              return;      
 124   1      }
 125          
 126          
 127          
 128          /************************************************/
 129          /************************************************/
 130          /* 下列函数用于判断当前话机的工作状态*/
 131          void Diva_sts_hd(void) 
 132          {
 133   1         
 134   1                DIVA_STATUS_PORT = 1; 
 135   1            now_port_F = DIVA_STATUS_PORT ;   //读端口状态
 136   1         
 137   1           if(now_port_F == 0)         //话机处于呼叫打开状态时
 138   1           {
 139   2               if(pre_port_F == 1)     //刚呼叫      
 140   2               {
 141   3                  pre_port_F = now_port_F ;
 142   3              
 143   3                  if(read_mes_F == 1)         //如果正在看信息   
 144   3                  {
 145   4       //               MES_SW = SW_OFF;        //关闭信息通道
 146   4      //                              mes_sw_F = 0; 
 147   4                      CALL_SW = SW_OFF;          
 148   4                              sw_delay = TM60MS;      //等待信息通道继电器切换完成时间
 149   4                      }
 150   3                      else
 151   3                      {
 152   4                         call_disp_F = 1 ;      //现在话机正处于呼叫状态
 153   4                                 CALL_SW = SW_OFF;
 154   4                              }
 155   3                   }
 156   2                   else if(call_disp_F == 0)
 157   2                   {
 158   3                       if(sw_delay != 0)
 159   3                          sw_delay--;
 160   3                       else
 161   3                       {
 162   4      //                  CALL_SW = SW_OFF;         //恢复到默认状态
 163   4                      MES_SW = SW_OFF;
 164   4                                      mes_sw_F = 0;
 165   4                              call_disp_F = 1;
 166   4                       }
 167   3                   }
 168   2              }
 169   1              else if(now_port_F == 1)                 
 170   1          {
 171   2                  if(pre_port_F == 0)              //呼叫结束时
 172   2                  {
 173   3                      pre_port_F = now_port_F ;
 174   3                  call_disp_F = 0;            
 175   3                              if(read_mes_F == 1)         
 176   3                              {
 177   4                                      CALL_SW = SW_ON ;
 178   4                                  sw_delay = TM60MS;
 179   4                              }       
C51 COMPILER V7.06   MAIN                                                                  06/15/2005 16:56:55 PAGE 4   

 180   3      //                      sw_delay = TM50MS;
 181   3                  }
 182   2                  if(read_mes_F == 1 )          //只有在待机状态时才能去阅读信息,此时
 183   2                  {                             //需要把二个继电器全部切换
 184   3                         if(sw_delay!=0)
 185   3                                 sw_delay--;            //等待呼叫通道切换到空闲状态
 186   3      //                 else if(MES_SW == SW_OFF)   //呼叫通道切换已完成,而信息通道还没切换过来则
 187   3                         else if(mes_sw_F == 0)
 188   3                 {
 189   4                            MES_SW = SW_ON;
 190   4                                mes_sw_F = 1;
 191   4                                DISP_CTR_PORT = DISP_ON;       //话机CFP = 0;
 192   4                                sw_delay=TM800MS;
 193   4                         }
 194   3                         else                       //
 195   3                            DISP_CTR_PORT = DISP_OFF;     //话机CFP不须一直维持0
 196   3                  }
 197   2                      else                    //不在阅读状态下
 198   2                      {
 199   3                         if(sw_delay!=0)      //如果30S不按键,要关断话机必须把+19V电断掉0.5S
 200   3                            sw_delay--;       //才有可能关闭话机,以防止别家正在呼叫时CALL+19V还有,关不断
 201   3                         else                 //空闲状态时切换到正常的呼叫通道中
 202   3                     CALL_SW = SW_OFF;
 203   3                      }
 204   2              }
 205   1      
 206   1      }
 207          
 208          
 209          /********************************************/
 210          /*本函数用于判别是否要处于设置地址的工作状态*/
 211          /********************************************/
 212          void Judge_work_mode(void)
 213          {
 214   1         unsigned char status_cnt=10;
 215   1         CALL_SW = 1;    //为读,先置1
 216   1         while(status_cnt == 10)
 217   1        {
 218   2            if(CALL_SW == 0)
 219   2                 status_cnt++;
 220   2            else
 221   2                 status_cnt--;
 222   2            Delay_10ms();
 223   2            CALL_SW = 1;    //再读,先置1
 224   2            if(CALL_SW == 0)
 225   2                status_cnt++;
 226   2            else
 227   2                status_cnt--;
 228   2         }
 229   1         if(status_cnt == 12)
 230   1         {
 231   2           work_F = 1 ;               //设置本机地址状态
 232   2               main_step = 1;
 233   2               TR0 = 1;
 234   2               EA = 1;
 235   2           while(1)
 236   2               {
 237   3                   if(TF0 == 1)
 238   3               {
 239   4                 TF0 = 0 ;
 240   4                 TH0 = TM20MS_H ;
 241   4                 TL0 = TM20MS_L ;
C51 COMPILER V7.06   MAIN                                                                  06/15/2005 16:56:55 PAGE 5   

 242   4                         Trm_hd();
 243   4                       }
 244   3                }
 245   2         }
 246   1         else 
 247   1            work_F = 0 ;
 248   1      
 249   1      }
 250          
 251          /***************************************************/
 252          /***************************************************/
 253          
 254          
 255          /***************************************************/
 256          /*   定时器2用于喂狗                               */
 257          /***************************************************/
 258          void Timer2_hd(void) interrupt 5
 259          {
 260   1          EA = 0;
 261   1          TF2 = 0;
 262   1              watch_dog_time++;   //中断里5MS累加一次
 263   1              if(watch_dog_time <= 100)   //如果500ms主程序还没执行过一次的话,就认为出现了死机
 264   1          {
 265   2                 WDTRST = 0x1e;
 266   2             WDTRST = 0xe1;
 267   2              }
 268   1              EA = 1;
 269   1              Trm_hd();
 270   1              ES = 0;
 271   1              if(time_out != 0)
 272   1                 time_out--;
 273   1               ES  = 1 ;
 274   1      }
 275          
 276          /***************************************************/
 277          /***************************************************/
 278          void Timer2_init(void)
 279          {
 280   1         
 281   1              T2CON = 0x00;
 282   1              T2MOD = 0x00;
 283   1              RCAP2H = TM4MS_H;  //db
 284   1              RCAP2L = TM4MS_L;

⌨️ 快捷键说明

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