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

📄 uarti2c.c

📁 display port接受芯片ANX9813的驱动代码。MCU使用LPC936FDH,内部包含AN9813寄存器设置
💻 C
📖 第 1 页 / 共 2 页
字号:
   while(i2c_sda==1)  // 等待ACK信号来临
   {
      i++;
       if(i>100)
       {
       	watchdog();
           ack = 0;
           
           	BP_DIR = 1;
           sendtoPC(temp,2);
           	BP_DIR = 0;
           	
           break;
       }  
   }
   i2c_scl = 0;
   //DelayIIC(3);
  
   //ack=1;
   // if((IO0PIN & SDA)==SDA)
    	//ack=0;     
    //else ack=1;        
    //IO0DIR = (SDA|SCL);
   //--- IO0DIR = IO0DIR|(SDA|SCL);   //将端口再次置为输出
    //i2c_scl = 0;
    //i2c_sda = 0;//<1
    DelayIIC(3);
   // IO0DIR = IO0DIR|(SDA|SCL);
  
}

uchar  RcvByte()
{
  uchar retc;
  uchar BitCnt;
 
  retc=0; 
  //IO0DIR = IO0DIR|SCL;
  //IO0DIR = IO0DIR&(~SDA);
  for(BitCnt=0;BitCnt<8;BitCnt++)
      {
        //DelayIIC(3);
       
        i2c_scl = 0;       /*置时钟线为低,准备接收数据位*/
        DelayIIC(3);
       
        i2c_scl = 1;;       /*置时钟线为高使数据线上数据有效*/
       DelayIIC(3);
      
        retc=retc<<1;
        if(i2c_sda==1)
           retc=retc+1; /*读数据位,接收的数据位放入retc中 */
        //DelayIIC(3);
      
      }
  i2c_scl = 0; 
  //Ack_I2c(0); 
 // IO0DIR=SCL;   
  DelayIIC(3);
// IO0DIR = IO0DIR|(SDA|SCL);
  return(retc);
}
uchar ISendStrOneAddr(uchar sla, uchar suba, uchar  *s, uchar no)
{
	
	   uchar i;
	   Start_I2c();               /*启动总线*/
	   I2CSendByte(sla);            /*发送器件地址*/
	     if(ack==0)return(0);
	   I2CSendByte(suba);            /*发送器件子地址*/
	     if(ack==0)return(0);

	   for(i=0;i<no;i++)
	   {   
	       I2CSendByte(*s);               /*发送数据*/
	       if(ack==0)return(0);
	       s++;
	   } 
	   Stop_I2c();                 /*结束总线*/ 
	   return(1);
}
uchar IRcvStrOneAddr(uchar sla,uchar suba,uchar  *s,uchar no)
{
	 uchar i;

   Start_I2c();               /*启动总线*/
   I2CSendByte(sla);            /*发送器件地址*/
     if(ack==0)return(0);
   I2CSendByte(suba);            /*发送器件子地址*/
     if(ack==0)return(0);

   Start_I2c();
   I2CSendByte(sla+1);
      if(ack==0)return(0);

   for(i=0;i<no-1;i++)
    {   
     *s=RcvByte();               /*发送数据*/
      Ack_I2c(0);                /*发送就答位*/  
     s++;
    } 
   *s=RcvByte();
    Ack_I2c(1);                 /*发送非应位*/
 Stop_I2c();                    /*结束总线*/ 
  return(1);

}
//---------------------------------------------------------------
//协议格式:
//0x2a+0x52+'ID' + 'SUB'+'NUMBER'+0X0D
//* + W + ID + SUB + NUMBER + DATA1 +..DATAN +0X0D
 
