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

📄 i2ctest.c

📁 电子时钟
💻 C
字号:
	
					//************* Delay  *********//	
					void delay(int n)
					{
						int	i;
						for(i=0;i<=n;i++)
						{
							_nop_();
						}
					}
					
					//************* Delay N ms *********//	
					void delay_ms(int n)
					{
						int	i,j;
						for(i=0;i<=n;i++)
						{
							for(j=0;j<=31;j++)			//** Delay 1 ms **//
							{
								_nop_();
							}
						}
					}
					
					
					//**************Start**********//
					void I2C_start(void)
					{
						SDA=1;
						SCL=1;
						delay(3);
						SDA=0;
						delay(3);
						SCL=0;
					}
					
					//*************Stop***********//
					void I2C_stop(void)
					{
						SDA=0;
						SCL=1;
						delay(3);
						SDA=1;
						delay(3);
						SCL=0;
					}
					
					//*************Ack**************//
					void I2C_ack(void)
					{
						SDA=0;
						SCL=1;
						delay(3);
						SCL=0;
						SDA=1;
					}
					
					//*************No Ack*********//
					void I2C_nack(void)
					{
						SDA=1;
						SCL=1;
						delay(3);
						SCL=0;
						SDA=0;
					}
					
					//*********Check ack signal*******//
					bit I2C_Cack(void)
					{
						bit a;
						SDA=1;
						SCL=1;
						delay(1);
						a=SDA;
						delay(1);
						SCL=0;
						delay(3);
						if(a==1)
						{
							return 	1;
						}
						else
						{
							return	0;
						}
					}
						
					//**********Send a Bety*********//
					void I2C_Send_byte(char da)
					{
						unsigned char i;
						for(i=0;i<8;i++)
						{
							if((da<<i)&0x80)
							{
							SDA=1;			//send "1"//
							SCL=1;
							delay(3);
							SCL=0;
							SDA=0;
							delay(3);
							}
							else
							{
							SDA=0;			//send "0"//
							SCL=1;
							delay(3);
							SCL=0;
							delay(3);	
							}
						}
					}
						
					//*************receive a byte *********//
					unsigned char I2C_Receive_byte(void)
					{
						unsigned char i,da=0;
						bit	a;
						for(i=0;i<8;i++)
						{
							SDA=1;
							SCL=1;
							delay(3);
							a=SDA;
							delay(3);
							SCL=0;
							if(a==1)
							{
								da=da<<1;
								da=da|0x01;
							}
							else
							{
								da=da<<1;
							}
						}
						return da;
					}
												
					//**********Send n bety ,n<16,page[0-7],add[0-255].error return 0********//
					bit I2C_Send_Nbyte(unsigned char page,unsigned char add,unsigned char *buffer,unsigned char n)
					{
						unsigned char i;
							
						I2C_start();			//send start//			
						
						I2C_Send_byte(page);	        //send  address//
						if(I2C_Cack()==1)
						{
							I2C_stop();
							return 0;
						}
						
						I2C_Send_byte(add);		//send data address//
						if(I2C_Cack()==1)
						{
							I2C_stop();
							return 0;
						}
						
						for(i=0;i<n;i++)		//send data//
						{
							I2C_Send_byte(buffer[i]);
							if(I2C_Cack()==1)
							{
								I2C_stop();
								return 0;
							}
						}
						
						I2C_stop();			//send stop//
						return 1;
					}			
						
					
					//***********receive n byte n<16,page[0-7],add[0-255],error return 0*********//
					bit I2C_Receive_Nbyte(unsigned char page,unsigned char add,unsigned char *buffer,unsigned char n)
					{
						unsigned char i;
						
						I2C_start();			//send start//						
						
						I2C_Send_byte(page);		//send device address//
						if(I2C_Cack()==1)
						{
							I2C_stop();
							return 0;
						}
						
						I2C_Send_byte(add);		//send data address//
						if(I2C_Cack()==1)
						{
							I2C_stop();
							return 0;
						}
						
						for(i=0;i<n;i++)		//send data//
						{
							buffer[i]=I2C_Receive_byte();
							if(i!=n)
							{
								I2C_ack();
							}
							else
							{
								I2C_nack();
							}
						}
							
						I2C_stop();			//send stop//
									
						return 1;
					}		
								
					
					//********main************//
					void main(void)
					{						unsigned char i,j,k;
						unsigned char code yuan[17]={0,1,2,3,4,5,6,7,8,9,10,11,13,13,14,15,16};
						unsigned char	tt[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
						bit	a=0;
						SCON = 0x52;
						TMOD=0x29;	
						TH1=0xfd;
						TL1=0xfd;					//** 9600 baud **//
						TR1=1;						//** start timer 1 **//
						TI=1;
						EA=1;						//** Allow UART Int **//
			
						printf("I1C Test\n");
						led=0;
						delay_ms(100);
						
					/*	for(i=0;i<8;i++)
						{
							for(j=0;j<0x10;j++)
							{
								I2C_Send_Nbyte(i,j*0x10,yuan,16);
								delay_ms(10);
							}
						}	
						led=!led;	*/
						delay_ms(200);
						I2C_Receive_Nbyte(0x4,0xa0,tt,16);
						 delay_ms(100);
						 for(i=0;i<16;i++)
						 {
						 	printf("%x,",tt[i]);
						}
						printf("\n");
						while(1);
					}

⌨️ 快捷键说明

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