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

📄 24c02.lst

📁 I2C总线存储器24c02驱动程序(KEIL)
💻 LST
字号:
C51 COMPILER V6.20c  24C02                                                                 07/17/2003 08:42:21 PAGE 1   


C51 COMPILER V6.20c, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24c02.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c02.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include "intrins.h"
   2          #include "At89x51.h"
   3          /////////////////////////////////////
   4          //采用P1口作控制
   5          //11.0592的晶体
   6          ////////////////////////////////////
   7          //I2C总线的数据和时钟
   8          #define SCL P1_5
   9          #define SDA P1_4
  10          //////////////////////////////////////
  11          #define NOP _nop_();_nop_();_nop_();_nop_();
  12          #define AddWr 0xa0  /*器件地址选择及写标志*/
  13          #define AddRd 0xa1  /*器件地址选择及读标志*/
  14          
  15          //延时程序
  16          void mDelay(unsigned j)
  17          {
  18   1      	unsigned int i;
  19   1      	for(;j>0;j--)
  20   1      	{
  21   2      		for(i=0;i<125;i++)
  22   2      		{;}
  23   2          }
  24   1      }
  25          //发送起始条件
  26          void Start(void)
  27          {
  28   1      	SDA=1;
  29   1      	SCL=1;
  30   1      	NOP;
  31   1      	SDA=0;
  32   1      	NOP;
  33   1      }
  34          //发送停止条件
  35          void Stop(void)
  36          {
  37   1      	SDA=0;
  38   1      	SCL=1;
  39   1      	NOP;
  40   1      	SDA=1;
  41   1      	NOP;	
  42   1      }
  43          //应答位
  44          void Ack(void)
  45          {
  46   1      	SDA=0;
  47   1      	NOP;
  48   1      	SCL=1;
  49   1      	NOP;
  50   1      	SCL=0;
  51   1      }
  52          //非应答
  53          void NoAck(void)
  54          {
  55   1      	SDA=1;
C51 COMPILER V6.20c  24C02                                                                 07/17/2003 08:42:21 PAGE 2   

  56   1      	NOP;
  57   1      	SCL=1;
  58   1      	NOP;
  59   1      	SCL=0;	
  60   1      }
  61          //发送数据子程序,Data为要发送的数据a
  62          void Send(unsigned char Data)
  63          {
  64   1      	 unsigned char BitCounter=8;//位数控制
  65   1      	 unsigned char temp;//中间变量控制
  66   1      	do{ 
  67   2      	 temp=Data;
  68   2      	 SCL=0;
  69   2      	 NOP;
  70   2      	 if((temp&0x0080)==0x0080)//如果最高位是1
  71   2      	    SDA=1;
  72   2      	 else
  73   2      		SDA=0;
  74   2      	 SCL=1;
  75   2      	 temp=Data<<1;//左移
  76   2      	 Data=temp;
  77   2      	 BitCounter--;
  78   2      	 }while(BitCounter);
  79   1      	 SCL=0;
  80   1      }
  81          //读一个字节的数据,并返回该字节的值
  82          unsigned Read(void)
  83          {
  84   1      	unsigned char temp=0;
  85   1          unsigned char temp1=0;
  86   1          unsigned BitCounter=8;
  87   1      	SDA=1;
  88   1      	do{
  89   2      		SCL=0;
  90   2      		NOP;
  91   2      		SCL=1;
  92   2      		NOP;
  93   2      		if(SDA)
  94   2      		temp=temp|0x01;
  95   2      		else
  96   2      		temp=temp&0xfe;
  97   2      		if(BitCounter-1)
  98   2      		{
  99   3      			temp1=temp<<1;
 100   3      			temp=temp1;
 101   3      		}
 102   2      		BitCounter--;
 103   2      	  }while(BitCounter);
 104   1      	return(temp);	
 105   1      }
 106          //向24c02中写数据
 107          void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num)
 108          {
 109   1      	unsigned char i;
 110   1          unsigned char *Pdata;
 111   1          Pdata=Data;
 112   1      	for(i=0;i<Num;i++)
 113   1      	{
 114   2      		Start();
 115   2      		Send(AddWr);
 116   2      		Ack();
 117   2      		Send(Address+i);
C51 COMPILER V6.20c  24C02                                                                 07/17/2003 08:42:21 PAGE 3   

 118   2      		Ack();
 119   2      		Send(*(Pdata+i));
 120   2      		Ack();
 121   2      		Stop();
 122   2      //		mDelay(20);
 123   2      	}
 124   1      }
 125          void RdFromROM(unsigned char Data[],unsigned char Address,unsigned char Num)
 126          {
 127   1      	unsigned char i;
 128   1      	unsigned char *Pdata;
 129   1      	Pdata=Data;
 130   1      	for(i=0;i<Num;i++)
 131   1      	{
 132   2      		Start();
 133   2      		Send(AddWr);
 134   2      		Ack();
 135   2      		Send(Address+i);
 136   2      		Ack();
 137   2      		Start();
 138   2      		Send(AddRd);
 139   2      		Ack();
 140   2      		*(Pdata+i)=Read();
 141   2      		SCL=0;
 142   2              NoAck();
 143   2      		Stop();
 144   2      	}
 145   1      }
 146          main()
 147          {
 148   1          unsigned char Number[4]={1,2,3,4};
 149   1      	WrToROM(Number,4,4);
 150   1      	mDelay(20);
 151   1      	Number[0]=0;
 152   1      	Number[1]=0;
 153   1      	Number[2]=0;
 154   1      	Number[3]=0;
 155   1      	RdFromROM(Number,4,4);
 156   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    382    ----
   CONSTANT SIZE    =      4    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      21
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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