日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1527编码协议_EV1527解码,我也贡献一个,抗干扰,自适应.....

發(fā)布時間:2023/12/8 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1527编码协议_EV1527解码,我也贡献一个,抗干扰,自适应..... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

EV1527解碼,我也貢獻一個,抗干擾,自適應, 經測試比買的解碼成功率高,具體多少沒計算,通過示波器看到;

/*

中斷處理函數 、每次中斷查詢一下電平;

手冊16個CLK(一個數據位)的時間是

最大4.24ms(4240us)/16= 265us; 最小230us/16=14us; 分頻時間是4us;

同步頭高電平至少4個時鐘;識別同步頭分2步

第一步高電平時間大于等于40us,小于265*4*1.2 = 1060*1.2=1270us;

第二步 低電平時間是高電平時間的31倍,留20%余量26倍-36倍之間;

計算電平時間 (高電平時間 + 低電平時間) / 32 ;

數據寬時間要在這個數值的 正負20% 之間

*/

INTERRUPT_HANDLER(EXTI_PORTA_IRQHandler, 3)

{

static U16 data_h_time;??//

static U16 data_l_time;??//

static U16??bit_time_min;

static U16??bit_time_max;

static U8??decode_KEY;

static U32 decode_ID;

U16 temp;

static U8??ev1527_rx_last;

U16 ev1527_new_time;

disableInterrupts();

ev1527_new_time??= (uint16_t)TIM2->CNTRH << 8;

ev1527_new_time |= (uint16_t)(TIM2->CNTRL);

if(EV1527_RX)??//接收編碼高電平

{

if(ev1527_rx_last==0)? ?//上次是低電平,有跳變

{

EV1527_COUNT_CLEAR;

if(ev1527_decode_state>sync_h)

{

str_ev1527_data.l_data[str_ev1527_data.l_data_write] = ev1527_new_time;

str_ev1527_data.l_data_write = (str_ev1527_data.l_data_write + 1) % EV1527_DATA_TIME_NUM;

switch(ev1527_decode_state)

{

case??sync_l:{

temp = str_ev1527_data.l_data[str_ev1527_data.l_data_read] / str_ev1527_data.h_data[str_ev1527_data.h_data_read];

if((temp >= SYNC_RATIO_MIN) && (temp <= SYNC_RATIO_MAX))

{

temp = str_ev1527_data.l_data[str_ev1527_data.l_data_read] + str_ev1527_data.h_data[str_ev1527_data.h_data_read];

str_ev1527_data.h_data_read = (str_ev1527_data.h_data_read + 1) % EV1527_DATA_TIME_NUM;

str_ev1527_data.l_data_read = (str_ev1527_data.l_data_read + 1) % EV1527_DATA_TIME_NUM;

bit_time_min = temp / 9;

bit_time_max = temp / 7;

decode_ID = 0;

decode_KEY = 0;

data_h_time = 0;

data_l_time = 0;

ev1527_decode_state = chipid_0l;

}

else

{

ev1527_decode_state = sync_h;

}

}break;

case??chipid_0l:

case??chipid_1l:

case??chipid_2l:

case??chipid_3l:

case??chipid_4l:

case??chipid_5l:

case??chipid_6l:

case??chipid_7l:

case??chipid_8l:

case??chipid_9l:

case??chipid_10l:

case??chipid_11l:

case??chipid_12l:

case??chipid_13l:

case??chipid_14l:

case??chipid_15l:

case??chipid_16l:

case??chipid_17l:

case??chipid_18l:

case??chipid_19l:

{

data_h_time += str_ev1527_data.h_data[str_ev1527_data.h_data_read];

data_l_time += str_ev1527_data.l_data[str_ev1527_data.l_data_read];

str_ev1527_data.l_data_read = (str_ev1527_data.l_data_read + 1) % EV1527_DATA_TIME_NUM;

str_ev1527_data.h_data_read = (str_ev1527_data.h_data_read + 1) % EV1527_DATA_TIME_NUM;

temp = data_h_time + data_l_time;

if(temp >= bit_time_min)

{

if(temp <= bit_time_max)

{

if(data_h_time > data_l_time)

{

decode_ID |= 0x01;

}

decode_ID <<= 1;

ev1527_decode_state++;

data_h_time = 0;

data_l_time = 0;

}

else

{

ev1527_decode_state = sync_h;

}

}

}break;

case??data_0l:

case??data_1l:

case??data_2l:

case??data_3l:

{

data_h_time += str_ev1527_data.h_data[str_ev1527_data.h_data_read];

data_l_time += str_ev1527_data.l_data[str_ev1527_data.l_data_read];

str_ev1527_data.l_data_read = (str_ev1527_data.l_data_read + 1) % EV1527_DATA_TIME_NUM;

str_ev1527_data.h_data_read = (str_ev1527_data.h_data_read + 1) % EV1527_DATA_TIME_NUM;

temp = data_h_time + data_l_time;

if(temp >= bit_time_min)

{

if(temp <= bit_time_max)

{

if(data_h_time > data_l_time)

{

decode_KEY |= 0x08;

}

if(ev1527_decode_state == data_3l)

{

ev1527_chip_ID = decode_ID;

ev1527_chip_key??= decode_KEY;

ev1527_new_sms = 1;

LED_ON(LED_01);

ev1527_decode_state = sync_h;

}

else

{

decode_KEY >>= 1;

ev1527_decode_state++;

}

data_h_time = 0;

data_l_time = 0;

}

else

{

ev1527_decode_state = sync_h;

}

}

}break;

}

}

}

ev1527_rx_last = 1;

}

else? ?? ???//接收編碼低電平

{

if(ev1527_rx_last)? ?//上次是高電平,有跳變

{

EV1527_COUNT_CLEAR;

if(ev1527_decode_state == sync_h)

{

if((ev1527_new_time >= SYNC_H_TIME_MIN) && (ev1527_new_time <= SYNC_H_TIME_MAX))

{

str_ev1527_data.l_data_read = str_ev1527_data.l_data_write=0;

str_ev1527_data.h_data_read = str_ev1527_data.h_data_write=0;

str_ev1527_data.h_data[str_ev1527_data.h_data_write] = ev1527_new_time;

str_ev1527_data.h_data_write = (str_ev1527_data.h_data_write + 1) % EV1527_DATA_TIME_NUM;

ev1527_decode_state??= sync_l;

}

}

else

{

str_ev1527_data.h_data[str_ev1527_data.h_data_write] = ev1527_new_time;

str_ev1527_data.h_data_write = (str_ev1527_data.h_data_write + 1) % EV1527_DATA_TIME_NUM;

}

}

ev1527_rx_last = 0;

}

enableInterrupts();

}

總結

以上是生活随笔為你收集整理的1527编码协议_EV1527解码,我也贡献一个,抗干扰,自适应.....的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。