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

📄 at24c02d读写.c

📁 AT2402D读写,51单片机端口模拟I2C总线
💻 C
字号:
		#include<reg51.h>
		#include<intrins.h>         //与空操作有关  左,右,上,下移动有关


		typedef  unsigned  char   uchar;
		#define  WRITE24C02   0xA0
		#define  READ24C02    0xA1
		sbit	 SDA=P2^1;
		sbit	 SCL=P2^2;
		void  I2C_start(void);
		void  I2C_stop(void);
		void  I2C_send_ack(void);
		bit	  TestAck();
		void  I2C_write_byte(uchar);
		uchar I2C_read_byte(void);
		void  AT24C02_write(uchar,uchar *,uchar);
		void  AT24C02_read(uchar,uchar *,uchar);
		void  delay_ms(uchar);
			void  main (void)
		{
			uchar  buffer1[3]={1,2,3};
			uchar  buffer2[3];
			AT24C02_write(0x010,buffer1,3);
			AT24C02_read(0x010,buffer2,3);
			while(1)
			{}
		}

		void	I2C_start(void)
		{
			SDA=1;
			SCL=1;
			SDA=0;
			SCL=0;
		}

		void	I2C_stop(void)
		{
			SCL=0;
			SDA=0;
			SCL=1;
			SDA=1;
		}

		void	I2C_send_ack(void)
		{
			SDA=0;
			SCL=1;
			SCL=0;
			SDA=1;
		}

		bit  TestAck(void)
		{
			bit  ErrorBit;
			SDA=1;
		    {}
        	SCL=1;																										
			ErrorBit=SDA;														 
			SCL=0;
			return(ErrorBit);												    
		}															   

		void  I2C_write_byte(uchar  input)		   
		{
						uchar  temp;
		   		for(temp=7;temp!=0;temp--)
			{
				SDA=(bit)(input&0x80);			   
				SCL=1;
				SCL=0;
				input=input<<1;
			}
		}
		uchar  I2C_read_byte(void)
		{
			uchar  temp, rbyte=0;
			for(temp=8;temp!=0;temp--)
			{
				SCL=1;
				rbyte=rbyte<<1;
				rbyte=rbyte|((uchar)(SDA));
				SCL=0;
			}
			return(rbyte);
		}
			

		void    AT24C02_write(uchar  adr, uchar  *buf,uchar  N)
		{
			I2C_start();
			I2C_write_byte(WRITE24C02);
			while(TestAck());
			I2C_write_byte(adr);
			while(TestAck());
			for(;N!=0;N--)
			{
				I2C_write_byte(*buf);
				while(TestAck());
				buf++;													   
			}
			I2C_stop();
			delay_ms(50);
		}


		void  AT24C02_read(uchar  adr, uchar  *buf,uchar N)
		{
			I2C_start();
			I2C_write_byte(READ24C02);
			while(TestAck());
			while(N!=1)
			{
				*buf=I2C_read_byte();
				buf++;
				N--;
			}

			*buf=I2C_read_byte();
			I2C_send_noack();
			I2C_stop();
		}

		void  delay_ms(uchar  n)
		{
			uchar  i,j;
			for(i=n;i>0;i--)
			for(j=0;j<200;j++);
		}


                  
 /*  调试,出错:       Build target 'Target 1'compiling AT24C02D读写.c...AT24C02D读写.C(56): error C100: unprintable character 0xB9 skipped  !!!!!除注释外,各行不能有其它字符  本错是因AT24C02D读写.C(56): error C100: unprintable character 0xB2 skipped  注释时,把字符漏到起它行上而没觉察,删除,错除.  页面太大,看不过来AT24C02D读写.C(63): error C236: 'I2C_write_byte': different length of parameter listsTarget not created               在原型声明中,有形参uchar,却为void.改,通过         */

						
		
		
			
	
																									

		
		
	



	

⌨️ 快捷键说明

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