久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3001|回復: 7
打印 上一主題 下一主題
收起左側

433M無線STC單片機解碼程序,外部中斷方式

  [復制鏈接]
跳轉到指定樓層
樓主
ID:193324 發表于 2023-2-13 11:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近需要用到433M的單片機解碼,上網搜了一下。大部分的程序都是基于定時器定時檢測。感覺邏輯不夠嚴謹。對于新手理解起來也比較困難。
我首先開了一個us級的定時器,持續計數。不需要打開中斷。
然后配置好對應的接收芯片的管腳。配置為外部中斷。觸發方式為上升沿,下降沿都觸發。
在外部中斷函數里面,記錄當前定時器的計數值,然后清零計數器。
定義一個狀態機
state = 0時:默認狀態,檢測是否為高電平。如果為高電平代表為上升沿,判斷同步信號。
state = 1時:檢測是否為低電平,如果為低電平,表示為下降沿,此時記錄的時間為高電平的持續時間。判斷是否符合同步信號的高電平時間要求。符合進入下一狀態
state = 2時:檢測管腳是否為高電平,如果為高電平,表示為上升沿,此時記錄的時間為低電平持續時間。判斷是否符合同步信號的低電平時間要求。符合進入接收狀態。不符合,回到初始狀態。
以此類推....具體可以看單片機程序

  1. #define SYNC_H_MIN   0           //同步信號高電平持續時間 最低范圍
  2. #define SYNC_H_MAX   600       //同步信號高電平持續時間 最高范圍


  3. #define SYNC_L_MIN  8000       //同步信號低電平持續時間的最小值
  4. #define SYNC_L_MAX  10997    //同步信號高電平持續時間的最大值,符合這個范圍都判定有效。


  5. #define DAT1_H_MIN     800    //數據1的高電平持續時間最小值  
  6. #define DAT1_H_MAX   1063   //數據1的高電平持續時間最大值
  7. #define DAT1_L_MIN      220    //數據1的低電平持續時間最小值
  8. #define DAT1_L_MAX    400     //數據1的低電平持續時間最大值   

  9. #define DAT0_H_MIN     220
  10. #define DAT0_H_MAX    400
  11. #define DAT0_L_MIN      800
  12. #define DAT0_L_MAX    1063
復制代碼

  1. uint32_t bitNums  = 0;    //已經接收的位數。
  2. uint32_t valueTmp = 0;    //接收的數據。
  3. uint32_t value = 0;  

  4. void Ext_INT1 (void) interrupt INT1_VECTOR                //進中斷時已經清除標志
  5. {
  6.                 uint8_t  de = 0;                                                    //管腳的狀態
  7.                 uint32_t holdTime  = 0;                                    //持續的時間
  8.                
  9.                 Timer1_Stop();
  10.                 holdTime  = (TH1<<8) | TL1;
  11.                 TH1= 0;TL1 =0;
  12.                 de = P33;            //讀取IO口狀態
  13.                 Timer1_Run();
  14.                

  15.                 switch(state)
  16.                 {
  17.                         case 0:               
  18.                                 if(de == 1)         //如果是高電平,那么是上升沿
  19.                                         state= 1;
  20.                         break;
  21.                         case 1:                        //同步頭高電平時間結束的時候
  22.                                 if( de == 0                //檢測到下降沿,并判斷持續的時間
  23.                                         && holdTime  >= SYNC_H_MIN
  24.                                         && holdTime  <= SYNC_H_MAX)
  25.                                 {
  26.                                         state = 2;
  27.                                 }
  28.                                 else
  29.                                 {
  30.                                         state = 1;
  31.                                 }
  32.                                        
  33.                         break;
  34.                         case 2:                //同步信號低電平時間結束時,上升沿
  35.                         {
  36.                                 if( de == 1
  37.                                         && holdTime >= SYNC_L_MIN
  38.                                         && holdTime <= SYNC_L_MAX)    //判斷同步低電平時間是否符合要求
  39.                                 {
  40.                     //符合要求,清0接收到的位數和數據。準備開始接收
  41.                                         bitNums = 0;   
  42.                                         valueTmp= 0;
  43.                                         state = 3;
  44.                                 }
  45.                                 else
  46.                                 {
  47.                     //不符合要求直接回到狀態1,不用回到狀態0,因為不需要判斷同步信號的高電平
  48.                     //持續時間,低電平滿足需求即可
  49.                                         state = 1;
  50.                                 }
  51.                         }
  52.                         break;
  53.                         case 3:                //信號高電平結束時
  54.                                 if(de == 0)
  55.                                 {
  56.                                         valueTmp <<= 1;
  57.                                        
  58.                                         if(holdTime >= DAT1_H_MIN && holdTime <= DAT1_H_MAX)
  59.                                         {
  60.                                                 valueTmp += 1;                //符合數據1的高部分
  61.                                                 state = 4;
  62.                                         }
  63.                                         else if(holdTime >= DAT0_H_MIN && holdTime <= DAT0_H_MAX)
  64.                                         {
  65.                                                                         //符合數據0的高部分
  66.                                                 state = 5;
  67.                                         }
  68.                                         else
  69.                                         {
  70.                                                 state = 1;
  71.                                                 break;
  72.                                         }
  73.                                         bitNums += 1;
  74.                                         if(bitNums >= 24)
  75.                                         {   
  76.                         value = valueTmp;       //保存接收到的數據。
  77.                                                 state = 1;
  78.                                         }
  79.                                 }
  80.                                 else
  81.                                 {

  82.                                         state = 1;
  83.                                 }
  84.                         break;
  85.                         case 4:                //判斷數據1的低電平時間是否符合要求
  86.                         {
  87.                                 if( de == 1
  88.                                         && holdTime >= DAT1_L_MIN
  89.                                         && holdTime <= DAT1_L_MAX)
  90.                                 {
  91.                     //符合數據1的低電平時間要求,回到3重新接收下一個數據。
  92.                                         state = 3;
  93.                                 }
  94.                                 else
  95.                                 {
  96.                                         state = 1;        
  97.                                 }
  98.                         }
  99.                         break;
  100.                         case 5:        //判斷數據0的低電平時間是否符合要求
  101.                         {
  102.                                 if( de == 1
  103.                                         && holdTime >= DAT0_L_MIN
  104.                                         && holdTime <= DAT0_L_MAX)
  105.                                 {
  106.                     //符合要求,接收下一個數據。
  107.                                         state = 3;
  108.                                 }
  109.                                 else
  110.                                 {
  111.                                         state = 1;
  112.                                 }
  113.                         }                        
  114.                         break;
  115.                         default:
  116.                                 state = 0;
  117.                         break;
  118.                 }
  119.         
  120. }
