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

📄 i2c.c

📁 i2c的代码程序
💻 C
📖 第 1 页 / 共 2 页
字号:


	 //close all other interrupt source
	EX0=0;	
	EX1=0;
	ET1=0;
	ES=1;
	EA=1;		 // open all interrupt enable

}

void mcu_send(uchar tdata)
{	
	while(TI==1);
	SBUF=tdata;
	


}
void port_send(unsigned char port,unsigned char value)
{
	unsigned char tdata;
	do
	{	
		tdata=ReadRegister(port,LSR);  //port c
	}while(tdata&0x60!=0x60);
	WriteRegister(port,THR,value);	
}
/*
void set_exp1(void)
{
	unsigned char CCD_PORT = 0x03 ;			//CCD控制串口号
	port_send(CCD_PORT,'s') ;
	delay(50) ;
	port_send(CCD_PORT,'e') ;
	delay(50) ;
	port_send(CCD_PORT,'t') ;
	delay(50) ;
	port_send(CCD_PORT,' ') ;
	delay(50) ;

	port_send(CCD_PORT,'8') ;
	delay(50) ;
	port_send(CCD_PORT,'0') ;
	delay(50) ;
	port_send(CCD_PORT,'0') ;
	delay(50) ;
	port_send(CCD_PORT,'0') ;
	delay(50) ;
	port_send(CCD_PORT,13) ;
	delay(50) ;
	port_send(CCD_PORT,10) ;
	delay(50) ;
}  

*/
void set_exp(unsigned int usec)
{
	
	unsigned char wan,qian,bai,shi,ge ;
	unsigned char CCD_PORT = 0x03 ;			//CCD控制串口号
	unsigned int temp_us ;
	temp_us = usec ;

	wan = (unsigned char)(temp_us/10000) ;	//得到万位整数
	temp_us  -= wan * 10000 ;
	qian = (unsigned char)(temp_us/1000) ;	//千位整数
	temp_us -= qian*1000 ; 
    bai = (unsigned char)(temp_us / 100) ;	//百位整数
	temp_us -= bai*100 ;
	shi = (unsigned char)(temp_us/10) ;		//十位
	ge = (unsigned char)(temp_us%10) ;		//个位
	port_send(CCD_PORT,'s') ;
    delay(100);
	port_send(CCD_PORT,'e') ;
    delay(100);
	port_send(CCD_PORT,'t') ;
    delay(100);
	port_send(CCD_PORT,' ') ;
    delay(100);
	if (wan != 0)				//万位不为0,从万位开始发
	{
		port_send(CCD_PORT,wan+0x30) ;
		delay(100) ;
		port_send(CCD_PORT,qian+0x30) ;
		delay(100) ;
		port_send(CCD_PORT,bai+0x30) ;
		delay(100) ;
		port_send(CCD_PORT,shi+0x30) ;
		delay(100) ;
		port_send(CCD_PORT,ge+0x30) ;
		delay(100) ;
		}
	else if (qian != 0)		//千位不为0,从千位开始发
	{
		port_send(CCD_PORT,qian+0x30) ;
		delay(100) ;
		port_send(CCD_PORT,bai+0x30) ;
		delay(100) ;
		port_send(CCD_PORT,shi+0x30) ;
		delay(100) ;
		port_send(CCD_PORT,ge+0x30) ;
		delay(100) ;
		}
	else if (bai != 0)			//百位不为0,从百位开始发
	{
		port_send(CCD_PORT,bai+0x30) ;
		delay(100) ;
		port_send(CCD_PORT,shi+0x30) ;
		delay(100) ;
		port_send(CCD_PORT,ge+0x30) ;
		delay(100) ;
		}
	else						//十位个位必发
	{
		port_send(CCD_PORT,shi+0x30) ;
		delay(100) ;
		port_send(CCD_PORT,ge+0x30) ;
		delay(100) ;
		}
	port_send(CCD_PORT,13) ;
    delay(100);
	port_send(CCD_PORT,10) ;
    delay(100);

	return ;
}



serial()interrupt 4 using 2
{    
	   unsigned char tdata;
	   EA=0;
	  if(RI)
	   {
 		   
			
			tdata=SBUF;
			aBuffer[aPoint]=tdata;
		   
			 	
			if(aPoint==0)
			{	     
				   
					if(tdata==0xeb)
						aPoint++;
					else 
						aPoint=0;
			}
			else if(aPoint==1)
			{		
					if(tdata==0x90)
						aPoint++;
					else 
						aPoint=0;
			}
			else if(aPoint>1&&aPoint<31)
			{
					
					aPoint++;
					

			}
			
				 	

		
			RI=0;
		}
		if(TI)
		TI=0;

		EA=1;
}


void main(void)

