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

📄 24c16a.lst

📁 AT24C16a的52单片机源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   24C16A                                                                11/25/2006 17:36:28 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 24C16A
OBJECT MODULE PLACED IN 24c16a.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c16a.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*++++++++++++++++++++++++++++++++++++++++
   2          * 作者:殷少翔
   3          * 日期:2006年11月10日
   4          * 修改:2006年11月15日
   5          * 说明:用于S51, 12M晶振
   6          * 约定:每个函数以scl=0开始,scl=0结尾
   7          ++++++++++++++++++++++++++++++++++++++++++*/
   8          
   9          #include "24c16a.h"
  10          #include<intrins.h>                             //可以使用_nop_()函数
  11          
  12          UINT8 WorkpieceNum[4];
  13          /****************************************************************************************************/
  14          //关于中断,测频率的函数
  15          /*****************************************************************************************************/
  16          /*================
  17           外部中断 计数程序
  18           ================*/
  19          /*void INTO(void) interrupt 0  using 0
  20          {
  21           IE0 = 0 ;
  22           F_Num++ ;
  23          }
  24          
  25          /*===============
  26           T0计时的函数,1s
  27           ================*/
  28          /*void Time0(void) interrupt 1 using 1
  29          {
  30           TF0 = 0 ;
  31           TH0 = (65536-50000)/256 ;
  32           TL0 = (65536-50000)%256 ;
  33          
  34           T0_Num++ ;
  35           if(T0_Num==20)                                                 //中断20次(1s)
  36                  {
  37                          F = F_Num ;                                             //输出频率
  38                          T0_Num = 0 ;                                    //从0计时
  39                          F_Num = 0 ;                                             //从0计数
  40          
  41                  }
  42          
  43          }
  44          
  45          
  46          /*===============
  47           各中断初始化函数
  48          =================*/
  49          
  50          /*void InterruptInit(void)
  51          {
  52           TH0 = (65536-50000)/256 ;
  53           TL0 = (65536-50000)%256 ;
  54           TMOD = 0x01 ;                                                  
  55           
C51 COMPILER V7.06   24C16A                                                                11/25/2006 17:36:28 PAGE 2   

  56           TR0 = 1 ;                                                              //T0方式0 初值50000
  57           ET0 = 1 ;
  58          
  59           IT0 = 1 ;                                                              //INT0下降沿触发
  60           EX0 = 1 ;
  61          
  62           EA = 1 ;
  63          }
  64          /*********************************************************************************************************
             -/
  65          //关于24C16的函数
  66          /*********************************************************************************************************
             -/
  67          /*=======
  68           开始函数
  69          ========*/
  70          void start_24(void)
  71          {
  72   1       scl = 0 ;
  73   1       sda = 1 ;
  74   1       scl = 1 ; _nop_();
  75   1       sda = 0 ; _nop_();
  76   1       
  77   1       scl = 0 ;
  78   1      }
  79          
  80          /*=======
  81           结束函数
  82           =======*/
  83          void stop_24(void)
  84          {
  85   1       scl = 0 ;
  86   1       sda = 0 ;
  87   1       scl = 1 ; _nop_() ;
  88   1       sda = 1 ; _nop_() ;
  89   1      
  90   1       scl = 0 ;
  91   1      }
  92          
  93          /*===========
  94           读8 Bit 数据
  95           ============*/
  96          UINT8 read_8_bit_24(void)
  97          {
  98   1       UINT8 r_8_bit, n, m ;
  99   1       UINT8 temp[8] = 0 ;
 100   1       
 101   1       r_8_bit = 0 ;
 102   1       scl = 0 ;scl = 1 ;
 103   1       for(n=0; n<8; n++)                                     //得到数据,由高到低位
 104   1              {
 105   2                      scl = 1 ;
 106   2                      _nop_() ;
 107   2                      temp[n] = sda ;
 108   2                      scl = 0 ;
 109   2              }
 110   1       scl = 0 ;
 111   1       sda = 1 ;scl = 1 ; 
 112   1       _nop_() ; _nop_() ;
 113   1       scl = 0 ;                                                      //处理确认位
 114   1       
 115   1       for(m=0; m<8; m++)                                     //数据处理
C51 COMPILER V7.06   24C16A                                                                11/25/2006 17:36:28 PAGE 3   

 116   1              {
 117   2                      r_8_bit = r_8_bit << 1 ;
 118   2                      if(temp[m]==1) r_8_bit = r_8_bit|0x01 ;
 119   2                      else r_8_bit = r_8_bit|0x00 ;
 120   2              }
 121   1       return r_8_bit ;
 122   1      }
 123          
 124          /*===============
 125           写8 Bit 数据 x
 126           ================*/
 127          void write_8_bit_24(UINT8 x)
 128          {
 129   1       UINT8 w_8_bit, n, m, a;
 130   1       UINT8 temp[8] = 0 ;
 131   1       w_8_bit = x ;
 132   1       
 133   1       for(n=0; n<8; n++)
 134   1              {
 135   2                      a = w_8_bit&0x80 ;                              //高位在前
 136   2                      if(a==0x80) temp[n] = 1 ;
 137   2                      else temp[n] = 0 ;
 138   2                      w_8_bit = w_8_bit << 1 ;
 139   2              }
 140   1       
 141   1       sda = 1 ;scl = 0 ;
 142   1       for(m=0; m<8; m++)                                             //先写高位
 143   1              {
 144   2                      sda = temp[m] ;
 145   2                      scl = 1 ;
 146   2                      _nop_() ;
 147   2                      scl = 0 ;
 148   2              }
 149   1       
 150   1       scl = 1 ; _nop_() ;
 151   1       scl = 0 ;                                                              //处理确认位
 152   1      
 153   1       }
 154          
 155          /*===========================================================================
 156           *                         读1 Byte 数据
 157           * 输入参数:r_add      要读的数据的地址,格式为:1010+页码(3位)+0+地址(8位)
 158           * 返回参数:r_1_byte   读得到的数据
 159           ============================================================================*/
 160          UINT8 read_1_byte_24(UINT16 r_add)
 161          {
 162   1       UINT8 r_1_byte ;
 163   1       UINT8 H , L, h;
 164   1       
 165   1       H = r_add / 256 ;                                              //得到高8位数据
 166   1       L = r_add % 256 ;                                              //得到低8位数据
 167   1       h = H+1 ;                                                              //得到读指令的数据
 168   1       
 169   1       wp = 0 ;                                                               //写允许
 170   1       delay_n5ms_24(1);
 171   1       
 172   1       start_24();
 173   1       write_8_bit_24(H);                                             //发写指令
 174   1              _nop_() ;_nop_() ;
 175   1       write_8_bit_24(L);                                             //写入地址
 176   1              _nop_() ;_nop_() ;
 177   1       
C51 COMPILER V7.06   24C16A                                                                11/25/2006 17:36:28 PAGE 4   

 178   1       start_24();
 179   1       write_8_bit_24(h);                                             //发读命令
 180   1              _nop_() ;_nop_() ;
 181   1      
 182   1       wp = 1 ;                                                               //写保护

⌨️ 快捷键说明

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