復制代碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:914666 發表于 2023-2-13 21:05 | 只看該作者
好使嗎?我看了好多的這個例子315一樣用嗎
回復

使用道具 舉報

板凳
ID:193324 發表于 2023-2-14 09:22 | 只看該作者
315的沒有試過。433的可以
回復

使用道具 舉報

地板
ID:82067 發表于 2023-2-14 16:24 | 只看該作者
一般原因是外界的干擾太多了,使用中斷后,單片機根本就沒法做其他任務了
回復

使用道具 舉報

5#
ID:28752 發表于 2023-2-14 21:16 | 只看該作者
超再生等模塊,全是噪聲,能正常解碼???
回復

使用道具 舉報

6#
ID:193324 發表于 2023-2-16 09:21 | 只看該作者
grb7906 發表于 2023-2-14 21:16
超再生等模塊,全是噪聲,能正常解碼???

可以的。 沒有接收到是正常數據時,全是噪聲的
回復

使用道具 舉報

7#
ID:1098406 發表于 2023-12-5 11:09 | 只看該作者
holdtime是100us增加一嗎
回復

使用道具 舉報

8#
ID:287224 發表于 2023-12-12 14:16 | 只看該作者
yinds5092 發表于 2023-2-13 21:05
好使嗎?我看了好多的這個例子315一樣用嗎

433,315跟軟件沒有關系的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看成人 | 国产精品99久久久久久www | 不卡一区二区三区四区 | 日韩久久在线 | 99福利| 爱操影视 | 欧美一区 | 国产精品欧美一区二区三区 | 欧美日韩亚洲成人 | 国产高清视频在线观看 | 深夜爽视频 | 国产韩国精品一区二区三区 | 天天久久| 亚洲精品在线免费播放 | 国产wwwcom| 日本黄色一级片视频 | 欧美在线天堂 | 国产精品久久久久久久免费大片 | 日韩一区三区 | 亚州精品天堂中文字幕 | 97免费视频在线观看 | 欧美精品一区二区在线观看 | 成人影视网 | 国产精品污www一区二区三区 | 91 在线| 国产精品高潮呻吟久久 | 毛片链接 | 国产精品久久久久久久久久久久冷 | 日本天堂一区 | 亚洲欧美日韩一区 | 亚洲网站在线观看 | 欧日韩在线观看 | 亚洲综合网站 | 国产在线播放一区二区三区 | 日韩国产在线 | 日本成人午夜影院 | 久久精品免费观看 | 亚洲444kkkk在线观看最新 | 亚洲区一区二 | 久久高清| 奇米影视在线 |