目的:方便程序的調試,提供效率,減少工作累,可以不在線調試編程時顯示實時數據,特別產品不帶顯示的或者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;
}
}