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

📄 flash.lst

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


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

stmt level    source

   1          /***********************************************************/
   2          /*                                                                                     */
   3          /*                CPU:AT89c55   20MHZ                      */
   4          /*                Copyright  2004.09  Comelit              */
   5          /*                AUTHOR:  LV_XIAO_LU                      */
   6          /*                                                         */
   7          /***********************************************************/
   8          
   9          #include "reg52.h"
  10          #include "string.h"
  11          #include "define.h"
  12          #include "variable.h"
  13          #include "typedef.h"
  14          #include "function.h"
  15          
  16          
  17                                                    
  18                    
  19          //sbit LED_CTR = P1^1 ;
  20          
  21          #define BRIGHT_ON 0     
  22          #define BRIGHT_OFF 1
  23          
  24          void Mes_init(void);
  25          void Write_sector(register unsigned char xdata *des_adr,register unsigned char xdata *s_adr);
  26          void Write_flash_hd(void);
  27          void Code_init(void);
  28          void Copy_var_to_mem(void);
  29          void Copy_mes_to_mem(void);
  30          void Copy_mem(void);
  31          void  Store_mes(void);
  32          void Message_hd(void);
  33          void Write_flash_hd(void);
  34          //unsigned char  Test_hardware(void);
  35          
  36          /*const code unsigned char rom_verify_data_tbl[] =
  37                                          {0x00,0x00,0x00,0x8f,0x8d,0x8c,0x67,0x65,0x66,0x6a,0x64,0x5d,
  38                                           0x80,0x80,0x80,0x88,0x85,0x82,0x6a,0x6a,0x6d,0x8f,0x8d,0x90,
  39                                           0x80,0x80,0x80,0x7e,0x7e,0x7e,0x68,0x6b,0x70,0x7b,0x7d,0x7c,
  40                                           0x80,0x80,0x80,0x71,0x6d,0x69,0x84,0x82,0x81,0x8d,0x8f,0x8f};
  41                                                                                                                             
  42          const unsigned int rom_test_addr[] = 
  43                                          {0x8000,0x9999,0xaaaa,0xd555};*/
  44          /**************************************************/
  45          /* dst_adr指向外部FLASH MEMORY的要写的段地址      */
  46          /* s_adr指向SRAM里要写入FLASH MEMORY里的内容的地址*/
  47          /**************************************************/
  48          void Write_sector(register unsigned char xdata *dst_adr,register unsigned char xdata *s_adr)
  49          {
  50   1         register unsigned int i;
  51   1         /*保护段数据特殊功能码:3个*/
  52   1         special_addr1 = 0xaa;
  53   1         special_addr2 = 0x55;
  54   1         special_addr1 = 0xa0; 
  55   1      
C51 COMPILER V7.06   FLASH                                                                 06/10/2005 13:26:30 PAGE 2   

  56   1      //   EA = 0;         // 禁止中断以防写FLASH时出错
  57   1         /*费时3.4MS*/
  58   1         for(i=0;i<256;i++)
  59   1         {
  60   2             *(dst_adr+i) = *(s_adr+i) ;
  61   2         }
  62   1      //   EA = 1;
  63   1      
  64   1      }
  65          
  66          /***************************************************/
  67          /*  init_code用于指示系统是否进行过系统工作初始化  */
  68          /***************************************************/
  69          void Code_init(void)
  70          {
  71   1         init_code[0] = init_code_b[0];
  72   1         init_code[1] = init_code_b[1];
  73   1         init_code[2] = init_code_b[2];
  74   1      }
  75          /***************************************************/
  76          /***************************************************/
  77          void Mes_init(void)
  78          {
  79   1        unsigned char i;
  80   1        Page_switch(PAGE_0); 
  81   1      
  82   1        Code_init();
  83   1        if((init_code[0]==0xa5)&&(init_code[1]==0x5a)&&(init_code[2]==0xaa))    //已初始化信息列表
  84   1        {
  85   2            Copy_mem();
  86   2        }
  87   1        else
  88   1        {
  89   2      
  90   2            Mes_tcb_init();
  91   2            init_code[0]=0xa5;
  92   2                init_code[1]=0x5a;
  93   2                init_code[2]=0xaa;
  94   2               /*以下函数实现将从SRAM里0X00开始128个字节(1段)送到FLASH MEMORY 0X1000开始的128*/
  95   2               /*个字节中去,即在FLASH MEMORY中备份重要数据*/
  96   2                Page_switch(PAGE_0);
  97   2            Write_sector((unsigned char xdata*)(0x1000),(unsigned char xdata*)0x00);
  98   2                Delay_10ms();
  99   2       
 100   2               /*备份mes_control 到FLASH MEMORY中的mes_control_b*/
 101   2            for(i=0;i<8;i++)
 102   2                {
 103   3                    Write_sector((unsigned char xdata*)(0x1100 + i*256),(unsigned char xdata*)(0x100 + i*256));
 104   3                    Delay_10ms();      //延时10MS
 105   3                }
 106   2         }
 107   1      
 108   1      }
 109          
 110          /*******************************************************/
 111          /*该函数用于将FLASH 内存块内变量COPY到SRAM中的变量区   */
 112          /*******************************************************/
 113          void Copy_var_to_mem(void)
 114          {
 115   1         register unsigned char i;
 116   1         unsigned char xdata *source = (unsigned char xdata*)(0x1000);
 117   1         unsigned char xdata *dest = (unsigned char xdata*)0x00;  
C51 COMPILER V7.06   FLASH                                                                 06/10/2005 13:26:30 PAGE 3   

 118   1         for(i=0;i<7;i++)
 119   1            *(dest+i) = *(source+i);  
 120   1      }
 121          
 122          /**********************************************************************/
 123          /*该函数用于将FLASH 内存块内mes_control_b COPY到SRAM中的mes_control   */
 124          /**********************************************************************/
 125          void Copy_mes_to_mem(void)
 126          {
 127   1          register unsigned char i;
 128   1              register unsigned int j;
 129   1          unsigned char xdata *source = (unsigned char xdata*)(0x1100);
 130   1          unsigned char xdata *dest = (unsigned char xdata*)0x100;
 131   1              if(write_F == 0)
 132   1              {
 133   2                 for(i=0;i<8;i++)
 134   2                 {
 135   3               for(j=0;j<256;j++)
 136   3                       {
 137   4                           *dest = *source;
 138   4                               dest++;
 139   4                               source++;
 140   4              
 141   4                       }
 142   3                       Delay_10ms();
 143   3                       
 144   3                 }
 145   2              }
 146   1      }
 147          
 148          /*******************************************************/
 149          /*******************************************************/
 150          void Copy_mem(void)
 151          {
 152   1         Page_switch(PAGE_0);
 153   1         Copy_var_to_mem();
 154   1         Copy_mes_to_mem();
 155   1      }
 156          /**************************************************************/
 157          /*actual_store_p:  在写数据时实际指向FLASH的地址指针          */
 158          /*actual_fetch_p:  在写数据时实际从rx_prc_buff中读时指向的指针*/
 159          /**************************************************************/
 160          void  Store_mes(void)
 161          {
 162   1           register unsigned int i=0;
 163   1           Page_switch(page_addr);        //切换到要存贮的那一块64K区域
 164   1         /*数据保护*/  
 165   1            special_addr1 = 0xaa;
 166   1            special_addr2 = 0x55;
 167   1            special_addr1 = 0xa0; 
 168   1      //      EA = 0;
 169   1            while((i<256)&&(*actual_fetch_p != '\0'))
 170   1      
 171   1                {
 172   2                   *actual_store_p = *actual_fetch_p ;
 173   2                        actual_store_p++;
 174   2                        actual_fetch_p++;
 175   2                        i++;
 176   2                }
 177   1                if(*actual_fetch_p == '\0')
 178   1                {
 179   2               *actual_store_p = '\0' ;
C51 COMPILER V7.06   FLASH                                                                 06/10/2005 13:26:30 PAGE 4   

 180   2                       store_prc_F = 0;             //不须要再存贮
 181   2                }
 182   1      //        EA = 1;
 183   1            write_delay_time = TM20MS;
 184   1                write_F = 1 ;
 185   1      
 186   1      }
 187          
 188                       
 189          
 190          /*******************************************************/
 191          /*      struct  MES_CON_BLOCK xdata *prc_ctr_block  表示指向
 192          /*从链表中分配到的用于存贮信息的内存块
 193          /*******************************************************/
 194          void Message_hd(void)
 195          {
 196   1      
 197   1          if((received_mes_F == 1)&&(store_prc_F == 0)&&(write_F == 0))         
 198   1          {   
 199   2              
 200   2                      prc_ctr_block = Create_tcb_block();  //得到内存块并先将其挂回disp_tcb_list中
 201   2              received_mes_F = 0  ;
 202   2                      actual_store_p =(unsigned char xdata*)prc_ctr_block->mes_addr.address.address;   //得到信息放置的地址
 203   2                      actual_fetch_p = mes_data;           //从何处开始取得存贮的信息
 204   2                      page_addr = (unsigned char)prc_ctr_block->mes_addr.address.page_addr;
 205   2              store_prc_F = 1;
 206   2                      pre_store_prc_F = 1;
 207   2      //              Bank_switch(page_addr);       //存贮信息时先切换页
 208   2                      Store_mes();            
 209   2              }
 210   1              else if(write_F == 0)
 211   1              {
 212   2                  if(store_prc_F == 1)          //写flash操作结束却信息没存完,继续
 213   2                       Store_mes();
 214   2                  else if(pre_store_prc_F == 1) //如果存信息刚结束
 215   2                 {
 216   3                                       
 217   3                      pre_store_prc_F = 0;
 218   3                          Page_switch(PAGE_0);
 219   3                              prc_ctr_block -> new_old_F = NEW;
 220   3             }
 221   2              }

⌨️ 快捷键说明

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