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

📄 iicbusc.c

📁 单片机与DSP通信源程序
💻 C
字号:
#include "52init.h"
#define iicnop 2
bit     bACK;
sbit	pSDA=P3^7;
sbit	pSCL=P3^6;

void iicdelay(uchar delay_num)  //22.1184 the loop time is 0.543us
   {
    uchar i,k;                //delay_num 8us/num
    for(i=delay_num;i>0;i--)
     {
      for(k=15;k>0;k--)
       {;}
      }
    }
void iicStart()
   {
    uchar i;
    pSDA=1;
    pSCL=1;
    while(pSCL==0){;}
    for(i=0;i<iicnop;i++){_nop_();}
    pSDA=0;
    for(i=0;i<iicnop;i++){_nop_();}
    pSCL=0;
    }
void iicStop()
    {
     uchar i;
     pSDA=0;
     pSCL=1;
     while(pSCL==0){;}
     pSDA=1;
     for(i=0;i<iicnop;i++){_nop_();}
     for(i=0;i<iicnop;i++){_nop_();}
     pSCL=0; 
     }
void iicMack()
    {
     uchar i;
     pSDA=0;
     pSCL=1;
     for(i=0;i<iicnop;i++){_nop_();}
     pSCL=0;
     pSDA=1;       
      }
void iicMnack()
    {
      uchar i;
      pSDA=1;
      pSCL=1;
      for(i=0;i<iicnop;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<iicnop;i++){_nop_();}            
           }
       else
         {
           bACK=1;
           pSCL=0;       
           for(i=0;i<iicnop;i++){_nop_();}  
           }
       }
void iicwrbyt0()
     {
        uchar i;
        pSDA=0;
        pSCL=1;
        for(i=0;i<iicnop;i++){_nop_();}
        pSCL=0;       
       }
void iicwrbyt1()
     {
        uchar i;
        pSDA=1;
        pSCL=1;
        for(i=0;i<iicnop;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<iicnop;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 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();
		 //LcdPrintf("debug position \n");
	  }
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);
	  }
void iic4221wr(uchar WrAddr,uchar WrData)
     {
	  	do{
		  do{
			 do{
				iicStart();
				iicwrbyt(0x20);
				iicCack();
			   }while(bACK==1);
			    iicwrbyt(WrAddr);
			    iicCack();
		    }while(bACK==1);
		    iicwrbyt(WrData);
		    iicCack();
	       }while(bACK==1);
	   iicStop();
	  }
uchar iic4221rd(uchar RdAddr)
     {
	  	uchar temp;
        do{
		  do{
			 do{
				iicStart();
				iicwrbyt(0x20);
				iicCack();
			   }while(bACK==1);
		      iicwrbyt(RdAddr);
			  iicCack();
		     }while(bACK==1);
		    iicStart();
		    iicwrbyt(0x21);
			iicCack();
	       }while(bACK==1);
	    temp=iicrdbyt();
	    iicStop();
	    return(temp);
	   }
void iic4221wrb(uchar WrAddr,uchar WrData)
     {
	  	do{
		  do{
			 do{
				iicStart();
				iicwrbyt(0x22);
				iicCack();
			   }while(bACK==1);
			    iicwrbyt(WrAddr);
			    iicCack();
		    }while(bACK==1);
		    iicwrbyt(WrData);
		    iicCack();
	       }while(bACK==1);
	   iicStop();
	  }
uchar iic4221rdb(uchar RdAddr)
     {
	  	uchar temp;
        do{
		  do{
			 do{
				iicStart();
				iicwrbyt(0x22);
				iicCack();
			   }while(bACK==1);
		      iicwrbyt(RdAddr);
			  iicCack();
		     }while(bACK==1);
		    iicStart();
		    iicwrbyt(0x23);
			iicCack();
	       }while(bACK==1);
	    temp=iicrdbyt();
	    iicStop();
	    return(temp);
	   }











⌨️ 快捷键说明

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