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

📄 iicbus.h

📁 单片机与DSP通信源程序
💻 H
字号:
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
bit  bACK;
sbit pSDA=P3^7;
sbit pSCL=P3^6;
void iicStart()
   {
    uchar i;
    pSDA=1;
    pSCL=1;
    while(pSCL==0){;}
    for(i=0;i<4;i++){_nop_();}
    pSDA=0;
    for(i=0;i<8;i++){_nop_();}
    pSCL=0;
    }
void iicStop()
    {
     uchar i;
     pSDA=0;
     pSCL=1;
     while(pSCL==0){;}
     pSDA=1;
     for(i=0;i<4;i++){_nop_();}
     for(i=0;i<8;i++){_nop_();}
     pSCL=0;    
     }
void iicMack()
    {
     uchar i;
     pSDA=0;
     pSCL=1;
     for(i=0;i<8;i++){_nop_();}
     pSCL=0;
     pSDA=1;       
      }
void iicMnack()
    {
      uchar i;
      pSDA=1;
      pSCL=1;
      for(i=0;i<8;i++){_nop_();}  
      pSCL=0;
      pSDA=0;   
      }
void iicCack()
     {
       uchar i;
       pSDA=1;
       pSCL=1;
       bACK=0;
       if(pSDA==0)
         {
           pSCL=0;
           for(i=0;i<8;i++){_nop_();}            
           }
       else
         {
           bACK=1;
           pSCL=0;       
           for(i=0;i<8;i++){_nop_();}  
           }
       }
void iicwrbyt0()
     {
        uchar i;
        pSDA=0;
        pSCL=1;
        for(i=0;i<8;i++){_nop_();}
        pSCL=0;       
       }
void iicwrbyt1()
     {
        uchar i;
        pSDA=1;
        pSCL=1;
        for(i=0;i<8;i++){_nop_();} 
        pSCL=0;
        pSDA=0;     
       }
void iicwrbyt(uchar WrData)
      {
        uchar i,j;
        if((WrData&0x80)>0)
           {pSDA=1;}
        else
           {pSDA=0;}
        pSCL=1;
        while(pSCL==0){;}
        for(i=0;i<4;i++){_nop_();}
        pSCL=0;
        pSDA=0;
        WrData=_crol_(WrData,1);
        for(j=1;j<8;j++)
         {
           if((WrData&0x80)>0)
              {iicwrbyt1();}
           else
              {iicwrbyt0();}
           WrData=_crol_(WrData,1);
           }  
        }
uchar iicrdbyt()
     {
       uchar RdData=0xff,j;
       for(j=0;j<8;j++)
         {
          pSDA=1;
          pSCL=1;
          if(pSDA==0)
            {
             RdData=RdData&0x7f;
             RdData=_crol_(RdData,1);
             pSCL=0;
              } 
          else
            {
             RdData=RdData|0x80;
             RdData=_crol_(RdData,1);
             pSCL=0; 
              }
          }
       return(RdData);
       }
/*
void iicwr1byt(uchar Slaw,uchar wrbyte)
      {
	   do{
          do{ 
             iicStart();
             iicwrbyt(Slaw);
             iicCack();
             }while(bACK==1);
          iicwrbyt(wrbyte);
          iicCack();
          }while(bACK==1);
        iicStop();
       }
uchar iicrd1byt(uchar Slar)
      {
        uchar temp;
        do{
            iicStart();
            iicwrbyt(Slar);
            iicCack();
            }while(bACK==1);
            temp=iicrdbyt();
            iicMnack();
        iicStop();
		return(temp);
      }
void iicwrnbyt(uchar Slaw,uchar nData,uchar wrnbyte[])
      {
       uchar i;
       do{ 
          iicStart();
          iicwrbyt(Slaw);
          iicCack();
          }while(bACK==1);
       for(i=0;i<nData;i++)
         {
          iicwrbyt(wrnbyte[i]);
          iicCack();
          while(bACK==1)
            {
              do{
                 iicStart();
                 iicwrbyt(Slaw);
                 iicCack();
                 }while(bACK==1);
              iicwrbyt(wrnbyte[i]);          
             }
           iicCack();
          }
        iicStop();
       }
void iicrdnbyt(uchar rdnum,uchar Slar,uchar Rdndata[])
      {
        uchar temp,n;
        do{
            iicStart();
            iicwrbyt(Slar);
            iicCack();
            }while(bACK==1);
        for(n=0;n<rdnum;n++)
           {
            temp=iicrdbyt();
            Rdndata[n]=temp;
            if(n<(rdnum-1))
              {iicMack();}
            }
        iicMnack();
        iicStop();
      }
*/
void iic24cxxwr(uchar WrAddr,uchar WrData)
     {
	   do{
	      do{ 
             do{
	            iicStart();
		        iicwrbyt(0xa0);
		        iicCack();
	           }while(bACK==1);
		      iicwrbyt(WrAddr);
			  iicCack();
             }while(bACK==1);
		  iicwrbyt(WrData);
		  iicCack();
         }while(bACK==1);
		 iicStop();
		 tdelay(4);
	  }
uchar iic24cxxrd(uchar RdAddr)
     {
	  uchar temp;
	  do{
	     do{
		    do{
			    iicStart();
		        iicwrbyt(0xa0);
		        iicCack();
			  }while(bACK==1);
		       iicwrbyt(RdAddr);
			   iicCack();
		    }while(bACK==1);
		    iicStart();
		    iicwrbyt(0xa1);
		    iicCack();            
	      }while(bACK==1);
	   temp=iicrdbyt();
       iicMnack();
	   iicStop();
	   return(temp);
	  }

⌨️ 快捷键说明

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