目的:方便程序的调试,提供效率,减少工作累,可以不在线调试编程时显示实时数据,特别产品不带显示的或者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;
}
}