51单片机的IIC总线先测试程序

源代码在线查看: 串行写入数据控制led.c

软件大小: 24 K
上传用户: red2years
关键词: IIC 51单片机 总线 测试程序
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*先将数据0x01通过IIC写入到AT24C02中,
				  再将其从AT24C02中读出来付给P1口,期间
				  需要编写延时、写数据、读数据、应答、起始、
				  结束这几个子函数*/
				#include
				#define uchar unsigned char
				sbit sda=P2^0;
				sbit scl=P2^1;
				uchar a;
				void delay1()//短延时,用于读写操作模块内的延时。
				{ ; ; }
				void delay2(uchar z)//长延时用于读写模块间的延时。
				{
				  uchar x,y;
				  for(x=z;x>0;x--)
				     for(y=100;y>0;y--);
				}
				void start()//根据时序图,在scl=1期间,sda有一个负跳变
				{
				  sda=1;
				  delay1();
				  scl=1;
				  delay1();
				  sda=0;
				  delay1();
				}
				void response()//应答信号,在第九个数据后scl=1期间sda为0时即为应答。
				{
				  uchar i;
				  scl=1;
				  delay1();
				  while((sda==1)&&(i				  scl=0;
				  delay1(); 
				}
				void initial()
				{
				  sda=1;
				  scl=1;
				}
				void write_byte(uchar dat)
				{
				  uchar i,j;
				  j=dat;
				
				  for(i=0;i				     {
				       j=j				       scl=0;
				       delay1();
				       sda=CY;
				       delay1();
				       scl=1;//写入一位数据
				       delay1();
				 //    scl=0;
				 //    delay1();
				     }
				   scl=0;
				   delay1();
				   sda=1;//释放总线,以读取应答信号
				   delay1();  
				}
				uchar read_byte()
				{
				   uchar i,j,k;
				   scl=0;
				   delay1();
				   sda=1;
				   delay1();
				   for(i=0;i				      {
				         scl=1;
				         delay1();
				         j=sda;//将总线的一位数据给j
				         k=(k				         delay1();
				         scl=0;
				         delay1();
				      }
				   return k;
				}
				void stop()
				{
				  sda=0;
				  delay1();
				  scl=1;
				  delay1();
				  sda=1;
				  delay1();
				}
				void main()
				{
				   initial();
				   start();
				   write_byte(0xa0);//写器件地址,高四位1010,第四位全0.
				   response();
				   write_byte(3);//写器件内部数据地址
				   response();
				   write_byte(0x55);
				   response();
				   stop();
				//下面是从AT24C02中读出数据给P1口。
				   delay2(100);
				   start();
				   write_byte(0xa0);//写器件地址,高四位1010,第四位全0.
				   response();
				   write_byte(3);//写器件内部数据地址
				   response();
				   start();
				   write_byte(0xa1);
				   response();
				   a=read_byte();
				   stop();
				   P1=a;
				   while(1);
				}
							

相关资源