程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 模擬紅外協議C程序——發送模塊

模擬紅外協議C程序——發送模塊

編輯:C++入門知識

目的:方便程序的調試,提供效率,減少工作累,可以不在線調試編程時顯示實時數據,特別產品不帶顯示的或者MCU是OPT的,有很大的幫助。

過程:將要看的數據發送出來,另一個板(一個帶有顯示的就OK了,顯示就看個人的了,我之前用12864顯示,後面壞了,就用4位數碼管了)接收顯示出來。

資源:通訊口只要2個IO(接收一個,發送一個),定時器2個(接收一個,發送一個)。

 

以下是發送模塊:

 

//carry_pin 為發送IO,設置為輸出
void send_ird(void)
{
static uint8 tx_ram2=0,tx_ram1=0,tx_ram0=0,us100_timer=0,bits_count=0;

	++us100_timer;	  
	
	 if(send_enable_flag)//100ms更新一次數據
		{
			if(!f_endcode)//=0********=1發完數據
			{
				if(bits_count<1)
				{
					if(us100_timer<30)
					{
						carry_pin=0;
					}
					else
					{
						if(us100_timer>=45)
						{
							us100_timer=0;
							++bits_count;
							carry_pin=0;
						}
						else
						{
							   carry_pin=1;
						}

					}
				}
				else
				{
					if(us100_timer<3)//前導
					{
						carry_pin=0;
					}
					else
					{
						if(tx_ram0&0x01)
						{
							if(us100_timer<12)//位為1
							{
								carry_pin=1;
							}
							else
								B_nextbit=1;
							//{goto judge_bit;}
						}
						else
						{
							if(us100_timer<6)//位為0
							{
								carry_pin=1;
							}
							else 
								B_nextbit=1;
								//{goto judge_bit;}
						}
					}
				}
			}
			else//發完數據
			{
				if(us100_timer>=3)
				{
					send_enable_flag=0;
					f_endcode=0;
					carry_pin=1;
				}
				else
				{
					carry_pin=0;
				}
			}
			
		}
		else//准備發送數據
		{
			
		
			tx_ram1=Ad_val1/256;
			tx_ram2=Ad_val1%256;
			tx_ram0=Ad_val1%256;
	

			us100_timer=0;
			bits_count=0;
			carry_pin=1;
		}
if(B_nextbit)
{
	B_nextbit=0;
	us100_timer=0;
	temp=tx_ram2&0x01;
	tx_ram2=tx_ram2>>1;
	temp1=tx_ram1&0x01;
	tx_ram1=tx_ram1>>1;
	tx_ram0=tx_ram0>>1;
	temp=temp<<7;
	tx_ram1|=temp;
	temp1=temp1<<7;
	tx_ram0|=temp1;
	++bits_count;
	if(bits_count>25)
	{
		f_endcode=1;
	}

		carry_pin=0;

	
} 
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved