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

📄 fm31xx.lst

📁 c8051f020实现4个 产UART 口
💻 LST
字号:
C51 COMPILER V7.50   FM31XX                                                                06/10/2007 23:11:21 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE FM31XX
OBJECT MODULE PLACED IN .\out\fm31xx.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE fm31xx.c LARGE OPTIMIZE(SIZE) REGFILE(.\out\mbtest.ORC) BROWSE INCDIR(C:\Ke
                    -il\C51\LIB\;D:\TEST_C020\MC_55_C\) DEBUG OBJECTEXTEND OBJECT(.\out\fm31xx.obj)

line level    source

   1          
   2          #include "all.h"
   3          
   4          
   5          void FM_eeprom (void) _task_ FMROM {
   6   1          EECmd = FM_MEMORY_RD;
   7   1      
   8   1                while (1) {
   9   2                             Dog_FMROMI_cnt=0; //看门狗计数器
  10   2                            os_wait2(K_SIG, 0);
  11   2                            Dog_FMROMI_cnt=1; //看门狗计数器
  12   2                            if (EETask == 0xff) continue;
  13   2      
  14   2                            if (EECmd == FM_MEMORY_WR ) {
  15   3                                      
  16   3                                  write_fm_memory(FM_addr,iic_data_buf,FM_num);
  17   3                                 // os_wait2(K_TMO, 2);
  18   3                            }
  19   2                            else if (EECmd == FM_MEMORY_RD) {
  20   3                                  read_fm_memory(FM_addr,iic_data_buf,FM_num);
  21   3                            }
  22   2                            if (EETask != 0xff) os_send_signal(EETask);
  23   2                            Dog_FMROMI_cnt=0; //看门狗计数器
  24   2               }
  25   1      }
  26          
  27          
  28          //void read_fm_memory(unsigned int addr_fm,unsigned char*addr_cpu,unsigned char read_num);
  29          //void write_fm_memory(unsigned int addr_fm,unsigned char *addr_cpu,unsigned char write_num);
  30          //unsigned char  hex_bcd(unsigned char hex_value);
  31          //uchar smbus_send (uchar chip_select,uint iic_address,uchar* cpu_address,uchar write_num);
  32          //uchar smbus_receive (uchar chip_select,uchar* cpu_address,uchar receive_num);
  33          
  34          
  35          
  36          /*
  37          uchar hex_bcd(uchar hex_value)//完成HEX(99以内)到BCD(两位)的确转换
  38          {
  39              return(((hex_value/10)<<4)|(hex_value%10));
  40          }
  41          
  42          */
  43          
  44             bit     HighB=0;      
  45          uchar  Ttems;
  46          uchar smbus_send (uchar chip_select,uint iic_address,uchar* cpu_address,uchar write_num)
  47          {
  48   1              
  49   1              uchar send_try_number = 0;
  50   1              uchar send_err_flag;
  51   1              
  52   1           
  53   1              while(sm_busy);                       // Wait for SMBus to be free.
  54   1      
C51 COMPILER V7.50   FM31XX                                                                06/10/2007 23:11:21 PAGE 2   

  55   1                      while(send_try_number<4)
  56   1                      {
  57   2                              sm_busy = 1;                            // Occupy SMBus (set to busy)
  58   2                              write_start_num = 0;
  59   2                              slave_add = chip_select;                // Chip select + WRITE
  60   2                              HighB=0;
  61   2                              //if(iic_address>255)  {
  62   2                                     HighB=1;  
  63   2                                         Ttems=(uchar)(iic_address>>7);
  64   2                                         Ttems&=0x0e;
  65   2                                      slave_add=slave_add| Ttems;
  66   2                              //}     
  67   2                              iic_ram_add = iic_address;             // fm_clock的寄存器地址
  68   2                              iic_data_len = write_num;               // 写PCF8563字节数
  69   2                              iic_buf_p = cpu_address;
  70   2                              
  71   2                                                             // Start transfer
  72   2                              DISABLE();
  73   2                              smbus_ms_cnt = 0;                       
  74   2                              ENABLE();
  75   2                              
  76   2                              STA=1; 
  77   2                              send_err_flag = 0;
  78   2                              while(sm_busy)    //忙且无中断时间小于50mS        // Wait for transfer to finish
  79   2                              {
  80   3                                      //wait 
  81   3                                      if((++smbus_ms_cnt>65000))
  82   3                                      {
  83   4                                              //异常停止
  84   4                                              DISABLE();
  85   4                                              send_err_flag = 1;
  86   4                                              sm_busy = 0;
  87   4                                              ENABLE();
  88   4                                              break;
  89   4                                      }
  90   3                                      Delay1us;
  91   3                              }
  92   2      
  93   2                              if((iic_error_flag)||(send_err_flag == 1))
  94   2                              {
  95   3                                      //出错
  96   3                                      send_try_number++;
  97   3                                      SMBus_Init();
  98   3      
  99   3                              }
 100   2                              else
 101   2                              {
 102   3                                      //ok
 103   3                                      
 104   3                                      return 1;               //成功
 105   3                              }
 106   2                      }
 107   1      
 108   1      
 109   1              return 0;//error return
 110   1      }
 111          
 112          
 113          uchar smbus_receive (uchar chip_select,uchar* cpu_address,uchar receive_num)
 114          {    
 115   1              
 116   1              uchar receive_try_number = 0;
C51 COMPILER V7.50   FM31XX                                                                06/10/2007 23:11:21 PAGE 3   

 117   1              uchar receive_err_flag;
 118   1      
 119   1              
 120   1              if(receive_num)
 121   1              {
 122   2                      while (sm_busy);                    // Wait for bus to be free.
 123   2                      while(receive_try_number<4)
 124   2                      {
 125   3                              sm_busy = 1;                          // Occupy SMBus (set to busy)
 126   3                              read_start_num = 0;
 127   3                              slave_add = chip_select;              // Chip select + READ
 128   3                              
 129   3                              if(HighB==1) {
 130   4                                               
 131   4                                      
 132   4                                        slave_add=slave_add| Ttems;
 133   4                              
 134   4                              }
 135   3                               
 136   3                              iic_data_len = receive_num; 
 137   3                              iic_buf_p = cpu_address;
 138   3                              
 139   3                              STA = 1;                              // Start transfer
 140   3                              DISABLE();
 141   3                              smbus_ms_cnt = 0;
 142   3                              ENABLE();
 143   3                              receive_err_flag = 0;
 144   3                              
 145   3                              while(sm_busy)    //忙且无中断时间小于50mS        // Wait for transfer to finish
 146   3                              {
 147   4                                      //wait 
 148   4                                      if((++smbus_ms_cnt>50000))
 149   4                                      {
 150   5                                              //异常停止
 151   5                                              DISABLE();
 152   5                                              receive_err_flag = 1;
 153   5                                              sm_busy = 0;
 154   5                                              ENABLE();
 155   5                                              break;
 156   5                                      }
 157   4                                      Delay1us;
 158   4                              }
 159   3      
 160   3                              if(iic_error_flag||(receive_err_flag == 1))
 161   3                              {
 162   4                                      //出错
 163   4                                      receive_try_number++;
 164   4                                      SMBus_Init();
 165   4                              }
 166   3                              else
 167   3                              {
 168   4                                      //ok
 169   4                              
 170   4                                      return 1;               //成功
 171   4                              }
 172   3                      }
 173   2                      
 174   2                      
 175   2              }
 176   1              
 177   1              return 0;//error return
 178   1      
C51 COMPILER V7.50   FM31XX                                                                06/10/2007 23:11:21 PAGE 4   

 179   1      }
 180          
 181          
 182          
 183          
 184          void read_fm_memory(unsigned int addr_fm,unsigned char *addr_cpu,unsigned char read_num)
 185          {
 186   1            smbus_send(FM_MEMORY_WR,addr_fm,addr_cpu,0);                      //set fm_memory addr
 187   1              smbus_receive(FM_MEMORY_RD,addr_cpu,read_num);
 188   1      }
 189          
 190          
 191          void write_fm_memory(unsigned int addr_fm,unsigned char *addr_cpu,unsigned char write_num)
 192          {  uchar mmk;
 193   1          mmk=smbus_send(FM_MEMORY_WR,addr_fm,addr_cpu,write_num);
 194   1              if(mmk)
 195   1                 mmk=12;
 196   1              else
 197   1                      mmk=0;
 198   1      
 199   1      }
 200          
 201          
 202          
 203          
 204          
 205          
 206          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    555    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =      1      28
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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