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

📄 24wcxx.lst

📁 这是铁路各工区
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  24WCXX                                                                 11/29/2007 10:34:25 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE 24WCXX
OBJECT MODULE PLACED IN F:\YUN\安全牌\安全牌C\24WCXX.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE F:\YUN\安全牌\安全牌C\24WCXX.C DB SB OE

stmt level    source

   1          //器件:24WC32/64
   2          //注1:上电后需1MS才能进行读写操作
   3          //注2:时钟频率Fscl_max=100Hz(1.8v,2.5v)/400Hz(4.5v~5.5v)
   4          //注3:32字节页写缓冲器,内部低5 位地址加1 高位地址保持不变
   5          //注4:当WP=VCC时,写保护(只读),当WP=GND/悬空时,可读/写,
   6          //     CAT24WC32/64 可以接收从器件地址和字节地址但是装置在
   7          //     接收到第一个数据字节后不发送应答信号从而避免寄存器区域
   8          //     被编程改写
   9          
  10          #include "fun.h"
  11          #include "var.h"
  12          /**********************只在本文件使用*****************************/
  13          /*功能:提供I2C总线工作时序中的起始位*/
  14          void I_start(void){
  15   1       SCL=1;
  16   1       SCL=1;
  17   1       SDA=0;
  18   1       SDA=0;
  19   1       SCL=0;
  20   1       SCL=0;
  21   1      }
  22          
  23          /*功能:提供I2C总线工作时序中的停止位*/
  24          void I_stop(void)
  25          {SDA=0;
  26   1       SDA=0;
  27   1       SCL=1;
  28   1       SCL=1;
  29   1       SDA=1;
  30   1       SDA=1;
  31   1       SCL=0;
  32   1       SCL=0;
  33   1      }
  34          
  35          /*功能:I2C总线初始化。在MAIN()函数中应先调用本函数,然后再调用其他函数。*/
  36          void I_init(void)
  37          {SCL=0;
  38   1       I_stop();}
  39          
  40          /*功能:提供I2C的时钟信号,并返回在时钟电平为高期间SDA信号线上状态。
  41           *本函数可用于数据接收。*/
  42          bit I_clock(void)
  43          {bit sample;
  44   1       SCL=1;
  45   1       delay(1);
  46   1       sample=SDA;
  47   1       SCL=0;
  48   1       delay(1);
  49   1       return(sample);}
  50          
  51          /*功能:向I2C总线发送8位数据,并请求一个应答信号ACK。
  52           *如果收到ACK应答则返回1,否则返回0*/
  53          bit I_send(uchar I_data)
  54          {uchar i;
  55   1       /*发送8位数据*/
C51 COMPILER V6.12  24WCXX                                                                 11/29/2007 10:34:25 PAGE 2   

  56   1       for (i=0;i<8;i++)
  57   1       {SDA=(bit)(I_data&0x80);
  58   2        I_data=I_data<<1;
  59   2        I_clock();}
  60   1       /*请求应答信号ACK*/
  61   1       SDA=1;
  62   1       return(~I_clock());}
  63          
  64          /*功能:从I2C总线上接收8位数据信号,并将接收到8位数据作为一个
  65           *字节返回,不回送应答信号ACK。主函数在调用本函数之前应保证SDA
  66           *信号线处于浮置状态,即SDA置1。*/
  67          uchar I_receive(void)
  68          {uchar I_data=0;
  69   1       uchar i;
  70   1       for(i=0;i<8;i++)
  71   1       {I_data<<=1;
  72   2        if(I_clock())I_data++;}
  73   1       return(I_data);
  74   1      }
  75          
  76          /*功能:向I2C总线发送一个应答信号ACK,一般用于连续数据读取时。*/
  77          void I_Ack(void)
  78          {SDA=0;
  79   1       I_clock();
  80   1       SDA=1;}
  81          
  82          /*功能:向24WCXX写入器件地址和一个指定的字地址*/
  83          bit E_address(uchar Address)
  84          {I_start();
  85   1       if(I_send(I2C_24WCXX_WR))return(I_send(Address));
  86   1       else return(FALSE);
  87   1      }
  88          /*bit E_address(uint Address)
  89          {uchar i;
  90           I_start();
  91           if(I_send(I2C_24WCXX_WR))
  92           {i=(uchar)Address>>8;
  93            if(!I_send(i))return(FALSE);
  94            i=(uchar)Address;
  95            return(I_send(i));
  96           }
  97           else return(FALSE);
  98          } */
  99          /*******************************************************/
 100          //写24wcxx
 101          bit wr_24wcxx(uchar address)     //
 102          {uchar i=7;
 103   1       uchar *p;
 104   1       p=(uchar *)&binary_24wcxx;
 105   1       I_init();
 106   1       if(E_address(address))
 107   1       {while(i--)
 108   2        {if(!I_send(*p++))
 109   3         {I_stop();return(FALSE);}
 110   3        }
 111   2        I_stop();delay(600);return(TRUE);
 112   2       }
 113   1       else{I_stop();return(FALSE);}
 114   1      }
 115          
 116          //读24wcxx
 117          bit rd_24wcxx(uchar address)     //
C51 COMPILER V6.12  24WCXX                                                                 11/29/2007 10:34:25 PAGE 3   

 118          {uchar i=7;
 119   1       uchar *p;
 120   1       p=(uchar *)&binary_24wcxx;
 121   1       I_init();
 122   1       if(E_address(address))/*发送重复启动信号*/
 123   1       {I_start();
 124   2        if(I_send(I2C_24WCXX_RD))
 125   2        {while(i--)
 126   3         {*p++=I_receive();if(i)I_Ack();}
 127   3          I_stop();
 128   3          return(TRUE);
 129   3         }
 130   2        else{I_stop();return(FALSE);}
 131   2       }
 132   1       else {I_stop();return(FALSE);}
 133   1      }
 134          /********************************************************/
C51 COMPILER V6.12  24WCXX                                                                 11/29/2007 10:34:25 PAGE 4   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


P0 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0080H  1
P1 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0090H  1
P3 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B0H  1
T0 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B4H  1
T1 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B5H  1
T2 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0090H  1
EA . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00AFH  1
binary . . . . . . . . . . . . . . . .  * TAG *  -----  STRUCT   -----  7

⌨️ 快捷键说明

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