模拟红外协议C程序——接收模块

目的:方便程序的调试,提供效率,减少工作累,可以不在线调试编程时显示实时数据,特别产品不带显示的或者MCU是OPT的,有很大的帮助。

过程:将要看的数据发送出来,另一个板(一个带有显示的就OK了,显示就看个人的了,我之前用12864显示,后面坏了,就用4位数码管了)接收显示出来。

资源:通讯口只要2个IO(接收一个,发送一个),定时器2个(接收一个,发送一个)。

此篇是本人的接收模块,由于手头没有什么显示板,只有一个中颖的,带有4为数码管,就用此板作模拟接收。

此接收发送模块已经使用3年,一点问题都没有的哦!!!

 

如要沟通,请联系QQ:448704229

 

以下是接收模块:

 

//REMOTE 为接收IO ,设置为输入

static uint8 rx_ram0=0;

static uint8 rx_ram1=0;

static  uint8 rx_ram2=0;

static  uint8	bits_count=0;



static  uint8	tx_ram0=0;

static  uint8	tx_ram1=0;

static  uint8	tx_ram2=0;

static  uint8	temp2=0;

static  uint8	us100_timer=0;



bit	f_endcode=0;

bit	B_nextbit=0;

bit	send_enable_flag=0;

 uint8	temp1=0;

  uint8	temp=0;

void recievr_ird(void)

{





   	static uint8 TN=0;

		static uint8 REMOTE_NUM=0;

  if(TN<=200)

	  {

	  	  TN++;

	   }

		  if(!F_REMOTE)

		  {

		  	if(REMOTE)

			{

				if(!F_RISE_YK)

				{

					 F_RISE_YK=1;

					 if(F_YK_FIRST)

					 {

					 	 if(TN>=5)

						 {

						 //EER

						    TN=0;

	  						tx_ram0=0;

						    REMOTE_NUM=0;

							F_YK_FIRST=0;

							F_YK_SECOND=0;

						 	

						 }

						 else

						 {

						 	 TN=0;

						 }

					 }

					 else

					 {

					 	if(TN>=40)

						{

						 //EER

						    TN=0;

	  						tx_ram0=0;

						    REMOTE_NUM=0;

							F_YK_FIRST=0;

							F_YK_SECOND=0;

						}

						else

						{

						   	if(TN>=20)

							{

								F_YK_FIRST=1;

								TN=0;

								REMOTE_NUM=0;

								tx_ram0=0;

							

							}

							else

							{ //EER

						    TN=0;

	  						tx_ram0=0;

						    REMOTE_NUM=0;

							F_YK_FIRST=0;

							F_YK_SECOND=0;

							}



						}

					 }

				}

			

			}

			else

			{

					if(F_RISE_YK)

					{

						 F_RISE_YK=0;

						 if(F_YK_FIRST)

						 {

						 	 if(!F_YK_SECOND)

							 {

							  	if(TN>=18)

								{

								  //EER

						    TN=0;

	  						tx_ram0=0;

						    REMOTE_NUM=0;

							F_YK_FIRST=0;

							F_YK_SECOND=0;

								}

						

								else

								{

								   	if(TN>=12)

									{

										F_YK_SECOND=1;

										TN=0;

										REMOTE_NUM=0;

										tx_ram0=0;

									

									}

									else

									{

									   //EER

						    TN=0;

	  						tx_ram0=0;

						    REMOTE_NUM=0;

							F_YK_FIRST=0;

							F_YK_SECOND=0;

									}



								}

							 }

							 else

							 {

				   

								 tx_ram2=tx_ram2>>1;



								if(tx_ram1&0x01)

								{

									 tx_ram2=tx_ram2|0x80;

								}

								else

								{

									 tx_ram2=tx_ram2&0x7f;

								}



								  tx_ram1=tx_ram1>>1;



								if(tx_ram0&0x01)

								{

									 tx_ram1=tx_ram1|0x80;

								}

								else

								{

									 tx_ram1=tx_ram1&0x7f;

								}

								 tx_ram0=tx_ram0>>1;





								 	if(TN>=12)

								{

								  //EER

						    TN=0;

	  						tx_ram0=0;

						    REMOTE_NUM=0;

							F_YK_FIRST=0;

							F_YK_SECOND=0;

	

								}

						

								else

								{

								   	if(TN>=6)

									{

									

									  tx_ram0|=0x80;	  ///

									  B_nextbit=1;

									}

									else

									{

											if(TN<2)

										{

									 //EER

								   	 		 //EER

						    TN=0;

	  						tx_ram0=0;

						    REMOTE_NUM=0;

							F_YK_FIRST=0;

							F_YK_SECOND=0;

	

										}

										else

										{

											tx_ram0&=0x7f;	  ///

											B_nextbit=1;

										}

									 

									}

								}

							 }

						 }

						 else

						 {

						  //EER

						    TN=0;

	  						tx_ram0=0;

						    REMOTE_NUM=0;

							F_YK_FIRST=0;

							F_YK_SECOND=0;

						 }

					 }

			}

		  

		  }

if(B_nextbit)//移位操作//<intrins.h> temp = _cror_(temp,1);_rcl

{

	B_nextbit=0;

  TN=0;

	REMOTE_NUM++;

	

	if(REMOTE_NUM>=24)

	{

		rx_ram0=tx_ram2;

	   F_REMOTE=1;

    	rx_ram1=tx_ram1;

		rx_ram2=tx_ram0;

	F_REMOTE=0;



	 TN=0;

	  						tx_ram0=0;

						    REMOTE_NUM=0;

							F_YK_FIRST=0;

							F_YK_SECOND=0;

	}

}

}


 

 

你可能感兴趣的:(模拟)