uchar CommandActive()
{
		uchar temp[2]={'A','C'};
		if(CommandBuf[1]!=0x52 && CommandBuf[1]!=0x57)	
			{
				  temp[0]='A';
	      		temp[1]='O';
	      		BP_DIR = 1;
        		sendtoPC(temp,2);
        		BP_DIR = 0;
				return 0;
		}
			
		else if(CommandBuf[1]==0x52)
	  {
	      if(CommandBuf[5]!=0x0d)
	      {
	      		//CommandBufPoint = 0;
	      		temp[0]='A';
	      		temp[1]='A';
	      		BP_DIR = 1;
        		sendtoPC(temp,2);
        		BP_DIR = 0;
        		sendRQ=0;
	          return 0;
	      }
	  }	
	  else if(CommandBuf[1]==0x57)
	  {
	  		if(CommandBuf[5+CommandBuf[4]]!=0x0d)
	      {
	      	  temp[0]='A';
	      		temp[1]='B';
	      		BP_DIR = 1;
        		sendtoPC(temp,2);
        		BP_DIR = 0;
        		sendRQ=0;
	      		//CommandBufPoint = 0;
	          return 0;
	      }
	  }
	  
	  if(CommandBuf[0]!=0x2a)
	  	{
	  			CommandBufPoint = 0;
	  			temp[0]='A';
	      		temp[1]='C';
	      		BP_DIR = 1;
        		sendtoPC(temp,2);
        		BP_DIR = 0;
        	sendRQ=0;
	  			return 0;
	  	}
			
		else 
		{
				CommandBuf[0] = 0;
				CommandBufPoint = 0;
				sendRQ = 1;
				
				temp[0]='A';
	      		temp[1]='D';
	      		BP_DIR = 1;
        		sendtoPC(temp,2);
        		BP_DIR = 0;
				 return 1;
		}		
}

uchar CommandAnalyse()
{
	  uchar temp[10],i;
	  for(i=0;i<10;i++)
	  {
	  		temp[i] = 0;
	  		
	  }
		if(CommandBuf[1]==0x52)
		{
				for(i=0;i<CommandBuf[4];i++)
					{
							IRcvStrOneAddr(CommandBuf[2],CommandBuf[3]+i,&temp[i],1);
							
					}
					//IRcvStrOneAddr(CommandBuf[2],CommandBuf[3],temp,CommandBuf[4]);
				//for(i=0;i<CommandBuf[4];i++)
				//{
						BP_DIR = 1;
						 sendtoPC(&temp,CommandBuf[4]);
						 BP_DIR = 0;
				//}
		}
		else if(CommandBuf[1]==0x57)
	 {
	 		  for(i=0;i<CommandBuf[4];i++)
	 		  {
	 		  		temp[i] = CommandBuf[5+i];
	 		  		ISendStrOneAddr(CommandBuf[2], CommandBuf[3]+i, &temp[i], 1);
	 		  	
	 		  }
	 		 // ISendStrOneAddr(CommandBuf[2], CommandBuf[3], temp, CommandBuf[4]);
	 }
	 
	 return 1;
}




/****************************************************
                 主函数
*******************************************************/
uchar uartbuf;
void main()
{  
	uchar temp[10],count,i;
   WATCHDOG_init();
    IO_init(); 
	UART_init();
    DATA_init();
//	readaddress();
	CommandBufPoint=0;
	currentrecv=0;
	sendRQ=0;

//	MAX7456CS=0;
//	Max7456Init();
	//FLASH_ReadNum();
	//FLASH_ReadSaveInfo();
//	MAX7456CS=1;  
	delay();

	 BP_DIR = 0;
  count = 0;
  for(i=0;i<10;i++)
  {
  		temp[i] = i;
  }
  BP_DIR = 1;
	sendtoPC(&temp,10);
  BP_DIR = 0;
  
	while(1)
	{
    	watchdog();	
		act = ~act;
		if (sendRQ)					
		{
			
	    CommandActive();
	  }
	  if(sendRQ)
	  {
	    CommandAnalyse();
	    sendRQ = 0;
	    for(i=0;i<20;i++)
	    {
	    			CommandBuf[i] = 0;
	    }
	   }
			watchdog();
	    //if(sendRQ==1)
	   //{
	    		
	    		//count++;
	    		//ISendStrOneAddr(0x98, 0x01,&count,1);
	    		//_nop_();
	    		//_nop_();
	    		//IRcvStrOneAddr(0x98,0x00,temp,5);
			    //BP_DIR = 1;
			    //sendtoPC(&temp,5);
			    //BP_DIR = 0;
			    //delay();
	    		//sendRQ = 0;
	   
			//BP_DIR = 1;
		    //sendtoPC(&uartbuf,1);
			//BP_DIR = 0;
			//sendRQ=0;
							
		}
	}

  

void UART_ISR() interrupt 4	 
{
	if(RI==1)
	{
		RI = 0;//
		//sendRQ = 1;
		CommandBuf[CommandBufPoint]=SBUF;			
		if(CommandBuf[CommandBufPoint]==0x0d)
			{
					sendRQ = 1;
					CommandBufPoint++;  
			}
		if(CommandBufPoint==0 && CommandBuf[0]!=0x2a)
		{
				CommandBufPoint = 0;
		}		
		else
		{
					CommandBufPoint++;  
		}
				              	
		              
	}
	
}



⌨️ 快捷键说明

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