模拟红外协议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;

	
} 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值