{  
   unsigned char i,frame,oldframe;
   unsigned char qq,sdata[8];
   unsigned int high,speed,exp_time;
	unsigned int temp_us ;
 
  oldframe=0;
  temp_us=1000;
  sdata[0]=0xeb;
  sdata[1]=0x90;
  sdata[4]=0x00;
  sdata[5]=0x00; 

  for (i=0;i<100;i++)
	mDelay(100) ;



     for(i=0;i<2;i++)
	{
		if(	UART_PORT_CHECK(i))
		{
			UART_PORT_Init(i,_COM_38K_,_COM_NOPARITY_,_COM_CHR8_,_COM_STOP1_,FALSE,_COM_FIFO1_);
		}
	}
     for(i=2;i<4;i++)
	{
		if(	UART_PORT_CHECK(i))
		{
			UART_PORT_Init(i,_COM_9600_,_COM_NOPARITY_,_COM_CHR8_,_COM_STOP1_,FALSE,_COM_FIFO1_);
		}
	}


// this is send one time control register, too to  others 
// the first one is input mode register 01h

	 write_scratchPad(0);
	 write_scratchPad(1);
     write_scratchPad(2);
  
	 


    MCU_init();
	IE=0x90;//open serial port

	WrToRom(0x82,0x00);
	mDelay(20);
	 //01h:sd input only 
	WrToRom(0x00,0x01);
	mDelay(20);
	
	//02h:mode register yuv, sync output
	WrToRom(0x60,0x02);
	mDelay(20);
	
	//40h:sd mode register0: pal
	WrToRom(0x05,0x40);
	mDelay(20);
	
	//42h:daca
	WrToRom(0x42,0x42);
	mDelay(20);
	
	//43h:daca
	//WrToRom(0x10,0x43);
	//mDelay(20);
	
	//48h:20bit input 
	WrToRom(0x18,0x48);
	mDelay(20);
	//4ah:master/slave
	WrToRom(0x09,0x4a);
	mDelay(20);
	
    set_exp(temp_us);
  	
	while(1)
	{
	   
	   if(aPoint==31)
	   {	ES=0;
	   	
	   	   	if(aBuffer[17]==0xD3)
			{
			  qq=aBuffer[18]&0x03;
   				
             				if(qq==0x01)  //start recorder
							{
								port_send(0x00,67);        //67(C)
								
							    port_send(0x00,67);
			 					delay(100);
			 					port_send(0x00,13);
								
								port_send(0x00,10);
	         					delay(100);
								sdata[6]=0xff;
								
	
							}
							if(qq==0x02)//end recorder
							{
								port_send(0x00,68);        //68(D)
								
			 					port_send(0x00,68);
			 					delay(100);
			 					port_send(0x00,13);
								
								port_send(0x00,10);
	         					delay(100);
								sdata[6]=0x00;
							
							}
 							qq=aBuffer[18]&0x0c;
							if(qq==0x04)
							{
                          port_send(0x02,0x55);        
					      delay(100);
                          port_send(0x02,0x82);
			 		
                          delay(100);
			 		
                          port_send(0x02,0x04);
					      delay(100);
                          port_send(0x02,0xaa);
	         	
                          delay(100);

		         	     }
	                	if(qq==0x08)
						{
                          port_send(0x02,0x55);        
					      delay(100);
                          port_send(0x02,0xc2);
			 		
                          delay(100);
			 		
                          port_send(0x02,0x04);
					      delay(100);
                          port_send(0x02,0xaa);
	         	
                          delay(100);
						  }
						  qq=aBuffer[18]&0x30;
						  if(qq==0x10)
						{
                          port_send(0x02,0x55);        
					      delay(100);
                          port_send(0x02,0x04);
			 		
                          delay(100);
			 		
                          port_send(0x02,0x80);
					      delay(100);
                          port_send(0x02,0xaa);
	         	
                          delay(100);
						  }
                          if(qq==0x20)
						 {
                          port_send(0x02,0x55);        
					      delay(100);
                          port_send(0x02,0x04);
			 		
                          delay(100);
			 		
                          port_send(0x02,0x44);
					      delay(100);
                          port_send(0x02,0xaa);
	         	
                          delay(100);
						  }
						  	qq=aBuffer[18]&0xc0;
                           if(qq==0x40)
							{
							
                            temp_us=temp_us+50;
							temp_us=(temp_us>5000)?5000:temp_us;
							set_exp(temp_us);
						    
							
						  }
                          if(qq==0x80)
							{
                          	temp_us=temp_us-50;
							temp_us=(temp_us<100)?100:temp_us;
							set_exp(temp_us);
						    }
                 }

			 ///frame
			 high=aBuffer[11];
			 high=(high<<8);
			 high=high+aBuffer[10];
			 speed=aBuffer[13];
			 speed=(speed<<8);
			 speed=speed+aBuffer[12];
			 frame=floor(27*(0.05*high/speed));
			 if(frame!=oldframe)
			 {
		     	XBYTE[0x8055]=frame;
			 }
			 oldframe=frame;
			 sdata[2]=frame;
			 aPoint=0;
			 ES=1;
	   }
		
		//send GPS and exoposure time info to recorder system with port 0x01
		port_send(0x01,0xaa);  //start with 0xaa
		delay(100);	
		for(i=2;i<17;i++)  //longtitude ,latitude,high,speed,hour,min,second in turn
		{
		port_send(0x01,aBuffer[i]);
		delay(100);	
		}
		exp_time=temp_us/50;//exposure time=exp_time*50 
		 	sdata[3]=exp_time;
		port_send(0x01,exp_time);
		delay(100);	
		port_send(0x01,0xbb);  //end with 0xbb
		delay(100);	
		
       

        



	   sdata[7]=sdata[0]^sdata[1]^sdata[2]^sdata[3]^sdata[4]^sdata[5]^sdata[6];

		bus_reset();
		write_byte(0xcc);
		write_byte(0x44);
		delay(10000);
		delay(10000);

		/*
		for(i=0;i<2;i++)
		{
			read_scratchPad(i);
			tdata=((pad[0]&0xf0)>>4);
			tdata=tdata&0x0f;
			tdata=tdata|((pad[1]&0x0f)<<4);
			sdata[i+2]=tdata;
		}
	*/
	   
		
		for(i=0;i<8;i++)
		{
			mcu_send(sdata[i]);
			delay(100);	 
		}   
	}
	

}

  

  

⌨️ 快捷键说明

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